Aufgabe
-
Schreiben Sie ein Programm, das vier (x,y)-Koordinatenpaare einliest und dann entscheidet, ob es sich
bei der durch die vier Punkte in der Ebene definierten Figur um
• ein Quadrat [Bsp.: (1,1), (1,4), (4,1), (4,4) ]
• ein Rechteck [Bsp: (1,1), (1,4), (5,1), (5,4) ]
• ein Parallelogramm [Bsp.: (3,3), (7,3), (1,1), (5,1) ]
• ein Trapez [Bsp.: (0,0), (1,0), (0,5), (1,3)
oder: (1,2), (4,2), (1,1), (3,1)
oder: (1,1), (5,1), (2,4), (8,4) ]
• eine Raute [Bsp.: (1,3), (3,3), (2,1), (2,5)
oder: (3,3), (3,1), (1,2), (5,2) ]
oder
• ein beliebiges Vieleck [Bsp.: (1,5), (5,5), (3,4), (3,1) ]
handelt.evtl kann mir jemand helfen da ich es nicht richtig realisiert bekomme.
verstehe nicht wie ich dem programm sagen kann das z.B die Punkte 0,0), (1,0), (0,5), (1,3) ein trapez sind und kein rechteck?
hier mein Quellcode
#include <stdio.h> int quadrat (int a,int b,int c,int d) { if (a=b=c=d) { printf("Es handelt sich hier um ein Quadrat"); } else { printf("Es ist kein Quadrat"); } } int rechteck (int a,int b,int c,int d) { if (a==b&&c==d) { printf("Es handelt sich hier um ein Rechteck"); } else { printf("/nEs ist kein Rechteck"); } } int main() { int a; int b; int c; int d; int x1; int x2; int x3; int x4; int y1; int y2; int y3; int y4; printf("Bitte x1 eingeben"); fflush(stdout); scanf ("\n%d",&x1); printf("Bitte y1 eingeben"); fflush(stdout); scanf ("\n%d",&x2); printf("Bitte x2 eingeben"); fflush(stdout); scanf ("\n%d",&x3); printf("Bitte y2 eingeben"); fflush(stdout); scanf ("\n%d",&x4); printf("Bitte x3 eingeben"); fflush(stdout); scanf ("\n%d",&y1); printf("Bitte y3 eingeben"); fflush(stdout); scanf ("\n%d",&y2); printf("Bitte x4 eingeben"); fflush(stdout); scanf ("\n%d",&y3); printf("Bitte y4 eingeben"); fflush(stdout); scanf ("\n%d",&y4); a=x1+x2; b=x3+x4; c=y1+y2; d=y3+y4; quadrat(a,b,c,d); rechteck(a,b,c,d); }
thx
edit durch SeppJ: Ich habe mal dafür gesorgt, dass dein Code wenigstens ein bisschen formatiert aussieht. Benutze bitte für Code immer die cpp-Tags (unter den Smileys). Außerdem ins C-Forum verschoben, denn du machst kein C++.
-
Hallo sputnik83,
du solltest zunächst dein Programm für alle Fälle ausimplementieren, die du bereits prüfen kannst. Du wirst feststellen, dass deine Lösung nicht kompiliert, da deine Funktion rechteck(...) und quadrat(...) den Rückgabetyp int besitzen, aber kein Ergebnis zurückliefern.
Die Bedingung beim Quadrat solltest du mal testen - aber ich bin sicher den Fehler findest du ohne Hilfe
Um die Fälle voneinander unterscheiden zu können musst du zusätzlich Aussagen über die Winkel machen können. Bei der Raute z.B. sind die vier Seiten gleich lang und gegenüberliegende Winkel gleich groß. D.h. du kannst testen ob deine Eingabepunkte die Bedingungen erfüllen - wenn ja kannst weiter testen, ob deine Figur rechtwinklig ist => Quadrat.
Wenn du eine geeignete Reihenfolge wählst, kannst du die Figuren systematisch prüfen.
Viele Grüße,
MaBa
-
Hallo.
Also du solltest dir mal überlegen was das Besondere an einem Quadrat und Rechteck usw. ist. Fest steht jedes Quadrat ist auch ein Rechteck, aber nicht jedes Rechteck ist auch ein Quadrat.
Zuerst definieren wo wlche Punkte liegen :
C D
A B
als Beispiel
Also bei einem Quadrat gilt Folgendes :
Strecke CD == AB && AC == DB && CD == ACAlso bei einem Rechteck gilt Folgendes :
Strecke CD == AB && AC == DBFür die anderen schua mal bei WIKI
-
Fischkopf2009 schrieb:
Zuerst definieren wo wlche Punkte liegen :
C D
A B
als Beispiel
Also bei einem Quadrat gilt Folgendes :
Strecke CD == AB && AC == DB && CD == ACAlso bei einem Rechteck gilt Folgendes :
Strecke CD == AB && AC == DBDas reicht noch nicht => Winkel.
sputnik83: Kennst du das Skalarprodukt? Das bietet sich hier an:
Wenn v der Vektor von A nach B und w der Vektor von A nach C ist, muss nur |v| == |w| und v * w == 0 (Skalarprodukt) (=> rechter Winkel) gelten, damit es ein Quadrat ist. Die anderen Bedingungen gehen so ähnlich.
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x) in das Forum C (C89 und C99) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Sag mal welche Schulart, Studiengang und welches Semester. Dann kann man die Vörschläge hier an dein Vorwissen anpassen.
Aber so wie das aussieht liegen die Rechtecke orthogonal im Raum und die Parallelel bei Trapez auch parallel zu x oder y.
-
DirkB schrieb:
Sag mal welche Schulart, Studiengang und welches Semester. Dann kann man die Vörschläge hier an dein Vorwissen anpassen.
Kann man?
-
komme leider nicht weiter
ich weiss nicht wie ich das mit den vergleichen machen soll?
also qaudrat und rechteck sind klar aber parallelogramm ,trapez und raute keine ahnung.
hat keiner eine lösung für mich?
-
Wie sieht dein bisheriger Code aus? Und noch viel wichtiger: Beantworte bitte die Frage nach deinem Kenntnisstand. Ich hab keine Ahnung, ob dir mein letzter Post geholfen hat (ich vermute eher nicht).
-
hier mein code
#include <stdio.h> int quadrat (int a,int b,int c,int d) { if (a=b=c=d) { printf("Es handelt sich hier um ein Quadrat"); } else { printf("Es ist kein Quadrat"); } } int rechteck (int a,int b,int c,int d) { if (a==b &&c==d) { printf("Es handelt sich hier um ein Rechteck"); } else { printf("/nEs ist kein Rechteck"); } } int parallelo (int a,int b ,int c,int d) { } int main() { int a; int b; int c; int d; int x1; int x2; int x3; int x4; int y1; int y2; int y3; int y4; printf("Bitte x1 eingeben"); fflush(stdout); scanf ("\n%d",&x1); printf("Bitte y1 eingeben"); fflush(stdout); scanf ("\n%d",&x2); printf("Bitte x2 eingeben"); fflush(stdout); scanf ("\n%d",&x3); printf("Bitte y2 eingeben"); fflush(stdout); scanf ("\n%d",&x4); printf("Bitte x3 eingeben"); fflush(stdout); scanf ("\n%d",&y1); printf("Bitte y3 eingeben"); fflush(stdout); scanf ("\n%d",&y2); printf("Bitte x4 eingeben"); fflush(stdout); scanf ("\n%d",&y3); printf("Bitte y4 eingeben"); fflush(stdout); scanf ("\n%d",&y4); a=x1+x2; b=x3+x4; c=y1+y2; d=y3+y4; quadrat(a,b,c,d); rechteck(a,b,c,d); }
bin erstes semester
-
sputnik1983 schrieb:
bin erstes semester
Ja ne, is klar. Aber was? Physik, Informatik, Mathe, Biologie, ...., ..., BWL und welche Schule TU, FH, Techniker-, oder wie oder was.
Das ist Stoff der
- 5. Klasse : Eigenschaften von den Figuren
- 6. Klasse : Koordinatensystem
- 7. Klasse : Geraden, Strecken, AbstandDann mal überlegen wie man den Abstand der Punkte entlag einer Achse berechnet.
x1+x2 ist es nicht.
-
das wäre laut wiki die formel für ein parallelo
2*(a*a+b*b)=e*e+f*f
-
Erstes Semester... Welches Fach? Dann darf ich wohl voraussetzen, dass du das Standard-Skalarprodukt entweder kennst oder es dir selbst aneignen kannst.
if (a=b=c=d)
Hier weist du c den Wert von d, b den neuen Wert von c und a den neuen Wert von b zu.
Ansonsten weiß ich gar nicht, wo ich anfangen soll. Für Punkte im zweidimensionalen Raum brauchst du offensichtlich zwei Koordinaten, nennen wir sie mal x- und y-Koordinate. Du liest zwar zwei Koordinaten ein (auch wenn die Namensgebung der Variablen von der Beschreibung abweicht, die du dem User gibst), aber dann addierst du einfach beide Werte. Beispiel: Du bekommst den Punkt (3,4) vom User. Du machst daraus a = 3 + 4 = 7. Wie willst du dann den Punkt (3,4) von (4,3) oder (5,2) unterscheiden? Also brauchen deine Funktionen mehr als vier Parameter, weil du acht Koordinaten von vier Punkten betrachtest.
Desweiteren sind deine Kriterien für Quadrate und Rechtecke schlichtweg falsch. Nehmen wir mal an, a, b, c und d seien die vier eingegebenen Punkte (als Tupel) und das von mir zitierte if wäre so, wie du es haben möchtest. Dann wäre nach diesen beiden Funktionen ein Viereck genau dann ein Quadrat, wenn alle vier Punkte identisch sind, und genau dann ein Rechteck, wenn der erste gleich dem zweiten und der dritte gleich dem vierten Punkt ist (was den lustigen Nebeneffekt hat, dass ein "Rechteck" kein "Rechteck" mehr ist, wenn man die Punkte in einer anderen Reihenfolge angibt).
Um auf korrekte Bedingungen zu kommen, musst du die Differenzen zwischen den verschiedenen Punkten betrachten (=> Vektoren).
-
fh info
ja ist mir klar das es keine punkte sind sondern koordinaten aber ich stehe im moment voll auf dem schlauch
-
habe meine code geändert geht aber trotzdem nicht.
leigt es daran das man den betrag bilden muss und er mit - nicht geht?
#include <stdio.h> int quadrat (int a,int b,int c,int d) { if (a==d&&b==d) { printf("Es handelt sich hier um ein Quadrat"); } else { printf("Es ist kein Quadrat"); } } int rechteck (int a,int b,int c,int d) { if (a==b - c==d) { printf("Es handelt sich hier um ein Rechteck"); } else { printf("/nEs ist kein Rechteck"); } } int parallelo (int a,int b ,int c,int d) { } int main() { int a; int b; int c; int d; int x1; int x2; int x3; int x4; int y1; int y2; int y3; int y4; printf("Bitte x1 eingeben"); fflush(stdout); scanf ("\n%d",&x1); printf("Bitte y1 eingeben"); fflush(stdout); scanf ("\n%d",&x2); printf("Bitte x2 eingeben"); fflush(stdout); scanf ("\n%d",&x3); printf("Bitte y2 eingeben"); fflush(stdout); scanf ("\n%d",&x4); printf("Bitte x3 eingeben"); fflush(stdout); scanf ("\n%d",&y1); printf("Bitte y3 eingeben"); fflush(stdout); scanf ("\n%d",&y2); printf("Bitte x4 eingeben"); fflush(stdout); scanf ("\n%d",&y3); printf("Bitte y4 eingeben"); fflush(stdout); scanf ("\n%d",&y4); a=x1-x2; b=x3-x4; c=y1-y2; d=y3-y4; quadrat(a,b,c,d); rechteck(a,b,c,d); }
-
Bei dem was du vorhast mußt du beim Quadrat
if (a==b && b==c && c==d && d==a)
und beim Rechteck
if (a==b && c==d)
schreiben.
Als Hilfe zum Syntaxgedacht, denn ob das der richtige Weg ist wage ich zu bezweifeln.
Hier war schon mal der Hinweise auf Wikipedia, da stehen schon mal die Eigenschaften der Figuren drin, auch die man schon vergessen hat.
-
sputnik1983 schrieb:
fh info
Ok.
Mal ein paar Hinweise:
Die Eckpunkte werden i.A. mit A,B,C,D bezeichnet gegen den Uhrzeigersinn.
Du kannst dies bei der Eingabe berücksichtigen (verlangen).Dann weißt du welche Punkte nebeneinander und gegenüber liegen.
Dann kannst du die Abstände und Diagonalen bestimmen.
Und mit der hier genannten Formel fürs Parallelogramm und ähnlichen Formeln für die anderen Figuren kannst du schon mal eine Menge prüfen.
-
Wenn die Punkte
D C A B
erst einmal auf diese Form gebracht wurden (oder eine Andere, deine Entscheidung), dann braucht man nicht unbedingt die Winkel zu bestimmen.
Im oben genannten Beispiel:
dxAD, dxBC, dyAB und dyCD (die jeweilige Verschiebung) bestimmen.
Alles null: Rechteck/Quadrat, CD und AD vergleichen, gleich?Quadrat, sonst Rechteck.
dxAD==dxBC und dyCD==0 und dyAB==0 -> Parallelogramm.
dxAD==-dxCB und dyCD==0 und dyAB==0 -> gleichschenkliges Trapez u.s.w.Edit: Das gilt natürlich nur für Figuren ohne Rotation.
-
Vicious Falcon schrieb:
erst einmal auf diese Form gebracht wurden (oder eine Andere, deine Entscheidung), dann braucht man nicht unbedingt die Winkel zu bestimmen.
Dann musst du aber erst mal nen Basiswechsel durchführen, was aufwendiger als ein simples Skalarprodukt ist.
-
Michael E. schrieb:
Dann musst du aber erst mal nen Basiswechsel durchführen, was aufwendiger als ein simples Skalarprodukt ist.
Das ist FH erstes Semester, die sind gerade 6-8 Wochen dabei.
Aus der Aufgabenstellung kann man schon sehen das die Quadrate, und Rechteckeke alle schön parallel zu den Achsen liegen. Ebenso für 2 Seiten des Parallelogramms und die Diagonalen der Raute.
Hier geht es erstmal nicht um Mathe sondern ums Programmieren. Von daher sollte das mit den gegebenen Koordinaten ausreichen.
Wenn der Satz des Pythagoras zur Anwendung kommt ist das ausreichend.Wer das Skalarprodukt kennt soll das machen.