For Schleifen Delphi->Lazarus

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
SKe
Beiträge: 3
Registriert: Mi 8. Okt 2008, 17:28
Wohnort: Luxemburg

For Schleifen Delphi->Lazarus

Beitrag von SKe »

Hallo,
für die Schule muss ich ein Programm entwickeln, das eine Faktorielle enthält. Doch nun mein Problem. Da wir vorher immer mit Delphi entwickelt haben und jetzt Lazarus haben, weiss ich nicht, wie man eine for-Schleife in Lazarus schreibt.

Code: Alles auswählen

unit LaFactorielleDUnNombreU;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls;
 
type
 
  { TForm1 }
 
  TForm1 = class(TForm)
    btnClickCalculer: TButton;
    edtEnter: TEdit;
    lblSomme: TLabel;
    lblligne1: TLabel;
    procedure Calculer(Sender: TObject);
 
  private
    { private declarations }
  public
    { public declarations }
  end; 
 
var
  Form1: TForm1; 
 
implementation
 
{ TForm1 }
 
 
 
procedure TForm1.Calculer(Sender: TObject);
var A,RES,I:real;
begin
   A:=strtofloat(edtEnter.Text);
 
   if A >= 0 then
     begin
       RES:=1;
       for I:=1 to A do
         begin
           RES:=RES*I
         end;
       lblSomme.Caption:=floattostr(RES);
     end;
end;
 
initialization
 
{$I LaFactorielleDUnNombreU.lrs}
 
end.


Als Fehlermeldung bekomme ich folgendes:

LaFactorielleDUnNombreU.pas(44,12) Error: Ordinal expression expected
LaFactorielleDUnNombreU.pas(58) Fatal: There were 1 errors compiling module, stopping

Könnte mir vielleicht jemand weiterhelfen, da ich jetzt schon zig mal gegoogelt habe und finde keine Antwort auf meine Frage!!! :( :(

Ich hoffe, hier kann mir geholfen werden!!!!

Mit den grössten Hoffnungen
Kevin
Zuletzt geändert von monta am Mi 8. Okt 2008, 21:07, insgesamt 1-mal geändert.
Grund: Bitte Codetags selbst setzen.
mfg Kevin

Jagged
Beiträge: 20
Registriert: So 21. Okt 2007, 11:05

Re: For Schleifen Delphi->Lazarus

Beitrag von Jagged »

Hallo Kevin,


der von Dir erstellte Code müsste gehen wenn du aus A und I einen Integer machst.


Gruß,
Jagged.

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: For Schleifen Delphi->Lazarus

Beitrag von Euklid »

Hallo SKe,

for-Schleifen funktionieren mit Lazarus genauso wie mit Delphi. Gibt also keinen Unterschied. In deinem Sourcecode gibt es aber einen Fehler:

Code: Alles auswählen

var A,RES,I:real;
l ist der Zähler deiner for-Schleife - er darf also nicht vom Typ real sein. Verwende besser den Typ integer für l:

Code: Alles auswählen

var RES:real;
    A,l:integer;
Nun noch eine Bitte an dich: Verwende für Sourecode bitte den Highlighter, den du beim Erstellen einer Antwort einstellen kannst.

Viele Grüße, Euklid

SKe
Beiträge: 3
Registriert: Mi 8. Okt 2008, 17:28
Wohnort: Luxemburg

Re: For Schleifen Delphi->Lazarus

Beitrag von SKe »

Jagged hat geschrieben:Hallo Kevin,


der von Dir erstellte Code müsste gehen wenn du aus A und I einen Integer machst.


Gruß,
Jagged.
Hallo Jagged, wenn ich aus A und I einen Integer mache, bekomme ich folgende Fehlermeldung:

LaFactorielleDUnNombreU.pas(40,7) Error: Incompatible types: got "Extended" expected "LongInt"
LaFactorielleDUnNombreU.pas(59) Fatal: There were 1 errors compiling module, stopping

Danke für die schnelle Antwort!!

mfg Kevin
mfg Kevin

Jagged
Beiträge: 20
Registriert: So 21. Okt 2007, 11:05

Re: For Schleifen Delphi->Lazarus

Beitrag von Jagged »

das liegt sehr wahrscheinlich daran:

Code: Alles auswählen

A:=strtofloat(edtEnter.Text);
Du könntest wenn es sich bei edtEnter.Text um einen Real Wert handelt diesen mithilfe von Round runden.

Code: Alles auswählen

A := Round(strtofloat(edtEnter.Text));

SKe
Beiträge: 3
Registriert: Mi 8. Okt 2008, 17:28
Wohnort: Luxemburg

Re: For Schleifen Delphi->Lazarus

Beitrag von SKe »

Jagged hat geschrieben:das liegt sehr wahrscheinlich daran:

Code: Alles auswählen

 
A:=strtofloat(edtEnter.Text);
 
Du könntest wenn es sich bei edtEnter.Text um einen Real Wert handelt diesen mithilfe von Round runden.

Code: Alles auswählen

 
A := Round(strtofloat(edtEnter.Text));
 
:D :D :D Mit dem Round funktioniert es!!!
:D :D :D Danke!!
(Jetzt sass ich fast 1 Stunde im Internet nur diese for-Schleife herauszufinden, jetzt ungefähr 10 Minuten nach meinem Post habe ich sie schon(die Aufgabe)!!!)
:wink: DANKE AN ALLE!!
:wink: IHR SEID DIE BESTEN!! :wink:
In übermütiger Freude und mit freundlichen Grüssen
Kevin
mfg Kevin

Antworten