Frage von wedck, 62

Was habe ich falsch gemacht (Pascal)?

Der Code ist objektorientiert. Das heißt, dass z.B durch das Anklicken eines Objekts eine prozedur aufgerufen wird.

Code:

unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  Spin, ActnList, ExtCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    t: TEdit;
    Lohn: TLabeledEdit;
    Ums: TLabeledEdit;
    Gew: TLabeledEdit;
    StWe: TComboBox;
    StS: TComboBox;
    StKar: TComboBox;
    StKa: TComboBox;
    StKu: TComboBox;
    StZu: TComboBox;
    We: TSpinEdit;
    SText1: TStaticText;
    SText2: TStaticText;
    SText3: TStaticText;
    SText4: TStaticText;
    SText5: TStaticText;
    SText6: TStaticText;
    S: TSpinEdit;
    Kar: TSpinEdit;
    Zu: TSpinEdit;
    Ku: TSpinEdit;
    Ka: TSpinEdit;
    procedure Go(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { private declarations }
  public
    procedure Weizen;
    procedure Samen;
    procedure Kartoffeln;
    procedure Zuckerrohr;
    procedure Kuerbisse;
    procedure Kakao;
  public
    var
     Umsatz: integer;
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
begin

end;

procedure TForm1.Go(Sender: TObject);
begin
  Weizen;
  Samen;
  Kartoffeln;
  Zuckerrohr;
  Kuerbisse;
  Kakao;
end;


procedure TForm1.Weizen;
var w: integer;
begin
  if StWe.Text = 'Stacks'
  Then
     w:= We.Value*64;
  Else
     w:= We.Value;
  Umsatz:= Umsatz + w*(30/64);
end;

procedure TForm1.Samen;
var sa: integer;
begin
  if StWe.Text = 'Stacks'
  Then
     sa:= We.Value*64;
  Else
     sa:= We.Value;
  Umsatz:= Umsatz + sa*(30/64);
end;

procedure TForm1.Kartoffeln;
var k: integer;
begin
  if StWe.Text = 'Stacks'
  Then
     k:= We.Value*64;
  Else
     k:= We.Value;
  Umsatz:= Umsatz + k*(30/64);
end;

procedure TForm1.Zuckerrohr;
var z: integer;
begin
  if StWe.Text = 'Stacks'
  Then
     z:= We.Value*64;
  Else
     z:= We.Value;
  Umsatz:= Umsatz + z*(30/64);
end;

procedure TForm1.Kuerbisse;
var kue: integer;
begin
  if StWe.Text = 'Stacks'
  Then
     kue:= We.Value*64;
  Else
     kue:= We.Value;
  Umsatz:= Umsatz + kue*(30/64);
end;

procedure TForm1.Kakao;
var kak: integer;
begin
  if StWe.Text = 'Stacks'
  Then
     kak:= We.Value*64;
  Else
     kak:= We.Value;
  Umsatz:= Umsatz + kak*(30/64);
end;

end.
Antwort
von DataJockey, 9

Was wirft der Compiler denn als Fehler raus?

Auf den ersten Blick sehe ich nur, dass du hinter den Anweisungen des if teils ein Semikolon schreibst. ...ist laut Standard Pascal nicht erlaubt.

Antwort
von psydelis, 31

Ich sehe zwar bei jeder Prozedur ein begin und end, aber ganz unten, wo dann mal ein Programmchen kommen sollte nur ein end.

Wo ist der Anfang? Und wo der Programmcode?

Irgendwo müssen Deine Prozeduren doch aufgerufen werden!

Außerdem ist das hier kaum die richtige Plattform für Deine Frage.
Probiers mal irgendwo, wo sich Pascal-Interssierte rumtreiben, z.B da:

http://forum.lazarus.freepascal.org/

Es wäre für die Jungs (und Mädels) da sicher auch ganz hilfreich zu wissen, mit welchem Pascal Du arbeitest und was Dein Prog leisten soll!

Kommentar von psydelis ,

Sorry ist logischerweise Freepascal. Habe das objfpc oben überlesen.

Kommentar von wedck ,

Das end. am Ende ist das Programmende. Ist bei Free Pascal üblich.

Aufruf passiert dort, wo ein Button gedrückt wird:

procedure TForm1.Go(Sender: TObject);
begin
Weizen;
Samen;
Kartoffeln;
Zuckerrohr;
Kuerbisse;
Kakao;
end;
Kommentar von psydelis ,

Heisst public unter FreePascal nicht interface?

Und muss das zwei mal angegeben werden?

Keine passende Antwort gefunden?

Fragen Sie die Community