Wie programmier man das?

K

Konsti Krueger

Mitglied
Thread Starter
Dabei seit
26.12.2009
Beiträge
86
Reaktionspunkte
2
Hallo,
ich möchte ein Programm in C schreiben, das Volumen / Flächeninhalte verschiedener Körper / Flächen berechnet.
1. Es fragt, ob man eine Fläche oder einen Körper berechnen will.
2. Es fragt, was es für ein Körper / eine Fläche ist (Dreieck, Quadrat; Tetraeder (oder wie das geschrieben wird), Quader). Man soll eine Abkürzung eintippen für Dreieck "D", für Quadrat "Q", für Tetraeder "T", für Quader "Q".
3.Das Programm fragt nach den Maßen, die man für den Körper / die Fläche braucht.
4. Das Ergebnis wird ausgerechnet und angezeigt.
Mein Problem ist, dass ich keine vernünftige Anleitung (auf Deutsch) finde und dass ich bis jetzt nur dieses Programm programmieren kann:
Code:
#include <stdio.h> int main(void)
{
	int a,b,c;
	printf("Bitte Länge des Quaders eingeben:\n");
	scanf("%d",&a);
	printf("Bitte Breite des Quaders eingeben:\n");
	scanf("%d",&b);
	printf("Bitte Höhe des Quaders eingeben:\n");
	scanf("%d",&c);
	printf("Quaderoberfläche:%d\n", 2 * (a * b + a * c + b * c));
	return 0;
}
Kann mir jemand helfen?
 
Hast du mal ein Tutorial oder ein Buch über C durchgelesen? Darin solltest du auf viele Anregungen stoßen!

Du brauchst Bedingungen (if-else if-else oder switch-case).
Ein denkbarer Ansatz wäre:

Code:
// Variablen
char option
Variable für Ergebnis

// Wahl des Volumens/der Fläche
Ausgabe "Dreieck, Quader oder Tetraeder?"
Eingabe option

// Berechnung der Geometrie
wenn option=='D' dann
     eingabe Länge/Höhe
     Berechnung des Ergebnisses für Dreieck
sonst option=='Q' dann
     eingabe Länge/Breite/Höhe
     Berechnung des Ergebnisses für Quader
sonst option=='T' dann
     eingabe foo
     Berechnung bar
anderfalls
     Ausgabe einer Fehlermeldung
     Programm beenden

// Ergebnis ausgeben
Ausgabe Ergebnis

Programmende

Irgendwie ist das Forum ungeeignet, ein Nassy-Schneidermann Diagramm zu formulieren, aber ich hoffe, du verstehst es trotzdem. Wenn du ein Einsteiger-Tutorial oder ein Buch für Anfänger durchgehst, sollte die Umsetzung kein Problem darstellen. Tutorials und Bücher findest du in Google viele ;)

Gruß, Micha
 
  • Gefällt mir
Reaktionen: Konsti Krueger
buchtip:
Helmut Erlenkötter - C Programmieren von Anfang an. 10€
 
Danke! Ich werde versuchen, das zu programmieren!
 
das ist doch eine Schulaufgabe!

ich vermute du solltest dir eigene Gedanken machen und nicht in Foren nach einer Lösung fragen...
 
Kann mir jemand sagen, ob das funktionieren könnte?
Xcode zeigt nämlich 9 Fehler an:" Stray '\303' in program"
Code:
#include <stdio.h> 
int main()
{
	char FK;
	printf("Fläche oder Körper?");
	scanf("%s",&FK);
	float a,b,c,h,r,g;
	char Q,R,D,P,T,K;
	if (FK==Fläche) {
		char Form;
		printf("Bitte Wählen:\nQuadrat = Q\nRechteck = R\nDreieck = D\nParallelogramm = P\nTrapez = T\nKreis = K");
		scanf("%c",&Form);
		if (Form==Q) {
			printf("Seitenlänge des Quadrates eingeben:");
			scanf("%f",&a);
			printf("Die Fläche des Quadrates ist %f.", a*a);
		}
		else if (Form==R) {
			printf("Seitenlänge a des Rechtecks eingeben:");
			scanf("%f",&a);
			printf("Seitenlänge b des Rechtecks eingeben:");
			scanf("%f",&b);
			printf("Die Fläche des Recktecks ist %f.", a*b);
		}
		else if (Form==D) {
			printf("Länge der Grundseite des Dreiecks eingeben:");
			scanf("%f",&g);
			printf("Länge der Höhe des Dreiecks eingeben:");
			scanf("%f",&h);
			printf("Die Fläche des Dreiecks ist %f.", g*h/2);
		}
		else if (Form==P) {
			printf("Seitenlänge a des Parallelogramms eingeben:");
			scanf("%f",&a);
			printf("Länge der Höhe des Parallelogramms eingeben:");
			scanf("%f",&h);
			printf("Die Fläche des Recktecks ist %f.", a*h);
		}
		else if (Form==T) {
			printf("Seitenlänge a des Trapezes eingeben:");
			scanf("%f",&a);
			printf("Seitenlänge c des Trapezes eingeben:");
			scanf("%f",&c);
			printf("Länge der Höhe des Trapezes eingeben:");
			scanf("%f",&h);
			printf("Die Fläche des Trapezes ist %f.", (a+c)*h/2);
		}
		else if (Form==K) {
			printf("Radius des Kreises eingeben:");
			scanf("%f",&r);
			printf("Die Fläche des Kreises ist %f.", r*r*3,141592654);
		}
		if (FK==Körper) {
			char W,Q,K,Z;
			printf("Bitte Wählen:\nWürfel = W\nQuader = Q\nKugel = K\nZylinder = Z\n");
			scanf("%c",&Form);
			if (Form==W) {
				printf("Seitenlänge des Würfels eingeben:");
				scanf("%f",&a);
				printf("Das Volumen des Würfels ist %f.", a*a*a);
			}
			else if (Form==Q) {
				printf("Länge des Quaders eingeben:");
				scanf("%f",&a);
				printf("Breite des Quaders eingeben:");
				scanf("%f",&b);
				printf("Höhe des Quaders eingeben:");
				scanf("%f",&c);
				printf("Das Volumen ist %f.", a*b*c);
			}
			else if (Form==K) {
				printf("Radius der Kugel eingeben:");
				scanf("%f",&r);
				printf("Das Volumen der Kugel ist %f.", 4/3*3,141592654*r*r*r);
			}
			else if (Form==Z) {
				printf("Radius des Zylinders eingeben:");
				scanf("%f",&r);
				printf("Höhe des Zylinders eingeben:");
				scanf("%f",&h);
				printf("Die Volumen des Zylinders ist %f.", r*r*3,141592654*h);
			}
		else {
		printf("Fehler! Bitte Eingabe überprüfen!");
	}
			return 0;
}
 
Xcode zeigt nämlich 9 Fehler an:

Juhu, einen hab ich gefunden!:groove:

Code:
	char Q,R,D,P,T,K;

Das ist falsch. Q,R usw. sind doch keine Variablen, in denen Du etwas speicherst. Die Zeile kannst Du löschen. Später in Deinen Abfragen mußt Du dann schreiben:

Code:
if (Form == 'Q') {

Die Variable Form wird mit dem Wert Q verglichen (nicht mit der Variablen Q). Das ist wie mit x==5, da würde man die Variable x mit dem Wert 5 vergleichen.
 
  • Gefällt mir
Reaktionen: Konsti Krueger
  • Gefällt mir
Reaktionen: Konsti Krueger
Der Vergleichsoperant dürfte so nicht funktioniert:

if (FK==Fläche)

FK ist ein Char, 1 Byte == 1 Zeichen und kein String oder Char-Pointer.
 
noch was zu FK == Fläche:

Dass du in einer Terminal-Anwendung Umlaute verwenden kannst, kannst du getrost vergessen :) also FK zu einer Zeichenkette machen und auf "Flaeche" o.ä. prüfen
 
  • Gefällt mir
Reaktionen: Konsti Krueger
Zumindest kannst du sie meines Wissens nach in der Form ä, ö und ü im Quellcode vergessen, da Zeichenketten in C nicht automatisch UTF-8 sind (und auch nicht ISO 5589-1 o.ä.). Für Anfänger wie Konsti Krueger, die noch viel grundlegendere Probleme haben bzw. (scheinbar) gerade erst anfangen, gilt daher besser erst mal die Regel: Umlaute sind verboten. Imo. :)
 
Zumindest kannst du sie meines Wissens nach in der Form ä, ö und ü im Quellcode vergessen, da Zeichenketten in C nicht automatisch UTF-8 sind (und auch nicht ISO 5589-1 o.ä.).
Die Kodierung von Zeichenketten in C entspricht der der Quellcodedatei. Wenn die Datei als utf8 gespeichert wurde, ist der String auch utf8. Im einfachsten Fall sind die Kodierung der Eingabe und der Quellcodedatei dieselbe und man merkt nichts von der Problematik.

Kompliziert wird es nur, weil man eigentlich erstmal feststellen muss, womit die Eingabe kodiert wurde und dann ggf. zur Kodierung der Quellcodedatei konvertieren muss(oder man arbeitet mit wide-Strings das wird dann nochmal spaßiger). Für die Ausgabe gilt das äquivalente. Wie gesagt ist nicht-trivial, aber ich würde einem Anfänger sowieso nicht die Verwendung einer low-level-Sprache wie C empfehlen. ;)
 
  • Gefällt mir
Reaktionen: Kümmelkorn
Der letzte Fehler ist jetzt ganz am Ende. Bei } steht jetzt: "Expected declaration or statement at end of input"
Danke für die vielen Antworten! :)
 
Hast am Schluss ein } zu wenig !
 
Klammer irgendwo vergessen?

Tipp: Wenn du 10.6 hast benutze clang statt gcc(zu finden unter /Developer/usr/bin/clang oder falls du xcode benutzt zu finden unter den Project Settings->Build->Compiler Version), das produziert auch Fehlermeldungen mit denen man etwas anfangen kann.
 
Oh, danke habe ich glatt übersehen! :D
 
und in C kann man char und strings nicht einfach mit == vergleichen...
da musst du schon so was wie strcmp nutzen...
 
Funktioniert es nur bei mir nicht, oder auch bei anderen? :(
Code:
#include <stdio.h> 
int main()
{
	char FK;
	float a,b,c,h,g,r;
	printf("Flaeche oder Koerper?");
	scanf("%s",&FK);
	if (FK="Flaeche") {
		char Form;
		printf("Bitte waehlen:\nQuadrat = Q\nRechteck = R\nDreieck = D\nParallelogramm = P\nTrapez = T\nKreis = K\n");
		scanf("%c",&Form);
		if (Form="Q") {
			printf("Seitenlaenge des Quadrates eingeben:");
			scanf("%f",&a);
			printf("Die Flaeche des Quadrates ist %f.", a*a);
		}
		else if (Form="R") {
			printf("Seitenlaenge a des Rechtecks eingeben:");
			scanf("%f",&a);
			printf("Seitenlaenge b des Rechtecks eingeben:");
			scanf("%f",&b);
			printf("Die Flaeche des Recktecks ist %f.", a*b);
		}
		else if (Form="D") {
			printf("Laenge der Grundseite des Dreiecks eingeben:");
			scanf("%f",&g);
			printf("Laenge der Hoehe des Dreiecks eingeben:");
			scanf("%f",&h);
			printf("Die Flaeche des Dreiecks ist %f.", g*h/2);
		}
		else if (Form="P") {
			printf("Seitenlaenge a des Parallelogramms eingeben:");
			scanf("%f",&a);
			printf("Laenge der Hoehe des Parallelogramms eingeben:");
			scanf("%f",&h);
			printf("Die Flaeche des Recktecks ist %f.", a*h);
		}
		else if (Form="T") {
			printf("Seitenlaenge a des Trapezes eingeben:");
			scanf("%f",&a);
			printf("Seitenlaenge c des Trapezes eingeben:");
			scanf("%f",&c);
			printf("Länge der Hoehe des Trapezes eingeben:");
			scanf("%f",&h);
			printf("Die Flaeche des Trapezes ist %f.", (a+c)*h/2);
		}
		else if (Form="K") {
			printf("Radius des Kreises eingeben:");
			scanf("%f",&r);
			printf("Die Flaeche des Kreises ist %f.", r*r*3,141592654);
		}	
		if (FK="Koerper") {
			printf("Bitte Waehlen:\nWuerfel = W\nQuader = Q\nKugel = K\nZylinder = Z\n");
			scanf("%c",&Form);
			if (Form="W") {
				printf("Seitenlaenge des Wuerfels eingeben:");
				scanf("%f",&a);
				printf("Das Volumen des Wuerfels ist %f.", a*a*a);
			}
			else if (Form="Q") {
				printf("Laenge des Quaders eingeben:");
				scanf("%f",&a);
				printf("Breite des Quaders eingeben:");
				scanf("%f",&b);
				printf("Hoehe des Quaders eingeben:");
				scanf("%f",&c);
				printf("Das Volumen ist %f.", a*b*c);
			}
			else if (Form="K") {
				printf("Radius der Kugel eingeben:");
				scanf("%f",&r);
				printf("Das Volumen der Kugel ist %f.", 4/3*3,141592654*r*r*r);
			}
			else if (Form="Z") {
				printf("Radius des Zylinders eingeben:");
				scanf("%f",&r);
				printf("Hoehe des Zylinders eingeben:");
				scanf("%f",&h);
				printf("Die Volumen des Zylinders ist %f.", r*r*3,141592654*h);
			}
		else {
		printf("Fehler! Bitte Eingabe ueberpruefen!");
	}
			return 0;
		}
	}
}
 
FK="blah" ist kein vergleich, sondern eine zuweisung...
wenn du strings vergleichen willst, musst du strcmp nutzen...
 
Zurück
Oben Unten