Will ja nicht nerven ;-(

DunklerEngel

Mitglied
Nachdem ich alle meinen Übungen gut nachvollziehen konnte, erreicht mich jetzt ein Problem, wo ich wirklich das Gefühl habe, dass ich ohne Tips nicht vorankomme und wahrscheinlich die Fehler nur noch zunehmen.

Sinn der Aufgabe habe ich verstanden. Ich bin der Ansicht, es geht hier darum, das Wahrheits-Falschheits-Prinzip, logische Operatoren (wie logisches und usw.) und gleichzeitig if-else-Verzweigungen und Modulo abzufragen.
Das ist sehr viel auf einmal,....die Aufgabenstellung ist so konfus, dass ich hier mit einem Notizzettel sitze und versuche, das ganze grafisch darzustellen.

Hat jemand heute vielleicht die Zeit und vor allen Dingen auch die Lust, mit mir gemeinsam diese Aufgabe zu lösen? *verzweifelt*bin.

Aufgabe:
Schreiben Sie ein Programm, das eine Jahreszahl über die Tastatur abfragt, und dann ausgibt, ob das Jahr ein Schaltjahr ist. Ein Jahr ist kein Schaltjahr, wenn die Jahreszahl nicht durch 4 teilbar ist. Ein Jahr ist ein Schaltjahr, wenn die Jahreszahl durch 4 aber nicht durch 100 teilbar ist. Es ist ebenfalls ein Schaltjahr, wenn die Jahreszahl durch 4, durch 100 und durch 400 teilbar ist.

Benutzen Sie zur Überprüfung der Teilbarkeit den modulo-Operator % und 3 if-else-Verzweigungen. Zur Erinnerung: wenn eine Zahl x nicht durch y teilbar ist, dann liefert der Ausdruck (x % y) einen Wert grösser als 0 und ist WAHR.

Benutzen Sie eine Integer-Variable ergebnis, der Sie eine 1 zuweisen, wenn das Jahr ein Schaltjahr ist, oder eine 0, falls nicht.

Implementieren Sie die Ausgabe in einer zweiten if-else-Verzweigung, die abhängig vom Wert der Variable ergebnis ausgibt, ob das Jahr ein Schaltjahr war, oder nicht.
_____
:eek: ich denke, jetzt wisst ihr, warum ich nicht mehr klarkomme. Ich weiss wohl, was verlangt wird, habe auch schon einen Anfang gemacht, aber weiss z. B. nicht, wie ich einzelne Variablen zuweisen soll, um sie hinterher einfach nur einzusetzen.
Hat jemand von Euch für mich Zeit?:(

Liebe Grüsse
Anja
 
Code:
int istSchaltjahr = 0;
if(jahr % 4 == 0) {
  if(jahr % 100 == 0) {
    if(jahr % 400 == 0) {
      istSchaltjahr = 1;
    }
    else {
      istSchaltjahr = 0;
    }
  }
  else {
    istSchaltjahr = 1;
  }
}
else {
  istSchaltjahr = 0;
}

if(istSchaltjahr == 1) {
  std::cout << jahr << " ist ein Schaltjahr" << std::endl;
}
else {
  std::cout << jahr << " ist kein Schaltjahr" << std::endl;
}

PS: Das ist wohl die Standardaufgabe an Berufsschulen, oder? ;)
 
Hallo,

lässt sich so realisieren: ( eventuelle Fehler nicht ausgeschlossen )

PHP:
#include <iostream>
#include <stdlib.h>

using namespace std;

int main(int argc, char *argv[])
{
  
  int jahreszahl,schaltjahr;
  
  schaltjahr = 0;
  cout << "Bitte Jahreszahl eingeben:" << endl;
  cin >> jahreszahl;
  
  if ( jahreszahl % 4 == 0 )
  {
    schaltjahr = 1;
    if ( jahreszahl % 100 == 0 )
    {
        schaltjahr = 0;
        if ( jahreszahl % 400 == 0 )
        {
            schaltjahr = 1;
        }
    }
  }	
  
  if ( schaltjahr ) cout << "Schaltjahr: Ja" << endl;
  else cout << "Schaltjahr: Nein" << endl;

  return 0;
}

mfg Jens
 
Hmmh, also ich mache einen Fernlehrgang....bin 31 und habe bereits meinen Hauptberuf. Da ich zuvor ausser ein wenig html nicht viel programmiert habe, fällt es mir natürlich dementsprechend schwerer, als wie Dir z. B. ;-)

Wäre schön, wenn ich noch auf einer Berufsschule wäre:) , dann wäre ich ja auch noch jünger.

aber was heisst std Ich darf nur Ausdrücke benutzen, die bereits in dem aktuell vorliegenden Studienheft vorkommen...

Aber danke für Deine Hilfe:)

____
upss, da hat zeitgleich noch jemand einen Tip gegeben.

Dieser Ausdruck: #include <stdlib.h>
den kenne ich nicht....und den darf ich sicherlich nicht verwenden.
Kannst Du mir diesen Ausdruck erklären?
 
Zuletzt bearbeitet:
aber was heisst std Ich darf nur Ausdrücke benutzen, die bereits in dem aktuell vorliegenden Studienheft vorkommen...
Das ist der Namensraum, in dem unter anderem die Eingabe- und Ausgabe-Objekte (cout und cin) liegen. Den musst du angeben, wenn du irgendetwas auf die Konsole ausgeben willst.
 
Ich gebe auf die Konsole immer mit <<cout<<endl;

aus....ist doch auch richtig, oder?
Aber ich sehe schon...hmmh...kann ich nicht std ganz weglassen?
Ich versuche jetzt erstmal mein Programm umzuschreiben.

Aller Anfang ist schwer :) beneide Euch richtig um Eure Kenntnisse. Habe aber auch erst am 24.06. begonnen und bin jetzt bei dem 3. Studienheft. Ein Heft hat ca. um die 75 Seiten, und am Ende muss ich halt Aufgaben fertigen.
Oftmals sind die Aufgaben so konfus gestellt, dass man schnell etwas "wichtiges" überlesen kann.
 
beneide Euch richtig um Eure Kenntnisse.
Um meine C++-Kenntnisse würde ich mich selbst nicht beneiden. ;)

Die Angabe von std musst aber immer irgendwie benutzen.
Du kannst den Namensraum komplett einbinden, und dann direkt auf cout, cin, endl, und so weiter zugreifen:
Code:
using namespace std;
Du kannst auch nur die Objekte aus dem Namensraum einbinden, die du brauchst, um auf diese Objekte zugreifen zu können:
Code:
using std::cout;
using std::endl;

Oder du lässt diese Einbindung ganz weg, musst dann aber den Namensraum davor schreiben:
Code:
std::cout << "Text" << std::endl;
 
So, jetzt habe ich mal versucht, nach dem ersten Tip in diesem Thread mein Programm so umzuschreiben mit den Werten usw., die mir bekannt sind. Aber es klappt leider nicht. Der Compiler gibt mir Fehlermeldungen:

Code:
#include <iostream.h>
int istschaltjahr = 0;
if(jahr % 4 == 0)   {
if(jahr % 100 == 0)   {
if(jahr % 400 == 0)   {
istSchaltjahr = 1;}
}
else {
istSchaltjahr = 0;
}
}
else {
istSchaltjahr = 1;
}
}
else {
istSchaltjahr = 0;
}
if(istSchaltjahr == 1)   {
cout<<"ist ein Schaltjahr"<<endl;
}
else {
cout<<"ist kein Schaltjahr"<<endl;
}




  char p[50];
  cin.getline (p,50);
  cin.getline (p,50);

}

Normalerweise arbeite ich vor dem char p[50] noch mit der Funktion void main()

Noch eine Frage: Wozu muss ich drei else-Verzweigungen schreiben, wenn dort (sorry, wenn ich so dumm frage), doch eh dasselbe steht else istschaltjahr = 0 und istschaltjahr = 1, wieso doppelt? *grübel*

______
nochmal edit: std hatte ich noch nicht gelernt, ich bin mir sicher, man wird sich fragen, wie ich darauf komme...gibt es nicht einen anderen weg, ganz ohne std? Ich verstehe schon, was Du meinst, aber muss ich nicht noch eine int_var ergebnis einfügen? Wie in der Aufgabenstellung verlangt? Also eine, die auch als solche bezeichnet wird?

Und warum beneidest Du dich nicht?;) Sei stolz drauf, ich habe massenhaft Kontakte im Internet, denkst Du, einer kann C++? Niemand:-) , die programmieren nur ihre foren usw. mit php und haben bisher nichts anderes gemacht.
 
Zuletzt bearbeitet:
Original geschrieben von DunklerEngel
Dieser Ausdruck: #include <stdlib.h>
den kenne ich nicht....und den darf ich sicherlich nicht verwenden.
Kannst Du mir diesen Ausdruck erklären?

Du musst versuchen das Prinzip dahinter zu erkennen. Normalerweise kennt der Compiler nur einige wenige festgelegte Ausdrücke, mit der man fundamentale Logik- und Arithmetikaufgaben lösen kann, also if, for, while,... und Assembleranweisungen (mit _asm eingegeben). Alles andere muss über Funktionen bereitgestellt werden. Die werden entweder selbst geschrieben oder es werden bereits geschriebene im Programm verwendet. Da der Compiler aber die Definitionen dieser Funktionen zunächst nicht kennt, sagt man ihm, wo sie stehen. Das macht man mit #include. drvj hat einfach standardmäßig die Funktionen aus der Datei stdlib.h für den Compiler "bekannt gemacht", auch wenn keine Funktion daraus benutzt wurde (die #include-Anweisung macht prinzipiell einfach folgendes: sie sagt, füge die Datei, die ich dir in den eckigen Klammern angebe, an der Stelle ein, an der ich stehe).
Was den Namespace angeht, es gibt Funktionen die gehören zu einem bestimmten Namespace. Den muss man angeben, wenn man sie benutzen möchte. Dazu gehört cout auch. Deswegen muss man cout eigentlich entweder mit dem Namespace angeben, also std::cout oder man sagt dem Compiler, welchen Namespace man standardmäßig nimmt, das macht man mit using namespace.
Da du aber iostream.h (und nicht iostream) benutzt, brauchst du std nicht als namespace angeben (oder woran liegt's sonst, dass es trotzdem geht?).

Ach noch ein Tipp: Einrücken! Gewöhn dir einen EINHEITLICHEN Stil beim schreiben an. Auf jeden Fall nach jeder geschweiften Klammer die geöffnet wird um ein paar Bytes einrücken, nach jeder die geschlossen wird, wieder zurück (so wie in den Beispielposts hier).
 
Zuletzt bearbeitet:
Den von mir geposteten Code musst du natürlich auch noch in die main-Funktion einfügen, sonst bekommst du eben diese Compiler-Fehler. ;)

Noch eine Frage: Wozu muss ich drei else-Verzweigungen schreiben, wenn dort (sorry, wenn ich so dumm frage), doch eh dasselbe steht else istschaltjahr = 0 und istschaltjahr = 1, wieso doppelt? *grübel*
Weil nur einer dieser Fälle eintreten wird. Grob übersetzt macht der Code ja auch nichts anderes als folgende Überlegung:
Code:
Wenn das Jahr durch 4 teilbar ist:
  Wenn das Jahr auch durch 100 teilbar ist:
    Wenn das Jahr auch durch 400 teilbar ist:
      Es ist ein Schaltjahr
    Sonst:
      Es ist kein Schaltjahr
  Sonst:
    Es ist ein Schaltjahr
Sonst:
  Es ist kein Schaltjahr
Das könnte man zwar noch abkürzen, aber darum geht's in deiner Aufgabe ja nicht. ;)

nochmal edit: std hatte ich noch nicht gelernt, ich bin mir sicher, man wird sich fragen, wie ich darauf komme...gibt es nicht einen anderen weg, ganz ohne std?
Bei C++ musst du das verwenden, du kannst das mit C aber umgehen, indem du die Funktionen printf und scanf anstelle von cout und cin benutzt.

aber muss ich nicht noch eine int_var ergebnis einfügen? Wie in der Aufgabenstellung verlangt? Also eine, die auch als solche bezeichnet wird?
Hast du doch, die Variable heißt "istSchaltjahr".
 

Neue Beiträge

Zurück