Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Array in Prozedur füllen


Sarahram - So 12.06.11 22:42
Titel: Array in Prozedur füllen
Hi Zusammen.
Ich bin noch Anfänger und habe folgende Aufgabenstellung:
Erstellen sie ein kleine Prozedur, welche ein vordefiniertes Array a:array[1..50]of integer; jeweils mit den Werten i*i (i sei des Array index)initialisiert. Sie können von der Deklaration sowohl des arrays als auch integer i ausgehen

Ich habe die Prozedur so geschrieben:

Delphi-Quelltext
1:
2:
3:
4:
procedure example();
begin
 a[i]:=i*i;
end;

Was meint Ihr? Könnt Ihr das bestätigen? Ich weiß, es handelt sich eher um ein Verständnisproblem als um ein delphi Problem.

Vielen Dank und viele Grüße.

Sarahram

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.


ALF - So 12.06.11 22:57

Hi und :welcome:

Hast Du Dir schon mal die For schleife angeschaut?
Die Procedure die Du geschrieben hast, dürfte da allein nicht reichen :wink:

Gruss ALf


Narses - So 12.06.11 23:00

Moin und :welcome: im Forum!

user profile iconSarahram hat folgendes geschrieben Zum zitierten Posting springen:
Array a:array[1..50]of integer;
[...]

Delphi-Quelltext
1:
2:
3:
4:
procedure example();
begin
 a[i]:=i*i;
end;
Du hast die Dimensionen des Arrays nirgendwo in deinem Code berücksichtigt. :lupe: Woher soll der Computer denn wissen, welche Elemente er mit Werten füllen soll? :idea: ;)

cu
Narses

//EDIT: Oh, zu langsam... :?


Sarahram - So 12.06.11 23:34

Danke für die schnellen Antworten.

Laut Aufgabenstellung ist das Array und die Variable i global definiert und ich benötige nur die Prozedur.

Man könnte Prozedur auch so schreiben

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
produre example();
Var
i: integer;
begin

 for i:=0 to 100 do;
  begin
   a[i]:=i*i;
  end;
end;

Beide Version sind auch lauffähig. In der ersten Version würde ich die for-Schleife in das Hauptprogramm schreiben.

Gefragt ist nur die Prozedur (so möchte mein Lehrer das handgeschrieben) und das Problem besteht darin, dass laut Aufgabenstellung das Array jeweils gefüllt wird.

Ich verstehe das so, dass das Array pro Aufruf der Prozedur an der Stelle i mit dem aktuellen Wert i*i gefüllt werden soll.

Programmiertechnisch habe ich das Verstanden. Darum auch meine Anmerkung, dass es sich eher um ein Verständnisproblem handelt.

Viele Grüße

Sarahram

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.


jaenicke - So 12.06.11 23:43

user profile iconSarahram hat folgendes geschrieben Zum zitierten Posting springen:

Delphi-Quelltext
1:
2:
3:
4:
 for i:=0 to 100 do;
  begin
   a[i]:=i*i;
  end;
Ich bezweifle stark, dass du das so meinst wie du es geschrieben hast. ;-)

In dem Code ist die Schleife vor dem begin zu Ende. Denn das Semikolon beendet die Anweisung.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
 for i:=0 to 100 do;

// hier bist du nach der Schleife
  begin
   a[i]:=i*i;
  end;
Deshalb sollte auch eine Compilerwarnung kommen, weil i dort nicht mehr eindeutig definiert ist. ;-)


Sarahram - Mo 13.06.11 00:02

Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

Uups. Das war ein Schreibfehler.
Habe ich so nicht programmiert.


ALF - Mo 13.06.11 00:06

Nein, das array wird komplett gefüllt wenn Du die Procedure aufrufst!
Anders würde es so aussehen


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
procedure TForm1.Buttonclick1(Sender: TObject);
begin
     if i < 50 then
     begin
         i:=i +1//oder inc(i);
         procedure example();
     end;

    
//****  oder  *******
    for i:= 0 to 50 do
    begin
        procedure example()
    end;
end;

procedure TForm1.example();
begin
    a[i]:=i*i;
end;


dann würdest Du mit jedem klck dein array einzeln auffüllen oder in der Forschleife komplett.
Im Prinzip also schon richtig was Du geschrieben hast
Nur ist es nicht ganz so konform :wink:

Weil i ja irgenwie irgenwo definiert ist und eventl wenn man i noch mal verwendet fehler verursachen kann!

Gruss Alf


Narses - Mo 13.06.11 00:07

Moin!

user profile iconSarahram hat folgendes geschrieben Zum zitierten Posting springen:
Gefragt ist nur die Prozedur (so möchte mein Lehrer das handgeschrieben) und das Problem besteht darin, dass laut Aufgabenstellung das Array jeweils gefüllt wird.

Ich verstehe das so, dass das Array pro Aufruf der Prozedur an der Stelle i mit dem aktuellen Wert i*i gefüllt werden soll.
Also wenn das die "Original-Aufgabenstellung" ist:
user profile iconSarahram hat folgendes geschrieben Zum zitierten Posting springen:
Erstellen sie ein kleine Prozedur, welche ein vordefiniertes Array a:array[1..50]of integer; jeweils mit den Werten i*i (i sei des Array index)initialisiert.
dann würde ich sagen, dass du es falsch verstanden hast. Ich hätte als Lehrer die Schleife in der Prozedur erwartet. :nixweiss:

cu
Narses


Sarahram - Mo 13.06.11 00:18

Vielen Dank für die Antworten.

Initialisieren des Arrays ist wohl das Stichwort.

Also ... Schleife in die Prozedur.

Viele Grüße

Sarahram


ALF - Mo 13.06.11 00:25

Ich war eigentlich der Meinung das das Array bereits initialisiert wurde :autsch:
Und nun sollte es nur um das befüllen gehen :gruebel:

Lol

Gruss Alf


Sarahram - Mo 13.06.11 00:36

Ich habe das eigenzliche Problem auch nicht sehr gur beschrieben.

Viele Grüße

Sarahram