AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Lazarus-Zahlenraten-Programm will nicht funktionieren
Thema durchsuchen
Ansicht
Themen-Optionen

Lazarus-Zahlenraten-Programm will nicht funktionieren

Ein Thema von Citaro · begonnen am 2. Apr 2014 · letzter Beitrag vom 3. Apr 2014
Antwort Antwort
Benutzerbild von Citaro
Citaro

Registriert seit: 2. Apr 2014
5 Beiträge
 
#1

Lazarus-Zahlenraten-Programm will nicht funktionieren

  Alt 2. Apr 2014, 18:30
Hallo und guten Abend,

ich bin dabei ein Programm zum Zahlenraten zu programmieren und das mit Lazarus 1.0.14 .

Das Programm soll folgende Eigenschaften besitzen: der Rechner bzw. das Programm erzeugt selbstständig eine Zufallszahl im Bereich von 1 bis 100, der Nutzer hat soll diese zufällig erdachte Zahl erraten, nach jedem Versuch wird die Eingabe vom Programm mit „Die Zahl ist zu groß!“, „Die Zahl ist zu klein!“ oder mit „Das war richtig !“ beantwortet. Nach dem Erraten einer Zahl hat der Nutzer die Möglichkeit, eine neue Zufallszahl zu erzeugen.

Leider hängt sich Lazarus immer wieder an verschiedenen Zeilen auf, darunter auch an der Lrs-Datei.

http://img5.fotos-hochladen.net/thum...65nu_thumb.jpg

Der vollständige Quellcode sieht bisher so aus.

Code:
unit Zahlenraten;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls;

type
TForm1 = class(TForm)
      Panel1: TPanel;
            ErgebnisPanel: TPanel;
                         Label1: TLabel;
                                        NeuButton: TBitBtn;
                                                           RatenButton: TBitBtn;
                                                                                AbbruchButton: TBitBtn;
                                                                                                       EingabeEdit: TEdit;
procedure AbbruchButtonClick(Sender: TObject);
             procedure FormCreate(Sender: TObject);
               procedure RatenButtonClick(Sender: TObject);
                  procedure NeuButtonClick(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var
Form1: TForm1;

implementation
initialization
{$I zahlenraten.lrs}
var Zufallszahl : integer;
procedure TForm1.AbbruchButtonClick(Sender: TObject);

({$R *.DFM})

var Zufallszahl: integer;

procedure TForm1.AbbruchButtonClick(Sender: TObject);
begin
Close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Panel1.Caption:='Zahlenraten';
Label1.Caption:='Bitte wählen Sie eine Zahl von 1 bis 100:';
Randomize;
Zufallszahl:=Random(100)+1;
end;



procedure TForm1.RatenButtonClick(Sender: TObject);
var Eingabe : Integer;
begin
Eingabe:=StrToInt(EingabeEdit.Text);
if Eingabe=Zufallszahl
then ErgebnisPanel.Caption:=' Das war richtig! '
else if Eingabe<Zufallszahl
then ErgebnisPanel.Caption:='Die Zahl ist zu klein!'
else ErgebnisPanel.Caption:='Die Zahl ist zu groß!';
EingabeEdit.SetFocus;
end;



end.

Ob mir jemand helfen kann? ^^' Ich würde mich sehr freuen.

Schönen Abend noch!

- Citaro

Geändert von Citaro ( 2. Apr 2014 um 18:30 Uhr) Grund: Stichworte vergessen
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.618 Beiträge
 
Delphi 12 Athens
 
#2

AW: Lazarus-Zahlenraten-Programm will nicht funktionieren

  Alt 2. Apr 2014, 19:10

Eingabe:=StrToInt(EingabeEdit.Text);
Hier willst du einen String zu einer Zahl wandeln. Wenn aber keine Zahl eingegeben wird, sondern ein Buchstabe o.ä.? Wie fängst du den Fall ab?
In Delphi gibt es TryStrToInt. Was in Lazarus geht, weiß ich nicht.

BTW: Was ist eine LRS Datei?
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Benutzerbild von Citaro
Citaro

Registriert seit: 2. Apr 2014
5 Beiträge
 
#3

AW: Lazarus-Zahlenraten-Programm will nicht funktionieren

  Alt 2. Apr 2014, 19:25
Also der Befehl dürfte schon stimmen.
StrToInt ist für das Auslesen aus dem Editierfeld und das Umwandeln in eine Integer-Zahl bei Lazarus üblich.

Zitat:
BTW: Was ist eine LRS Datei?
Zitat von Lazarus-Wiki:
Nun unterstützt Lazarus jedoch keine "normalen" Ressourcendateien (*.res), weil sie Windows spezifisch sind. Wenn man jetzt trotzdem Ressourcen verwenden möchte, muss man sie mit lazres neu erstellen. Lazres ist ein Werkzeug, dass sich im tools Verzeichnis des Lazarus-Installationsordners befindet (ggf. muss man es erst compilieren).



Damit können sie dann Lazarus Ressourcendateien (*.lrs) compilieren.
  Mit Zitat antworten Zitat
TForm1

Registriert seit: 11. Jan 2014
128 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Lazarus-Zahlenraten-Programm will nicht funktionieren

  Alt 2. Apr 2014, 20:05
An welchen Stellen hängt es denn genau? Ich denke mal, ohne diese Information kann man den Fehler nicht lösen.
In Delphi gibt es TryStrToInt. Was in Lazarus geht, weiß ich nicht.
Das mit dem StrToInt() ist ja nur dann falsch, wenn irgendjemand so schlau ist, einen Buchstaben oder irgend ein Sonderzeichen zu Raten. Da dies aber nicht der Normalfall sein wird, ist dies nicht der Ursprung des Problems. (außer es geht darum das Programm Idiotensicher zu machen)

PS: Nur eine Anmerkung, auf dem Foto, das Du eingestellt hast, sieht man so relativ gar nichts und könntest Du den Quellcode noch mal richtig formatieren, dann wird der auch übersichtlicher
Der Fehler sitzt immer vor dem Computer...

Geändert von TForm1 ( 2. Apr 2014 um 20:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Citaro
Citaro

Registriert seit: 2. Apr 2014
5 Beiträge
 
#5

AW: Lazarus-Zahlenraten-Programm will nicht funktionieren

  Alt 2. Apr 2014, 21:20
Nee, idiotensicher muss es eigentlich nicht sein. Aber ein interessanter Gedanke, dieses Problem mit der Eingabe.

Weshalb sieht man auf dem Foto denn nichts?


Ich habe das mal direkt als Rar verpackt. Wenn du oder jemand anderes sich kurz Zeit nehmen würde und auch noch Lazarus auf dem Rechner hat? Dann wäre das natürlich spitze.


http://www.file-upload.net/download-...raten.rar.html
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#6

AW: Lazarus-Zahlenraten-Programm will nicht funktionieren

  Alt 2. Apr 2014, 21:27
Weshalb sieht man auf dem Foto denn nichts?
Weil du die URL auf das Thumbnail gepostet hast

Bilder und ZIPs mit Code solltest du hier einfach an den Beitrag anhängen. Dann sind sie auch später noch da.

//Edit: First!!111

Geändert von BUG ( 2. Apr 2014 um 21:30 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: Lazarus-Zahlenraten-Programm will nicht funktionieren

  Alt 2. Apr 2014, 21:29
Weshalb sieht man auf dem Foto denn nichts?
Du hast den falschen Link gepostet. Der Link zeigt auf das "Thumbnail". Das ist eine verkleinerte darstellung der orig. Bilddatei. Diese dient nur um sie schneller in Listen usw. anzuzeigen, damit dort nicht das eigentliche Bild (was viel größer ist) geladen werden muss und das dann massig an Zeit und Downstream beansprucht.
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Benutzerbild von JamesTKirk
JamesTKirk

Registriert seit: 9. Sep 2004
Ort: München
604 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Lazarus-Zahlenraten-Programm will nicht funktionieren

  Alt 3. Apr 2014, 06:32
Anmerkungen im Quelltext.

Delphi-Quellcode:
unit Zahlenraten;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, ExtCtrls;

type
TForm1 = class(TForm)
      Panel1: TPanel;
            ErgebnisPanel: TPanel;
                         Label1: TLabel;
                                        NeuButton: TBitBtn;
                                                           RatenButton: TBitBtn;
                                                                                AbbruchButton: TBitBtn;
                                                                                                       EingabeEdit: TEdit;
procedure AbbruchButtonClick(Sender: TObject);
             procedure FormCreate(Sender: TObject);
               procedure RatenButtonClick(Sender: TObject);
                  procedure NeuButtonClick(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var
Form1: TForm1;

implementation
initialization // huh? wo kommt das denn her? diese beiden...
{$I zahlenraten.lrs} // ... Zeilen sollten ganz am Ende vorm "end." sein
var Zufallszahl : integer;
procedure TForm1.AbbruchButtonClick(Sender: TObject);
// warum hast du hier nochmal TForm1.AbbruchButtonClick? Für Methoden brauchst du keine Forwarddeklarationen, da diese bereits im Interface-Teil deklariert sind

({$R *.DFM}) // "(...)" ist nicht die richtige Variante, um Compiler-Direktiven zu deaktivieren. Wenn dann wäre es "{.$R *.DFM}", aber siehe unten

var Zufallszahl: integer; // warum ist "Zufallszahl" zweimal angegeben? Es darf nur einmal vorkommen; außerdem wäre es besser die Variable innerhalb der Klasse TForm1 (zum Beispiel in der private-Section) zu deklarieren.

procedure TForm1.AbbruchButtonClick(Sender: TObject);
begin
Close;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
// Die Captions beim Start kannst du auch im Objektinspektor angeben
Panel1.Caption:='Zahlenraten';
Label1.Caption:='Bitte wählen Sie eine Zahl von 1 bis 100:';
Randomize;
Zufallszahl:=Random(100)+1;
end;



procedure TForm1.RatenButtonClick(Sender: TObject);
var Eingabe : Integer;
begin
// Eventuell besser StrToIntDef oder TryStrToInt verwenden; andernfalls kommt es zu ner Exception, wenn EingabeEdit.Text keine Zahl enthält. Alternativ ein MaskEdit verwenden, welches nur Zahleneingaben erlaubt, aber das führt eventuell zu weit...
Eingabe:=StrToInt(EingabeEdit.Text);
if Eingabe=Zufallszahl
then ErgebnisPanel.Caption:=' Das war richtig! '
else if Eingabe<Zufallszahl
then ErgebnisPanel.Caption:='Die Zahl ist zu klein!'
else ErgebnisPanel.Caption:='Die Zahl ist zu groß!';
EingabeEdit.SetFocus;
end;



end.
Bezüglich DFM und LRS: was ist denn bei dir unter Projekt => Projekteinstellungen => Ressourcentyp des Projekts eingestellt? Ich empfehle dir FPC-Ressourcen. Die Verwendung von LRS-Dateien ist seit ich glaub Lazarus 0.9.26 veraltet. Dann solltest du allerdings die DFM-Datei von Lazarus umwandeln lassen, dazu unter Werkzeuge den Menüpunkt "DFM- in LFM-Datei umwandeln" auswählen. Dann die Direktive {$R *.DFM} wieder aktivieren und die Dateiendung auf LFM ändern.

Das sollte hoffentlich etwas weiter helfen.

Gruß,
Sven
Sven
[Free Pascal Compiler Entwickler]
this post is printed on 100% recycled electrons
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz