![]() |
Problem bei Pascalsche Dreieck
Hallo forengemeinde!
Das folgende Programm soll in einem stringgrid das Pascalsche dreieck erzeugen. Dabei wird erst in die oberste zeile ein 1er gelegt. alle anderen Kästchen sollen die summe der beiden Kästchen rechts oben und links oben des jeweiligen kästchens sein.
Delphi-Quellcode:
Fehlermeldung:
procedure TForm1.Button1Click(Sender: TObject);
var i,j,x : integer; begin x:=(0); stringgrid1.cells[17,1]:= inttostr(1); for i:= 1 to 34 do begin for j:= 1 to 10 do begin x:= x + strtoint(stringgrid1.cells[i-1,j-1]) + strtoint(stringgrid1.cells[i+1,j-1]); stringgrid1.cells[i,j]:= inttostr(x); end; end; end; end. ''' ist kein gültiger Integerwert' sitze schon den ganzen tag an dem programm, und kann den Fehler nicht finden! Danke im vorraus, |
Re: Problem bei Pascalsche Dreieck
Stepp doch mal durch und schau, was in der entsprechenden Zelle steht, wenn der Fehler auftritt.
|
Re: Problem bei Pascalsche Dreieck
Ich bin mir jetzt nicht ganz sicher, wie die Indizierung beim StringGrid ist. Kommt da zuerst x- oder zu erst y-Koordinate? Wenn es y zuerst ist, musst du nur bei der Stelle, wo du deine Koordinaten vertauschen. Das Problem ist nämlich, dass du irgendwo versuchst, eine Zahl aus einer Zelle zu lesen, die leer ist.
|
Re: Problem bei Pascalsche Dreieck
oder mal so:
Delphi-Quellcode:
... btw ... so kann man es auch noch lesen ... ;-)
procedure TForm1.Button1Click(Sender: TObject);
var ACol, ARow ,x : integer; begin x := ( 0 ); // wofür denn die klammern? StringGrid1.Cells[ 17, 1 ] := IntToStr( 1 ); // würde ja auch := '1'; gehen ;-) for ACol := 1 to 34 do begin for ARow := 1 to 10 do begin x := x + StrToIntDef( StringGrid1.Cells[ ACol - 1, ARow - 1 ], 0 ) + StrToIntDef( StringGrid1.Cells[ ACol + 1, ARow - 1 ], 0 ); StringGrid1.Cells[ ACol, ARow ] := IntToStr( x ); end; end; end; end. cu Oliver [edit]ich hab dann mal die Variablen angepasst, wegen der besseren Unterscheidung, was Col und was Row[/edit] [edit2]aber das passt ja eigentlich gar nicht ...
Code:
denn du darfst ja nur die 'X'-Felder berechnen und die '.'-Felder bleiben leer![/edit2]
....X....
...X.X... ..X.X.X.. .X.X.X.X. X.X.X.X.X [edit3]oh graus ... du schreibst in zuerst in Zeile 1 (Cells[ 17, 1 ]), und dann berechnest du für jedes Feld der Zeile 1 einen Wert. Warum dann erst die Mühe und dort etwas eintragen? Muss das vielleicht in Zeile 0?[/edit3] |
Re: Problem bei Pascalsche Dreieck
Ja man will ja nur die X-felder haben.
Im endeffekt siehts so aus: .....1 ....1.1 ...1.2.1 ..1.3.3.1 .1.4.6.4.1 usw... hmm irgenwie kommtn totaler blödsinn raus! in der ersten(nichtgrauen) zeile steht neben dem ersten 1er ein 9er dann 46... Wenn man sich bei dem dreieck die 3te zeile anschaut: Da besteht der 1er aus 0 und 1, der 3er aus 1 und 2 usw. und was heisst strtointDEF?? |
Re: Problem bei Pascalsche Dreieck
Also für die Lösung der Aufgabe musst du:
1 Zeile löschen 1 Zeile ändern 1 Zeile hinzufügen dann ist fertig, du bist also nah dran. Kleiner Tip - überleg doch mal unter welchen Umständen du ein Ergebnis schreiben sollst ... ;-) cu Oliver |
Re: Problem bei Pascalsche Dreieck
meine güte ich zerbrech mir seit mittag den kopf drüber, bitte sag mir doch was nicht stimmt!
|
Re: Problem bei Pascalsche Dreieck
Das Problem ist, das es Dir nichts bringt, wenn Sir Rufo es Dir sagt. Weil letztlich musst Du es können und nicht Sir Rufo. Entsprechend klar das er Dir nur Tipps gibt und keine komplette Lösung präsentiert.
|
Re: Problem bei Pascalsche Dreieck
ja ber ich kann den fehler dann nachvollziehen und beim nächsten mal selber draufkommen.
Außerdem könnten es ja fehler sein, die ich aufgrund meines wissenstandes gar nicht erkennen kann, da hilft es niemandem wenn ich einen taqg meinse lebens vergeblich aufopfere. |
Re: Problem bei Pascalsche Dreieck
Zitat:
aber das sind die fakten, und aufs pferd haben wir dir schon geholfen, jetzt nur noch die füsse in die steigbügel. darum nochmal: stell dir die frage, wie der wert an einer beliebigen stelle berechnet wird und vergleich das ergebnis mit deinem code, ob der das auch so macht ... cu Oliver |
Re: Problem bei Pascalsche Dreieck
Zitat:
|
Re: Problem bei Pascalsche Dreieck
kann es ein, dass ich acol und arow verwechsle?
und um die 0er wegzubekommen, muss ich eine if abfrage vor der ausgabe machen. aber ich versteh zb. überhaupt nicht
Delphi-Quellcode:
was die 0er nach der ] sollen
x:= x + strtointdef(stringgrid1.cells[Acol - 1,Arow - 1 ] , 0)
+ strtointdef(stringgrid1.cells[Acol - 1 ,Arow + 1 ] , 0); |
Re: Problem bei Pascalsche Dreieck
Delphi-Quellcode:
StrToIntDef konvertiert den String S in eine Zahl. Falls S keine gültige Zahl ist, wird stattdessen der Integer Wert Default zurückgegeben. Die ", 0" bedeutet also soviel wie: "Gib mir den String in der Zelle als Zahl zurück, und wenn da nichts drin steht, bitte 0.".
function StrToIntDef(const S: string; Default: Integer): Integer;
|
Re: Problem bei Pascalsche Dreieck
Zitat:
StrToIntDef( 'Guten Tag aber auch mal', 0 ) ergibt 0 StrToIntDef( '10 kleine ...', 0 ) ergibt 0 cu Oliver |
Re: Problem bei Pascalsche Dreieck
Zitat:
Die anderen Sachen sind minimal. Nochmal kurz wie man das Dreieck berechnet: Man geht jede Spalte durch. In jeder Spalte schaut man sich nun jede Zelle an. Für jede Zelle berechnet man jetzt die Summe der Zellen links oberhalb und rechts oberhalb der aktuellen Zelle. Die Summe trägt man dann in die aktuelle Zelle ein. Und jetzt schau mal was Du dort machst ;). |
Re: Problem bei Pascalsche Dreieck
Zitat:
Code:
- Was für ein Wert kommt bei den Fragezeichen ( Feld[ 2, 3 ] und Feld[ 4, 3 ] ) hin?
..: 0 1 2 3 4 5 6
--+--------------- 0 : 1 1 : 1 1 2 : 1 2 1 3 : 1 ? ? 1 - Wie wird der errechnet? - Macht dein Programm das genauso? cu Oliver |
Re: Problem bei Pascalsche Dreieck
Entweder er hat es jetzt oder uns nicht mehr lieb ...
cu Oliver |
Re: Problem bei Pascalsche Dreieck
Ob wir mal in die anderen Delphi Foren schauen ob ers jetzt da versucht? Aber das wär schon böse :P. Dabei sind das - wenn er das IF einbaut - wirklich nur 2 winzige Kleinigkeiten.
|
Re: Problem bei Pascalsche Dreieck
Zitat:
Zitat:
|
Re: Problem bei Pascalsche Dreieck
ich weiß nicht ob es dir weiter hilft, aber sonnst kannst du hier nochmal schauen:
![]() |
Re: Problem bei Pascalsche Dreieck
Hier die gefixte Routine für alle Interessierten:
Delphi-Quellcode:
Die Fehler in der Routine des Threaderstellers sind folgende:
procedure TForm1.Button1Click(Sender: TObject);
var ACol, ARow, x : Integer; begin StringGrid1.Cells[ 17, 1 ] := '1'; for ARow := 1 to 10 do for ACol := 1 to 34 do begin x := StrToIntDef(StringGrid1.Cells[ACol - 1, ARow - 1], 0) + StrToIntDef(StringGrid1.Cells[ACol + 1, ARow - 1], 0); if x <> 0 then StringGrid1.Cells[ACol, ARow] := IntToStr(x); end; end; Er geht zuerst Spalte für Spalte durch und nicht Zeile für Zeile. Da sich die Berechnung darauf verlässt, das die Zeile davor komplett berechnet ist, müssen wir Zeile für Zeile arbeiten. Ausserdem berechnet sich x nicht durch "x + <Wert Links Oben> + <Wert Rechts Oben>" sondern nur durch "<Wert Rechts Oben> + <Wert Links Oben>". |
Re: Problem bei Pascalsche Dreieck
Hast Du Deinen Code auch überprüft?
Ich sehe da auf jeden Fall noch einen groben Fehler ... cu Oliver |
Re: Problem bei Pascalsche Dreieck
Jo. Welchen Fehler denn?
|
Re: Problem bei Pascalsche Dreieck
der fehler ist, dass man in der 2ten reihe anfangt und nicht in der ersten.
|
Re: Problem bei Pascalsche Dreieck
Ist in dem Fall unnötig, weil in Zeile 0 keine Werte vorhanden sind und somit niemals irgendwelche Werte in die Zeile 1 geschrieben werden (die 1 die dort platziert wird, wird also niemals geändert).
|
Re: Problem bei Pascalsche Dreieck
hinterher find ichs schad dass ich da gestern nicht draufgekommen bin.
naja ich hab auch schlecht wissen können was es mit dem Def auf sich hatte, danke jedenfalls! |
Re: Problem bei Pascalsche Dreieck
Zitat:
Und ausserdem ist dir der Unterschied zwischen StrToInt und StrToIntDef erklärt worden. Der eigentliche Fehler lag doch wohl darin, dass du a) den vorherigen wert mit dazuaddiert hattest ( x := x + ... ) b) du keine überprüfung gemacht hast, ob für das feld überhaupt eine berechnung erfolgen darf Das Argument "konnte ich doch gar nicht wissen" kann hier wohl nicht gelten. cu Oliver |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:04 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 by Thomas Breitkreuz