Autor |
Beitrag |
Atideva
Hält's aus hier
Beiträge: 3
|
Verfasst: Mo 10.07.23 15:39
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| Program pythagoras; var x,y,z : integer; begin writeln ('Berechnen Sie die Seite x*x des Dreiecks');
readln(x) > y und Z; readln(y) > x und z; readln(z) > z und x; r := (x*x = (y*y + z*z)) or (y*y = (x*x + z*z)) or ((x*x + y*y) = z*z);z)) end. |
Dieses Program wird bei freepascal nicht kompiliert. Die Fehlerangabe wie folgt. Ich habe aktuell keine Ahnung, was ich genau ändern muss, um das Program zu kompilieren zu können. Es geht um den Lehrsatz des Pythagoras, der soweit ja bekannt sein dürfte. Grüße Erich
Zitat: | pythagoras.pas(7,15) Error: Illegal expression
" (7,13): Warning: Variable "y" does not seem to be initialized
" (7,11): Error: Incompatible types: got "untyped" expected "LongInt"
" (7,15): Syntax error, ";" expected but "identifier UND" found
|
Moderiert von Th69: Delphi-Tags hinzugefügt
Moderiert von Th69: Quote-Tags hinzugefügt
Moderiert von Th69: Titel geändert (war "Es geht um den Pythagoras").
|
|
Andreas_500
Beiträge: 30
Erhaltene Danke: 3
Windows XP/7/10
Delphi XE5 Professional; VBA Excel;
|
Verfasst: Mo 10.07.23 16:40
Hallo Atideva,
Versuch es mal so:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| VAR a, b, c: Extended;
Begin Write('a = ? '); ReadLn(a);
Write('b = ? '); ReadLn(b); c:= Sqrt(Sqr(a) + Sqr(b));
WriteLn('c = ', c); ReadLn; End. |
Das ist zwar mit Delphi, aber es müßte auch mit FreePascal funktionieren.
Grüße, Andreas
|
|
jaenicke
Beiträge: 19288
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Di 11.07.23 10:03
|
|
Sinspin
Beiträge: 1334
Erhaltene Danke: 118
Win 10
RIO, CE, Lazarus
|
Verfasst: Di 11.07.23 13:04
Na? Ne Hausaufgabe bekommen aber im Unterricht nicht aufgepasst?
Sind nicht eigentlich mittlerweile überall Ferien?
Das ist kein Quelltext, sondern eine Beschreibung dessen was umgesetzt werden muss. Wenn du das zum Quellen bringen willst muss das noch ein bisschen kochen.
Bei pythagoras musst du aufpassen, das ist so alt, das zerfällt beim Kochen leicht zu Staub.
Meißt helfen ein paar IF und THEN damit es stabiler wird.
_________________ Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
|
|
Atideva
Hält's aus hier
Beiträge: 3
|
Verfasst: Mi 12.07.23 20:44
Ich wollte eigentlich auf Andreas antworten. Um die Situation zu klären. Ich bin Mathe Student an der Fernuni Hagen. Da ich kei Abi habe besuche ich aktuell die Präsenz VL.Mathe selbst läuft einigermaßen befriedigend. Da ich aber noch nie mit Prgrammieren zu tun hatte, und fast alle Mathe Studenten an der Fenuni offenbar schon damit etwas Erfahrung haben, funktioniert das bei mir aktuell noch nicht richtig. Die Übung selbt hatte garnicht zum Ziel den Satz des Pythagoras auch anzuwenden.Die Aufgabe war wie folgt eigentlich gelöst:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| program pythagoras(input,output);
var x,y,z : integer; r : boolean;
begin readln(x); readln(y); readln(z);
r := (x*x = (y*y + z*z)) or (y*y = (x*x + z*z)) or ((x*x + y*y) = z*z);
writeln(r); end. |
Das habe ich zuerst falsch gelesen oder falsch interpretiert. Deshalb war und ist leider noch immer meine Überlegung, wie ich dass mit den if ...then false or if.. then true.
Das Skript ist für einen Programmierneuling nicht unbedingt so gut nachvollziehbar. Ich habe dann eben weiterbrobiert und komme mit der Fehler meldung in Zeile 3(6) "illegarer charcater nicht klar. Die gganze 3. Zeile ist rot untersrichen.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| program Beratung; var x,y,z : integer;
r : boolean; begiin if x > 0 and y > 0 then z true; if x <= 0 and y <= 0 then z false; readln z := x*x + y*y ; end. |
Ist es möglich, mir zu sagen, was falsch ist und wie ich es mit welcher Eingabe genau korrigiweren kann
Moderiert von Th69: Delphi-Tags hinzugefügt
|
|
jaenicke
Beiträge: 19288
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 13.07.23 06:01
Atideva hat folgendes geschrieben : | Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| program Beratung; var x,y,z : integer;
r : boolean; begiin if x > 0 and y > 0 then z true; if x <= 0 and y <= 0 then z false; readln z := x*x + y*y ; end. |
Ist es möglich, mir zu sagen, was falsch ist und wie ich es mit welcher Eingabe genau korrigiweren kann |
Die Frage ist, was du mit dem Quelltext erreichen wolltest.
Du prüfst als erstes, ob x und y größer als 0 sind. Diese haben aber noch keinen Wert bekommen. Das kannst du mit einem Fahrschein vergleichen, den du abstempeln musst. Du schaust nach der Uhrzeit des Stempels, bevor du ihn überhaupt abstempelst.
Wenn das der Fall ist, führst du " z true;" aus. Meintest du z := True;? Das geht aber nicht, denn du kannst einen boolschen Wert (true oder false) nicht an eine Zahl (z, ein Integerwert, also ein Zahlenwert) zuweisen. Was ginge, wäre r := true;.
Du solltest einmal überlegen, was du machen möchtest, ganz ohne Quelltext. Also z.B.:
- Ich möchte, dass der Benutzer einen Wert für x eingibt.
- Ich möchte, dass der Benutzer einen Wert für y eingibt.
- Ich möchte prüfen, ob der Wert für x größer als 0 ist und ansonsten einen Fehler anzeigen.
- ...
Danach kannst du dann jeweils schauen, wie du das im Quelltext umsetzen kannst. Dabei kann dir z.B. diese Einführung helfen:
lp.embarcadero.com/d...uehrung-objectpascal
Insbesondere solltest du die einzelnen Punkte einzeln umsetzen und prüfen, ob das kompiliert und tut, was du möchtest.
Die Fehlermeldung illegal character dürfte eher daher rühren, dass du etwas z.B. aus einer PDF-Datei kopiert und in den Quelltext eingefügt hast. Dabei hast du dann genau das mit kopiert, was da steht: Einen illegal character, sprich ein unpassendes Zeichen. Das kann ein falsches Leerzeichen sein oder ähnliches. Da kannst du einfach alle Leerzeichen einmal entfernen und wieder eingeben, ebenso den Zeilenumbruch, dann sind solche Zeichen weg.
|
|
Andreas_500
Beiträge: 30
Erhaltene Danke: 3
Windows XP/7/10
Delphi XE5 Professional; VBA Excel;
|
Verfasst: Do 13.07.23 09:29
Hallo Atideva,
Du solltest etwas systematischer vorgehen, wenn Du solche mathematischen Aufgabenstellungen programmieren willst. Im Falle "Pythagoras" würde ich so vorgehen:
1): Aufgabenstellung präzise definieren
Was ist gegeben, was konkret will ich berechnen?
2): Skizze machen
- Rechtwinkliges Dreieck zeichnen, Seiten mit Symbolen versehen.
- Übliche Symbole sind
a: Kathete b: Kathete, c: Hypotenuse
- Bitte passende Mathematik-Bücher benutzen!
3): Notwendige Formeln zusammentragen
z. B. c^2 = a^2 + b^2 c = Wurzel(a^2 + b^2)
4): Lösungsweg auf dem Papier "zu Fuß" (= manuell) ausarbeiten
5): Manuellen Lösungsweg in Pascal umsetzen
- Gegebene Daten sollen eingelesen werden, berechnete Werte ausgeben
- Datentypen festlegen für die Variablen a, b, und c.
Integer (= Nur ganze Zahlen) sind hier NICHT sinnvoll, denn eine Seitenlänge von z.B. 3,5 m wäre nicht möglich!
Also: Datentype Extended (höchstmögliche Genauigkeit) oder Double wählen etc.
- Danach kannst Du Dir Gedanken machen, welche Eingaben sinnvoll sind, welche nicht und baust Überprüfungen If .. Then ein das Programm ein.
6): Du mußt mindestens Grundkenntnisse in der Programmierspreche Pascal haben.
Der Computer nimmt alles 100%-ig genau und versteht nur eine gewisse Anzahl von Anweisungen (= Befehlen).
In Deinem Programm die 6. Zeile kann er nicht verstehen, weil Du Dich vertippt hast:
Delphi-Quelltext
Korrekt muß es heißen begin mit einem i! usw. usf.
Zum Lernen könntest Du neben Sebastian’s Empfehlungen auch noch ein kostenloses E-Book verwenden: Es ist leider nur noch im Web-Archiv zu finden. Hier ist die letzte Auflage aus dem Jahr 2013:
web.archive.org/web/...de/downloads/e-book/
Das ist zwar für Delphi, aber die Pascal-Sprachelemente funktionieren auch in Free-Pascal.
Wünsche Dir viel Erfolg!
Grüße
Andreas
|
|
jaenicke
Beiträge: 19288
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 13.07.23 10:48
Andreas_500 hat folgendes geschrieben : | Zum Lernen könntest Du neben Sebastian’s Empfehlungen auch noch ein kostenloses E-Book verwenden: Es ist leider nur noch im Web-Archiv zu finden. Hier ist die letzte Auflage aus dem Jahr 2013:
web.archive.org/web/...de/downloads/e-book/ |
Das ist die alte Version des von mir geposteten E-Books. Dieses wurde auf den neuesten Stand gebracht und neu veröffentlicht, wie auch am Delphi-Treff Logo im Buch sowie dem entsprechenden Hinweis deutlich erkennbar ist:
Zitat: | Basierend auf dem Lehrbuch des Delphi-Treff von den Autoren:
FLORIAN HÄMMERLE, MARTIN STROHAL, CHRISTIAN REHN, ANDREAS HAUSLADEN |
|
|
Andreas_500
Beiträge: 30
Erhaltene Danke: 3
Windows XP/7/10
Delphi XE5 Professional; VBA Excel;
|
Verfasst: Do 13.07.23 13:41
Das war mir nicht bekannt, Sebastian.
|
|
gurusmi
Hält's aus hier
Beiträge: 7
|
Verfasst: Do 13.07.23 14:48
Zuletzt bearbeitet von gurusmi am Do 13.07.23 14:49, insgesamt 1-mal bearbeitet
|
|
Atideva
Hält's aus hier
Beiträge: 3
|
Verfasst: Do 13.07.23 14:49
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| Program Pythagoras; var x,y,z : integer; r : boolean; begin if x > 0 and y > 0then z true; if x <= 0 and y <= 0 then z false; readln z := x*x + y*y; end. |
Das ist das aktuelle Programm, das nicht kompiliert wird. Zuerst hatte ich nach boolean das ; vergessen. Bei diesem Fehlercode hieß es in der 3.Zeile 6. Spalte illegaler character. Ich hatte dann hinter boolean das ; hinzugefügt, und dann gab es den Fehlercode (5,1) illegaler character. Diese Zeilen waren genauso geschrieben, wie sie auch zusammen mit der ML, in der es allerdings nicht darum ging, die Hypotenuse mittels Pythagors auszurechnen. Und die korrekt Lösung sah dann so aus. Bei begin kann ich nichts ändern, weil dass ja richtig ist, ich vermute jetzt weitere Fehler, die noch nicht angezeigt werden, warum auch immer.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| program pythagoras(input,output);
var x,y,z : integer; r : boolean;
begin readln(x); readln(y); readln(z);
r := (x*x = (y*y + z*z)) or (y*y = (x*x + z*z)) or ((x*x + y*y) = z*z);
writeln(r); end. |
Moderiert von Th69: Delphi-Tags hinzugefügt
|
|
Andreas_500
Beiträge: 30
Erhaltene Danke: 3
Windows XP/7/10
Delphi XE5 Professional; VBA Excel;
|
Verfasst: Do 13.07.23 15:46
Zitat: |
... es allerdings nicht darum ging, die Hypotenus mittels Pythagors auszurechnen
|
Das kann man nicht immer erraten...
Jede Aufgabe beginnt mit einer konkreten Aufgebenstellung. Und die hast Du uns verschwiegen. So waren wir auf Rätselraten angewiesen.
Du solltest selbstsprechende Variablennamen verwenden und bei der Eingabe hinschreiben was konkret eingegeben werden soll, damit der Benutzer weiß, war erwartet wird:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| ... Write(’Hypotenuse x = ? ’); ReadLn(x);
Write(’Ankathete y = ? ’); ReadLn(y);
Write(’Gegenkathete z = ? ’); ReadLn(z); ... |
Und auch das Ergebnis im Klartext formulieren:
Delphi-Quelltext 1:
| WriteLn(’Die Konsitenz der Eingabedaten x, y, und z ist: ’, r); |
Noch ein Tipp: Deinen Pascal-Code solltest Du wegen der besseren Lesbarkeit zwischen
Delphi-Tags
schreiben, damit es schön formatiert wird.
|
|
Andreas_500
Beiträge: 30
Erhaltene Danke: 3
Windows XP/7/10
Delphi XE5 Professional; VBA Excel;
|
Verfasst: Do 13.07.23 19:07
@ Sebastian Jänicke
Ich habe mal den von Dir empfohlenen Link getestet, Sebastian: lp.embarcadero.com/d...uehrung-objectpascal
Abgesehen davon, daß sich mein Werbeblocker sofort eingeschaltet und das Laden der Seite zunächst blockiert hat:
habe ich mich mit allen den geforderten persönlichen Daten heute um 15:25 Uhr (also vor mehr als 4 Stunden) angemeldet. Ich erhielt zwar sofort die Meldung
"Form was submitted! Thank you for submission.", aber einen Download-Link habe ich bisher nicht erhalten.
Ist es nur bei mir so, oder ist lp.embarcadero.com/d...uehrung-objectpascal etwa nur für Daten-Phising konzipiert?
Ähnlich negative Erfahrungen habe ich gemacht mit „Das Kapitel 8 - Mobile Anwendung Souffleur mit Delphi ist zum kostenfreien Download verfügbar.“ auf:
lp.embarcadero.com/d...hi-eBook-DACH-210621
als ich mich in einem ähnlichen Prozedere am 21.06.2021 (also vor mehr als 2 Jahren) registriert habe, aber vollkommen leer ausging und bis heute gar nichts bekommen habe.
Vielleicht liest hier auch Matthias Eißing von Embarcadero mit und kann u.U. intervenieren...
Danke & Grüße
Andreas
Für diesen Beitrag haben gedankt: Atideva
|
|
jaenicke
Beiträge: 19288
Erhaltene Danke: 1743
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 13.07.23 21:27
Das steht auf der Seite aber drauf, dass sie mit manchen Anbietern Probleme haben. Da kannst du nur eine andere Mailadresse nehmen. Bei manchen kommen die Mails einfach nicht an, das Problem habe ich auch bei eigenen Mails manchmal.
Bei Microsoft (outlook.com) funktioniert es z.B. meistens, bei GMX oder web.de kommt relativ viel nicht an (dafür halt deren eigene Werbung sehr gut ).
Andreas_500 hat folgendes geschrieben : | Vielleicht liest hier auch Matthias Eißing von Embarcadero mit und kann u.U. intervenieren... |
Nein, der liest nur drüben in der Delphipraxis mit, kann aber am Verhalten der E-Mail-Anbieter auch nichts ändern.
Für diesen Beitrag haben gedankt: Andreas_500
|
|
gurusmi
Hält's aus hier
Beiträge: 7
|
Verfasst: Sa 15.07.23 11:49
Atideva hat folgendes geschrieben : | Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| Program Pythagoras; var x,y,z : integer; r : boolean; begin if x > 0 and y > 0then z true; if x <= 0 and y <= 0 then z false; readln z := x*x + y*y; end. |
Das ist das aktuelle Programm, das nicht kompiliert wird. Zuerst hatte ich nach boolean das ; vergessen. Bei diesem Fehlercode hieß es in der 3.Zeile 6. Spalte illegaler character. Ich hatte dann hinter boolean das ; hinzugefügt, und dann gab es den Fehlercode (5,1) illegaler character. Diese Zeilen waren genauso geschrieben, wie sie auch zusammen mit der ML, in der es allerdings nicht darum ging, die Hypotenuse mittels Pythagors auszurechnen. Und die korrekt Lösung sah dann so aus. Bei begin kann ich nichts ändern, weil dass ja richtig ist, ich vermute jetzt weitere Fehler, die noch nicht angezeigt werden, warum auch immer.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| program pythagoras(input,output);
var x,y,z : integer; r : boolean;
begin readln(x); readln(y); readln(z);
r := (x*x = (y*y + z*z)) or (y*y = (x*x + z*z)) or ((x*x + y*y) = z*z);
writeln(r); end. | |
Im ersten Codeschnipsel hätte ich zuerst einmal die Zeilen 6 & 7 korrigiert.
In zeile 6 fehlt ein Blank und eine Zuweisung.
In Zeile 7 fehlt ebenso eine saubere Zuweisung.
In Zeile 8 fehlt der Zeilenabschluß ( ;)
Im zweiten Codeschnipsel hätte ich drei weitere temporäre Boolean-Variablen verwendet, um die Zuweisung einzukürzen. Bei einem derartigen Spaghetti-Code bzw. Programmierstil hätte mich jeder meiner Dozenten so schnell geschlachtet, daß ich nicht gewußt hätte, wie ich heiße.
|
|
|