Willkommen |
|
myGully |
|
Links |
|
Forum |
|
|
|
 |
09.12.11, 10:43
|
#1
|
Anfänger
Registriert seit: Dec 2011
Beiträge: 14
Bedankt: 1
|
Brauche Hilfe bei meiner Aufgabe (in C)
Hallo^^
ich brauche etwas Hilfe bei meiner Programmier Aufgabe. Ein Beispiel hab ich schon, aber das zweite kapier ich nicht.
Hier ist mal die Angabe:
Es darf nur in C geschrieben werden.
Wir sind bis jetzt noch nicht weiter als bei if/else Anweisungen, und mit den Schleifen haben wir angefangen.
Wäre echt nett wenn mir da wer helfen könnte.
MfG
|
|
|
09.12.11, 11:22
|
#2
|
Hinter dir!
Registriert seit: Apr 2010
Beiträge: 1.125
Bedankt: 487
|
Dann zeig doch mal was du schon hast.
|
|
|
09.12.11, 12:19
|
#3
|
Anfänger
Registriert seit: Dec 2011
Beiträge: 14
Bedankt: 1
|
Ich hab noch gar nichts. Ich weiss nich mal wo ich anfangen soll.
|
|
|
09.12.11, 12:58
|
#4
|
Hinter dir!
Registriert seit: Apr 2010
Beiträge: 1.125
Bedankt: 487
|
Du musst da einfach systematisch vorgehen. Überleg dir, was du alles brauchst und fang an.
Zu aller erst musst du die Koordinaten der Eckpunkte einlesen. Den Code dafür habe ich dir hier mal geschrieben:
Code:
#include <stdlib.h>
#include <iostream>
#include <conio.h>
using namespace std;
int main(){
int Ax, Ay, Bx, By, Cx, Cy, Dx, Dy;
//Eckunkte einlesen
printf("Bitte Punkt A in der Form x.y eingeben: ");
scanf("%d.%d", &Ax, &Ay);
printf("Bitte Punkt B in der Form x.y eingeben: ");
scanf("%d.%d", &Bx, &By);
printf("Bitte Punkt V in der Form x.y eingeben: ");
scanf("%d.%d", &Cx, &Cy);
printf("Bitte Punkt D in der Form x.y eingeben: ");
scanf("%d.%d", &Dx, &Dy);
//Eckpunkte zur Kontrolle nochmal ausgeben
printf("\nWerte:\n");
printf("A: x = %d, y = %d\n", Ax, Ay);
printf("B: x = %d, y = %d\n", Bx, By);
printf("C: x = %d, y = %d\n", Cx, Cy);
printf("D: x = %d, y = %d\n", Dx, Dy);
getch();
}
Besser wäre es hier eigentlich mit einer Struktur zu arbeiten, aber da seid ihr wohl noch nicht.
Als nächsten Schritt musst du dir überlegen, wie du aus 4 gegebenen Punkten herausfinden kannst, um was für ein Objekt es sich handelt.
Dafür hast du ja unter der Aufgabenstellung 2 wertvolle Hinweise.
|
|
|
09.12.11, 14:47
|
#5
|
Anfänger
Registriert seit: Dec 2011
Beiträge: 14
Bedankt: 1
|
Wir sind schon bei den Strukturen, wenn du damit ein Struktogramm meinst. Dass muss ich auch noch machen. Aber wenn ich den Code habe, sollte das Struktogramm kein Problem sein
Achja, wir benutzen noch immer nur #include<stdio.h> und was "using namespace std;" wissen wir auch noch nicht O:
|
|
|
09.12.11, 15:03
|
#6
|
Hinter dir!
Registriert seit: Apr 2010
Beiträge: 1.125
Bedankt: 487
|
Nein ich meine kein Struktogramm ich meine soetwas:
Code:
struct Point {int x, y;} Point[4];
Wenn du "getch();" am Ende entfernst reicht es auch wenn du stdio.h includest und den Rest weg nimmst (auch das "using namespace std;").
|
|
|
10.12.11, 14:32
|
#7
|
Anfänger
Registriert seit: Dec 2011
Beiträge: 14
Bedankt: 1
|
Aber wie soll ich das coden?
|
|
|
10.12.11, 15:11
|
#8
|
Ist öfter hier
Registriert seit: Nov 2009
Beiträge: 219
Bedankt: 189
|
naja, du sucht die die eigenschaften der verschiedenen Körper raus und packst das ganze in if schleifen.
wenns ohne struct funktionieren soll müsste das so ähnlich ausschauen.
Code:
bool quadrat()
{
if(x2-x1 == x4-x3 && y2-y1 == y4-y3 && diagonale1 == diagonale2)
return true;
else
return false;
}
|
|
|
10.12.11, 17:42
|
#9
|
Hinter dir!
Registriert seit: Apr 2010
Beiträge: 1.125
Bedankt: 487
|
Zitat:
Zitat von waldfee0071
Code:
bool quadrat()
{
if(x2-x1 == x4-x3 && y2-y1 == y4-y3 && diagonale1 == diagonale2)
return true;
else
return false;
}
|
Dafür würde ich keine extra Funktion schreiben. Die Kurzform von deinem Code wäre nämlich
Code:
bool quadrat() { return (x2-x1 == x4-x3 && y2-y1 == y4-y3 && diagonale1 == diagonale2); }
Ich habe mal etwas Code zu meinem vorigen Post ergänzt. Getestet habe ich es nicht wirklich, Fehler können also durchaus noch drin sein. Aber ansonsten sollte es so eigentlich funktionieren.
Code:
#include <stdio.h>
#include <Math.h>
int main(){
bool found = false;
int Ax, Ay, Bx, By, Cx, Cy, Dx, Dy;
double AB, BC, CD, DA;
//Eckunkte einlesen
printf("Bitte Punkt A in der Form x.y eingeben: ");
scanf("%d.%d", &Ax, &Ay);
printf("Bitte Punkt B in der Form x.y eingeben: ");
scanf("%d.%d", &Bx, &By);
printf("Bitte Punkt V in der Form x.y eingeben: ");
scanf("%d.%d", &Cx, &Cy);
printf("Bitte Punkt D in der Form x.y eingeben: ");
scanf("%d.%d", &Dx, &Dy);
//Eckpunkte zur Kontrolle nochmal ausgeben
printf("\nWerte:\n");
printf("A: x = %d, y = %d\n", Ax, Ay);
printf("B: x = %d, y = %d\n", Bx, By);
printf("C: x = %d, y = %d\n", Cx, Cy);
printf("D: x = %d, y = %d\n", Dx, Dy);
AB = sqrt((Ax - Bx) * (Ax - Bx) + (Ay - By) * (Ay - By));
BC = sqrt((Bx - Cx) * (Bx - Cx) + (By - Cy) * (By - Cy));
CD = sqrt((Cx - Dx) * (Cx - Dx) + (Cy - Dy) * (Cy - Dy));
DA = sqrt((Dx - Ax) * (Dx - Ax) + (Dy - Ay) * (Dy - Ay));
if (AB == BC && AB == CD && AB == DA) { //alle 4 Seiten sind gleich lang
found = true;
if (Ax != Dx || Ay != Cy) printf("\nEs handelt sich um ein Rhombus!"); //da kein rechter Winkel existiert
else printf("\nEs handelt sich um ein Quadrat!"); //da 4 rechte Winkel existieren
}
if (AB == CD && DA == BC) { //die jeweils gegenüberliegenden Seiten sind gleich lang
found = true;
if (Ax != Dx || Ay != Cy) printf("\nEs handelt sich um ein Parallelogramm!"); //da kein rechter Winkel existiert
else printf("\nEs handelt sich um ein Rechteck!"); //da 4 rechte Winkel existieren
}
if ((AB == DA && BC == CD) || (AB == BC && CD && DA)) {
found = true;
printf("\nEs handelt sich um ein Deltoid!"); //da 2x2 oder 4 gleichlange Seiten existieren
}
if (!found) printf("\nEs handelt sich um ein allgemeines Viereck!"); //da bis jetzt keine übereinstimmung gefunden wurde
}
|
|
|
10.12.11, 20:36
|
#10
|
Hinter dir!
Registriert seit: Apr 2010
Beiträge: 1.125
Bedankt: 487
|
Zitat:
Zitat von KanuKkidz
Der Programmierstil ist allerdings ziemlich unterdurchschnittlich...
|
Aha und warum bitteschön?
|
|
|
10.12.11, 21:48
|
#11
|
Hinter dir!
Registriert seit: Apr 2010
Beiträge: 1.125
Bedankt: 487
|
1. bei einem so kleinen Programm dürfte das wohl unproblematisch sein
2. hast du schon bei 1. gesagt
3. hast du schon bei 1. gesagt
4. hast du schon bei 1. gesagt
5. + 6. in meinem Code kommt keine quadrat-Funktion vor
|
|
|
10.12.11, 22:42
|
#12
|
Anfänger
Registriert seit: Dec 2011
Beiträge: 14
Bedankt: 1
|
So Langsam blick ich gar nicht mehr durch O:
|
|
|
10.12.11, 23:00
|
#13
|
Hinter dir!
Registriert seit: Apr 2010
Beiträge: 1.125
Bedankt: 487
|
Ich glaube nicht, dass ich eine mittelmäßige Uni besuche oder einen schlechten Programmierstil habe.
Ich bin auch nicht patzig geworden und die Krituk ist unangemessen. Ich habe den Code nur mal kurz nebenbei geschrieben und nichtmal auf Fehler getestet. Da fang ich nicht erst noch an den Code in Methoden auszulagern.
Außerdem hat das hier nicht wirklich was zu suchen und wir sollte es gut sein lassen.
|
|
|
10.12.11, 23:10
|
#14
|
Anfänger
Registriert seit: Aug 2010
Beiträge: 41
Bedankt: 47
|
Bin mir nicht völlig sicher, aber ich glaube, der Check für den Rhombus ist so nicht ganz richtig. Vor allem würde man sich bei einem Koordinatencheck ja irgendwie auf zumindest teilweise achsenparallel liegende Objekte beschränken, was aber so aus der Angabe nicht hervorgeht.
Klarer wäre es meiner Meinung nach, noch zusätzlich AC und BD zu berechnen und den Rhombuscheck über die Länge der Diagonalen zu machen. So sollte man auch schief im Koordinatensystem liegende Quadrate erwischen und nicht fälschlicherweise zu Rhomben degradieren.
|
|
|
11.12.11, 13:25
|
#15
|
Anfänger
Registriert seit: Dec 2011
Beiträge: 14
Bedankt: 1
|
@Your_Conscience du hast im Code
Code:
#include <stdio.h>
#include <Math.h>
int main(){
bool found = false;
int Ax, Ay, Bx, By, Cx, Cy, Dx, Dy;
double AB, BC, CD, DA;
//Eckunkte einlesen
printf("Bitte Punkt A in der Form x.y eingeben: ");
scanf("%d.%d", &Ax, &Ay);
printf("Bitte Punkt B in der Form x.y eingeben: ");
scanf("%d.%d", &Bx, &By);
printf("Bitte Punkt V in der Form x.y eingeben: ");
scanf("%d.%d", &Cx, &Cy);
printf("Bitte Punkt D in der Form x.y eingeben: ");
scanf("%d.%d", &Dx, &Dy);
//Eckpunkte zur Kontrolle nochmal ausgeben
printf("\nWerte:\n");
printf("A: x = %d, y = %d\n", Ax, Ay);
printf("B: x = %d, y = %d\n", Bx, By);
printf("C: x = %d, y = %d\n", Cx, Cy);
printf("D: x = %d, y = %d\n", Dx, Dy);
AB = sqrt((Ax - Bx) * (Ax - Bx) + (Ay - By) * (Ay - By));
BC = sqrt((Bx - Cx) * (Bx - Cx) + (By - Cy) * (By - Cy));
CD = sqrt((Cx - Dx) * (Cx - Dx) + (Cy - Dy) * (Cy - Dy));
DA = sqrt((Dx - Ax) * (Dx - Ax) + (Dy - Ay) * (Dy - Ay));
if (AB == BC && AB == CD && AB == DA) { //alle 4 Seiten sind gleich lang
found = true;
if (Ax != Dx || Ay != Cy) printf("\nEs handelt sich um ein Rhombus!"); //da kein rechter Winkel existiert
else printf("\nEs handelt sich um ein Quadrat!"); //da 4 rechte Winkel existieren
}
if (AB == CD && DA == BC) { //die jeweils gegenüberliegenden Seiten sind gleich lang
found = true;
if (Ax != Dx || Ay != Cy) printf("\nEs handelt sich um ein Parallelogramm!"); //da kein rechter Winkel existiert
else printf("\nEs handelt sich um ein Rechteck!"); //da 4 rechte Winkel existieren
}
if ((AB == DA && BC == CD) || (AB == BC && CD && DA)) {
found = true;
printf("\nEs handelt sich um ein Deltoid!"); //da 2x2 oder 4 gleichlange Seiten existieren
}
if (!found) printf("\nEs handelt sich um ein allgemeines Viereck!"); //da bis jetzt keine übereinstimmung gefunden wurde
}
Einige Fehler drin,
|
|
|
11.12.11, 13:51
|
#16
|
Hinter dir!
Registriert seit: Apr 2010
Beiträge: 1.125
Bedankt: 487
|
Welche Fehler sind denn drin?
Also laut Compiler sind keine Fehler dirn, es sollte also höchstens falsch berechnet werden.
Bei den Abfragen um welches Viereck es sich handelt kann ich dir nicht sagen ob es richtig ist, da ich nicht nachgeguckt habe, was die Eigenschaften der jeweiligen Flächen sind.
Das ist halt nur noch das was ich noch so ungefähr aus der Schule weis
Das solltest du allerdings hinbekommen, da es ja jetzt kein programmiertechnisches, sondern nur noch ein mathematisches Problem ist.
|
|
|
11.12.11, 15:16
|
#17
|
Anfänger
Registriert seit: Dec 2011
Beiträge: 14
Bedankt: 1
|
Bei mir sind die Fehler alle in den Zeilen 5&35.
|
|
|
11.12.11, 16:09
|
#18
|
Hinter dir!
Registriert seit: Apr 2010
Beiträge: 1.125
Bedankt: 487
|
Dann sag mal, was für einen Comiler du benutzt und welche Fehlermeldung er ausgibt,
|
|
|
11.12.11, 16:13
|
#19
|
Anfänger
Registriert seit: Dec 2011
Beiträge: 14
Bedankt: 1
|
Comiler? Du meinst doch Compiler oder?
|
|
|
11.12.11, 16:15
|
#20
|
Hinter dir!
Registriert seit: Apr 2010
Beiträge: 1.125
Bedankt: 487
|
Ja genau sry^^
|
|
|
11.12.11, 16:33
|
#21
|
Anfänger
Registriert seit: Dec 2011
Beiträge: 14
Bedankt: 1
|
Ich nehm den GNU GCC Compiler. Wir sollen auch nur den benutzen O:
|
|
|
11.12.11, 16:37
|
#22
|
Hinter dir!
Registriert seit: Apr 2010
Beiträge: 1.125
Bedankt: 487
|
Und was für eine Fehlermeldung gibt er aus?
|
|
|
11.12.11, 16:44
|
#23
|
Anfänger
Registriert seit: Dec 2011
Beiträge: 14
Bedankt: 1
|
5 error: 'bool' undeclared(first use in this function)
5 error: (Each undeclared indentifier is reported only once
5 error: for each function it appears in)
5 error:expected ';' before 'found'
35 error: 'found' undeclared (first use in this function)
35 error: 'true' undeclared (first use in this function)
Das waren alle
|
|
|
11.12.11, 16:49
|
#24
|
Hinter dir!
Registriert seit: Apr 2010
Beiträge: 1.125
Bedankt: 487
|
Include mal stdbool.h.
|
|
|
11.12.11, 16:50
|
#25
|
Anfänger
Registriert seit: Jan 2011
Beiträge: 16
Bedankt: 3
|
Der Fehler liegt also am Boolean der eh nicht notwendig ist, da es else if und else gibt
Bei der Aufgabenstellung werden die Diagonalen ja extra erwaehnt - also sollte man wohl wie stormwiz2 gesagt hat AC und BD berechnen und damit die Art des Vierecks bestimmen -> evtl. einfach mal auf einem Blatt papier aufzeichnen und nachsehen 
Ansonsten koennen die x- und y-Koordinaten eigentlich auch double sein und so eingelesen werden
statt dem boolean gibt es auch if,else if und else (hier wird bei einem Quadrat auch Rechteck und Deltoid ausgegeben) und gerade bei einer "Anfaengeraufgabe" kann man ueberlegen statt einem Entscheidungsbaum alle Vierecktypen einzeln abzufragen
Ich bin mir nicht sicher ob man noch pruefen sollte ob es ueberhaupt ein Viereck ist(also maximal 2 Punkte auf einer Geraden liegen)
Ausserdem kann er das auch selbst weitermachen und nur noch bei einzelnen Fehlern nachfragen
|
|
|
11.12.11, 16:59
|
#26
|
Hinter dir!
Registriert seit: Apr 2010
Beiträge: 1.125
Bedankt: 487
|
Zitat:
Zitat von rabite
(hier wird bei einem Quadrat auch Rechteck und Deltoid ausgegeben)
|
Ein Rechteck kann auch ein Quadrat sein.
|
|
|
11.12.11, 17:04
|
#27
|
Anfänger
Registriert seit: Jan 2011
Beiträge: 16
Bedankt: 3
|
Ein Quadrat ist auch alle anderen Vierecktypen, allerdings soll wohl nur Quadrat ausgegeben werden 
Edit: ach ja - es sollte dann beim if, else if und else natuerlich entsprechend sortiert werden
|
|
|
11.12.11, 17:14
|
#28
|
Hinter dir!
Registriert seit: Apr 2010
Beiträge: 1.125
Bedankt: 487
|
Ok wenn das so ist, dann kann man die Abfragen auch so schreiben und die Deklaration von "found" entfernen.
Code:
if (AB == BC && AB == CD && AB == DA) {
if (Ax != Dx || Ay != Cy) printf("\nEs handelt sich um ein Rhombus!");
else printf("\nEs handelt sich um ein Quadrat!");
}
else if (AB == CD && DA == BC) {
if (Ax != Dx || Ay != Cy) printf("\nEs handelt sich um ein Parallelogramm!");
else printf("\nEs handelt sich um ein Rechteck!");
}
else if ((AB == DA && BC == CD) || (AB == BC && CD && DA)) {
printf("\nEs handelt sich um ein Deltoid!");
} else printf("\nEs handelt sich um ein allgemeines Viereck!");
|
|
|
11.12.11, 17:27
|
#29
|
Anfänger
Registriert seit: Jan 2011
Beiträge: 16
Bedankt: 3
|
Allerdings denke ich, wie gesagt, dass man die Diagonalen und nicht die x- und y-Koordinaten benutzen sollte
Und eventuell um es einfacher zu machen alles einzeln abfragen statt es zu verschachteln
|
|
|
13.12.11, 18:56
|
#30
|
Anfänger
Registriert seit: Dec 2011
Beiträge: 14
Bedankt: 1
|
Also... ich hab jetzt jemanden aus meiner Klasse gefunden, der das Beispiel geschafft hat O:
Hier ist der Code:
Code:
#include <stdio.h>
int main()
{
//In diesen beiden Zeilen werden die Variablen deklariert
double a, b, c, d, Ax, Ay, Bx, By, Cx, Cy, Dx, Dy, e, f;
printf("\n");
//Programmbeschreibung
printf("Dieses Programm liest die Koordinaten von vier Punkten ein und stellt fest, um welche Art von Viereck es sich handelt.\n\n");
//Soll den User bei der Eingabe helfen:
printf(" Ein Beispiel der Eingabe:\n->> A: ->> B: ->> C: ->> D:\n x3 x5 x3 x5\n y3 y5 y3 y5");
printf("\n");
printf("\n");
printf("\n->> A:\n x"); //Eingabeaufforderung von Ax
scanf("%lf", &Ax); //Ax wird eingelesen
printf(" y"); //Eingabeaufforderung von Ay
scanf("%lf", &Ay); //Ay wird eingelesen
printf("\n->> B:\n x"); //Eingabeaufforderung von Bx
scanf("%lf", &Bx); //Bx wird eingelesen
printf(" y"); //Eingabeaufforderung von By
scanf("%lf", &By); //By wird eingelesen
printf("\n->> C:\n x"); //Eingabeaufforderung von Cx
scanf("%lf", &Cx); //Cx wird eingelesen
printf(" y"); //Eingabeaufforderung von Cy
scanf("%lf", &Cy); //Cy wird eingelesen
printf("\n->> D:\n x"); //Eingabeaufforderung von Dx
scanf("%lf", &Dx); //Dx wird eingelesen
printf(" y"); //Eingabeaufforderung von Dy
scanf("%lf", &Dy); //Dy wird eingelesen
//Berechnungen...
a = sqrt ((Ax-Bx)*(Ax-Bx) + (Ay-By)*(Ay-By)); //Berechnung von a
b = sqrt ((Bx-Cx)*(Bx-Cx) + (By-Cy)*(By-Cy)); //Berechnung von b
c = sqrt ((Cx-Dx)*(Cx-Dx) + (Cy-Dy)*(Cy-Dy)); //Berechnung von c
d = sqrt ((Dx-Ax)*(Dx-Ax) + (Dy-Ay)*(Dy-Ay)); //Berechnung von d
e = sqrt (a+b); //Berechnung von e
f = sqrt (b+c); //Berechnung von f
printf("\n Es ist ein ...\n...allgemeines Viereck \n"); //Ausgabe der Vierecksart
if(a == c && b == d && e == f && a != b) //if-Anweisung für das Rechteck
{
printf("\n...Rechteck \n"); //Ausgabe der Vierecksart
}
if(a == b && a == c && a == d && e == f) //if-Anweisung für das Quadrat
{
printf("\n...Quadrat \n"); //Ausgabe der Vierecksart
}
if(a == b == c == d&&e != f) //if-Anweisung für den Rhombus
{
printf("\n...Rhombus (Raute) \n"); //Ausgabe der Vierecksart
}
if(a == b && c == d && a != c) //if-Anweisung für das/den Deltoid
{
printf("\n...Deltoid \n"); //Ausgabe der Vierecksart
}
if(a == c && b == d && e != f) //if-Anweisung für das Parallelogramm
{ //Anfang der if-Anweisung
printf("\n...Parallelogramm \n"); //Ausgabe der Vierecksart
} //Ende der if-Anweisung
return 0;
}
Jedoch habe ich dabei 4Warnings: 
Wie kann ich die beheben?
|
|
|
13.12.11, 21:22
|
#31
|
Anfänger
Registriert seit: Jan 2011
Beiträge: 16
Bedankt: 3
|
Die ersten beiden in Z50 haetten wohl gerne math.h
Z73 mag das a==b==c==d nicht so ganz(und schlaegt Klammern vor - oder einfach genau so machen wie beim Quadrat)
Ausserdem werden e und f falsch berechnet (besser wie a-d berechnen; ein [fehlerhafter] Pythagoras geht hier nicht - rechte Winkel sind nicht zwingend)
Bei den if-s wird immer "allgemeines Viereck" und der genaue Typ ausgegeben(soweit ich sehe stimmt der Typ) aber ich wuerde "allgemeines Viereck nur ausgeben wenn sonst keiner passt - also nur das erste als if, die anderen als else if und "allgemeines Viereck" in den else Fall -- Alternativ kann man natuerlich alles ausgeben was passt, dann muesste bei einem Quadrat z.B. aber alles ausgegeben werden (hier ist es so wie ich es machen wuerde ausser dem else if und else bei "allgemeines Viereck")
|
|
|
14.12.11, 13:48
|
#32
|
Anfänger
Registriert seit: Dec 2011
Beiträge: 14
Bedankt: 1
|
Ich kapier ned ganz wie ich das machen soll:
Code:
Bei den if-s wird immer "allgemeines Viereck" und der genaue Typ ausgegeben(soweit ich sehe stimmt der Typ) aber ich wuerde "allgemeines Viereck nur ausgeben wenn sonst keiner passt - also nur das erste als if, die anderen als else if und "allgemeines Viereck" in den else Fall -- Alternativ kann man natuerlich alles ausgeben was passt, dann muesste bei einem Quadrat z.B. aber alles ausgegeben werden (hier ist es so wie ich es machen wuerde ausser dem else if und else bei "allgemeines Viereck")
|
|
|
Forumregeln
|
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren
HTML-Code ist Aus.
|
|
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:58 Uhr.
().
|