CnC Foren

CnC Foren (http://www.cncforen.de/index.php)
-   Tech-Support / Tech-Talk (http://www.cncforen.de/forumdisplay.php?f=26)
-   -   [c++]Macht nicht das was er soll. (http://www.cncforen.de/showthread.php?t=64345)

mose 13-09-2005 20:24

[c++]Macht nicht das was er soll.
 
Also. Hab mir was mit case und switch überlegt aber er macht es nicht.Er soll in den zweiten bereich springen wo case 2: ist.Es ist egal das bei den anderen Sachen nichts ist. Das muss ich noch schreiben.. ich weiss nicht wieso =( sitze schon 30min dran und ich weiss nicht weiter. Bitte nur bei dem Problem helfen keine Tipps und so.Danke.

Code:

#include <iostream.h>
 #include <stdlib.h>
 
 int main()
 {
  cout<<"******************************************************************************"<<endl;
  cout<<"*                                                                  Papa_Baer  (Mathe)                                          *"<<endl;
  cout<<"******************************************************************************"<<endl;
        int P1;
  cout<<"[ 1]Geometrie"<<endl;
  cout<<"[ 2]Binomische Formeln"<<endl;
  cout<<"[ 3]Zinsrechnung"<<endl;
  cout<<"[ 4]Zinseszinsrechnung"<<endl;
  cout<<"[ 5]Satz des Pythagoras"<<endl;
  cout<<"[ 6]Trigonometrische Beziehungen"<<endl;
  cout<<"[ 7]Infos"<<endl;
  cin>>P1;
 //#############################################################################################
 //#############################################################################################
 //#############################################################################################
  switch(P1)
 
  case 1:
 
 
 
 
 
 
 //#############################################################################################
 //#############################################################################################
 //#############################################################################################
  switch(P1)
 
  {
  case 2:
  int b1;
  cout<<"******************************************************************************"<<endl;
  cout<<"*                                          Papa_Baer Modul (binomische Formeln)                                *"<<endl;
  cout<<"******************************************************************************"<<endl;
    cout<<"[1]Die erste binomische Formel"<<endl;
    cout<<"[2]Die zweite binomische Formel"<<endl;
    cout<<"[3]Die dritte binomische Formel"<<endl;
    cout<<"[4]Infos zu den binomischen Formeln"<<endl;
        cin>>b1;
  break;
        switch(b1)
  {
  case 1:
  float a;
  float b;
    cout<<"Bitte geben Sie den Faktor a an und dann b."<<endl;
          cin>>a;
          cin>>b;
    cout<<"Das Ergebnis ist:"<<((a+b)*(a+b))<<endl;
    cout<<"Formel:("<<a<<"+"<<b<<")*("<<a<<"+"<<b<<")="<<a*a<<"+"<<a*b+a*b<<"+"<<b*b<<"."<<endl;
  break;
  };
    switch(b1)
  {
  case 2:
  float a;
  float b;
    cout<<"Bitte geben Sie den Faktor a an und dann b."<<endl;
          cin>>a;
          cin>>b;
    cout<<"Das Ergebnis ist:"<<((a+b)*(a+b))<<endl;
    cout<<"Formel:("<<a<<"-"<<b<<")*("<<a<<"-"<<b<<")="<<a*a<<"+"<<a*b+a*b<<"-"<<b*b<<"."<<endl;
  break;
  };
    switch(b1)
  {
  case 3:
  float a;
  float b;
    cout<<"Bitte geben Sie den Faktor a an und dann b."<<endl;
          cin>>a;
          cin>>b;
    cout<<"Das Ergebnis ist:"<<((a+b)*(a-b))<<endl;
    cout<<"Formel:("<<a<<"+"<<b<<")*("<<a<<"-"<<b<<")="<<a*a<<"-"<<b*b<<"."<<endl;
  break;
  };
  switch(b1)
  case 4:
  cout<<"Um was geht es bei den binomischen Formeln überhaupt?"<<endl;
    cout<<"Die binomischen Formeln - es gibt drei Stück davon - sind ein Hilfsmittel zum Ausmultiplizieren und Ausklammern. Beim Ausmultiplizieren sparen sie Zeit, beim Ausklammern sind sie oft unersetzlich."<<endl;
 
    cout<<"Schauen wir uns dazu ein Beispiel an: (3a+4b)^2 = (3a+4b)*(3a+4b)"<<endl;
    cout<<"                                                                                            =  3a*3a+3a*4b+3a*4b+3a*"<<endl;
    cout<<"                                                                                            =  9a^2+12ab+12ab+16b^2"<<endl;
    cout<<"                                                                                            =  9a^2+24ab+16b^2"<<endl;
    cout<<""<<endl;
    cout<<"So konnten wir schon bisher durch Ausmultiplizieren die Klammer auflösen. Es geht uns nun aber darum, zu überlegen, ob wir nicht vielleicht die Zwischenschritte einsparen und in Zukunft direkt das Ergebnis hinschreiben können."<<endl;
  break;
  };
 
 //#############################################################################################
 //#############################################################################################
 //#############################################################################################
  switch(P1)
 
  case 3:
 
 //#############################################################################################
 //#############################################################################################
 //#############################################################################################
  switch(P1)
 
  case 4:
 
 
 //#############################################################################################
 //#############################################################################################
 //#############################################################################################
  switch(P1)
  {
  case 5:
 
    cout<<"Der Satz des Pythagoras ist einer der fundamentalen mathematischen Saetze der euklidischen Geometrie: Fuer die Seiten jedes ebenen rechtwinkligen Dreiecks gilt die Beziehung a2 + b2 = c2, wobei a und b für die Längen der winkelanliegenden Seiten, der Katheten, stehen und c die Laenge der dem rechten Winkel gegenueberliegenden Seite, der Hypotenuse, darstellt. In der modernen Mathematik ist der Satz aufgrund seiner Aussagen zum Konzept des Senkrechtstehens bedeutsam."<<endl;
    break;
    };
 //#############################################################################################
 //#############################################################################################
 //#############################################################################################
  switch(P1)
 
  case 6:
 
 
 //#############################################################################################
 //#############################################################################################
 //#############################################################################################
  switch(P1)
  {
  case 7:
    cout<<"##Infos##"<<endl;
  cout<<"Was ist Papa_Baer?"<<endl;
  cout<<" Papa_Baer ist ein Programm das dazu da ist:"<<endl;
  cout<<" einem bei den Mathe Hausaufgaben zu helfen."<<endl;
  cout<<"Warum wurde diese Programm geschrieben?"<<endl;
  cout<<" Ich hab das Programm nur geschrieben um C++ zu lernen."<<endl;
  cout<<"Darf ich das Programm verendern?"<<endl;
  cout<<" Ja, du darfst das Programm verendern. Aber du musst dann die neue"<<endl;
  cout<<" Version mir dann zuschicken."<<endl;
  break;
  };
 //#############################################################################################
 //#############################################################################################
 //#############################################################################################
 
 
 
          system("PAUSE");
          return 0;
 }


kaki100 13-09-2005 20:29

ich mag switch und case net, weil ich das meiste mit if und else.

Also jede case(s) müssen mit einem break beendet werden. Was ich glaube ich bei dir nicht gsehen habe.

zb.:

switch

case
case
case

break;

case
case

break;

case
case

break;



default


Aber wie gesagt, ich mach net soviel mit switch und case :D



EDIT: Wenn du einmal eine Switch abfrage für die Variable P1 machst, musst du weiter unten net wieder "switch(P1)" schreiben, da mit break ja unterbrochen wird

mose 13-09-2005 20:34

JO danke das wars :) hab par mahl das break; vergessen =/ naja dummer Fehler.

EDIT:// Jetzt taucht es in der 2ten Spalte auf -.-°
EDIT// Ich meine den Fehler-.-

kaki100 13-09-2005 20:36

beherzige trotzdem mein "EDIT" bitte ;)

MyersGer 13-09-2005 20:44

da isn bisschen mehr falsch... 2 mal switch dannn n case dann wieder n switch keine geschweiften klammern... öhm... räum da erst mal n bisschen auf. dann kann man weiter helfen

mose 13-09-2005 20:52

Wie oben schon gesagt ist das noch nicht fertig. -.-° die ganzen anderen Sachen ignorieren. Nur das er in die zweite Spalte springen soll und dort dann weiter machen soll. Aber in der zweiten spalte mach der bei der auswahl nicht weiter

kaki100 13-09-2005 20:59

Da ich mir gerade denke, dass du anfängst zu programmieren gebe ich dir maln tipp. Wenn du ein Programm zum laufen bringst mit switch und case und dann denkst, na, jetzt kann ichs, versuch zuerst mal jede zeile in deinem quellcode zu erklären. Dir selber, am besten, damit überprüfst du dich eigentlich selbst ob du es verstanden hast und beherrscht. Kenn noch viele Leute aus meiner klasse, die mich oft fragten wie das geht... ah ok, ah ok, ja ne is klar... ok, erklär mir wieso? .. ähm, wie war das nochmal :D ...

Ne, soll kein scherz sein, aber wenn du viel verstehst, dann kannste auch umso mehr probieren wenn dir mal nen fehler passiert...

mose 13-09-2005 21:02

Joc ich verstehe das ja ^^. Habs ja auch geschrieben :P aber mir pasieren oft Tippfehler. =( Aber habs hinbekommen.

Gonzo 13-09-2005 21:19

JEDES case muss ( naja muss nicht, aber sonst gibt es kaum nen Sinn )
mit einem break;( raus aus dem switch ) oder einem return; ( raus aus der Funktion )
abgeschlossen werden, ansonsten werden alle weiteren case auch ausgeführt
( glaub ich zumindestens :D )
Code:

switch(i)
{
    case 1:
        bla();
    break;
    case 2:
          blub();
    return;
    default:
          error();
    break;
}

so in etwa ;)

kaki100 13-09-2005 21:21

ich glaube, "default" braucht nicht unbedingt ein break, wäre ja irgendwie sinnlos :rolleyes:

Gonzo 13-09-2005 21:22

wenn default als letztes steht und keine weiteren code-Zeilen innerhalb der
switch-Anweisung sind ;)
nen return macht Sinn, wenn die Funktion nen Rückgabewert hat

EEBKiller 13-09-2005 21:29

ein return; in main()

(was ja zweifelsohne auch in nem switch so ist) - Was würde das bewirken ? :p

kaki100 13-09-2005 21:31

ja klar, return liefert auch was zurück... obwohl... return 0; :rolleyes:

Gonzo 13-09-2005 21:32

Zitat:

Zitat von EEBKiller
ein return; in main()

(was ja zweifelsohne auch in nem switch so ist) - Was würde das bewirken ? :p

dass er sofort aus der Funktion aussteigt, also wahrscheinlich sofort das Programm beendet

Zitat:

Zitat von kaki100
ja klar, return liefert auch was zurück... obwohl... return 0; :rolleyes:

return darf/muss nur dann was zurückliefern wenn die Funktion nicht vom
Typ void ist ;)
also bei void main() einfach nur return,
bei int main() dann halt return 1234456;

mose 15-09-2005 16:57

ALSO. Ich wollte nicht wieder was auf machen. Also, habe eine Formel die ich für C++ umschreiben muss da es keine ^ kann.

Formel: K*(1+p/100)^n
wie müsste das bei c++ ausschauen ?

kaki100 15-09-2005 17:14

es gibt exponentialfunktionen in c. Das sollte die einzig schwere sachen zu sein. schau mal nach in der hilfe, mir fällt der befehl nämlich gerade nicht ein.

EEBKiller 15-09-2005 18:37

also in PHP heissts

int pow(BASIS, EXPONENT);

kaki100 15-09-2005 19:01

jo, danke eeb. Ich bin mir zu 99 prozent sicher das ins c++ die funktion auch pow(int x) glaube ich heißt

MyersGer 15-09-2005 19:12

nein...

unter c:
pow(double x, double y)

und unter c++ gibts noch ne überladung für float.

Magicq99 15-09-2005 19:14

in C heißt es
Code:

pow(basis, exponent);
und am Anfang des Programms:
Code:

#include <math.h>
Du solltest Dir vielleicht auch angewöhnen die Variablen etwas zweckdienlicher zu benennen. Ich habe mal gelernt das ein Variablenname mit einem Kleinbuchstaben beginnen sollte (ein Objekt dagegen mit einem Großbuchstaben) und am besten einen kurzen Satz darstellen sollte, die einzelnen Worte werden dabei durch Großbuchstaben getrennt.

Aus "P1" könntest Du dann z.B. "calculationSelectedByUser" machen, oder irgendwas anderes, aber eben etwas aussagekräftiges. Für Funktionen gilt das gleiche. Aber das sind nur Konventionen, keine Vorschrift.

Mit einem Editor der Syntax-Vervollständigung beherrscht ist das auch kaum Mehrarbeit beim tippen, aber es erleichtert das Verstehen des Codes ungemein, speziell jemandem der ihn nicht selbst geschrieben hat.

Es ist aber sehr hilfreich sich schon früh einen sauberen Stil anzugewöhnen., z.B. auch was das Einrücken von Unterbereichen angeht.

kaki100 15-09-2005 19:30

Zitat:

Zitat von MyersGer
nein...

unter c:
pow(double x, double y)

und unter c++ gibts noch ne überladung für float.


du nerviger 1% du :p

mose 17-09-2005 11:07

Hm müsste das dann so aussehen ?
Code:

cout<<"Kapital nach "<<z4<<" Jahren: "<<(z2*(pow(double (((1+z3)/100), double z4));

MyersGer 17-09-2005 12:14

nein. das double brauchst du da nicht mit zu schreiben, wenn du die variablen voher schon deklariert hast. und ich geh mal davon aus, dass z4 (was auch immer das sein mag :) ) schon deklariert ist. und bei einer berechnung [ (1+z3)/100 ] brauchst du auch den datentyp nicht voran schreiben. es sei denn du willst das ergebnis casten. dann muss der datentyp aber so da stehen (double) (1+z3)/100 .

mose 17-09-2005 12:22

LoL irgentwie ist das komisch. 0o Des kommen zu große Zahlen raus =( was hab ich falscj gemacht . Ich meine ind er 5ten Spalte.

Code:

#include <iostream.h>
 #include <stdlib.h>
 #include <math.h>
 int main()
 {
  int Z1;
  cout<<"#####Zinsrechnung/Prozentrechnung#####"<<endl;
  cout<<"[1]Prozentrechnung."<<endl;
  cout<<"[2]Prozentrechnung wenn man mehr als 100% hat."<<endl;
  cout<<"[3]Zinsen nach x Tagen."<<endl;
  cout<<"[4]Zinsen nach x Jahren."<<endl;
  cout<<"*****Zinseszinsrechnung*****"<<endl;
  cout<<"[5]Zinsen nach x Jahren."<<endl;
 
  cin>>Z1;
 //##############################################################################
 //##############################################################################
  switch(Z1)
  {
  case 1:
  float Pr;
  float PR;
  cout<<"Bitte geben Sie die 100% an und dann wie viel Prozent es seien sollen:"<<endl;
    cin>>Pr;
    cin>>PR;
  cout<<"Ein Prozent ist: "<<(Pr/100)<<endl;
  cout<<PR<<"% von "<<Pr<<" sind: "<<(Pr/100*PR)<<endl;
  break;
  };
 //##############################################################################
 //##############################################################################
  switch(Z1)
  {
  case 2:
  float P;
  float P2;
  float P3;
  cout<<"Bitte geben Sie die Prozent an,dann die Zahl und dann wie viel Prozent es seien sollen.."<<endl;
    cin>>P;
    cin>>P2;
    cin>>P3;
  cout<<"Ein Prozent ist: "<<(P2/P)<<endl;
  cout<<P3<<" Prozent von "<<(P2/P*100)<<endl;
  cout<<"100% sind: "<< (P2/P*100)<<endl;
  break;
  };
 //##############################################################################
 //##############################################################################
  switch(Z1)
  {
  case 3:
  float Z2;
  float Z3;
  float Z4;
  cout<<"Bitte geben Sie das Guthaben an,dann wie viel Prozent Zinsen es gibt und am Ende wie viele Tage es laeuft"<<endl;
    cin>>Z2;
    cin>>Z3;
    cin>>Z4;
  cout<<"Man bekommt "<<(Z2/100*Z3)<<" im Jahr."<<endl;
  cout<<"Man bekommt "<<(Z2/100*Z3/360)<<" am Tag."<<endl;
  cout<<"Man bekommt "<<(Z2/100*Z3/360*Z4)<<" in "<<(Z4)<<" Tagen"<<endl;
  cout<<"Man hat nach einem Jahr ein Guthaben von "<<(Z2+(Z2/100*Z3))<<"."<<endl;
  break;
  };
 //##############################################################################
 //##############################################################################
  switch(Z1)
  {
  case 4:
  float zz2;
  float zz3;
  float zz4;
  cout<<"Bitte geben Sie das Guthaben an,dann wie viel Prozent Zinsen es gibt und am Ende wie viele Jahre es laeuft"<<endl;
    cin>>zz2;
    cin>>zz3;
    cin>>zz4;
  cout<<"Man bekommt "<<(zz2/100*zz3*zz4)<<" in "<<zz4<<"."<<endl;
  cout<<"Man hat nach einem Jahr ein Guthaben von "<<(zz2+(zz2/100*zz3*zz4))<<"."<<endl;
  break;
  };
 //##############################################################################
 //##############################################################################
  switch(Z1)
  {
  case 5:
  float z2;
  float z3;
  float z4;
  cout<<"Bitte geben Sie das Kapital an,dann wie viel Prozent Zinsen es gibt und am Ende wie viele Jahre es laeuft"<<endl;
    cin>>z2;
    cin>>z3;
    cin>>z4;
  cout<<"Kapital nach "<<z4<<" Jahren: "<<(z2*(pow( (1+z3)/100, z4)));
 
  break;
  };
 //##############################################################################
 //##############################################################################
          system("PAUSE");
          return 0;
 };


MyersGer 17-09-2005 17:07

puh deine variablennamen sind grausam.
ich denk mal du meinst zeile und nicht spalte. da fängt main an. was soll denn daran falsch sein?

Gonzo 17-09-2005 20:24

Ich denk mal er meint das case 5: ;)
Erst mal ne kleine Anmerkung : Warum machst du soviele switch für die selbe Variable ?
Einmal würde doch reichen :)
Ansonsten ist deine Formel zur Berechnung wohl falsch, es kommt mir zumindestens
merkwürdig vor dass die Laufzeit als Exponent angegeben wird

maxl 17-09-2005 23:11

Das die Laufzeit der Exponent ist, stimmt schon, denke ich.

Berechnet werden die Zinsen ja so:
Kapital * [(1 + Zinssatz) ^ Laufzeit]
wenn der Zinssatz als Kommazahl angegeben wird (0.04 für 4 Prozent). Wenn du davon ausgehst, dass der Benutzer eher 4 eingibt, dann sollte sie halt
Kapital * [((100 + Zinssatz) / 100) ^ Laufzeit]
lauten.

Zu deiner Verwendung von switch, möchte ich noch sagen, wie es aussehen sollte. ;)
Code:

switch (Variablenname)
{
  case 1:
      Anweisungen
      break;
  case 2:
      Anweisungen
      break;
  [...]
  default:
      Anweisungen
      break;
}

Du musst also nicht jedes mal ein neues switch schreiben, wie Gonzo schon gesagt hat. Wenn du deinen Quelltext einigermaßen schön gestaltest, kannst du sogar auf diese ekelhaften
// ################################################
verzichten. :D
Und bei den Variablenamen solltest dir auch was einfallen lassen. Für die Zinsrechnung wären z.B. "Kapital", "Zinssatz" und "Laufzeit" ganz brauchbare Namen. ;) Bei komplexeren Programmen kann dir nämlich sonst 1. keiner mehr helfen und 2. verlierst du dann selber den Überblick, wenn du mal ein paar Monate nicht daran arbeitest.

mose 18-09-2005 08:28

OK. Also muss ich die Fariablen gescheit bennenen. =) werd ich dann auch machen :) Danke. Also muss ich die Formeln noch umstellen?
Also, er spring nur am anfang zu 2 und 1 also zu den binomischen Formeln und zur geometrie.
Aber sonst nirgenswo hin.


//EDIT: problem gelöst. ne {} war falsch gesetzt.
2//EDIT: Wie ziehe ich denn ne Wurzel bei c++?

maxl 18-09-2005 10:29

Generell könntest du danach auch Googeln oder irgendeine passende Referenz im Internet suchen. ;)

In der math-library gibt's
sqrt(float);
Damit kannst du die Quadratwurzel aus einer Fließkommazahl ziehen.

Wenn du z.B. die 3. Wurzel ziehen willst, dann solltest du vermutlich
pow(float, float);
verwenden. Also für die 3. Wurzel z.B. float(x, 1/3);

mose 18-09-2005 10:32

OK danke ^^ . Stimmt könnte bei googel suchen. Aber wäre nicht sos chönw ie hier nach zu fragen :) auserdem seit ihr hier sehr kompetent.


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:01 Uhr.

Powered by vBulletin Version 3.7.3 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.