Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   S: Hilfe bei Turbo Pascal (https://www.delphipraxis.net/20938-s-hilfe-bei-turbo-pascal.html)

cook 25. Apr 2004 17:25


S: Hilfe bei Turbo Pascal
 
Hallo

Ich muss mal wieder ein kleines Projekt in TP schreiben, aber da es schon sehr lange her ist das ich dass das letzte mal gemacht habe fallen mir einige Befehle, etc. nicht mehr ein. Folgende Probleme:

1. Wie kann ich den Fehler abfangen, damit bei einer Integervariablen auch wirklich nur Ziffern eingegeben werden und somit praktisch die Eingabe nach einem Fehler wiederholt werden muss?
2. Wie bastel ich ein dynamisches Array? Also sowas wie:
write('bitte Arraygröße eingeben: ');
readln(max);
type feld = array[1..max] of integer;

Danke schonmal für eure Hilfe!

mfg Christian

mirage228 25. Apr 2004 17:34

Re: S: Hilfe bei Turbo Pascal
 
Zitat:

Zitat von cook
Hallo

Ich muss mal wieder ein kleines Projekt in TP schreiben, aber da es schon sehr lange her ist das ich dass das letzte mal gemacht habe fallen mir einige Befehle, etc. nicht mehr ein. Folgende Probleme:

1. Wie kann ich den Fehler abfangen, damit bei einer Integervariablen auch wirklich nur Ziffern eingegeben werden und somit praktisch die Eingabe nach einem Fehler wiederholt werden muss?
2. Wie bastel ich ein dynamisches Array? Also sowas wie:
write('bitte Arraygröße eingeben: ');
readln(max);
type feld = array[1..max] of integer;

Danke schonmal für eure Hilfe!

mfg Christian

1. Zu ersteres gibt es die prozedur Val, die einen Fehlercode zurückgibt. ist dieser <> 0 dann war die eingabe kein integer
2. Das könnte mit TP schwierig werden. Du könntest evtl. versuchen mit verketteten listen zu arbeiten. Aber bei TP gab es noch keine dynamischen Arrays.
Alternativ könntest du eine maximale array größe angeben. die nutzereingabe darf aber dann nicht höher sein.

mfG
mirgae228

cook 25. Apr 2004 18:47

Re: S: Hilfe bei Turbo Pascal
 
Hi mirage228

Zitat:

1. Zu ersteres gibt es die prozedur Val, die einen Fehlercode zurückgibt. ist dieser <> 0 dann war die eingabe kein integer
Danke! Ich wusste doch da gab es was :)

Zitat:

2. Das könnte mit TP schwierig werden. Du könntest evtl. versuchen mit verketteten listen zu arbeiten. Aber bei TP gab es noch keine dynamischen Arrays.
Alternativ könntest du eine maximale array größe angeben. die nutzereingabe darf aber dann nicht höher sein.
Hm... das ist natürlich ungünstig. Dann frag ich mich warum uns die Aufgabenstellung so gestellt wurde (also ein Array of Integer mit Größe >=1000). Im nachhinein kann man somit die Größe eines deklarierten Arrays ja auch nicht mehr ändern!? Also sowas Delphimäßiges wie:
feld = array[1..1000] of integer;
feld.setLength(1001);

mfg cook

mirage228 25. Apr 2004 18:54

Re: S: Hilfe bei Turbo Pascal
 
Zitat:

Zitat von cook
Hm... das ist natürlich ungünstig. Dann frag ich mich warum uns die Aufgabenstellung so gestellt wurde (also ein Array of Integer mit Größe >=1000). Im nachhinein kann man somit die Größe eines deklarierten Arrays ja auch nicht mehr ändern!? Also sowas Delphimäßiges wie:
feld = array[1..1000] of integer;
feld.setLength(1001);

Nein, ein nachträgliches setzen der Größe ist nicht möglich.
Wie gesagt, in der Schule machen wir das so, dass wir die eingegebene Größe in einer Variable speichern. Das Array hat von vorne rein eine feste Maximalgröße und der eingegebene Wert darf nicht größer als dieser sein.
Eventuell meinte deine Aufgabenstellung eine Festgröße über 1000 (also Array[1..1000] of Integer oder so)?!

mfG
mirage228

cook 25. Apr 2004 19:26

Re: S: Hilfe bei Turbo Pascal
 
Zitat:

Eventuell meinte deine Aufgabenstellung eine Festgröße über 1000 (also Array[1..1000] of Integer oder so)?!
Leider nicht, oder zumindest nicht ganz.
Es sollen mind. 1000 aber auch mehr Werte eingegeben werden können. Da aber nach oben keine Grenze gesetzt ist kann ich nicht einfach array[1..1500] oder so machen. Aber im Endeffekt wird mir wohl nichts anderes übrig bleiben als eine Obergrenze zu setzen.

gruß cook

nieurig 26. Apr 2004 07:20

Re: S: Hilfe bei Turbo Pascal
 
Guten Morgen,
wenn ich mich recht erinnere gab es in TP7 (benutzt Du TP7?) die Klassen TCollection und TSortedColletion. Die wären eine Lösung für ein "dynamisches Array" ohne dass Du selbst Ketten oder so programmieren müßtest.

Viel Erfolg.
Niels

cook 26. Apr 2004 13:27

Re: S: Hilfe bei Turbo Pascal
 
Hallo

Zitat:

(benutzt Du TP7?)
Nein. Dies soll kein objektorientiertes Programm werden, deshalb kann ich auch keine Klassen verwenden. Ich hab das Array halt jetzt statisch gemacht. Wird schon hinhauen. Trotzdem Danke!

so far
cook

Ghostwalker 26. Apr 2004 14:05

Re: S: Hilfe bei Turbo Pascal
 
Warum nicht einfach eine nette kleine verkettet Liste ???

Geht ganz einfach:

Code:
TYPE
    PElement = ^TElement;
    TElement = record
                 Wert : Integer;
                 Next : PElement;
               end;


var
  Anf : PElement; (* Root-Zeiger *)
  Wrk : Pelement; (* Arbeits-Zeiger *);

procedure AddWert(AWert:integer);
begin
  if ANF = NIL then
  begin
     New(ANF)
     WRK := ANF;
  end
  else
  begin
    wrk := wrk^.next;
    New(wrk);
  end;
  wrk^.wert := AWert;
end;
Eine Collection wär hier mit Kanonen auf Spatzen geschossen:)

alcaeus 26. Apr 2004 14:38

Re: S: Hilfe bei Turbo Pascal
 
Deine Obergrenze ist 2147483647, denn mehr kann man in TP nicht als Integer-Wert eingeben, jedenfalls nicht dass ich wüsste...

maximov 26. Apr 2004 15:33

Re: S: Hilfe bei Turbo Pascal
 
Hi.

Du könntest ein dynamisches array mit einer statischen-array-pointer-deklaration faken :-D
In etwa so: Du reservierst dir den benötigten speicher manuell (count*sizeOf(TElement)) und weisst den poiter dem array-pointer zu. In etwa so:

Delphi-Quellcode:
Type
  PArray = ^TArray;
  TArray = array[0..$FFFF] of integer;

var dynArrPtr:pArray
begin
  getMem(pointer(dynArrPtr), count*sizeOf(integer)); // array auf speicher mappen

  //zugriff wie gehabt //
  dynArrPtr^[408] := 1 + 2;

end;
Ich hoffe das geht so, oder so ähnlich, in TP...in delphi funkt das.
Musst nur aufpassen das du die array-grenze nicht verletzt. Das kann man aber nur mit eindimensionalen arrays machen :wink:


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:19 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz