Schnittpunktberechnung
-
fola schrieb:
mhh genau die kringelt er mir ein also, a, b, c, d, und &x aber warum exsistieren sie nicht? sind doch da oder nicht.
Nein, denn du hast sie ja auskommentiert in den Zeilen 47-51
Zudem sind deine Zeilen 54 und 56 falsch.
-
fola schrieb:
mhh genau die kringelt er mir ein also, a, b, c, d, und &x aber warum exsistieren sie nicht? sind doch da oder nicht.
Merke: Wenn dein Compiler sich beschwert und dazu noch im Forum eine Erklärung kommt, dann kannst du davon ausgehen, dass du vielleicht mit deinem Standpunkt nicht richtig liegst. Insbesondere der Compiler hat immer Recht.
Deine Deklarationen sind, wie schon 2x gesagt, ausgeklammert.
okay das heisst struct durch float ersetzen?
Antworten bitte genau lesen, die meisten Leute hier drücken sich auch mathematisch genau aus, da ist jedes Wort wichtig:
Wenn du schon bei den scanf bist, ersetzte doch gleich mal alle float durch double.
Wobei mir das an deiner Stelle hier egal wäre.
-
Warum sind die Variablendefinitionen in main ausgeklammert?
weil es drei verschiedene ausgabesituationen geben soll. die strecken schneiden sich (ideallerweise) die strecken schneiden sich nicht und die strecken sind parallel.
weis leider nicht wie ich es anders schreiben soll, und warum sollen zeile 54-56 falsch sein.sind bloß fragen meiner unwissenheit nicht aufregen
-
fola schrieb:
Warum sind die Variablendefinitionen in main ausgeklammert?
Die Variablendefinitionen sind auskommentiert durch /* */.
Der Compiler beachtet sie gar nicht.... und warum sollen zeile 54-56 falsch sein.
scanf() erwartet Zeiger als Argumente.
-
also hab es den doch nochmal anders gemacht... aber jetzt schließt er mir die anwendung und sagt code 0 was will der von mir
#include <stdio.h> #include <math.h> int main (void) /* Hier werden als erstes die Angaben gemacht */ { double x1, y1, x2, y2, x3, y3, x4, y4, m1, m2, n1, n2, Ergebnisx, Ergebnisy; printf ("Geben Sie fuer Strecke 1 x1 ein: \n"); scanf ("%lf", &x1); printf ("Geben Sie fuer Strecke 1 y1 ein: \n"); scanf ("%lf", &y1); printf ("Geben Sie fuer Strecke 1 x2 ein: \n"); scanf ("%lf", &x2); printf ("Geben Sie fuer Strecke 1 y2 ein: \n"); scanf ("%lf", &y2); printf ("Geben Sie fuer Strecke 2 x3 ein: \n"); scanf ("%lf", &x3); printf ("Geben Sie fuer Strecke 2 y3 ein: \n"); scanf ("%lf", &y3); printf ("Geben Sie fuer Strecke 2 x4 ein: \n"); scanf ("%lf", &x4); printf ("Geben Sie fuer Strecke 2 y4 ein: \n"); scanf ("%lf", &y4); printf ("a=%f nb=%f nc=%f n",x1, y1, x2, y2, x3, y3, x4, y4); { m1= (y2-y1)/(x2-x1); /* berechnung der Steigung der Geraden */ m2= (y4-y3)/(x4-x3); if (m1 == m2) printf("Strecken sind Parallel"); else if (n1 < n2) printf("%lf schneiden sich nicht %lf \"); n1= y1-(y2-y1)/(x2-x1)*x1; /* Abstände zur x-Achse */ n2= y3-(y4-y3)/(x4-x3)*x3; Ergebnisx = (n2-n1)/(m1-m2); /* berechnung der Scnittpunkte für x und y Koordinaten */ Ergebnisy = m1*(n2-n1)/(m1-m2)+n1; printf("Schnittkoardinate fuer x betraegt: %lf/n", Ergebnisx); printf("Schnittkoardinate fuer y betraegt: %lf/n", Ergebnisy); } getchar (); }
-
Teilst du irgendwo durch 0 ?
-
fola schrieb:
also hab es den doch nochmal anders gemacht... aber jetzt schließt er mir die anwendung und sagt code 0 was will der von mir
#include <stdio.h> #include <math.h> int main (void) /* Hier werden als erstes die Angaben gemacht */ { double x1, y1, x2, y2, x3, y3, x4, y4, m1, m2, n1, n2, Ergebnisx, Ergebnisy; printf ("Geben Sie fuer Strecke 1 x1 ein: \n"); scanf ("%lf", &x1); printf ("Geben Sie fuer Strecke 1 y1 ein: \n"); scanf ("%lf", &y1); printf ("Geben Sie fuer Strecke 1 x2 ein: \n"); scanf ("%lf", &x2); printf ("Geben Sie fuer Strecke 1 y2 ein: \n"); scanf ("%lf", &y2); printf ("Geben Sie fuer Strecke 2 x3 ein: \n"); scanf ("%lf", &x3); printf ("Geben Sie fuer Strecke 2 y3 ein: \n"); scanf ("%lf", &y3); printf ("Geben Sie fuer Strecke 2 x4 ein: \n"); scanf ("%lf", &x4); printf ("Geben Sie fuer Strecke 2 y4 ein: \n"); scanf ("%lf", &y4); printf ("a=%f nb=%f nc=%f n",x1, y1, x2, y2, x3, y3, x4, y4); { m1= (y2-y1)/(x2-x1); /* berechnung der Steigung der Geraden */ m2= (y4-y3)/(x4-x3); if (m1 == m2) printf("Strecken sind Parallel"); else if (n1 < n2) printf("%lf schneiden sich nicht %lf \"); n1= y1-(y2-y1)/(x2-x1)*x1; /* Abstände zur x-Achse */ n2= y3-(y4-y3)/(x4-x3)*x3; Ergebnisx = (n2-n1)/(m1-m2); /* berechnung der Scnittpunkte für x und y Koordinaten */ Ergebnisy = m1*(n2-n1)/(m1-m2)+n1; printf("Schnittkoardinate fuer x betraegt: %lf/n", Ergebnisx); printf("Schnittkoardinate fuer y betraegt: %lf/n", Ergebnisy); } getchar (); }
Wie du alleine schon am Syntaxhighlighting hier im Forum siehst, ist der Code voller Schreibfehler. Das kann gar nicht übersetzen. Und selbst wenn man die Schreibfehler (Zeilen 27 und 39) wegmacht, bleiben sehr viele Compilerwarnungen:
test.c: In function ‘main’: test.c:27:3: warning: too many arguments for format [-Wformat-extra-args] printf ("a=%f nb=%f nc=%f \n",x1, y1, x2, y2, x3, y3, x4, y4); ^ test.c:39:9: warning: format ‘%lf’ expects a matching ‘double’ argument [-Wformat] printf("%lf schneiden sich nicht %lf \n"); ^ test.c:39:9: warning: format ‘%lf’ expects a matching ‘double’ argument [-Wformat] printf("%lf schneiden sich nicht %lf \n"); ^ test.c:52:1: warning: control reaches end of non-void function [-Wreturn-type] } ^ test.c:38:10: warning: ‘n1’ may be used uninitialized in this function [-Wuninitialized] if (n1 < n2) ^ test.c:38:10: warning: ‘n2’ may be used uninitialized in this function [-Wuninitialized] if (n1 < n2) ^
Die darfst du getrost alle als schwerwiegende Fehler ansehen, die dir der Compiler bloß nicht als Fehler ankreiden darf, da der Standard allerlei Unsinn erlaubt, in der Annahme der Programmierer wüsste schon, was er da tut. Das ist aber bei Anfänger nicht der Fall, daher Warnungen immer auf Maximum (auch als Profi) und Warnungen als Fehler ansehen.
P.S.: Es ist furchtbar mit anzusehen, wie dein ursprüngliches Programm, das bis auf eine Kleinigkeit schon auf einem guten Weg zur Abstraktion war, nun zu diesem Ungeheuer geworden ist, da du an den Grundlagen scheiterst, wie man Werte einliest und ausgibt oder mit structs umgeht
.
-
Füge in die Funktion main die Zeile: struct point a, b, c, d, x; ein. Damit deklarierst und definierst Du die Variablen. Scanf rufst Du wie folgt auf:
scanf("%f %f %f %f", &a.x, &a.y, &b.x, &b.y);
Scanf erwartet die Adressen der Variablen, daher der Adressoperator. Da der Punktoperator . stärker bindet als der Adressoperator, brauchst Du keine Klammern.
Für die Variablen c und d machst Du das gleiche.
Gruß
Bonni4355
-
Bonni4355 schrieb:
scanf("%f %f %f %f", &a.x, &a.y, &b.x, &b.y);
Dann doch aber mit %lf, da ermitlerweile double nimmt.
-
DirkB schrieb:
Bonni4355 schrieb:
scanf("%f %f %f %f", &a.x, &a.y, &b.x, &b.y);
Dann doch aber mit %lf, da ermitlerweile double nimmt.
Hallo DirkB,
ich bezog mich auf die ursprüngliche Fassung. struct point enthält 2 Variablen vom Typ float. Mit den Änderungen müsste das Programm compilierbar sein. Im übrigen sehe ich keine Notwendigkeit, hier float durch double zu ersetzen.
Gruß
Bonni4355
-
Hey, muss nächste Woche das gleiche Programm abgeben ^^
Hab mir da was nettes zusammen geschrieben ...
wenn Interesse besteht einfach melden.Gruß