Autor Beitrag
Lauzijungs
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mi 14.06.06 19:23 
Hab grad ein Problem mit einer Multiplikations-Aufgabe:

Wir sollen in einer Tabelle (StringGrid) Zahlen multiplizieren.
Dabei sollen am Rand, also sowohl am oberen als auch am linken Rand der Tabelle die Zahlen 1 bis 10 stehen.
Also in dieser Form:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
  1 2 3 4 5 6 7 8 9 10
1
2
3
4
5
6
7
8
9
10


Diese Aufgabe sollen wir mit dem Datentyp array lösen, könnte mir da jemand helfen, ich hab zur Zeit gar keinen Plan :(



Wir hatten sowas ähnliches schonmal mit der Addition, da scheint mein Programm aber noch etwas fehlerhaft zu sein:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
type tfeld=array[1..10,1..10] of integer;
.
.
.
procedure...
VAR feld:tfeld;
BEGIN
for i:=1 to 5 DO
for j:=1 to 5 DO BEGIN
feld[i,j]:=i+j;
END;
stringgrid1.cells[i,j]:=inttostr (feld[i,j]);
END;


Scheint aber jetzt nur die Prozedur für die Addition an sich zu sein, wie ich die Zahlen am Rand darstelle, weiß ich momentan auch nicht mehr.

Es wäre schön, wenn mir hier jemand helfen könnte!

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt
Moderiert von user profile iconChristian S.: Code-Tags hinzugefügt
SmileySN
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 297

WinXP, Win7
Delphi 2010 Professional
BeitragVerfasst: Mi 14.06.06 19:46 
Ich würde so anfangen, dass ich mir vorstelle Du hast ein Stringgrid mit 11 Zeilen
Die erste Zeile beschreibst Du mit
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
For i:= 1 to 10 Do  // Waagerechte Liste
  Stringgrid1.cells[1,i]:=IntToStr(i)+' ';

For i:= 1 to 10 Do  // Senkrechte Liste
  Stringgrid1.cells[i+1,1]:=IntToStr(i);


Dann muss das Stringgrid nur noch wie eine Tabelle dargestellt werden
Wenn es sein muss kann man auch vorher erst noch die beiden Arrays auf die gleiche Weise füllen und dann dem Stringrid zuweisen.
Lauzijungs Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Mi 14.06.06 20:51 
Hm, da wird bei mir der folgende Fehler angezeigt:
FOR-Schleifenvariable 'i' kann nach Durchlauf undefiniert sein.

Woran liegt das?

Folgende Prozedur hab ich grade hier zu stehen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure addi(f:tfeld);

var i,j:integer;
begin
  For i:= 1 to 10 Do  // Waagerechte Liste
  Form1.Stringgrid1.cells[1,i]:=IntToStr(i)+' ';

For i:= 1 to 10 Do  // Senkrechte Liste
  Form1.Stringgrid1.cells[i+1,1]:=IntToStr(i);

form1.stringgrid1.cells[i,j]:=inttostr(f[i,j]);
end;


Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt
SmileySN
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 297

WinXP, Win7
Delphi 2010 Professional
BeitragVerfasst: Mi 14.06.06 21:44 
ausblenden Delphi-Quelltext
1:
form1.stringgrid1.cells[i,j]:=inttostr(f[i,j]);					


Hier musst Du auch noch eine bzw. zwei Schleifen drüber setzen sonst gibst Du ja nur eine einzelne Zelle aus.

ausblenden Delphi-Quelltext
1:
2:
3:
For i:= 1 To 10 Do
  For j := 1 To 10 Do
    form1.stringgrid1.cells[i,j]:=inttostr(f[i,j]);


Die Variable j wurde von Dir nirgends gesetzt, aber bei ..cell[i,j].. dann benutzt.

Stell Dir eine Excel-Tabelle vor, wenn Du da nur eine Zelle beschreibst, dann sieht die Matrix nicht ganz vollständig aus.
SmileySN
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 297

WinXP, Win7
Delphi 2010 Professional
BeitragVerfasst: Mi 14.06.06 21:49 
Übrigends habe ich in meinem Beispiel das Stringgrid schon direkt beschrieben.
Wenn Du es mit einem Array machen sollst, dann beschreibe oben das Array f und weise dann unten dieses dem Stringrid zu.
Lauzijungs Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Do 15.06.06 19:59 
So das mit dem Multiplizieren hat nun mittlerweile funktioniert, danke für die Hilfe!
Jetzt soll aber in der 11. Spalte die jeweiligen Summen der einzelnen Zeilen angezeigt werden, das muss auch irgendwie wieder mit array und Zählschleifen glaub gehen, weiß ich aber wieder nicht richtig wie genau.

Also das soll dann so aussehen:

1 2 3 4 5 6 7 8 9 10
1 1 2 3 4 5 6 7 8 9 10 55
2
3
4
5
6
7
8
9
10

Hab jetzt nur mal die erste Zeile als Beispiel ausgefüllt, also kommt mir jetzt auf die 55 da an.
Könnte mir da bitte nochmal jemand helfen, ich wäre sehr dankbar!!
Blackheart666
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: Do 15.06.06 20:14 
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
  1 2 3 4  5  6  7  8  9 10  
1 1 2 3 4  5  6  7  8  9 10
2 2 4 6 8 10 12 14 16 18 20  
3  
4  
5  
6  
7  
8  
9  
10

55 ?
Lauzijungs Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Do 15.06.06 20:31 
Na in der 11. Spalte soll in Zeile 1 die 55 ausgegeben werden, als Summe der Zahlen 1,2,3,4,5,6,7,8,9,10, die sich in Zeile 1 aus der Multiplikation mit 1 ergeben
Blackheart666
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: Do 15.06.06 20:37 
Das scheint mir aber doch eher Addition zu sein was Du meinst.
Lauzijungs Threadstarter
Hält's aus hier
Beiträge: 13



BeitragVerfasst: Do 15.06.06 20:39 
Ja ist es ja auch, hab ja geschrieben, dass ich die Multiplikation schon hinbekommen habe, jetzt aber das Problem mit dieser Summe habe, das ist Addition, stimmt schon!
SmileySN
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 297

WinXP, Win7
Delphi 2010 Professional
BeitragVerfasst: Do 15.06.06 22:11 
Ich nehme an, Du willst die Zeilen aufaddieren und das ergebnis in Zeile 11 schreiben.
Hier das Prinzip wenn man davon ausgeht, dass in dem Array f die Zahlen als Integer gespeichert sind.
Es werden nacheinander Zeile 1 bis 10 zusammenaddiert und das Ergbebnis in Array f[Zeile11,k] reingeschrieben.
Wenn die Summenliste bei 1 anfangen soll, dann k:=1 am Anfang setzen.


ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
k:=2;

For i:= 1 To 10 Do
  begin
    Ergebnis:=0;

    For j := 1 To 10 Do
      begin
        Ergebnis:=Ergebnis + f[i,j];
      end;

    f[11,k]:=Ergebnis;
    k:=k + 1;
  end;


Hab den Code nicht getestet, aber das Prinzip wie es geht sollte daraus hervorgehen.