![]() |
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 |
Re: S: Hilfe bei Turbo Pascal
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. mfG mirgae228 |
Re: S: Hilfe bei Turbo Pascal
Hi mirage228
Zitat:
Zitat:
feld = array[1..1000] of integer; feld.setLength(1001); mfg cook |
Re: S: Hilfe bei Turbo Pascal
Zitat:
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 |
Re: S: Hilfe bei Turbo Pascal
Zitat:
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 |
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 |
Re: S: Hilfe bei Turbo Pascal
Hallo
Zitat:
so far cook |
Re: S: Hilfe bei Turbo Pascal
Warum nicht einfach eine nette kleine verkettet Liste ???
Geht ganz einfach:
Code:
Eine Collection wär hier mit Kanonen auf Spatzen geschossen:)
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; |
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...
|
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:
Ich hoffe das geht so, oder so ähnlich, in TP...in delphi funkt das.
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; Musst nur aufpassen das du die array-grenze nicht verletzt. Das kann man aber nur mit eindimensionalen arrays machen :wink: |
Re: S: Hilfe bei Turbo Pascal
THX @ Ghostwalker & maximov
Das sind beides Ansätze dir mir ganz gut erscheinen, allerdings ist mir maximov's Ansatz doch etwas zu tief in die Materie :) und Ghostwalker's verkettete Liste zwar schön, aber ich glaube für mein Programm doch nicht so ganz passend. Ich hab jetzt einfaches ein statisches Array mit einer Maximalgröße genommen, entweder der Prof. erkennt es an oder eben nicht... so far cook |
Re: S: Hilfe bei Turbo Pascal
Ich arbeite auch zur Zeit mit TB 7.0 und brauche genau das gleiche.
Der CODE von maximov sah interessant aus. Kann mir jemand erklären wie das funktioniert? Und wofür braucht man count? |
Re: S: Hilfe bei Turbo Pascal
Hallo,
naja - count ist die dynamische anzahl der einträge in deinem array, welche du selbst festlegen musst. Also für count irgendeine integer variable einsetzen. Und zur funktionsweise: Ein array ist nix weiter als ein speicherbereich, für den der compiler eine festgelegte lineare datenstruktur voraussetzt. Und genau diese voraussetzung definieren wir mit:
Delphi-Quellcode:
nur das wir eben den speicher nicht von delphi reservieren lassen, sondern dies selbst tun wollen. Dafür dann der pointer-typ. Das das array grösser als werden kann, als die definierte länge, ist egal da bei höheren indizes der speicher einfach weiterhin linear addressiert wird. Wichtig ist nur, das dort dann von uns selbst reservierter speicher vorhanden ist:
Type
PArray = ^TArray; TArray = array[0..0] of integer;
Delphi-Quellcode:
also holen wir speicher von der gewünschten elementen-anzahl (count) * datengrösse der elemente (in diesem fall integer). Nu ist das array benutzbar:
var dynArrPtr:pArray
... getMem(pointer(dynArrPtr), count*sizeOf(integer)); // array auf speicher mappen
Delphi-Quellcode:
Man muss sich halt nur merkeen wie gross das array ist :)
//zugriff wie gehabt //
dynArrPtr^[42] := 1 + 2; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:46 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