Autor Beitrag
steffi1980
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mo 23.03.09 20:42 
Hallo
bräuchte dringend die Lösung zu folgender Aufgabe.

Wandeln Sie folgende WHILE DO Schleife in eine FOR TO DO Schleife um!
ausblenden Delphi-Quelltext
1:
2:
3:
4:
VAR datei: FILE OF INTEGER; zahl,i: INTEGER;
...
WHILE NOT EOF (datei) DO
READ (datei,zahl);

Würde mich sehr freuen, wenn ihr schnell antworten könntet, denn bald ist Klausur :-(

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19335
Erhaltene Danke: 1751

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 23.03.09 20:48 
Hallo und :welcome: im Forum!

Wie wäre es, wenn du zuerst die Dateigröße feststellst? ;-)
Dann weißt du ja wie viele Bytes du lesen musst. Die Dateigröße sollte dir FileSize liefern.
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Mo 23.03.09 20:58 
Eine äquivalente Umsetzung ist nicht möglich, da eine for-Schleife auf High(Cardinal)+1 Durchläufe begrenzt ist, die while-Schleife jedoch eine unbegrenzte Anzahl Durchläufe zulässt. :shock:
steffi1980 Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mo 23.03.09 21:04 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Hallo und :welcome: im Forum!

Wie wäre es, wenn du zuerst die Dateigröße feststellst? ;-)
Dann weißt du ja wie viele Bytes du lesen musst. Die Dateigröße sollte dir FileSize liefern.


Ich bin totale Anfängerin und hab ehrlich gesagt wenig Ahnung.

Meinst du so könnte die Lösung aussehen?:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
VAR datei: FILE OF INTEGER;
zahl,i: INTEGER;

werte: Array [0..100of INTEGER;
BEGIN
zahl:= FILESIZE(datei);
FOR i:=1 to zahl DO
READ (datei,werte[i]);
END;


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Mo 23.03.09 21:17 
Genau, das ist der richtige Ansatz. :)

Nur noch eine Kleinigkeit: Dein Array fängt bei Null an, die Schleife beginnst du aber mit 1. Entweder du startest die Schleife bei 0 und ziehst von Zahl 1 ab. Oder du definierst das Array so: array[1..101of Integer.


Zuletzt bearbeitet von Yogu am Mo 23.03.09 21:26, insgesamt 1-mal bearbeitet
steffi1980 Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mo 23.03.09 21:23 
user profile iconYogu hat folgendes geschrieben Zum zitierten Posting springen:
Genau, das ist der richtige Ansatz. :)

Nur noch eine Kleinigkeit: Dein Array fängt bei Null an, die Schleife beginnst du aber mit 1. Entweder du startest die Schleife bei 0 und ziehst von Zahl 1 ab. Oder du definierst das Array so: array[1..101 of Integer.


Super, Danke! :-) Jetzt ich komm der Sache ja schon näher, also Danke für den Hinweis!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19335
Erhaltene Danke: 1751

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 23.03.09 21:35 
Wie kommst du denn auf die Schreibweise? In Turbo Pascal unter DOS war das vor 20 Jahren mal üblich, aber heutzutage eigentlich nicht mehr. ;-)

Jedenfalls ist deine Lösung eigentlich keine direkte Umsetzung. In der gegebenen while-Schleife wird einfach nur jeweils in die selbe Variable gelesen. Wenn die for-Schleife also das selbe machen soll, dann würde das so aussehen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var
  Datei: file of Integer;
  zahl, i, ByteCount: Integer;
begin
  ByteCount := FileSize(Datei);
  for i := 1 to ByteCount do
    Read(Datei, zahl);
end;
Innerhalb der Schleife muss man in beiden Fällen natürlich auch noch etwas mit zahl machen, aber das gehört ja nicht zur Aufgabe.

Um das in ein Array einzulesen würde ich das so machen, denn du weißt ja gar nicht wie viele Werte in der Datei stehen, oder?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var
  i: Integer;
  Datei: file of Integer;
  werte: array of Integer;
begin
  SetLength(werte, FileSize(Datei));
  for i := 0 to High(werte) do
    Read(Datei, werte[i]);
end;
Mit SetLength legst du die Größe des (dynamischen) Arrays vorher fest, je nachdem wie viel Platz eigentlich gebraucht wird.
steffi1980 Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Mo 23.03.09 22:34 
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Wie kommst du denn auf die Schreibweise? In Turbo Pascal unter DOS war das vor 20 Jahren mal üblich, aber heutzutage eigentlich nicht mehr. ;-)

Jedenfalls ist deine Lösung eigentlich keine direkte Umsetzung. In der gegebenen while-Schleife wird einfach nur jeweils in die selbe Variable gelesen. Wenn die for-Schleife also das selbe machen soll, dann würde das so aussehen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var
  Datei: file of Integer;
  zahl, i, ByteCount: Integer;
begin
  ByteCount := FileSize(Datei);
  for i := 1 to ByteCount do
    Read(Datei, zahl);
end;
Innerhalb der Schleife muss man in beiden Fällen natürlich auch noch etwas mit zahl machen, aber das gehört ja nicht zur Aufgabe.

Um das in ein Array einzulesen würde ich das so machen, denn du weißt ja gar nicht wie viele Werte in der Datei stehen, oder?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
var
  i: Integer;
  Datei: file of Integer;
  werte: array of Integer;
begin
  SetLength(werte, FileSize(Datei));
  for i := 0 to High(werte) do
    Read(Datei, werte[i]);
end;
Mit SetLength legst du die Größe des (dynamischen) Arrays vorher fest, je nachdem wie viel Platz eigentlich gebraucht wird.


Habs aus nem ziemlich aktuellen Buch entnommen. Mein Prof hat's als Begleitmaterial zur Vorlesung vorgeschlagen, aber da der auch schon etwas älter ist, war es eigentlich auch schon zu erwarten ;-)
Werds dann wohl so lernen. Danke!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19335
Erhaltene Danke: 1751

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 23.03.09 23:27 
Für die Schreibweise von Delphi-Quelltext gibt es hier einen Styleguide:
dn.codegear.com/article/10280 (englisch)
www.delphi-treff.de/delphi-styleguide/ (deutsch)

Daran kannst du dich orientieren. Am wichtigsten ist z.B. die Einrückung um die Zusammenhänge zu überblicken, also was innerhalb einer if-Abfrage oder Schleife liegt.