Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi unendlich viele zahlen (https://www.delphipraxis.net/130647-unendlich-viele-zahlen.html)

resyiii 11. Mär 2009 18:08


unendlich viele zahlen
 
also ich hab ein großes problem.
im informatikuntericht haben wir folgenden code:

Delphi-Quellcode:
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.
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)
ich weiß leider nicht, wie das gehen soll.
bin totaler delphineuling. :(

brauche schnell hilfe!

mkinzler 11. Mär 2009 18:11

Re: unendlich viele zahlen
 
Statt statischen einen dynamischen Array nehmen:
Delphi-Quellcode:
type zahl=array of integer;
Dann kann man die größe zur Laufzeit verändern
Delphi-Quellcode:
SetLenght( Zahl, <Größe>);
Achtung Index beginnt dann bei 0 nicht 1.
[Edit: Tippfehler korrigiert]

resyiii 11. Mär 2009 18:14

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 ..

mkinzler 11. Mär 2009 18:16

Re: unendlich viele zahlen
 
Zeig mal deinen angepassten Source

BAMatze 11. Mär 2009 18:18

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.

resyiii 11. Mär 2009 18:22

Re: unendlich viele zahlen
 
Delphi-Quellcode:
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.
das es bei null beginnt, heißt ja nur, dass bei tausend möglichen zahlen dann 999 angegeben werden, oder?

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 ..

mkinzler 11. Mär 2009 18:29

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
...

mr_emre_d 11. Mär 2009 18:32

Re: unendlich viele zahlen
 
mkinzler:
du hast ein "end;" vergessen!

MfG

BAMatze 11. Mär 2009 18:34

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.

resyiii 11. Mär 2009 18:36

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 :?:

BAMatze 11. Mär 2009 18:37

Re: unendlich viele zahlen
 
Zitat:

Zitat von resyiii
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 :?:

bei welchem Quellcode hast du denn diese Probleme? sind ja jetzt mehrere Lösungen gegeben worden!

resyiii 11. Mär 2009 18:38

Re: unendlich viele zahlen
 
oh daaanke : D

das letztere funktioniert bei mir.
es ist perfekt für mich =D

dankeschön

resyiii 11. Mär 2009 18:46

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?

BAMatze 11. Mär 2009 18:49

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.

resyiii 11. Mär 2009 18:51

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

BAMatze 11. Mär 2009 18:55

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.

mkinzler 11. Mär 2009 18:58

Re: unendlich viele zahlen
 
Suche mal nach BubbleSort, da solltest du fertigen Code hierfür finden

BAMatze 11. Mär 2009 19:05

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.

resyiii 11. Mär 2009 19:12

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?

BAMatze 11. Mär 2009 19:21

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.

resyiii 11. Mär 2009 19:28

Re: unendlich viele zahlen
 
naja wenn ich jetzt fünf zahlen eingebe.
1
6
4
8
3

kommt bei mir 18643

BAMatze 11. Mär 2009 19:33

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

resyiii 11. Mär 2009 19:35

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 =/

BAMatze 11. Mär 2009 19:36

Re: unendlich viele zahlen
 
kopier mal deinen Quellcode nochmal hier rein, nicht, dass es auch ein copy-paste-Fehler ist. Benutze TD2006 freeVersion

resyiii 11. Mär 2009 19:38

Re: unendlich viele zahlen
 
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.
ich hab delphi 7 enterprise :o

sirius 11. Mär 2009 19:41

Re: unendlich viele zahlen
 
Was macht denn da dieses "y"?

BAMatze 11. Mär 2009 19:43

Re: unendlich viele zahlen
 
Versuch mal den hier:

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 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.
Das y ist mein Fehler gewesen. war von einem anderen Test.

resyiii 11. Mär 2009 19:44

Re: unendlich viele zahlen
 
ich denke, wir bzw. du hast den fehler gefunden : D

BAMatze 11. Mär 2009 19:48

Re: unendlich viele zahlen
 
klappt es jetzt mit dem letzten Code?

Satty67 11. Mär 2009 19:53

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.

resyiii 11. Mär 2009 20:05

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 =)

BAMatze 11. Mär 2009 20:06

Re: unendlich viele zahlen
 
kein Problem

resyiii 26. Mär 2009 06:52

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?

Jens Hartmann 26. Mär 2009 07:04

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;
Nachkommastellen


Gruß Jens

Sherlock 26. Mär 2009 07:11

Re: unendlich viele zahlen
 
OT: Jungs, Ihr seid zu gut für diese Welt :dp:


Sherlock

p80286 26. Mär 2009 17:28

Re: unendlich viele zahlen
 
Zitat:

Zitat von resyiii
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?

Hallo resyiii,

versuch es mal mit einem record
Delphi-Quellcode:
type
  trecord=record
            name:string[40];
            wert:real;
          end;
Die kannst Du dann in ein array packen und sortieren.

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