Autor |
Beitrag |
Brina*
Hält's aus hier
Beiträge: 6
|
Verfasst: Fr 05.09.08 17:00
Hallo Allerseits,
ich sags mal gleich vorweg, ich bin ziemlich schwach in Informatik und Programmierung, also ich hoffe, dass meine Frage/n nicht allzu dumm sind/ werden...
Also und zwar geht es um Folgendes:
Wir haben ein Rechenprogramm erstellt, wo wir schlichtweg ein Label haben, welches uns zufällig zwei Zahlen a und b, vorgibt mit der Rechenoperation "plus". Der Quelltext für den "Startbutton", welche die zufällige Ausgabe der Rechenaufgabe erzeugt sieht dann so aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| begin randomize a:=random(100)+1; b:=random(100)+1; label1.caption:= IntToStr(a)+'+'+IntToStr(b)+'='; end; |
Nun ist unsere Aufgabe zusätzliche eine zufällige Ausgabe der Rechenoperation, also anstelle von "+" zu erzeugen...Kann mir da Jemand helfen, wie das geht?
Hoffe, ihr versteht, was ich meine... :/
Liebe Grüße,
Brina*
Moderiert von Christian S.: Delphi-Tags hinzugefügt
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Fr 05.09.08 17:08
Hi,
weiß so richtig was du meinst, vlt so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.FormCreate(Sender: TObject); begin randomnize; end;
procedure TForm1.Button1Click(Sender: TObject); begin a:=random(100)+1; b:=random(100)+1; label1.caption:= IntToStr(a)+'*'+IntToStr(b)+'='; end; |
MfG Bergmann.
p.s: Randomize sollte man nur einmal aufrufen, alos steht es im FormCreate-Ereignis...
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Fr 05.09.08 17:31
Hallo und  in der Entwickler-Ecke,
Bei sowas kommen gleich bestimmt die Optimierer, wie man das am geschicktesten lösen kann, ich probiers mal einfach.
Es gibt ja vier verschiedene Grundrechenarten, +, #, *, :. Also macht man ein Random(4) dazu und wählt dann entsprechend das Zeichen aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| var c: Char; tmp: Integer; begin tmp := Random(4); case tmp of 0: c := '+'; 1: c := '-'; 2: c := '*'; else c := ':'; end; end; | Und das c musst du dann nur in den String einbauen. Aber alles wird hier nicht vorgerechnet. 
_________________ We are, we were and will not be.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 05.09.08 17:44
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Brina* 
Hält's aus hier
Beiträge: 6
|
Verfasst: Fr 05.09.08 17:54
Hallo ihr beiden und ersteinmal vielen Dank für eure Antworten!!!
Also BenBE ich muss sagen, dass ich glaube ich vieeel zu dümmlich bin, um hinter deinen Quelltext zu steigen  
Ich könnte deinen Quelltext nicht erklären, also was was bedeutet und für welche Funktion steht..oh man, sorry ich bin echt ziemlich...unwissend...
@Gausi
Also da steig ich wenigstens ein bisschen durch nur ein par Fragen hätte ich:
1. Was bdeutet tmp - Also ist das einfach eine variabel, die du festgelegt hast oder ist es eine bestimmte Funktion?
2. Was bedeutet "case tmp of" ? Dass er aus 0,1,2 oder ":" auswählen soll?
Wenn ja, warum ist randomize mit 4 Ziffern angegeben und es stehen schlussendlich nur 0,1,2 da?
Mhh komme mir echt blöd vor, aber ich will ja auch irgendwie dahinter steigen... :/
liebe Grüße und Danke nochmals,
Brina*
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Fr 05.09.08 17:59
Dass du den Beitrag von BenBe nicht verstanden hast macht nix, den darfst du getrost nicht verstehen
tmp ist eine Abkürzung für "Temporary" bzw. "Temporär", also vorrübegrehend, und wird gerne mal als "Hilfsvariable" benutzt. Natürlich hätte Gausi hier auch jeden anderen namen vergeben können, z.B. "Hilfsvariable" oder so.
Case unterscheidet wie von dir richtig geraten Fälle - und zwar kann Random(4) 4 Fälle erzeugen: 0,1,2,3 - wobei der letzte Fall in der Case-Fallunterscheidung durch das "Else" abgebildet wird (wenn tmp weder 0 noch 1 noch 2 ist - dann muss es eben 3 sein. Hätte man auch anders schreiben können).
Grüße,
Tilman
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Fr 05.09.08 18:04
Zur weiteren Erklärung, warum ich da "else" statt "3:" geschrieben habe: Als Mensch sieht man, dass tmp nur die Werte 0 bis 3 annehmen kann, der Compiler wahrscheinlich nicht. Der wird wahrscheinlich annehmen, dass möglicherweise keine der 4 Fälle auftritt, was dann dazu führen würde, dass der Variable c kein Wert zugewiesen wird. Und genau das würde der Compiler als Warnung ausspucken - daher else, was hier gleichbedeutend dazu ist.
Aber das kann dir auch der Lehrer erklären. Zumindest dann, wenn er BenBE's Lösung auf Anhieb durchblickt. 
_________________ We are, we were and will not be.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 05.09.08 18:04
Brina* hat folgendes geschrieben: | Hallo ihr beiden und ersteinmal vielen Dank für eure Antworten!!!
Also BenBE ich muss sagen, dass ich glaube ich vieeel zu dümmlich bin, um hinter deinen Quelltext zu steigen  
Ich könnte deinen Quelltext nicht erklären, also was was bedeutet und für welche Funktion steht..oh man, sorry ich bin echt ziemlich...unwissend...  |
Die Funktion Format erzeugt basierend auf einem vorgebenem Muster mit Platzhaltern und den dazugehörigen, einzusetzenden Werten, eine Zeichenkette. Ich weiß, das sieht mehr als kryptisch aus, und war hauptsächlich als Antwort auf Gausi's Ruf nach den Optimierern  gedacht.
Brina* hat folgendes geschrieben: | @Gausi
Also da steig ich wenigstens ein bisschen durch nur ein par Fragen hätte ich:
1. Was bdeutet tmp - Also ist das einfach eine variabel, die du festgelegt hast oder ist es eine bestimmte Funktion? |
Tmp steht für temporary, also temporär\zeitlich begrenzt. Ähnlich wie das Temp-Verzeichnis von Windows als Zwischenablage für Dateien zu verstehen ist, ist das einfach ein (gebräuchlicher) Name für eine Variable, die ein Zwischenergebnis enthält.
Brina* hat folgendes geschrieben: | Mhh komme mir echt blöd vor, aber ich will ja auch irgendwie dahinter steigen... :/
liebe Grüße und Danke nochmals,
Brina* |
Einfach Fragen, wo es klämmt, wir helfen schon
Den Rest hat Tilman ja schon erklärt, obwohl ...
Tilman hat folgendes geschrieben: | Dass du den Beitrag von BenBe nicht verstanden hast macht nix, den darfst du getrost nicht verstehen  |
@Tilman: Wie darf man das jetzt verstehen 
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Brina* 
Hält's aus hier
Beiträge: 6
|
Verfasst: Fr 05.09.08 18:10
Puhhh, ich bin ja froh, dass ich nicht gleich als hoffnungsloser Fall angesehen werde
Ich bemühe mich echt hinter all das zu steigen, aber es fällt mir unwahrscheinlich schwer...
Ähm mal eine Frage, wo stellt ihr das beim schreiben hier ein, dass als DelphiQuelltext so anzeigt?
Liebe Grüße,
Brina*
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 05.09.08 18:12
Ganz einfach <span class="inlineSyntax"><span class="codecomment">{PROTECTTAG95fe2f4470385c3b55d7d96c2882dc38}</span></span> um deinen Code herum platzieren 
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Fr 05.09.08 18:15
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
|
|
Brina* 
Hält's aus hier
Beiträge: 6
|
Verfasst: Fr 05.09.08 18:20
Dankeschöön :9
Also, ich gehe jetzt davon aus, dass dies der korrekte Quelltext wäre, mit zufälliger Rechenoperation und zufälligen Zahlen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20:
| ... var c:char; tmp:Integer;
begin randomize a:=random(100)+1; b:=randoom(100)+1; tmp:=random(4); case tmp of 0:c:='+'; 1:c:='-'; 2:c:='*'; else c:=':';
label1.caption:= InToStr(a)+tmp+IntToStr(b)+'=';
end; ... |
(var a und b habe ich bereits global deklariert!)
*vorsichtigGuck*
liebe Grüße,
Brina*
|
|
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Fr 05.09.08 18:22
@Gausi:
habs grad ausprobiert, die einzige warnung die kommt ist:
Quelltext 1:
| [Warnung] Unit1.pas(29): Variable 'i' ist möglicherweise nicht initialisiert worden |
also waäre für einen anfänger das vlt besser zu verstehen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| var Operator: Char; TMP: Integer; begin TMP := random(4); case TMP of 0: Operator := '+'; 1: Operator := '-'; 2: Operator := '*'; 3: Operator := '/'; else ShowMessage('Fehler beim zufälligen ermitteln des Operators.'); end; end; |
@Brina*: nich ganz. TMP ist bloß ne Zahl und nich der Operator. Der Operator wird ja oben mit dem Case-of ermittlet und dann in Operator (bzw. c) gespeichert, also musst du Operator (bzw. c) in den String einbauen.
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Gausi
      
Beiträge: 8548
Erhaltene Danke: 477
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Fr 05.09.08 18:25
_________________ We are, we were and will not be.
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Fr 05.09.08 18:27
Neben diversen anderen Rechtschreibfehlern, ist auch das randomize Fehl am Platz. Sollte nur einmal beim Programmstart aufgerufen werden.
Grüße,
Marc.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Fr 05.09.08 18:28
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Zuletzt bearbeitet von BenBE am Fr 05.09.08 18:31, insgesamt 1-mal bearbeitet
|
|
Brina* 
Hält's aus hier
Beiträge: 6
|
Verfasst: Fr 05.09.08 18:29
Achso okay! Vielen, vielan Dank euch allen! Hab mir den Quelltext + Erläuterungen jetzt aufgeschrieben, mal sehen, was meine Lehrerin dann dazu sagt und was sie uns vorgeschlagen hätte.
Ich hoffe ja, dass ich mich in das ganze Delphi noch hereinfitzel und irgendwann selbst auf solche Ideen komme.Meistens sitze ich vor den Aufgaben und habe keinen Plan, auch wenn ich es andersherum - also Quodes lesen, eigentlich kann, also das, was wir im Unterricht machen.
Liebe Grüße,
Brina*
EDIT: @ BenBE , ja, das mit dem end davor wusste ich nicht  Oder besser, ich wusste nicht, dass mit dem case of ein begin verbunden ist. Ich dachte, dass ich nur das end für die gesamte procedure des Buttons schreiben müsste
Aber jetzt bin ich schlauer diesbezüglich ;9 Danke nochmals!
Zuletzt bearbeitet von Brina* am Fr 05.09.08 18:32, insgesamt 1-mal bearbeitet
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: Fr 05.09.08 18:31
Und wenn man mit den begins und ends durcheinanderkommt ist es guter Stil diese mit Kommentaren zu versehen, als fortgeschrittener sowieso, aber als Anfänger auch sehr zu empfehlen:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure irgendwas; begin if bla then begin case tmp of 0: machwas; 1: machwasandres; else sonstwas; end; end; end; |
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
Zuletzt bearbeitet von Tilman am Fr 05.09.08 19:15, insgesamt 4-mal bearbeitet
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Fr 05.09.08 18:31
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: Fr 05.09.08 18:32
|
|
|