[Pascal] Kan geen exceptions raisen

Pagina: 1
Acties:
  • 114 views sinds 30-01-2008
  • Reageer

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Het lukt me niet om de Exception Handling aan de praat te krijgen.
Als voorbeeld de volgende code:

type Numeric_Error = Class(Exception);
begin
Readln (Massa);
Except
On Numeric_Error Do Writeln ('Invalid input');
end;

Bij compileren krijg ik de volgende foutmeldingen:
identifier Class not found
identifier Exception not found

Acties:
  • 0 Henk 'm!

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 11-09 17:45

Robtimus

me Robtimus no like you

Pascal is niet Delphi.

Pascal kent helemaal geen classes of exceptions op de manier die jij bedoelt. Delphi is in principe de object georienteerde versie van Pascal, en daar zit dit wel in. Je zult dus wss moeten overstappen van development tool.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
IceManX schreef op zaterdag 05 januari 2008 @ 16:39:
Pascal is niet Delphi.

Pascal kent helemaal geen classes of exceptions op de manier die jij bedoelt. Delphi is in principe de object georienteerde versie van Pascal, en daar zit dit wel in. Je zult dus wss moeten overstappen van development tool.
Volgens de Free Pascal Reference Guide (hoofdstuk 14)
http://www.freepascal.org/docs-html/ref/ref.html moet het wel mogelijk zijn.

Acties:
  • 0 Henk 'm!

  • zwippie
  • Registratie: Mei 2003
  • Niet online

zwippie

Electrons at work

In je code staat ook nergens een Try statement, zoals het in het voorbeeld in par 14.2 onderaan staat.

How much can you compute with the "ultimate laptop" with 1 kg of mass and 1 liter of volume? Answer: not more than 10^51 operations per second on not more than 10^32 bits.


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:22
Dit heeft niets met DTE te maken (het gaat nl. niet over problemen met je IDE ofzo), maar het gaat hier over programmeren; PRG dus.

-> PRG

Als je exceptions wilt afhandelen, dan zal je zowiezo een try block nodig hebben:
code:
1
2
3
4
5
6
7
try
  // Doe iets
except
  on E : EBliepException do begin
      // handel exceptie af
  end;
end;


Enneh, ik vind het vaag dat je in een exceptie class (want je class inherit van de Exception class) om user input gaat gaan vragen ?

En compilatie-fouten, die moet je, mits goed / begrijpend lezen van de compiler messages toch kunnen oplossen ?

[ Voor 36% gewijzigd door whoami op 05-01-2008 20:53 ]

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
whoami schreef op zaterdag 05 januari 2008 @ 20:50:
Dit heeft niets met DTE te maken (het gaat nl. niet over problemen met je IDE ofzo), maar het gaat hier over programmeren; PRG dus.

-> PRG

Als je exceptions wilt afhandelen, dan zal je zowiezo een try block nodig hebben:
code:
1
2
3
4
5
6
7
try
  // Doe iets
except
  on E : EBliepException do begin
      // handel exceptie af
  end;
end;


Enneh, ik vind het vaag dat je in een exceptie class (want je class inherit van de Exception class) om user input gaat gaan vragen ?

En compilatie-fouten, die moet je, mits goed / begrijpend lezen van de compiler messages toch kunnen oplossen ?
Ik heb het nu met de "Try" geprobeerd volgens:

type Numeric_Error = Class (Exception);
Begin
Try
Readln (Massa);
Except
On Numeric_Error do
begin
Writeln ('invalid input');
end;
end;

Hierop krijg ik de volgende foutmelding:

identifier Try not found
syntax error: ";" expected but "identifier Readln" found.

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 10:03

Creepy

Tactical Espionage Splatterer

Welke fpc opties gebruik je en kan je je complete code eens geven (en dan aub de code tags gebruiken). Want als dit al je code is dan snap ik dat je foutmeldingen krijgt.

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
De FPC Compiler options stonden op "Free Pascal Dialect".
Nadat ik deze veranderd had in "Object Pascal Extension On" werkte de exeption handling.
Ik zou je graag de complete code willen geven, maar wat zijn code tags en hoe krijg ik deze in het bericht.

Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 11:22
Verwijderd schreef op zondag 06 januari 2008 @ 16:21:
De FPC Compiler options stonden op "Free Pascal Dialect".
Nadat ik deze veranderd had in "Object Pascal Extension On" werkte de exeption handling.
Ik zou je graag de complete code willen geven, maar wat zijn code tags en hoe krijg ik deze in het bericht.
Leesvoer:
code tags
PRG Quickstart

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Heb de genoemde onderwerpen (code tags en PRG Quickstart ) doorgelezen.
Het is me nog niet duidelijk hoe de pascal code met code-tags hier te krijgen.
Volgens de tag code syntax zou het er als volgt uit komen te zien:
[code = pascal, 1, 4, auto.pas]

waarin:
1 = startnummer voor de lijn-nummering
4 = tabbreedte in aantal spaties
auto.pas = file naam van de code

Acties:
  • 0 Henk 'm!

  • JochemK
  • Registratie: Maart 2003
  • Laatst online: 30-08 13:53
heel goed, en dan plak je daar onder al je code, en dan sluit je dat af met [/code]

Verder denk ik dat je het concept class niet helemaal goed begrepen hebt, die readln(massa) hoort duidelijk niet thuis in je exception class. Ook je try...except blok hoort daar niet, dat hoort in je "main"

Succes met lezen!

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Delphi: auto.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
program auto (input,output);

uses sysutils;

const rho = 1.23; {luchtdichtheid in kg/m3}
      Cw = 0.3;
      A = 1.8; {oppervlakte in m2}
      Cr = 0.02; {rol weerstands coeficient}
      g = 9.81;
      Wielstraal = 0.3072; {meter voor 16 inch velgen}
      Rendem_Transm  = 0.9; { Rendement transmissie}
      Rendem_Motor  = 0.3; { Rendement motor}
      Ratio_Snelheid_Toerental = 1/60*(3000/120);  { 3000 toeren/min bij 120 km/h}

type angle = real; 
type Wind_type =
     record
         Windkracht : integer; {beaufort}
         Vw : real;   {absolute windsnelheid in m/sec}
         Vws : real;  {schijnbare windsnelheid in m/sec}
         Bw : angle;  {180 graden is tegenwind}
     end;

var Snelheid, Massa, Helling, P_Wielen, P_Motor,
    R_lucht, R_rol, R_helling, R_totaal,
    M_Wielen, M_motor : real;
    Wind : Wind_type;
    Valid_Input : boolean;

BEGIN
     Valid_Input := false;
     while Valid_Input = false do
     begin
        write ('Gewicht auto + inzittenden + bagage [kg]: ');
        Try
          readln (Massa);
          Valid_INput := true;
        Except On EInOutError Do Writeln ('invalid input');
        end;
     end;

     write ('Snelheid [km/h]: ');
     read (Snelheid);
     write ('Windkracht [Beaufort 0-8]: ');
     read (Wind.Windkracht);
     write ('Windrichting [180 graden is tegenwind] ');
     read (Wind.Bw);
     write ('Helling [%]: ');
     read (Helling);

    Snelheid := Snelheid * 10/36;

    case Wind.Windkracht of
        0 : Wind.Vw := 0.0;
        1 : Wind.Vw := 0.9;
        2 : Wind.Vw := 2.45;
        3 : Wind.Vw := 4.4;
        4 : Wind.Vw := 6.7;
        5 : Wind.Vw := 9.35;
        6 : Wind.Vw := 12.3;
        7 : Wind.Vw := 15.5;
        8 : Wind.Vw := 18.9;
        otherwise Wind.Vw := 0.0;
    end;

    Wind.Vws := Snelheid - Wind.Vw * cos(Wind.Bw);

    R_lucht :=
    0.5* rho * Cw * A * Wind.Vws * Wind.Vws;

    R_rol := Massa * g * Cr;

    R_helling := Massa * g * Helling/100;
    R_totaal := R_lucht + R_rol + R_helling;

    P_Wielen := R_totaal * Snelheid;

    P_Motor := P_wielen / Rendem_Transm;

    M_Wielen := R_totaal * Wielstraal;

    M_Motor := P_Motor / (2*pi* Snelheid*3.6 * Ratio_Snelheid_Toerental);

        writeln('Windsnelheid = ', Wind.Vw:2:1, ' m/sec');
        writeln('Windsnelheid = ', 3.6 * Wind.Vw:2:1, ' km/h');
        writeln('R_lucht      = ', R_lucht:2:1, ' Newton');
        writeln('R_rol        = ', R_rol:2:1, ' Newton');
        writeln('R_helling    = ', R_helling:2:1, ' Newton');
        writeln('R_totaal     = ', R_totaal:2:1, ' Newton');
        writeln('Vermogen wielen    = ', P_Wielen/1000:2:1, ' kWatt');
        writeln('Vermogen wielen    = ', P_Wielen/735.5:2:1, ' PK');
        writeln('Vermogen motor    = ', P_Motor/1000:2:1, ' kWatt');
        writeln('Vermogen motor    = ', P_Motor/735.5:2:1, ' PK');
        writeln('Koppel wielen = ', M_Wielen:2:1, ' Nm');
        writeln('Koppel motor = ', M_Motor:2:1, ' Nm');


END.
Pagina: 1