Welcher Fehler?

Tutorials.at
Verfügbare Informationen zu "Welcher Fehler?"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: Kevins-X - dani93 - Moritz - Xin
  • Forum: Tutorials.at
  • Forenbeschreibung: Programmierforum
  • aus dem Unterforum: Pascal
  • Antworten: 27
  • Forum gestartet am: Mittwoch 19.04.2006
  • Sprache: deutsch
  • Link zum Originaltopic: Welcher Fehler?
  • Letzte Antwort: vor 15 Jahren, 11 Monaten, 15 Tagen, 38 Minuten
  • Alle Beiträge und Antworten zu "Welcher Fehler?"

    Re: Welcher Fehler?

    Kevins-X - 06.05.2008, 15:55

    Welcher Fehler?
    Hallo,
    ich habe gerade erst vor kurzem angefangen mich mit PASCAL zu beschäftigen. Ich habe schon auf endlos vielen Seiten im Internet gesucht aber keine Antwort auf meine Frage bekommen.

    Der Code:

    PROGRAM Kreisflaeche;
    USES Crt;
    CONST Pi = 3.14159265358;
    VAR Ergebnis, Radius, Meinung: Extended;
    BEGIN
    Repeat
    WriteLn ('Programm zur Berechnung der Kreisflaeche');
    Write ('Geben Sie den Kreisradius ein:');
    ReadLn (Radius);
    Ergebnis := Radius * Radius * Pi;
    TextColor (White);
    WriteLn ('Der Umfang des Kreises beträgt: ', Ergebnis);
    Delay(1000);
    WriteLn;
    WriteLn('Nochmal?');
    WriteLn('(J)a/(N)ein');
    ReadLn (Meinung);
    If Meinung= 'J' then GotoXY(5,1);
    If Meinung= 'N' then exit;
    End.

    Wenn ich es zu einer .exe machen will, steht dort dass bei den Zeilen mit "if" bei "then" ein Fehler ist.
    Ich möchte bewirken, dass wenn das Programm zu Ende ist das es fragt ob man nochmal möchte!

    Was mache ich falsch?



    Re: Welcher Fehler?

    dani93 - 06.05.2008, 16:02


    Ein Fehler? Gehts bitte ein bisschen genauer?

    Ich bin kein Pascal Programmierer, aber in C verwendet man für sowas nicht den Zuweisungsoperator =, sondern den Vergleichsoperator ==. Ich weiß nicht ob dir das was hilft...
    Tipp: Du solltest auch j und n abfragen, falls der Benutzer kleine Buchstaben eingibt.



    Re: Welcher Fehler?

    Kevins-X - 06.05.2008, 16:08

    was
    ich weiß lieder nicht was ein Operator ist.....
    Wie? Muss ich das kleine "J" und das kleine "N" auch abfragen?
    Ich dachte das ist egal...



    Re: Welcher Fehler?

    dani93 - 06.05.2008, 16:12


    Operatorne sind zeichen wie +, -, /, *, =. Sie dienen zum Ausführen von Rechnungen. Nur in Programmiersprachen sehen sie meist ein bisschen anders aus wie im "hausgebrauch".

    Du "MUSST" sie nicht abfragen, ich meine nur, dass es Vorteilhaft wäre.



    Re: Welcher Fehler?

    Moritz - 06.05.2008, 16:20


    Der Vergleichsoperator (=) ist schon korrekt, aber du definierst Meinung hier als Extendet-Variable und das ist in jedem Fall inkorrekt. Der Datentyp dafür ist char, denn extendet speichert nur Zahlen. Ausserdem Positioniert die Anweisung gotoxy nur den Cursor, nicht den Programmzeiger. Dazu musst du ein Label definieren. Siehe dazu hier in dem Forum den Artikel zu "goto" (NICHT "gotoxy")

    Richtig müsste es heissen:


    {==============================================}


    PROGRAM Kreisflaeche;
    USES Crt;
    CONST Pi = 3.14159265358;
    VAR Ergebnis, Radius: Extended; var Meinung: char;

    label anfang;
    label Abfrage;
    BEGIN
    //DAS REPEAT MUSS WEG!!

    anfang:clrscr;
    WriteLn ('Programm zur Berechnung der Kreisflaeche');
    Write ('Geben Sie den Kreisradius ein:');
    ReadLn (Radius);
    Ergebnis := Radius * Radius * Pi;
    TextColor (White);
    WriteLn ('Der Umfang des Kreises beträgt: ', Ergebnis);
    Delay(1000);
    WriteLn;

    Abfrage: WriteLn('Nochmal?');
    WriteLn('(J)a/(N)ein');
    Meinung:=readkey;
    If (Meinung= 'J') or (Meinung='j')then Goto anfang
    If (Meinung= 'N') or (Meinung='n')then exit;
    If (Meinung<>'j') and (Meinung<>'n') and (Meinung<>'J') and (Meinung<>'N') then
    begin
    clrscr;
    goto Abfrage ;
    end;

    End.

    An dieser Stelle will ich nun auch nochmal darauf hinweisen, dass
    Code:
    goto

    SEHR SCHLECHTER Programmierstiel ist!!!



    Re: Welcher Fehler?

    dani93 - 06.05.2008, 16:22


    Heißt das er hat einfach den falschen Datentyp genommen?



    Re: Welcher Fehler?

    Xin - 06.05.2008, 16:25

    Re: Welcher Fehler?
    Kevins-X hat folgendes geschrieben: Hallo,
    ich habe gerade erst vor kurzem angefangen mich mit PASCAL zu beschäftigen. Ich habe schon auf endlos vielen Seiten im Internet gesucht aber keine Antwort auf meine Frage bekommen.
    Dann probieren wir es mal... obwohl meine Pascalzeit auch schon wieder etwa 13 Jahre vorbei ist.

    Kevins-X hat folgendes geschrieben: Der Code:
    ...könnte in Code-Tags stehen (oben, direkt unter dem Titel)
    Außerdem hilft einrücken beim Lesen. ^^

    Kevins-X hat folgendes geschrieben: Code:
    PROGRAM Kreisflaeche;
    USES Crt;
    CONST Pi = 3.14159265358;
    VAR Ergebnis, Radius, Meinung: Extended;
    BEGIN
      Repeat
        WriteLn ('Programm zur Berechnung der Kreisflaeche');
        Write ('Geben Sie den Kreisradius ein:');
        ReadLn (Radius);
        Ergebnis := Radius * Radius * Pi;
        TextColor (White);
        WriteLn ('Der Umfang des Kreises beträgt: ', Ergebnis);
        Delay(1000);

        WriteLn;
        WriteLn('Nochmal?');
        WriteLn('(J)a/(N)ein');
        ReadLn (Meinung);

        If Meinung= 'J' then GotoXY(5,1);
        If Meinung= 'N' then exit;
    End.                                      <--- hier wird zweimal zurückgerückt, damit "end." passt - hier stimmt was nicht
    Was mache ich falsch?

    Hier scheint mir schonmal ein Code: end; mit Semicolon zu fehlen, das auf gleiche Höhe mit dem Repeat steht. Das Repeat wird also nicht abgeschlossen.
    Und das fehlende End wird direkt hinter der Zeile mit dem zweiten if vermisst.

    Der "=" Operator zum Vergleich ist in Pascal korrekt, die Zuweisung erfolgt in Pascal mit dem ":=" -Operator


    EDIT: es ist nicht repeat...end, sondern repeat...until(...);



    Re: Welcher Fehler?

    Xin - 06.05.2008, 16:26


    Moritz hat folgendes geschrieben:
    Richtig müsste es heissen:


    {==============================================}


    PROGRAM Kreisflaeche;
    USES Crt;
    CONST Pi = 3.14159265358;
    VAR Ergebnis, Radius: Extended; var Meinung: char;

    label anfang;
    label Abfrage;
    BEGIN
    //DAS REPEAT MUSS WEG!!


    An dieser Stelle will ich nun auch nochmal darauf hinweisen, dass
    Code:
    goto

    SEHR SCHLECHTER Programmierstiel ist!!!

    Und wieso bitte nimmst Du ihm dann sein Repeat weg?



    Re: Welcher Fehler?

    Moritz - 06.05.2008, 16:30


    repeat müsste wenndan mit until abgeschlossen werden. Und dann? repeat until was?? Die repeat-anweisung ist überflüssig, da das schon durch die goto-anweisung wiederholt wird. Ausserdem muss die Variable ganz klar als char definiert sein, denn es wird ja ein Buchstabe gelesen.


    [EDIT]

    Wenn man das in gutem stil programmieren würde, würde man die Berechnung und ausgabe in einer Procedure kapseln und diese dann nur aufrufen. Man könnte eventuell die procedure auch rekursiv aufrufen, dass wäre dann sehr guter stil

    [/EDIT]



    Re: Welcher Fehler?

    Xin - 06.05.2008, 16:39


    Moritz hat folgendes geschrieben: repeat müsste wenndan mit until abgeschlossen werden.
    Jow, hatte ich ja schon korrigiert... Asche auf mein Haupt... ;-)

    Moritz hat folgendes geschrieben: Und dann? repeat until was??
    Wie war das in Pascal, wird wiederholt, solange die Bedingung falsch ist oder solange die Bedingung wahr ist?
    Entsprechend until(true) bzw. until(false); oder halt irgendwas passendes.
    Er springt mit exit raus. Das ist nicht schön, aber funktioniert wunderbar.

    Moritz hat folgendes geschrieben: Die repeat-anweisung ist überflüssig, da das schon durch die goto-anweisung wiederholt wird.
    Er will Pascal lernen, kein Assembler. Du kannst nicht schreiben, dass goto böse ist und ihm dann einen Sourcecode vorsetzen, der mit Goto gesteuert wird. Mal ganz abgesehen davon, dass Goto böse ist....

    Moritz hat folgendes geschrieben: Ausserdem muss die Variable ganz klar als char definiert sein, denn es wird ja ein Buchstabe gelesen.
    Mit dem Punkt habe ich kein Problem.


    -edit-

    Moritz hat folgendes geschrieben: Wenn man das in gutem stil programmieren würde, würde man die Berechnung und ausgabe in einer Procedure kapseln und diese dann nur aufrufen. Man könnte eventuell die procedure auch rekursiv aufrufen, dass wäre dann sehr guter stiel

    Ich widerspreche
    a) Es verbessert den Stil nicht, jeden Kleinkram in Prozeduren zu verpacken. Kann man machen - muss man aber nicht.
    b) Rekusion ist eine Technik, die man (nicht zwangsläufig) einsetzen muss, um rekursive Probleme zu lösen. Das bedeutet aber nicht, dass sich dadurch der Stil verbessert, das bedeutet in der Regel nur, dass der Code komplizierter wird.
    c) Stiele stecken im Eis, ganz still, aber dafür stilvoll.

    -/edit-



    Re: Welcher Fehler?

    Kevins-X - 06.05.2008, 16:43

    Danke
    Ich habe echt was dazu gelernt!
    ich muss mich wohl noch ein bissien mehr damit beschäftigen!



    Re: Welcher Fehler?

    Xin - 06.05.2008, 16:46

    Re: Danke
    Kevins-X hat folgendes geschrieben: Ich habe echt was dazu gelernt!
    ich muss mich wohl noch ein bissien mehr damit beschäftigen!
    Definitiv, aber das ist normal. Programmeiren zu lernen dauert seine Zeit. Wenn Du nicht auf Pascal festgelegt bist, z.B. durch die Schule, überlege Dir rechtzeitig auf eine Sprache zu wechseln, die weiter verbreitet ist.

    Ich habe vor 13 Jahren Pascal in der Schule lernen 'dürfen'. Unfreiwillig. Pascal war damals schon aus der Mode. Für die ersten Schritt, wie hier mit Schleifen zu arbeiten, oder zu verstehen, warum Einrücken das Programmieren erleichtert, reicht Pascal aber aus.

    (Man kann auch ganz tolle andere Programme damit schreiben, Pascal kann alles, was andere Sprachen auch können, aber es benutzt keiner mehr...)



    Re: Welcher Fehler?

    Moritz - 06.05.2008, 16:46


    Zitat:
    Stiele stecken im Eis, ganz still, aber dafür stilvoll.



    ALTE MECKERZIEGE



    Re: Welcher Fehler?

    Xin - 06.05.2008, 16:50


    Moritz hat folgendes geschrieben: Zitat:
    Stiele stecken im Eis, ganz still, aber dafür stilvoll.


    ALTE MECKERZIEGE
    Kein Satzendezeichen ;-)



    Re: Welcher Fehler?

    Kevins-X - 06.05.2008, 17:07

    Immernoch fehler
    Ich habe gerade die überarbeitete Version von "Moritz" getestet, aber da gibt es immernoch einen Fehler!?

    (Error 116: Must be in 8087 mode to compile this)
    Bei "ReadLn (Radius);"

    PROGRAM Kreisflaeche;
    USES Crt;
    CONST Pi = 3.14159265358;
    VAR Ergebnis, Radius: Extended; var Meinung: char;

    label anfang;
    label Abfrage;
    BEGIN

    anfang:clrscr;
    WriteLn ('Programm zur Berechnung der Kreisflaeche');
    Write ('Geben Sie den Kreisradius ein:');
    ReadLn (Radius);
    Ergebnis := Radius * Radius * Pi;
    TextColor (White);
    WriteLn ('Der Umfang des Kreises beträgt: ', Ergebnis);
    Delay(1000);
    WriteLn;

    Abfrage: WriteLn('Nochmal?');
    WriteLn('(J)a/(N)ein');
    Meinung:=readkey;
    If (Meinung= 'J') or (Meinung='j')then Goto anfang
    If (Meinung= 'N') or (Meinung='n')then exit;
    If (Meinung<>'j') and (Meinung<>'n') and (Meinung<>'J') and (Meinung<>'N') then
    begin
    clrscr;
    goto Abfrage ;
    end;

    End.



    Re: Welcher Fehler?

    Xin - 06.05.2008, 17:40

    Re: Immernoch fehler
    Kevins-X hat folgendes geschrieben: Ich habe gerade die überarbeitete Version von "Moritz" getestet, aber da gibt es immernoch einen Fehler!?

    (Error 116: Must be in 8087 mode to compile this)
    Bei "ReadLn (Radius);"

    VAR Ergebnis, Radius: Extended;
    ReadLn (Radius);


    Bitte guck Dir die [-code-]-Geschichte an und rücke ein.

    Aus welchem Jahrtausend stammt Dein Pascalcompiler?
    Der 8087 ist die FPU des 8086, also der mathematische Co-Prozessor. Früher waren Integer- und FloatingPoint-Zahlen ("Extended") in unterschiedlichen Chips auf dem Mainboard untergebracht.
    Billige Personal Computer, so um die Preisklasse von 10000 Euro, hatten weder eine Festplatte, noch eine FPU. Das hatten nur richtige Computer.
    Spätere Compiler brachten dafür entsprechende Libs mit, die Dein Compiler offenbar nicht mitbringt.
    Der 8086 ist übrigens der Vorgänger vom 80286. Das war ein paar Jahr(zehnte?)e bevor man Prozessoren Namen gab, wie Pentium. Das nur wenige Jahr(zehnt?)e bevor man den Namen Pentium zugunsten von Core2Duo verwarf.

    Ich weiß ja nicht, wie alt die Software ist, die Du da benutzt, aber ich vermute, dass sie älter ist, als Du selbst, schließlich scheint Dein Compiler eine FPU noch für etwas besonderes zu halten.

    Zur Lösung Deines Problems: du musst beim Compilieren einen Schalter setzen, der dem Compiler mitteilt, dass eine FPU existiert.
    Welcher Schalter das ist, das weiß ich nicht.



    Re: Welcher Fehler?

    Moritz - 06.05.2008, 18:23


    wenn du Turbopascal benutzt, würde ich dringend empfehlen, freepascal zu benutzen, denn Turbopascal ist SCHROTT!!



    Re: Welcher Fehler?

    Kevins-X - 06.05.2008, 18:25

    gut
    Gut, ich habe ihn schon installiert!



    Re: Welcher Fehler?

    Kevins-X - 06.05.2008, 18:48

    Fehler
    Da ist immernoch ein fehler.
    es wird ein fehler bei "if" angezeigt!

    [URL=http://img386.imageshack.us/my.php?image=unbenanntag7.jpg][IMG]http://img386.imageshack.us/img386/9749/unbenanntag7.th.jpg[/IMG][/URL]



    Re: Welcher Fehler?

    Moritz - 06.05.2008, 18:56


    Aus dem Bild kann man nicht viel erkennen (Auflösung zu gering). Bitte poste doch mal die Fehlermeldung.



    Re: Welcher Fehler?

    Moritz - 06.05.2008, 18:59


    Ich habs getestet, hinter
    Code:
    goto anfang

    fehlt ein semikolon (;)



    Re: Welcher Fehler?

    Kevins-X - 08.05.2008, 16:52

    Kommastellen
    Danke, das hat sehr weitergeholfen! Jetzt geht es auch!

    Eine Frage:
    Wenn ich als Radius 15 angebe kommt folgendes heraus:

    7.068583470555000E+0002

    Das +0002 steht ja dafür, das das Komma um 2 Stellen nach Rechts kommt.

    Wie kann ich dafür sorgen, das das Komma schon automatisch an die richtige Stelle kommt?



    Re: Welcher Fehler?

    Moritz - 08.05.2008, 18:51


    siehe FAQ's



    Re: Welcher Fehler?

    Kevins-X - 08.05.2008, 20:14

    Und wie geht das nun?
    Das hatte ich auch schon gesehen!
    Aber leider könnte ich damit nichts anfangen!

    x:=(zahl:5:2)



    Re: Welcher Fehler?

    Kevins-X - 08.05.2008, 20:33

    Gut
    Hab es hinbekommen!



    Re: Welcher Fehler?

    Kevins-X - 08.05.2008, 21:23

    Noch eine Frage
    Nun habe ich noch eine Frage:

    Wo kann ich bei Free Pascal das Icon der zu machenden Anwendung einfügen?
    Bei Google habe ich leider nichts hilfreiches gefunden!



    Re: Welcher Fehler?

    Moritz - 09.05.2008, 13:32


    fdafur brauchst du ein programm, zb aicon. mit gimp geht das glaube ich auch. Mit den mitgelieferten pascal-Werkzeugen geht das nicht!!



    Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken



    Weitere Beiträge aus dem Forum Tutorials.at

    ich habe diese taste nicht { - gepostet von gandalf am Donnerstag 10.08.2006
    Brauche Headerdatei graphics.h - gepostet von mitti am Freitag 18.05.2007
    Allgemeine strukturen - gepostet von DrPhil_Guth am Dienstag 27.06.2006
    Pascal-Progamm problem - gepostet von skeleten am Sonntag 30.03.2008
    Notebook - gepostet von dani93 am Donnerstag 01.05.2008
    Turbo C Problem! (Umfrage nur nebenbei) - gepostet von ChillerT am Dienstag 06.02.2007
    Programm-Icon erstellen - gepostet von detewe89 am Samstag 05.05.2007
    Veränderung der Variablenzuweisung - gepostet von Dragorad am Mittwoch 06.06.2007
    Turbo C - gepostet von Mei$ter A^ am Montag 24.04.2006
    Daten löschen und .exe starten - gepostet von Pole am Montag 13.08.2007



    Ähnliche Beiträge wie "Welcher Fehler?"

    09.08.07- 17:00 - 20:00 hajo Nova & Friends @ Radio QE - Funatic (Donnerstag 09.08.2007)
    Magic Boy and Friends - Jule (Freitag 05.05.2006)
    Happy Tree Friends ?? - Guckt mal rein - echotier (Mittwoch 17.01.2007)
    Bill Lupkin & Friends - Where I come from - Werner (Samstag 16.06.2007)
    Friends Call Free (ACN-2-ACN) oder kostenlos telefonieren - bierzart (Dienstag 06.06.2006)
    Welcome to all international Fiat Panda Friends !!! - Forum-Service (Samstag 09.06.2007)
    Was ist Happy Tree Friends. - Flipmo (Mittwoch 17.01.2007)
    Friends - King (Montag 17.04.2006)
    Happy Tree Friends - Tam (Sonntag 10.09.2006)
    True Friends - Vassabi (Montag 17.09.2007)