![]() |
unendlich viele zahlen
also ich hab ein großes problem.
im informatikuntericht haben wir folgenden code:
Delphi-Quellcode:
und wir sollen jetzt statt nur fünf zahlen eine variable einsetzen, dass man eine beliebige anzahl von zahlen sortieren kann (37, 105, 1398 zahlen oder mehr)
program Project1;
{$APPTYPE CONSOLE} uses SysUtils; type zahl=array [1..5] of integer; var z:zahl; i,j,x: integer; begin for i:=1 to 5 do begin write (i, 'Zahl'); readln (z[i]); end; for j:=1 to 4 do begin for i:=j+1 to 5 do begin if z[j]<z[i] then begin x:=z[i]; z[i]:=z[j]; z[j]:=x; end; end; writeln; for i:=1 to 5 do write (z[i]); readln; { TODO -oUser -cConsole Main : Hier Code einfügen } end; end. ich weiß leider nicht, wie das gehen soll. bin totaler delphineuling. :( brauche schnell hilfe! |
Re: unendlich viele zahlen
Statt statischen einen dynamischen Array nehmen:
Delphi-Quellcode:
Dann kann man die größe zur Laufzeit verändern
type zahl=array of integer;
Delphi-Quellcode:
Achtung Index beginnt dann bei 0 nicht 1.
SetLenght( Zahl, <Größe>);
[Edit: Tippfehler korrigiert] |
Re: unendlich viele zahlen
udn wie würde das im quelltext aussehen? (also komplett?)
habs gerade versucht zu ändern, stell mich aber anscheinend zu dumm an .. |
Re: unendlich viele zahlen
Zeig mal deinen angepassten Source
|
Re: unendlich viele zahlen
In Ergänzung zu meinem Vorredner mkinzler, stehen die restlichen Quellcodeteile schon in dem Text, den du hast.
Mit Readln kannst du die Anzahl auf eine weitere Variable einlesen und erstellst dann das dynamische Array und die Forschleifen musst noch an die neue Anzahl anpassen und dann bist eigentlich schon fertig. |
Re: unendlich viele zahlen
Delphi-Quellcode:
das es bei null beginnt, heißt ja nur, dass bei tausend möglichen zahlen dann 999 angegeben werden, oder?
program Project1;
{$APPTYPE CONSOLE} uses SysUtils; type zahl=array of integer; SetLentgh= Zahl, 1000); var z:zahl; i,j,x: integer; begin for i:=1 to 5 do begin write (i, 'Zahl'); readln (z[i]); end; for j:=1 to 4 do begin for i:=j+1 to 5 do begin if z[j]<z[i] then begin x:=z[i]; z[i]:=z[j]; z[j]:=x; end; end; writeln; for i:=1 to 5 do write (z[i]); readln; { TODO -oUser -cConsole Main : Hier Code einfügen } end; end. und wenn man nur 38 eingibt geht das auch? ach man, ich versteh das nicht :( "bist du eigentlich schon fertig" das sagt ihr so leicht .. bis jetzt kann ich mit delphi gerade mal zwei zahlen addieren .. |
Re: unendlich viele zahlen
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE} uses SysUtils; type zahl=array of integer; var z:zahl; i,j,x: integer; anzahl: Integer; begin Anzahl := 0; repeat write (i, '.Zahl (-1 für Ende)'); readln z; if z<>-1 then begin inc(Anzahl); SetLength( zahl, anzahl); zahl[anzahl-1] := z; until z = -1; for j:=0 to Anzahl -1 do //Index beginnt bei 0 und geht bis Anzahl -1 ... |
Re: unendlich viele zahlen
mkinzler:
du hast ein "end;" vergessen! MfG |
Re: unendlich viele zahlen
Hier ist eine alternative Lösung, die sich mehr an deinem Eingangsbeispiel orientiert. In Ergänzung zu mkinzler solltest du jetzt eigentlich das Prinzip verstehen, wie sowas gemacht wird. Wenn du Fragen hast, können diese sicherlich auch geklärt werden.
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE} uses SysUtils; type zahl=array of integer; var z:zahl; i,j,x,Anzahl: integer; begin Writeln('Bitte Anzahl zu vergleichender Zahlen angeben '); readln(Anzahl); SetLength(z, Anzahl); for i:=0 to Anzahl-1 do begin write (i+1, '. Zahl'); readln (z[i]); end; for j:=0 to Anzahl-1 do begin for i:=j+1 to Anzahl-1 do begin if z[j]<z[i] then begin x:=z[i]; z[i]:=z[j]; z[j]:=x; end; end; writeln; for i:=0 to Anzahl-1 do write (z[i]); readln; { TODO -oUser -cConsole Main : Hier Code einfügen } end; end. |
Re: unendlich viele zahlen
sorry aber ich stell mich zu blöd an .. mein delphi ist nur am meckern ..
und die fehler find ich nicht. mal erwartet er '(' findet aber ',' o bwohl in der angegebenen zeile '(' steht .. also manche fehler kann ich ja deuten .. so wie fehlende 'end's und sowas. :( großes :?: |
Re: unendlich viele zahlen
Zitat:
|
Re: unendlich viele zahlen
oh daaanke : D
das letztere funktioniert bei mir. es ist perfekt für mich =D dankeschön |
Re: unendlich viele zahlen
mir fällt gerade nur was auf.
das programm sortiert sie nicht der größe nach, oder? habs gerade getestet und es kamen nur die zahlen raus. seltsam. muss man noch was ändern? |
Re: unendlich viele zahlen
Das mein Beitrag die Zahlen nicht nach der Größe sortiert, ist mir auch aufgefallen. Aber an dem hab ich auch nichts geändert. ich hab lediglich die variable Anzahl an Zahlen eingebaut. Wenn also der Algorithmus die Zahlen nicht nach der Größe ordnet, dann war das auch schon bei deinem Eingangsbeispiel der Fall.
Edit 1: Wie du aber vieleicht feststellst ist zumindest die 1. Zahl nun die Größte. Damit musst du nur noch eine weitere For-Schleife einbauen, so dass diese auch noch den Rest in die richtige Reihenfolge bringt. |
Re: unendlich viele zahlen
mh .. seltsam ..
man hat doch zwei zahlen die verglichen werdn und eine wird dann auf einen dritten speicherplatz abgelegt und wieder zurückgeholt. das prinzip müsste doch gehen, oder? irgendwelche vorschläge?? :?: edit: vorschleife?? öhm okay. ich hab keine ahnung. =/ man ihr müsst mich ja alle für megadumm halten XD |
Re: unendlich viele zahlen
Das Beispiel funktioniert auf jeden Fall. Es vergleicht immer 2 Zahlen mit einander und zieht die größere von beiden immer weiter vor. D.h. er stellt fest, dass Beispielsweise die Zahl X größer als Y und Z sind, er weiß aber immer noch nicht, wie sich Y und Z zueinander verhalten.
|
Re: unendlich viele zahlen
Suche mal nach BubbleSort, da solltest du fertigen Code hierfür finden
|
Re: unendlich viele zahlen
hatte noch einen Copy-Paste-Fehler bei mir gefunden. Teste mal ob das hier dein Problem gelöst hat:
Delphi-Quellcode:
program Project1;
{$APPTYPE CONSOLE} uses SysUtils; type zahl=array of integer; var z:zahl; i,j,x,Anzahl, y: integer; begin Writeln('Bitte Anzahl zu vergleichender Zahlen angeben '); readln(Anzahl); SetLength(z, Anzahl); for i:=0 to Anzahl-1 do begin write (i+1, '. Zahl'); readln (z[i]); end; for j:=y to Anzahl-1 do begin for i:=j+1 to Anzahl-1 do if z[j]<z[i] then begin x:=z[i]; z[i]:=z[j]; z[j]:=x; end; writeln; end; for i:=0 to Anzahl-1 do write (z[i]); readln; { TODO -oUser -cConsole Main : Hier Code einfügen } end. |
Re: unendlich viele zahlen
ja danke : D
ich hab jetzt spontan einen test gemacht udn es hat funktioniert. ich probier noch den ein oder anderen .. aber ich denke, es geht. =) EDIT: nein, also wenn beispielsweise eine eins als zahl eins kommt, ist sie immer vorne und danach wird erst sortiert. womit hängt das denn zusammen? |
Re: unendlich viele zahlen
Diesen Fehler kann ich nicht nachvollziehen, bei mir wird auch richtig sortiert, wenn die 1. Zahl eine 1 ist. Gib mir mal die Zahlenfolge, die du eingibst und wo es nicht funktionieren soll.
|
Re: unendlich viele zahlen
naja wenn ich jetzt fünf zahlen eingebe.
1 6 4 8 3 kommt bei mir 18643 |
Re: unendlich viele zahlen
Liste der Anhänge anzeigen (Anzahl: 1)
hmm also bei mir kommt da die richtige Lösung. Geb dir mal den ScreenShot mit
|
Re: unendlich viele zahlen
hast du ne idee, woran das liegen könnte?
bei mir ist es so, wie beschrieben. welches delphi nimmst du denn? mir fällt jetzt nichts mehr ein, was man da ändern kann =/ |
Re: unendlich viele zahlen
kopier mal deinen Quellcode nochmal hier rein, nicht, dass es auch ein copy-paste-Fehler ist. Benutze TD2006 freeVersion
|
Re: unendlich viele zahlen
Delphi-Quellcode:
ich hab delphi 7 enterprise :o
program Project1;
{$APPTYPE CONSOLE} uses SysUtils; type zahl=array of integer; var z:zahl; i,j,x,Anzahl, y: integer; begin Writeln('Bitte Anzahl zu vergleichender Zahlen angeben '); readln(Anzahl); SetLength(z, Anzahl); for i:=0 to Anzahl-1 do begin write (i+1, '. Zahl'); readln (z[i]); end; for j:=y to Anzahl-1 do begin for i:=j+1 to Anzahl-1 do if z[j]<z[i] then begin x:=z[i]; z[i]:=z[j]; z[j]:=x; end; writeln; end; for i:=0 to Anzahl-1 do write (z[i]); readln; { TODO -oUser -cConsole Main : Hier Code einfügen } end. |
Re: unendlich viele zahlen
Was macht denn da dieses "y"?
|
Re: unendlich viele zahlen
Versuch mal den hier:
Delphi-Quellcode:
Das y ist mein Fehler gewesen. war von einem anderen Test.
program Project1;
{$APPTYPE CONSOLE} uses SysUtils; type zahl=array of integer; var z:zahl; i,j,x,Anzahl: integer; begin Writeln('Bitte Anzahl zu vergleichender Zahlen angeben '); readln(Anzahl); SetLength(z, Anzahl); for i:=0 to Anzahl-1 do begin write (i+1, '. Zahl'); readln (z[i]); end; for j:=0 to Anzahl-1 do begin for i:=j+1 to Anzahl-1 do if z[j]<z[i] then begin x:=z[i]; z[i]:=z[j]; z[j]:=x; end; writeln; end; for i:=0 to Anzahl-1 do write (z[i]); readln; { TODO -oUser -cConsole Main : Hier Code einfügen } end. |
Re: unendlich viele zahlen
ich denke, wir bzw. du hast den fehler gefunden : D
|
Re: unendlich viele zahlen
klappt es jetzt mit dem letzten Code?
|
Re: unendlich viele zahlen
€: heilige Sch... das sind aber während ich geschrieben hab einige Posts dazu gekommen :(
Megadumm nicht, ist ja nur eine Sache der Erfahrung (und selbst die reicht manchmal nicht, wie ich an mir oft merke) Wenn jeder darf, will ich auch mal:
Delphi-Quellcode:
program ProjectConsole1;
{$APPTYPE CONSOLE} uses sysutils; type zahl = array of integer; // Array jetzt dynamische Größe var z : zahl; i,j,x,L : integer; // L speichert die Länge des Array begin // Array-Größe abfragen write ('Array-Groesse: '); readln (L); // Array festlegen Setlength(z, L); // Zahlen erfassen for i:= 0 to L-1 do begin write (i+1, '. Zahl: '); readln (z[i]); end; // Bubble-Sort for j:=0 to L-1 do begin for i:=j+1 to L do begin if z[j]<z[i] then begin x:=z[i]; z[i]:=z[j]; z[j]:=x; end; end; // Kontroll-Ausgabe writeln; for i:= 0 to L-1 do write (z[i]); readln; { TODO -oUser -cConsole Main : Hier Code einfügen } end; end. |
Re: unendlich viele zahlen
@bamatze
ja, es klappt. nicht nur mit fünf zahlen .. auch noch mit mehr getestet =D satty, dir auch vielen dank =) |
Re: unendlich viele zahlen
kein Problem
|
Re: unendlich viele zahlen
guten morgen liebe programmierer.
ich sitze nun im infounterricht. und ich soll das programm hier jetzt so umschreiben, dass ich namen eingeben kann und den dann zuahlen zuordnen kann (prinzip weitsprungwettkampf) außerdem soll ich das integer auf real umschreibn udn auf zwei stellen nach dem komma runden. irgendwelche vorschläge? |
Re: unendlich viele zahlen
Setzt dein Array auf Real um, und schau dr anschließend mal folgenden Link an..
Delphi-Quellcode:
type
zahl = array of Real; ![]() Gruß Jens |
Re: unendlich viele zahlen
OT: Jungs, Ihr seid zu gut für diese Welt :dp:
Sherlock |
Re: unendlich viele zahlen
Zitat:
versuch es mal mit einem record
Delphi-Quellcode:
Die kannst Du dann in ein array packen und sortieren.
type
trecord=record name:string[40]; wert:real; end; Gruß K-H OT: Ich mag Zauberlehrlinge |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz