C++ problem matematisk program

Permalänk

C++ problem matematisk program

Hejsan, jag försöker göra ett ganska enkelt C++ program då jag är väldigt mycket nybörjare och försöker lära mig göra olika saker.

Det jag vill att programmet ska göra är:

Först en välkommen text, till exempel bara Hej!

Under den vill jag ha en meny med kanske 3 olika alternativ, 1 för en cirkel, 2 för en kvadrat, 3 för en triangel och 0a för att stänga programmet
1. Cirkel
2. Kvadrat
3. Triangel
0. Avsluta

När man valt en utav dessa vill jag att det ska räkna ut arean och omkretsen för det man valt, när man själv får fylla i radien. Sen efter det har visats, tänkte jag att man kunde okmma tillbaka till början eller få på nytt välja vilken form man vill ha.

Hur jag hade tänkt mig detta är ungefär såhär (märk väl, jag är fullt medveten om att jag är fullständigt ute och cyklar):

Först tänkte jag att om jag gör en loop, som visas om MenySvar är större än 0, så försvinner väl menyn?
Om jag sätter MenySvar till 1, så visas proceduren Cirkel, som jag tror att jag ska skriva i void? Sen vet jag inte riktigt hur jag ska länka till att jag ska ha om dom skriver en 1a i SkrivMeny, så att den väljer cirkel. och när jag försöker med så här, så säger den att väldigt mycket är fel. Sen undrar jag också,
int main();
vart ska jag ha den? ska jag ha dne i början på programmet alltid? eller varierar det beroende på hur programmet ser ut? Som i det här fallet, ska jag ha den i void biten för varje void? eller redan i huvudprogrammet?

I viod cirkel och dom andra ska jag försöka använda en guide som jag hittade här på Sweclockers och som jag har läst.
Jag har inte gjort längre än så här då det här redan inte fungerar och då känns det onödigt att bara försöka få in ännu mer om hur jag tror det skulle se ut då detta inte fungerar.

#include <iostream>

MenySvar = 4;
while ( MenySvar >0 ) {
MenySvar = SkrivMeny ();
if ( MenySvar == 1 )
Cirkel ();
if ( MenySvar == 2 )
Kvadrat ();
if ( MenySvar == 3 )
Triangel ();
}

void SkrivMeny () {

using namespace std;
cout << "1. Cirkel" << endl;
cout << "2. Kvadrat" <<endl;
cout << "3. Kvadrat" <<endl;
cout << "0. Avsluta" <<endl;
cin

}

void Cirkel () {

}

Visa signatur

C2D E6600, ATI Radeon X1950XTX, 2048DDR2, 2 st 320GIG, 1st 80 GIG Raptor disk.

Permalänk
Medlem

Jag började för inte så länge sen själv, och jag känner verkligen igen mig.

int main() måste vara med i programmet någonstans. Du kan lägga funktioner och sådant före, men även efter. Lägger du dem efter måste du deklarera dem innan int main().

Exempel på före:

#include <iostream> void SkrivMeny(void) { std::cout << "1. Cirkel" << std::endl; std::cout << "2. Kvadrat" << std::endl; std::cout << "3. Triangel" << std::endl; std::cout << "0. Avsluta" << std::endl; } int main(void) { SkrivMeny(); return 0; }

och efter:

#include <iostream> void SkrivMeny(void); int main(void) { SkrivMeny(); return 0; } void SkrivMeny(void) { std::cout << "1. Cirkel" << std::endl; std::cout << "2. Kvadrat" << std::endl; std::cout << "3. Triangel" << std::endl; std::cout << "0. Avsluta" << std::endl; }

Nu till det du vill åstadkomma! Som sagt så är jag även ganska ny, så jag gissar på att det kan göras bättre och någon lär väl påpeka det.

Du kan testa göra en while() loop, i början av den kalla på SkrivMeny(), läs sedan in en siffra för vad användaren vill göra, använd en switch() och kalla på den funktionen som användaren vill använda.

#include <iostream> void SkrivMeny(void); int main(void) { int nVal; bool bLoop = true; while(bLoop) { SkrivMeny(); cin >> nVal; switch(nVal) { case 0: bLoop = false; //while() gäller inte, fortsätter ner till return 0; break; case 1: //Kalla på din funktion för Cirkel break; case 2: //Kalla på din funktion för Kvadrat break; case 3: //Kalla på din funktion för Triangel break; } system("CLS"); //Rensar konsolen } return 0; } void SkrivMeny(void) { std::cout << "1. Cirkel" << std::endl; std::cout << "2. Kvadrat" << std::endl; std::cout << "3. Triangel" << std::endl; std::cout << "0. Avsluta" << std::endl; std::cout << "Svar: "; }

Sen vet jag att system() calls är dåliga, men jag tycker de är helt OK för personer som är nya. Till slut hittar de andra, bättre, vägar. Det gjorde jag åtminstone.

Allting som är dåligt/felaktigt gjort i koden skyller jag på att jag är trött.

-- Snabb Edit --
Du kan även lägga till en "default:" i switchen, så om användaren skriver in t.ex. 78 så kan du skriva ut att det alternativet inte finns.

Permalänk

Inget dåligt med att lära sig att ge shell kommandon via system. Med enkel omdirigering och tolkning av dos output kan man göra väldigt användbara systemverktyg. Använder själv flera sådana.

Permalänk

tredora verkligen snällt att du hjälper mig, men när jag testar köra programmet säger den att " cin >> nVal;" är fel.
`cin' undeclared (first use this function)
säger den, nu som jag redan sagt är jag väldigt ny med detta, men var det meningen att programmet skulle vara körbart eller bara för att visa mig hur man ska göra?

Vad är case sakerna ? Vad gör dom?
Mycket utav den där koden förstår jag tyvärr inte så kan inte få det att funka.
Jag använder Dev-C++, och jag förstår inte varför jag ständigt får felmeddelanden, till och med i en del koder som kommer från guider har jag fått fel. Kan det bero något på programmet? Eller att jag kör vista men det är till för xp?

Visa signatur

C2D E6600, ATI Radeon X1950XTX, 2048DDR2, 2 st 320GIG, 1st 80 GIG Raptor disk.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Markus Olsson
tredora verkligen snällt att du hjälper mig, men när jag testar köra programmet säger den att " cin >> nVal;" är fel.
`cin' undeclared (first use this function)
säger den, nu som jag redan sagt är jag väldigt ny med detta, men var det meningen att programmet skulle vara körbart eller bara för att visa mig hur man ska göra?

Vad är case sakerna ? Vad gör dom?
Mycket utav den där koden förstår jag tyvärr inte så kan inte få det att funka.
Jag använder Dev-C++, och jag förstår inte varför jag ständigt får felmeddelanden, till och med i en del koder som kommer från guider har jag fått fel. Kan det bero något på programmet? Eller att jag kör vista men det är till för xp?

Jag hade visst glömt std:: där. Du kan ju ta bort alla "std::" och lägga till ett "using namespace std;" ovanför int main() istället så slipper du lägga till std:: före cout, cin, endl, osv.

En switch är bättre att använda istället för att ha långa if-else-if-else-if-else osv.

Den här borde fungera:

#include <iostream> using namespace std; //Använd std som namnrymd void SkrivMeny(void); //Deklaration för SkrivMeny(); int main(void) { int nVal; //Håller vad användaren vill göra bool bLoop = true; //Används i while loopen while(bLoop) //while(bLoop) är samma sak som while(bLoop == true) { SkrivMeny(); //Kalla på funktionen som skriver ut alternativen cin >> nVal; //Läs in vad användaren vill göra switch(nVal) //Skapa en switch utav nVal { case 0: //OM nVal är 0, gör det här bLoop = false; //Loopen gills inte längre, avslutar programmet cout << "\nAvslutar programmet\n" << endl; break; //Hoppa ut ur switchen case 1: //OM nVal är 1, gör det här cout << "\nH\x84r borde du kalla p\x86 din funktion f\x94r Cirkel\n" << endl; break; //Hoppa ut ur switchen case 2: //OM nVal är 2, gör det här cout << "\nH\x84r borde du kalla p\x86 din funktion f\x94r Kvadrat\n" << endl; break; //Hoppa ut ur switchen case 3: //OM nVal är 3, gör det här cout << "\nH\x84r borde du kalla p\x86 din funktion f\x94r Triangel\n" << endl; break; //Hoppa ut ur switchen default: //OM nVal inte är något av de ovanstående, gör det här cout << "\nDet alternativet finns inte!\n" << endl; break; //Hoppa ut ur switchen } system("PAUSE"); //Pausar consolen system("CLS"); //Rensar konsolen } return 0; } void SkrivMeny(void) { cout << "1. Cirkel" << endl; cout << "2. Kvadrat" << endl; cout << "3. Triangel" << endl; cout << "0. Avsluta" << endl; cout << "Svar: "; }

"\n" är förövrigt escape character för ny rad.

Permalänk

Tackar så hemskt mycket Väldigt snällt av dig att hjälpa mig, sitter nu och jobbar med detta och tror det kommer funka riktigt bra.
Kan man använda \n hela tiden istället för endl; ?
Sen en till fråga, hur gör man å,ä,ö?

Visa signatur

C2D E6600, ATI Radeon X1950XTX, 2048DDR2, 2 st 320GIG, 1st 80 GIG Raptor disk.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Markus Olsson
Tackar så hemskt mycket Väldigt snällt av dig att hjälpa mig, sitter nu och jobbar med detta och tror det kommer funka riktigt bra.
Kan man använda \n hela tiden istället för endl; ?
Sen en till fråga, hur gör man å,ä,ö?

Du kan använda "\n" istället för endl om du vill, jag kör oftast så.

å = \x86
ä = \x84
ö = \x94
Å= \x8F
Ä = \x8E
Ö = \x99

Permalänk

Tack än en gång Tredora.
Jag postar programmet som det blev till slut, jag valde att använd en if funktion för att det var det jag försökte lära mig. ska gå in på case till mitt nästa program, men tack än en gång för hjälpen.

#include <iostream> using namespace std; void SkrivMeny(void); void Cirkel(void); void Klot(void); void Kon(void); void Triangel(void); void Rektangel(void); void Avsluta(void); int main (void)// HUVUDPROGRAM { bool fortsatt = true; while(fortsatt == true) { SkrivMeny (); int Svar; cin >> Svar; if ( Svar == 1 ) Cirkel (); if ( Svar == 2 ) Klot (); if ( Svar == 3 ) Kon (); if ( Svar == 4 ) Triangel (); if ( Svar == 5 ) Rektangel (); if ( Svar == 0 ) { fortsatt = false; Avsluta (); } system("PAUSE"); system("CLS"); } return 0; } void SkrivMeny(void) { cout << "Markus geometriprogram" << endl; cout << "1. Cirkel" << endl; cout << "2. Klot" << endl; cout << "3. Kon" << endl; cout << "4. Triangel" << endl; cout << "5. Rektangel" << endl; cout << "0. Avsluta" << endl; cout << "V\x84lj alternativ: " <<endl; } void Cirkel(void) { float Radie; cout << "Skriv in Radien" << endl; cin >> Radie; float pi = 3.14159; float cirkelo; //Omkrets cirkelo = 2 * pi * Radie; cout << "Omkretsen av en cirkel: " << cirkelo << "." << endl << endl; float cirkela; // Arean cirkela = pi * Radie * Radie; cout << "Arean av en cirkel: " << cirkela << "." << endl << endl; } void Klot(void) { float Radie; cout << "Skriv in Radien" << endl; cin >> Radie; float pi = 3.14159; float klotv; // Volym klotv = (4 * pi * Radie * Radie * Radie) / 3; cout << "Volym av en klot: " << klotv << "." << endl << endl; float klota; // Arean klota = 4 * pi * Radie * Radie; cout << "Arean av en klot: " << klota << "." << endl << endl; } void Kon(void) { float Radie; cout << "Skriv in Radien" << endl; cin >> Radie; float Hojd; // Volymen cout << "Skriv in H\x94jden" << endl; cin >> Hojd; float pi = 3.14159; float konv; konv = pi * Radie * Radie * Hojd; cout << "Volymen av en kon: " << konv << "." << endl << endl; } void Triangel(void) { float Bas; // Area cout << "Skriv in Basen" << endl; cin >> Bas; float Hojd; cout << "Skriv in H\x94jden" << endl; cin >> Hojd; float pi = 3.14159; float triangela; triangela = (Bas * Hojd) / 2; cout << "Area av en triangel: " << triangela << "." << endl << endl; } void Rektangel(void) { float Bas; cout << "Skriv in Basen" << endl; cin >> Bas; float Hojd; cout << "Skriv in H\x94jden" << endl; cin >> Hojd; float pi = 3.14159; float rektangela; // Area rektangela = Bas * Hojd; cout << "Area av en rektangel: " << rektangela << "." << endl << endl; float rektangelo; // Omkrets rektangelo = 2 * Bas + 2 * Hojd; cout << "Omkrets av en rektangel: " << rektangelo << "." << endl << endl; } void Avsluta(void) { cout << "Tack f\x94r att du anv\x84nde Markus geometriprogram" << endl; }

Visa signatur

C2D E6600, ATI Radeon X1950XTX, 2048DDR2, 2 st 320GIG, 1st 80 GIG Raptor disk.