Fehlermeldung Pascal

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
hannah
Beiträge: 3
Registriert: Mo 12. Sep 2022, 19:45

Fehlermeldung Pascal

Beitrag von hannah »

Hallo liebe Forum-Teilnehmer,

warum bekomme ich hier für die Funktionszeile :mrgreen: folgende Fehlermeldung?
Kochrezept17.pas(39,12) Fatal: Syntax error, ";" expected but "identifier ISINTEGER" found

Code: Alles auswählen

program Kochrezept (input, output);

const
FELDGROESSE1 = 100;
const digits = ['0'..'9'];

type
tIndex = 1..FELDGROESSE1;
tZahlenfeld1 = array [tIndex] of integer;
tZahlenfeld2 = array [tIndex] of real;
tZahlenfeld3 = array [tIndex] of string;

var
i : tIndex;
Anzahl,
Anzahl2,
Zahl : integer;
AnzahlString : string;
f: real;
Gramm : tZahlenfeld1;
Grammneu : tZahlenfeld2;
Zutaten : tZahlenfeld3;
result : boolean;

begin
  writeln('Geben Sie die Personenanzahl Ihres Rezeptes an. ');
  readln(AnzahlString);
  writeln('Geben Sie die Anzahl ihrer Zutaten an. ');
  readln(Zahl);
 
  for i := 1 to Zahl do
  begin
   writeln('Geben Sie die Menge in Gramm ein.');
   readln(Gramm[i]);
   writeln('Geben Sie die Zutaten ein. ');
   readln(Zutaten[i]);
  end;
   
[b]  function IsInteger(AnzahlString: string): boolean; inline;[/b] :mrgreen: 
  var
  c: char;
  begin
   Result := AnzahlString.length > 0;
   for c in Anzahlstring do
   if not (c in ['0'..'9']) then
     result := False;
  end;
Über eine Antwort würde ich mich freuen,
Gruß Hannah
Zuletzt geändert von m.fuchs am Di 13. Sep 2022, 08:18, insgesamt 1-mal geändert.
Grund: Highlighther hinzugefügt

wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Fehlermeldung Pascal

Beitrag von wp_xyz »

Fällt dir auf, dass der Code in deinem Post bei der schließenden Klammer nach "readLn(Gramm)" plötzlich kursiv wird? Das liegt daran, dass nach Gramm ein Index "[ i]" folgt, und wenn das "i" nicht wie von mir nach einem Space geschrieben ist, sondern gleich nach der Klammer folgt, interpretiert die Forum-Software das so, dass der folgende Text kursiv gesetzt wird. Du kannst das vermeiden, indem du den Code-Block zwischen [ code]...[/ code] Tags setzt; am einfachsten markiertst du den ganzen Code-Teil und klickst über dem Editor-Feld auf den "</>" Button. Damit wird für uns auch der Code leichter lesbar.

Nun zu deinem Problem: Du bettest mitten in den Code der Hauptroutine eine Unterfunktion IsInteger ein. Das ist in Pascal nicht erlaubt. Verschiebe diesen Teil vor das "begin". Und denke daran, dass die letzte Anweisung ein "end" mit folgendem Punkt sein muss.

Die folgende Variante deines Codes wird vom Compiler akzeptiert. Auf dieser Basis kannst du weitermachen:

Code: Alles auswählen

program Kochrezept (input, output);

const
  FELDGROESSE1 = 100;
const
  digits = ['0'..'9'];

type
  tIndex = 1..FELDGROESSE1;
  tZahlenfeld1 = array [tIndex] of integer;
  tZahlenfeld2 = array [tIndex] of real;
  tZahlenfeld3 = array [tIndex] of string;

var
  i : tIndex;
  Anzahl,
  Anzahl2,
  Zahl : integer;
  AnzahlString : string;
  f: real;
  Gramm : tZahlenfeld1;
  Grammneu : tZahlenfeld2;
  Zutaten : tZahlenfeld3;
  result : boolean;

function IsInteger(AnzahlString: string): boolean; inline;
var
  c: char;
begin
  Result := Length(AnzahlString) > 0;
  for c in Anzahlstring do
    if not (c in ['0'..'9']) then
      Result := False;
end;

begin
  writeln('Geben Sie die Personenanzahl Ihres Rezeptes an. ');
  readln(AnzahlString);
  writeln('Geben Sie die Anzahl ihrer Zutaten an. ');
  readln(Zahl);

  for i := 1 to Zahl do
  begin
    writeln('Geben Sie die Menge in Gramm ein.');
    readln(Gramm[i]);
    writeln('Geben Sie die Zutaten ein. ');
    readln(Zutaten[i]);
  end;
end.

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1435
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: Fehlermeldung Pascal

Beitrag von fliegermichl »

Wobei man noch anmerken könnte, daß IsInteger auch einfacher mit val gemacht werden kann.

Code: Alles auswählen

function IsInteger(AnzahlString : string) : boolean;
var e, i : integer;
begin
 val(AnzahlString, i, e);
 Result := e = 0;
end;

Antworten