KLEINSTE ZAHL <- gelöst
-
- Beiträge: 91
- Registriert: Sa 6. Feb 2010, 15:58
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
KLEINSTE ZAHL <- gelöst
Hi
Also ich muss von über 1000 Zahlen die kleinste herausfinden mit einen Programm
[die Zahlen sind in einer Array-Tabelle gespeichert...]
Danke schon mal im Vorraus
Also ich muss von über 1000 Zahlen die kleinste herausfinden mit einen Programm
[die Zahlen sind in einer Array-Tabelle gespeichert...]
Danke schon mal im Vorraus
Zuletzt geändert von Stephanie H. am Sa 8. Mai 2010, 15:21, insgesamt 3-mal geändert.
-
- Beiträge: 512
- Registriert: Mo 25. Aug 2008, 18:17
- OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
- CPU-Target: x86
- Wohnort: Chemnitz
Re: KLEINSTE ZAHL
Wie ist denn dein bisheriger Ansatz? Am besten mit etwas Code unterlegt.
-
- Beiträge: 91
- Registriert: Sa 6. Feb 2010, 15:58
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: KLEINSTE ZAHL -> gelöst
hab ich schon gelöst 

-
- Beiträge: 91
- Registriert: Sa 6. Feb 2010, 15:58
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: KLEINSTE ZAHL
doch nicht
also das hier war eigentlich mein lösungsansatz also da sind solche array-schleifen:
also mein problem ist das man a und e von der forschleife irgenwie nicht erhöhen oder erniedrigen kann...
also hier könnt ihr noch mal die fehlermeldung sehen:
project.lpr(88,47) Error: Illegal assignment to for-loop variable "e"
also das hier war eigentlich mein lösungsansatz also da sind solche array-schleifen:
Code: Alles auswählen
for e := 0 to Zeilenanzahl
begin
for a := 0 to Zeilenanzahl do
begin
if e = a then
begin
inc(a);
end
else
begin
if wert[i,e] < wert[i,a] then //wenn der wert von zeile ''i'' kleiner ist als der wert von zeile ''a'' soll das programm folgendes tun
begin
dec(e); //dann soll ''e'' um 1 erniedrigt werden
damit die zeile ''e'' im nächsten
durchgang mit einen anderen wert verglichen wird
end
else
begin
if e < a then // da der 2.wert kleiner ist muss die zeilenzahl von e bis zu a verkleinert oder vergrößert werden
bis zu zeilenzahl a um diesen wert in zeile a im nächsten durchgang zu vergleichen
begin
REPEAT inc(e);
UNTIL e = a;
dec(e); //dann soll ''e'' um 1 erniedrigt werden
damit die zeile ''e'' im nächsten
durchgang mit einen anderen wert verglichen wird
end
else
begin
REPEAT dec(e);
UNTIL e = a
dec(e); //dann soll ''e'' um 1 erniedrigt werden
damit die zeile ''e'' im nächsten
durchgang mit einen anderen wert verglichen wird
end;
end;
end;
end;
end;
also mein problem ist das man a und e von der forschleife irgenwie nicht erhöhen oder erniedrigen kann...
also hier könnt ihr noch mal die fehlermeldung sehen:
project.lpr(88,47) Error: Illegal assignment to for-loop variable "e"
Re: KLEINSTE ZAHL
Horror, schalte bitte den Code Higlighter ein und mach Einzüge. Da wird einem ja schlecht.
Zu deinem Problem: Nimm eine TList, sortiere sie und nimm dann den Wert an Stelle 0.
Zu deinem Problem: Nimm eine TList, sortiere sie und nimm dann den Wert an Stelle 0.
-
- Beiträge: 91
- Registriert: Sa 6. Feb 2010, 15:58
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: KLEINSTE ZAHL
aha und wie soll ich das sortieren?
Re: KLEINSTE ZAHL
http://www.freepascal.org/docs-html/rtl ... .sort.html" onclick="window.open(this.href);return false;Stephanie H. hat geschrieben:aha und wie soll ich das sortieren?
Schaltest du bitte oben den Code Highlighter ein? Danke.
So könnte das gehen:
Code: Alles auswählen
Function NumSort(Item1: Pointer;Item2: Pointer): Integer;
Begin
If Item1=Item2 Then
Begin
Result := 0;
Exit
End;
If Item1>Item2 Then Result := 1 Else Result := -1;
End;
Function KleinsterWert(L:TList): Integer;
Begin
L.Sort(@NumSort);
Result := Cardinal(L[0]);
End;
Procedure TForm1.Button1Click(Sender:TObject);
Var L: TList;
Begin
L := TList.Create;
L.Add(Pointer(2));
L.Add(Pointer(20));
L.Add(Pointer(1));
L.Add(Pointer(5));
Caption := inttostr(KleinsterWert(L));
L.Free;
End;
-
- Beiträge: 91
- Registriert: Sa 6. Feb 2010, 15:58
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: KLEINSTE ZAHL
ich versteh deinen quelltext irgendwie nicht...
aber ich schreib das projekt nicht objektorientiert also nicht mit formularen und so...
also ich fand meinen lösungsansatz ganz ok eigentlich

aber ich schreib das projekt nicht objektorientiert also nicht mit formularen und so...
also ich fand meinen lösungsansatz ganz ok eigentlich
Re: KLEINSTE ZAHL
Das Benutzen der vorhandenen Klassen hat mit Formularen nichts zu tun.Stephanie H. hat geschrieben:ich versteh deinen quelltext irgendwie nicht...
aber ich schreib das projekt nicht objektorientiert also nicht mit formularen und so...
Ich kann ihn nicht lesen ohne dass mir schlecht wird.Stephanie H. hat geschrieben: also ich fand meinen lösungsansatz ganz ok eigentlich
SCHALTE BITTE DEN "Highlighter" AUF "Freepascal/Lazarus"
-
- Beiträge: 91
- Registriert: Sa 6. Feb 2010, 15:58
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: KLEINSTE ZAHL
Code: Alles auswählen
for e := 0 to Zeilenanzahl
begin
for a := 0 to Zeilenanzahl do
begin
if e = a then
begin
inc(a);
end
else
begin
if wert[i,e] < wert[i,a] then //wenn der wert von zeile ''i'' kleiner ist als der wert von zeile
// ''a'' soll das programm folgendes tun
begin
dec(e); // dann soll ''e'' um 1 erniedrigt werden
// damit die zeile ''e'' im nächsten
//durchgang mit einen anderen wert verglichen wird
end
else
begin
if e < a then // da der 2.wert kleiner ist muss die zeilenzahl von e bis zu a verkleinert oder vergrößert werden
//bis zu zeilenzahl a um diesen wert in zeile a im nächsten durchgang zu vergleichen
begin
REPEAT inc(e);
UNTIL e = a;
dec(e); //dann soll ''e'' um 1 erniedrigt werden damit die zeile ''e'' im nächsten durchgang mit einen
//anderen wert verglichen wird
end
else
begin
REPEAT dec(e);
UNTIL e = a
dec(e); //dann soll ''e'' um 1 erniedrigt werden damit die zeile ''e'' im nächsten durchgang mit einen
// anderen wert verglichen wird
end;
end;
end;
end;
end;
Re: KLEINSTE ZAHL
Grundsätzlich kann man bei for Schleifen den Zähler nicht verändern. Da braucht es eine "while do" oder "repeat until" Schleife.
Aber warum kompliziert und fehleranfällig? Mach's doch einfach wie in meinem Vorschlag.
Aber warum kompliziert und fehleranfällig? Mach's doch einfach wie in meinem Vorschlag.
- corpsman
- Lazarusforum e. V.
- Beiträge: 1619
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: KLEINSTE ZAHL
Lese ich das Richtig ?
Stephanie H. will die kleinste Zahl aus einem Array mit 1000 Zahlen ?
Warum sortiert ihr dann die Zahlen ?
Stephanie H. will die kleinste Zahl aus einem Array mit 1000 Zahlen ?
Warum sortiert ihr dann die Zahlen ?
Code: Alles auswählen
uses math;
var
a : Array of Integer;
i, m: Integer;
begin
setlength(a,1000);
//.. Einlesen von A
// Ermitteln des kleinsten Elementes
m := a[0];
for i := low(a) + 1 to high(a) do begin
m := min(m, a[i]);
end;
showmessage(inttostr(m));
setlength(a,0);
end;
--
Just try it
Just try it
Re: KLEINSTE ZAHL
Warum nicht? Es ist eine (eingebaute) Lösung, die praktisch ohne Hirn funktioniert.corpsman hat geschrieben: Warum sortiert ihr dann die Zahlen ?
Deine Lösung geht nat. auch.
- corpsman
- Lazarusforum e. V.
- Beiträge: 1619
- Registriert: Sa 28. Feb 2009, 08:54
- OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
- CPU-Target: 64Bit
- Wohnort: Stuttgart
- Kontaktdaten:
Re: KLEINSTE ZAHL
Irgendwie bin ich ein bischen Minimalist 
Sortieren O(n*log(n))
Mein Ansatz O(n)

Sortieren O(n*log(n))
Mein Ansatz O(n)
--
Just try it
Just try it
Re: KLEINSTE ZAHL
Ich glaube nicht, dass Stephanie H. sich für die halbe Millisekunde interessiert. Prinzipiell hast du nat. recht.corpsman hat geschrieben: Sortieren O(n*log(n))
Mein Ansatz O(n)