Autor Beitrag
Atideva
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mo 10.07.23 16:39 
ausblenden 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 user profile iconTh69: Delphi-Tags hinzugefügt
Moderiert von user profile iconTh69: Quote-Tags hinzugefügt
Moderiert von user profile iconTh69: Titel geändert (war "Es geht um den Pythagoras").
Andreas_500
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 29
Erhaltene Danke: 3

Windows XP/7/10
Delphi XE5 Professional; VBA Excel;
BeitragVerfasst: Mo 10.07.23 17:40 
Hallo Atideva,
Versuch es mal so:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19274
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Di 11.07.23 11:03 
user profile iconAtideva hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden 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.
Was hat der Quelltext mit Pascal oder Free Pascal zu tun?
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1322
Erhaltene Danke: 117

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Di 11.07.23 14: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 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 12.07.23 21: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:
ausblenden 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.
ausblenden 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 user profile iconTh69: Delphi-Tags hinzugefügt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19274
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 13.07.23 07:01 
user profile iconAtideva hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden 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.:
  1. Ich möchte, dass der Benutzer einen Wert für x eingibt.
  2. Ich möchte, dass der Benutzer einen Wert für y eingibt.
  3. Ich möchte prüfen, ob der Wert für x größer als 0 ist und ansonsten einen Fehler anzeigen.
  4. ...

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 29
Erhaltene Danke: 3

Windows XP/7/10
Delphi XE5 Professional; VBA Excel;
BeitragVerfasst: Do 13.07.23 10: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:
ausblenden Delphi-Quelltext
1:
begiin					

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19274
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 13.07.23 11:48 
user profile iconAndreas_500 hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 29
Erhaltene Danke: 3

Windows XP/7/10
Delphi XE5 Professional; VBA Excel;
BeitragVerfasst: Do 13.07.23 14:41 
Das war mir nicht bekannt, Sebastian. :oops:
gurusmi
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Do 13.07.23 15:48 
user profile iconAtideva hat folgendes geschrieben:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
                  
program pythagoras(input,output);
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.



Mit dem Fehler hat der Compiler durchaus recht. Wenn man das Programm zeilenweise von oben nach unten liest, stellt man sofort fest, daß mit dem readln(x) die Variable X initialisiert wurde. Die Variable Y ist zu dem Zeitpunkt dieser Zeile noch nicht initialisiert worden. Deshalb haut es den Compiler beim zweiten Teil der Zeile ">y und Z;" auf die Schnauze. Y und Z werden erst in den darauffolgenden Zeilen initialisiert.


Zuletzt bearbeitet von gurusmi am Do 13.07.23 15:49, insgesamt 1-mal bearbeitet
Atideva Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 13.07.23 15:49 
ausblenden 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.
ausblenden 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 user profile iconTh69: Delphi-Tags hinzugefügt
Andreas_500
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 29
Erhaltene Danke: 3

Windows XP/7/10
Delphi XE5 Professional; VBA Excel;
BeitragVerfasst: Do 13.07.23 16:46 
Zitat:

... es allerdings nicht darum ging, die Hypotenus mittels Pythagors auszurechnen

Das kann man nicht immer erraten... :D
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:
ausblenden 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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 29
Erhaltene Danke: 3

Windows XP/7/10
Delphi XE5 Professional; VBA Excel;
BeitragVerfasst: Do 13.07.23 20: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:
Zitat:

Block Origin hat das Laden der folgenden Seite verhindert:
lp.embarcadero.com/d...uehrung-objectpascal
Aufgrund des folgenden Filters:
||lp.embarcadero.com^
Gefunden in:
• EasyPrivacy

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19274
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 13.07.23 22: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 :twisted: ).

user profile iconAndreas_500 hat folgendes geschrieben Zum zitierten Posting springen:
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



BeitragVerfasst: Sa 15.07.23 12:49 
user profile iconAtideva hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden 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.
ausblenden 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.