Geometrische Berechnungen (Funktionen)

Guten Abend miteinander

Ich habe in der Schule gerade das Thema Funktionen, doch ich komme noch nicht so wirlich gut draus. Wir haben de Auftrag bekommen, ein Programm zu schreiben das verschiedene geometrische Berechnungen berechnet, zu schreiben. Wir müssen da verschiedene Funktionsarten miteinbinden. Hier nun meine Frage:

Ich habe dieses Programm geschrieben:

_______________________________________________________________________

#include „stdio.h“
#define PI 3.14259265358979

void rechteck_flaeche(float laenge, float breite)
{
float flaeche;
flaeche=laenge*breite;
printf(„Rechteckflaeche: %f cm^2“, flaeche);
}

void rechteckumfang()
{
float rechteckumfang=0, laenge=0, breite=0; /*Definieren der Variablen Recheckumfang, Länge und Breite*/
printf(„Bitte geben Sie die Laenge vom Rechteck ein:“);
scanf("%f",&laenge);
printf("\nBitte geben Sie die Breite vom Rechteck ein:");
scanf("%f", &breite);
rechteckumfang=laenge+laenge+breite+breite; /*Berechnen vom Rechteckumfang*/
return rechteckumfang; /*Gibt den Rechteckumfang an das Hauptprogramm zurück*/
}

void kreisflaeche(float durchmesser)
{
float kreisflaeche;
kreisflaeche = durchmesser*durchmesser*PI/4;
return (kreisflaeche);
}

void kreisumfang()
{
float durchmesser, kreisumfang;
printf(„Durchmesser:\t“);
scanf("%f", &durchmesser);
kreisumfang=durchmesser*PI;
printf("\nKreisumfang: \t %f cm", kreisumfang);
}

void quadratvolumen(float seitenlaenge)
{
float quadratvolumen;
quadratvolumen=seitenlaenge*4;
return (quadratvolumen);
}

void kreisvolumen()
{
float durchmesser, kreisvolumen;
printf(„Durchmesser:\t“);
scanf("%f", &durchmesser);
kreisvolumen=(durchmesser*durchmesser*durchmesser*PI)/4;
return (kreisvolumen);
}

int main(void)
{
int abfrage;

do{
printf(„Welche Berechnung wollen Sie durchfuehren?\n\n“);
printf(" Rechteckflaeche\n");
printf(" Rechteckumfang\n");
printf(" Kreisflaeche\n");
printf(" Kreisumgang\n");
printf(" Quadratvolumen\n");
printf(" Kreisvolumen\n");
printf(" Programm beenden\n\n");
printf(„Ihre Auswahl: \b\b“);
scanf("%d", &abfrage);

switch(abfrage)
{
case 1 : float laenge=0, breite=0;
printf(„Laenge:\t“);
scanf("%f", &laenge);
printf("\nBreite:\t");
scanf("%f", &breite);
rechteck_flaeche(laenge, breite);
break;

case 2 : float rechteckumfang;
rechteckumfang=rechteckumfang();
printf(„Rechteckumfang: %f cm“, rechteckumfang);
break;

case 3 : float kreisflaeche, durchmesser;
printf(„Durchmesser:\t“);
scanf("%f", &durchmesser);
kreisflaeche=kreisflaeche()
printf("\nKreisflaeche:\t %f", kreisflaeche);
break;

case 4 : kreiskumfang();
break;

case 5 : float quadratvolumen, seitenlaenge;
printf(„Seitenlaenge:\t“)
scanf("%f", %seitenlaenge);
quadratvolumen=quadratvolumen(seitenlaenge)
break;

case 8 : float kreisvolumen;
kreisvolumen=kreisvolumen();
printf("\nKreisvolumen:\t %f", kreisvolumen);

case 7 : printf(„Programmende\n“);
break;

default : printf(„Unbekannte Eingabe\n“);
}while (abfrage!=7);
return 0;
}

____________________________________________________________________

Doch es läuft nicht wirklich:frowning: Ich finde leider die Fehler auch nicht, und so aussagen vom Visual Studio wie:" scanf wurde als veraltet deklaliert" hilft mir auch nicht weiter:frowning: Kann mir jemand helfen, die Fehler zu suchen?

Freundliche Grüsse

Fabian Bucher
Schweiz

Auch Abend!

Ich habe dieses Programm geschrieben:

Das geht doch gar nicht durch den Compiler!?

#define PI 3.14259265358979

Schreib mal PI irgendwo richtig ab!

Doch es läuft nicht wirklich:

Mein Compiler (auch Visual C) sagt dazu:

Compiling...
Main.c
C:\Source\tescht\Main.c(19) : warning C4098: 'rechteckumfang' : 'void' function returning a value
C:\Source\tescht\Main.c(25) : warning C4244: '=' : conversion from 'double ' to 'float ', possible loss of data
C:\Source\tescht\Main.c(26) : warning C4098: 'kreisflaeche' : 'void' function returning a value
C:\Source\tescht\Main.c(34) : warning C4244: '=' : conversion from 'double ' to 'float ', possible loss of data
C:\Source\tescht\Main.c(42) : warning C4098: 'quadratvolumen' : 'void' function returning a value
C:\Source\tescht\Main.c(50) : warning C4244: '=' : conversion from 'double ' to 'float ', possible loss of data
C:\Source\tescht\Main.c(51) : warning C4098: 'kreisvolumen' : 'void' function returning a value
C:\Source\tescht\Main.c(73) : error C2143: syntax error : missing ';' before 'type'
C:\Source\tescht\Main.c(75) : error C2065: 'laenge' : undeclared identifier
C:\Source\tescht\Main.c(77) : error C2065: 'breite' : undeclared identifier
C:\Source\tescht\Main.c(78) : warning C4244: 'function' : conversion from 'int ' to 'float ', possible loss of data
C:\Source\tescht\Main.c(78) : warning C4244: 'function' : conversion from 'int ' to 'float ', possible loss of data
C:\Source\tescht\Main.c(81) : error C2143: syntax error : missing ';' before 'type'
C:\Source\tescht\Main.c(82) : error C2120: 'void' illegal with all types
C:\Source\tescht\Main.c(82) : error C2106: '=' : left operand must be l-value
C:\Source\tescht\Main.c(82) : warning C4550: expression evaluates to a function which is missing an argument list
C:\Source\tescht\Main.c(86) : error C2143: syntax error : missing ';' before 'type'
C:\Source\tescht\Main.c(88) : error C2065: 'durchmesser' : undeclared identifier
C:\Source\tescht\Main.c(89) : error C2198: 'kreisflaeche' : too few actual parameters
C:\Source\tescht\Main.c(90) : error C2120: 'void' illegal with all types
C:\Source\tescht\Main.c(90) : error C2106: '=' : left operand must be l-value
C:\Source\tescht\Main.c(90) : error C2146: syntax error : missing ';' before identifier 'printf'
C:\Source\tescht\Main.c(90) : warning C4550: expression evaluates to a function which is missing an argument list
C:\Source\tescht\Main.c(93) : warning C4013: 'kreiskumfang' undefined; assuming extern returning int
C:\Source\tescht\Main.c(96) : error C2143: syntax error : missing ';' before 'type'
C:\Source\tescht\Main.c(98) : error C2146: syntax error : missing ';' before identifier 'scanf'
C:\Source\tescht\Main.c(98) : error C2059: syntax error : '%'
C:\Source\tescht\Main.c(99) : error C2065: 'seitenlaenge' : undeclared identifier
C:\Source\tescht\Main.c(99) : warning C4244: 'function' : conversion from 'int ' to 'float ', possible loss of data
C:\Source\tescht\Main.c(100) : error C2120: 'void' illegal with all types
C:\Source\tescht\Main.c(100) : error C2106: '=' : left operand must be l-value
C:\Source\tescht\Main.c(100) : error C2143: syntax error : missing ';' before 'break'
C:\Source\tescht\Main.c(100) : warning C4550: expression evaluates to a function which is missing an argument list
C:\Source\tescht\Main.c(102) : error C2143: syntax error : missing ';' before 'type'
C:\Source\tescht\Main.c(103) : error C2120: 'void' illegal with all types
C:\Source\tescht\Main.c(103) : error C2106: '=' : left operand must be l-value
C:\Source\tescht\Main.c(103) : warning C4550: expression evaluates to a function which is missing an argument list
C:\Source\tescht\Main.c(113) : fatal error C1004: unexpected end of file found
Error executing cl.exe.

Tescht.exe - 23 error(s), 15 warning(s)

Das solltest du erstmal in Ordnung bringen, dann reden wir weiter.

Gruß
Stefan

Hallo Fabian,

wie ich sehe, hast du ein paar grundlegene Dinge nicht ganz verstanden. Wenn du eine Funktion hast, dann gibt es einige Eingabeparameter die nach dem Funktionsnamen drinstehen und einen Ausgabeparameter der vor dem Funktionsnamen steht.

Ausgabe FunktionXY(Eingabe1, Eingabe2)

Wenn du für deine Ausgabe „void“ schreibst, dann gibt er nichts zurück, allerdings hast du ihm in deiner Funktion gesagt er soll dir eine „float“ zurückgeben.
Punkt 2: Ich würde es tunlichst vermeiden einer Funktion und einer Variablen den selben Namen zu geben.
Punkt 3: wenn du deine Variablen deklarierst, dann mach es einmal am Anfang. Du hast sie innerhalb deiner Schleife deklariert.
Punkt 4: Wenn du einen längeren Code schreibst, dann überprüfe immer mal wieder ob er noch funktioniert und wenn etwas nicht funktioniert, dann musst du solange auskommentieren, bis es funktioniert und dann dich langsam vorarbeiten.

Ich habe mal etwas im Code rumgeschrieben, das meiste rauskommentiert und deine Kreisvolumenberechnung verbessert. Anhand von dem kannst du den Rest selber beheben. Compiliert habe ich unter Linux, sollte aber bei dir auch funktionieren.

Schönen Abend noch und viel Erfolg

x303

PS: Dein Wert von pi stimmt wirklich nicht :wink:

_______________________________________________________________________

#include "stdio.h"
#define PI 3.14259265358979

/\*
void rechteck\_flaeche(float laenge, float breite)
{
float flaeche;
flaeche=laenge\*breite;
printf("Rechteckflaeche: %f cm^2", flaeche);
}
\*/
/\*
void rechteckumfang()
{
float rechteckumfang=0, laenge=0, breite=0;
printf("Bitte geben Sie die Laenge vom Rechteck ein:");
scanf("%f",&laenge);
printf("\nBitte geben Sie die Breite vom Rechteck ein:");
scanf("%f", &breite);
rechteckumfang=laenge+laenge+breite+breite;
return rechteckumfang; 
}
\*/

/\*
void kreisflaeche(float durchmesser)
{
float kreisflaeche;
kreisflaeche = durchmesser\*durchmesser\*PI/4;
return (kreisflaeche);
}

void kreisumfang()
{
float durchmesser, kreisumfang;
printf("Durchmesser:\t");
scanf("%f", &durchmesser);
kreisumfang=durchmesser\*PI;
printf("\nKreisumfang: \t %f cm", kreisumfang);
}

void quadratvolumen(float seitenlaenge)
{
float quadratvolumen;
quadratvolumen=seitenlaenge\*4;
return (quadratvolumen);
}
\*/

float kreisvolumen()
{
float durchmesser, kreisvolumen;
printf("Durchmesser:\t");
scanf("%f", &durchmesser);
kreisvolumen=(durchmesser\*durchmesser\*durchmesser\*PI)/4;
return (kreisvolumen);
}


int main(void)
{
int abfrage;
float kreisvol;
do{
printf("Welche Berechnung wollen Sie durchfuehren?\n\n");
printf(" Rechteckflaeche\n");
printf(" Rechteckumfang\n");
printf(" Kreisflaeche\n");
printf(" Kreisumgang\n");
printf(" Quadratvolumen\n");
printf(" Kreisvolumen\n");
printf(" Programm beenden\n\n");
printf("Ihre Auswahl: \b\b");
scanf("%d", &abfrage);


switch(abfrage)
{
/\*
case 1 : float laenge=0, breite=0;
printf("Laenge:\t");
scanf("%f", &laenge);
printf("\nBreite:\t");
scanf("%f", &breite);
rechteck\_flaeche(laenge, breite);
break;

case 2 : float rechteckumfang;
rechteckumfang=rechteckumfang();
printf("Rechteckumfang: %f cm", rechteckumfang);
break;

case 3 : float kreisflaeche, durchmesser;
printf("Durchmesser:\t");
scanf("%f", &durchmesser);
kreisflaeche=kreisflaeche()
printf("\nKreisflaeche:\t %f", kreisflaeche);
break;

case 4 : kreiskumfang();
break;

case 5 : float quadratvolumen, seitenlaenge;
printf("Seitenlaenge:\t")
scanf("%f", %seitenlaenge);
quadratvolumen=quadratvolumen(seitenlaenge)
break;
\*/
case 6 : 
kreisvol=kreisvolumen();
printf("\nKreisvolumen:\t %f", kreisvol);
break;

case 7 : printf("Programmende\n");
break;

default : printf("Unbekannte Eingabe\n");
}
}while (abfrage!=7);

return 0;
}

____________________________________________________________________

Hallo Fabian,

wie ich sehe, hast du ein paar grundlegene Dinge nicht ganz
verstanden…
____________________________________________________________________

Hallo x303

Ich danke dier VIEL mals für deine Bemühungen. Dank deinen Tipps
läuft nun mein Programm, ich danke dir!! :smile:

Falls dich intressiert:

_____________________________

#include
#define PI 3.1415926535897932384626433832795028841971693993751058209749445923078

void f_rechteckflaeche(float laenge, float breite)
{
float flaeche;
flaeche=laenge*breite;
printf("\n=> Rechteckflaeche: %.2f cm^2\n\n", flaeche);
}

float f_rechteckumfang()
{
float rechteckumfang=0, laenge=0, breite=0;
printf("\nErforderliche Eingaben des Benutzers:\n\n");
printf(„Laenge:\t“);
scanf("%f",&laenge);
printf("\nBreite:\t");
scanf("%f", &breite);
rechteckumfang=laenge+laenge+breite+breite;
return (rechteckumfang);
}

float f_kreisflaeche(float durchmesser)
{
float kreisflaeche;
kreisflaeche = (durchmesser*durchmesser*PI)/4;
return (kreisflaeche);
}

void f_kreiskumfang()
{
float durchmesser, kreisumfang;
printf("\nErforderliche Eingaben des Benutzers:\n\n");
printf(„Durchmesser:\t“);
scanf("%f", &durchmesser);
kreisumfang=durchmesser*PI;
printf("\n=>Kreisumfang: \t %.2f cm\n\n", kreisumfang);
}

float f_quadratvolumen(float seitenlaenge)
{
float quadratvolumen;
quadratvolumen=seitenlaenge*4;
return (quadratvolumen);
}

float f_kreisvolumen()
{
float durchmesser, kreisvolumen;
printf("\nErforderliche Eingaben des Benutzers:\n\n");
printf(„Durchmesser:\t“);
scanf("%f", &durchmesser);
kreisvolumen=(durchmesser*durchmesser*durchmesser*PI)/4;
return (kreisvolumen);
}

int main(void)
{
int abfrage;
float kreisvol, laenge=0, breite=0, rechteckumfang, kreisflaeche, durchmesser, quadratvolumen, seitenlaenge;
do{
printf("_____________");
printf("\n\nWelche Berechnung wollen Sie durchfuehren?\n\n");
printf(" Rechteckflaeche\n");
printf(" Rechteckumfang\n");
printf(" Kreisflaeche\n");
printf(" Kreisumgang\n");
printf(" Quadratvolumen\n");
printf(" Kreisvolumen\n");
printf(" Programm beenden\n\n");
printf(„Ihre Auswahl:\t“);
scanf("%d", &abfrage);

switch(abfrage)
{

case 1 :
printf("\nErforderliche Eingaben des Benutzers:\n\n");
printf(„Laenge:\t“);
scanf("%f", &laenge);
printf("\nBreite:\t");
scanf("%f", &breite);
f_rechteckflaeche(laenge, breite);
break;

case 2 :
rechteckumfang=f_rechteckumfang();
printf("\n=>Rechteckumfang: %.2f cm\n\n", rechteckumfang);
break;

case 3 :
printf("\nErforderliche Eingaben des Benutzers:\n\n");
printf(„Durchmesser:\t“);
scanf("%f", &durchmesser);
kreisflaeche=f_kreisflaeche(durchmesser);
printf("\n=>Kreisflaeche:\t %.2f\n\n", kreisflaeche);
break;

case 4 :
f_kreiskumfang();
break;

case 5 :
printf("\nErforderliche Eingaben des Benutzers:\n\n");
printf(„Seitenlaenge:\t“);
scanf("%f", &seitenlaenge);
quadratvolumen=f_quadratvolumen(seitenlaenge);
printf("\n=>Quadratvolumen:\t %.2f cm^3\n\n", quadratvolumen);
break;

case 6 :
kreisvol=f_kreisvolumen();
printf("\n=>Kreisvolumen:\t %.2f\n\n", kreisvol);
break;

case 7 : printf("\n\nProgrammende\n");

break;

default : printf("\n\nUnbekannte Eingabe\n");
}
}while (abfrage!=7);

return 0;
}

_____________________

Das wäre nun mein fast fertiger Code. Mein Lehrer will von diesem Code noch ein Struktogramm erstellt :frowning: Naja, das werde ich wohl noch schaffen!

Freundliche Grüsse

Fabian Bucher