Brauch mal jemand der Ahnung hat. Funktionen auslagern
-
Wir sollten die Funktion Schaltjahr auslagern.
Das wäre meine ausgelagerte Funktion.bool istSchaltjahr(int jahr){
if (jahr % 4 == 0)
{
jahr = false;if(jahr % 100== 0){ if (jahr % 400 == 0) { jahr = true; } else { jahr = false; } }else {jahr = true;} }else { jahr = false;} return jahr;
}
Und so sieht meine Main Funktion aus?
//Eingabe//
cout << endl;
cout << ("Jahreszahl ");
cin >> jahr;
jahr = istSchaltjahr(jahr);
if (jahr == true){
cout << jahr << " ist ein Schaltjahr" << endl;}
else{
cout << jahr << " ist kein Schaltjahr" << endl;}Mein Prof meinte ich hab irgendwas mit dem Datentyp verkackt?
muss ich bool jahr; also Variable definieren??
-
Zumindest hast du die Quelltext-Formatierung verkackt.
Funktioniert deineistSchaltjahr
Funktion? Wenn nein, was sagt der Debugger?
-
habs auch aus einem großen Projekt raus kopiert. sry
Es funktioniert alles ohne Probleme, dass ist ja das lustige…hier nochmal die Main :
do { Menu = menu() ; switch (Menu) { case 'a': //Berechnung Kreis und Kugel cout << endl; cout << "Radius: "; cin >> radius; kreis_kugel(radius); break; case 'b': // Bauernmultiplikation // Eingabe erg = 0; cout << endl; cout << "Russische Bauernmultiplikation" << endl << endl; cout << "In jedem Rechenschritt wird..." << endl; cout << " -der erste Faktor durch 2 dividiert." << endl; cout << " -der zweite Faktor verdoppelt" << endl << endl; cout << "Geben Sie den ersten Faktor ein: "; cin >> a; cout << "Geben Sie den zweiten Faktor ein: "; cin >> b; bauernmultiplikation(a,b); break; case 'c': // Schaltjahr //Eingabe cout << endl; cout << ("Jahreszahl "); cin >> jahr; jahr = istSchaltjahr(jahr); if (jahr == true){ cout << jahr << " ist ein Schaltjahr" << endl;} else{ cout << jahr << " ist kein Schaltjahr" << endl;} break; case 'd':// Berechnung pq-Formel cout << endl << "Eingabe p "; cin >> p; cout << endl << "Eingabe q "; cin >> q; Diskriminante = quad_gl( p, q, x1, x2); if(Diskriminante<0){ cout << "Keine Loesung" << endl; } else{ cout << "Nullstelle 1: " <<x1 << endl; cout << "Nullstelle 2: " <<x2 << endl;} if (x1 == x2) { cout << endl << "Doppelnullstelle " << endl; } break; case 'e':{ //Nachbarn tauschen int daten [MAXANZAHL]; daten [] = nachbarn_tauschen(daten, MAXANZAHL); feldausgeben(daten,MAXANZAHL); // Ausgelagerte Feldausgabe break;} case 'x': // Programmende programmende = true; break; default: cout << "Der eingegebene Wert " << Menu << " ist nicht gueltig!" << endl; break; } }// Ende switch while (programmende == false); system ("Pause"); return 0; }
-
Warum soll jahr gleichzeitig
2018
undtrue
darstelllen?
-
@BW82 sagte in Brauch mal jemand der Ahnung hat. Funktionen auslagern:
Es funktioniert alles ohne Probleme, dass ist ja das lustige…
Soso... ist 1900 ein Schaltjahr?
Edit: Eigene Dummheit
-
@manni66 sagte in Brauch mal jemand der Ahnung hat. Funktionen auslagern:
Warum soll jahr gleichzeitig
2018
undtrue
darstelllen?heißt also ich muss dem boolschen wert noch zu ordnen??
Mein Gott Leute, wenn ich nicht Hilfe bräuchte würde ich nicht fragen, also spart euch doch dumme Kommentare und gebt lieber konstruktive KRITIK , die einem hilft.
Danke!!!
-
@BW82 sagte in Brauch mal jemand der Ahnung hat. Funktionen auslagern:
@manni66 sagte in Brauch mal jemand der Ahnung hat. Funktionen auslagern:
Warum soll jahr gleichzeitig
2018
undtrue
darstelllen?heißt also ich muss dem boolschen wert noch zu ordnen??
Keine Ahnung wie du das meinst. Es sollten zwei Variablen sein.
-
@BW82 sagte in Brauch mal jemand der Ahnung hat. Funktionen auslagern:
Mein Gott Leute, wenn ich nicht Hilfe bräuchte würde ich nicht fragen, also spart euch doch dumme Kommentare und gebt lieber konstruktive KRITIK , die einem hilft.
Mannis Kommentar war konstruktiv.
Du sollst darüber nachdenken ob das gut ist, wenn jahr den Wertfalse
hat.
Den hat es, wennif(jahr % 100== 0)
ausgeführt wird.
-
@manni66 also eine variable für true und false, und eine separate für Jahr.
also sowas in der art?if(jahr % 100== 0){ if (jahr % 400 == 0) { annahme = true; } else { annahme = false; } }else {annahme = true;} }else { annahme = false;} return annahme; }
-
So funktioniert es.
hier in main:bool annahme; //Eingabe cout << endl; cout << ("Jahreszahl "); cin >> jahr; annahme = istSchaltjahr(jahr); if (annahme == true){ cout << jahr << " ist ein Schaltjahr" << endl;} else{ cout << jahr << " ist kein Schaltjahr" << endl;}
bool istSchaltjahr(int jahr){ bool annahme; if (jahr % 4 == 0) { annahme= false; if(jahr % 100== 0){ if (jahr % 400 == 0) { annahme = true; } else { annahme = false; } }else {annahme = true;} }else { annahme = false;} return annahme; }
-
@BW82
Das ganze lässt sich auch noch kompakter schreibenbool check_leap_year (int year) { if ((year % 400) == 0) return true; if ((year % 100) == 0) return false; if ((year % 4) == 0) return true; return false; }
Weil man hier über die Abfolge der Prüfungen das gewünschte Ziel erreichen kann.
-
@john-0 Dank dir!
-
@john-0 sagte in Brauch mal jemand der Ahnung hat. Funktionen auslagern:
@BW82
Das ganze lässt sich auch noch kompakter schreibenbool check_leap_year (int year) { if ((year % 400) == 0) return true; if ((year % 100) == 0) return false; if ((year % 4) == 0) return true; return false; }
Weil man hier über die Abfolge der Prüfungen das gewünschte Ziel erreichen kann.
Man kann sich noch zusätzlich um Effizienz bemühen, die nötigen Division sind ja u.U. vergleichsweise aufwändig, also ist es wahrscheinlich günstig, die im Durchschnitt nötige Anzahl von Bedigungen zu minimieren. Die gezeigte Variante ist dabei am ungünstigsten, hier werden durchschnittlich 2.9875 if-Bedigungen pro Funktionsaufruf geprüft.
Besser ist es, die Sequenz herumzudrehen:
bool is_leap_year (int year) { // return (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0)); if ((year % 4) != 0) return false; if ((year % 100) != 0) return true; if ((year % 400) != 0) return false; return true; }
mit nur durchschnittlich 1.26 zu prüfenden Bedigungen je Funktionsaufruf.