| Autor |
Beitrag |
steffi1980
Hält's aus hier
Beiträge: 9
|
Verfasst: 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!
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 Narses: Delphi-Tags hinzugefügt
|
|
jaenicke
      
Beiträge: 19335
Erhaltene Danke: 1751
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 23.03.09 20:48
Hallo und  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
      
Beiträge: 2684
Erhaltene Danke: 32
|
Verfasst: 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. 
|
|
steffi1980 
Hält's aus hier
Beiträge: 9
|
Verfasst: Mo 23.03.09 21:04
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: 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..101] of Integer.
Zuletzt bearbeitet von Yogu am Mo 23.03.09 21:26, insgesamt 1-mal bearbeitet
|
|
steffi1980 
Hält's aus hier
Beiträge: 9
|
Verfasst: Mo 23.03.09 21:23
|
|
jaenicke
      
Beiträge: 19335
Erhaltene Danke: 1751
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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: 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? 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 
Hält's aus hier
Beiträge: 9
|
Verfasst: Mo 23.03.09 22:34
jaenicke hat folgendes geschrieben : | 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: 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? 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
      
Beiträge: 19335
Erhaltene Danke: 1751
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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.
|
|
|