C++ Schaltjahr < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 18:55 Mo 01.02.2010 | Autor: | niemand0 |
Aufgabe | Schreibe ein Programm SCHALTJ.C, das eine Jahreszahl als int-Wert von der Tastatur einliest und anschließend ausgibt, ob es sich um ein Schaltjahr handelt oder nicht. Die Bestimmung eines Schaltjahres erfolgt nach der folgenden mehrstufigen
Regel: Wenn die Jahreszahl ohne Rest durch 4 teilbar ist, handelt es sich um ein Schaltjahr.
Ausnahme: Wenn die Jahreszahl auch durch 100 ohne Rest teilbar ist, dann handelt es sich doch nicht um ein Schaltjahr:
Ausnahme von der Ausnahme: Wenn die Jahreszahl durch 400 ohne Rest teilbar ist, dann handelt es sich doch um ein Schaltjahr. |
aloah,
wir arbeiten in informatik mit dev-c++
und ich komme bei dieser aufgabe irgendwie nicht weiter
mein ansatz bis jetzt ist :
/* schaltjahr.C OT23-V 28.1.2010*/
#include <stdio.h>
#include <conio.h>
int main()
{
int jahr=0;
printf("Dieses Programm errechnet ob eine eingegebene Jahrezahl ein Schaltjahr ist:");
printf("Geben sie die Jahreszahl ein:");
scanf("%d", &jahr);
if (jahr % 4 ==0)
{
if (jahr % 100==0)
{
if (jahr %400 ==0)
printf("%d ist ein [mm] Schaltjahr.\n", [/mm] jahr);
else
printf("%d ist kein [mm] Schaltjahr.\n", [/mm] jahr);
}
else
{
if (jahr %400 ==0)
printf("%d ist ein [mm] Schaltjahr.\n", [/mm] jahr);
else
printf("%d ist kein [mm] Schaltjahr.\n", [/mm] jahr);
}
else
printf("%d ist [mm] Schaltjahr.\n", [/mm] jahr);
}
else
printf("%d ist kein [mm] Schaltjahr.\n", [/mm] jahr);
return 0;
}
wäre nett wenn mir jemand einen kleinen tipp geben würde :)
|
|
|
|
Hallo niemand0,
Wenn man mit mehreren if-Abzweigungen arbeiten muß, ist es wichtig die if-Blöcke zu kommentieren und visuell einzurücken, um den Überblick nicht zu verlieren. Ich denke, das folgende Programm sollte funktionieren, sofern ich nichts übersehen habe. Ich habe dabei dein Programm genommen und es ein wenig gekürzt.
1: | #include <stdio.h>
| 2: |
| 3: | int main()
| 4: | {
| 5: | int jahr = 0;
| 6: |
| 7: | printf("Dieses Programm errechnet ob eine eingegebene Jahrezahl ein Schaltjahr ist:");
| 8: | printf("Geben sie die Jahreszahl ein:");
| 9: |
| 10: | scanf("%d", &jahr);
| 11: |
| 12: | /* Regel: Wenn die Jahreszahl ohne Rest durch 4 teilbar ist, ... (3) */
| 13: | if (jahr % 4 ==0) {
| 14: | /* Ausnahme: Wenn die Jahreszahl auch durch 100 ohne Rest teilbar ist, ... (1) */
| 15: | if (jahr % 100==0) {
| 16: | /* Ausnahme von der Ausnahme: Wenn die Jahreszahl durch 400 ohne Rest teilbar ist, ... (2) */
| 17: | if (jahr % 400 ==0)
| 18: | /* (2) ... dann handelt es sich doch um ein Schaltjahr. */
| 19: | printf("%d ist ein Schaltjahr.\n", jahr);
| 20: | else
| 21: | /* (1) ... dann handelt es sich doch nicht um ein Schaltjahr. */
| 22: | printf("%d ist kein Schaltjahr.\n", jahr);
| 23: | }
| 24: | else
| 25: | /* (3) ... handelt es sich um ein Schaltjahr(, da die erste Ausnahme nicht gilt.) */
| 26: | printf("%d ist ein Schaltjahr.\n", jahr);
| 27: | }
| 28: | else
| 29: | printf("%d ist kein Schaltjahr.\n", jahr);
| 30: |
| 31: | return 0;
| 32: | } |
Viele Grüße
Karl
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 20:03 Mo 01.02.2010 | Autor: | Sigma |
Hallo,
habe deine Code jetzt nicht geprüft. Es geht aber noch etwas kürzer.
Hier mal ein Pseudocode der auch prüft ob x ein Schaltjahr ist oder nicht.
If (((x Mod 4==0) AND (x Mod 100 <>0)) OR (x mod 400==0)) Then
x ist ein Schaltjahr
Else
x ist kein Schaltjahr
gruß sigma
Ps. Schau mal unter Wahrheitstabelle
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 21:47 Mo 01.02.2010 | Autor: | Karl_Pech |
Hallo Sigma,
> If (((x Mod 4==0) AND (x Mod 100 <>0)) OR (x mod 400==0))
> Then
>
> x ist ein Schaltjahr
>
> Else
>
> x ist kein Schaltjahr
> Ps. Schau mal unter Wahrheitstabelle
Ja, stimmt daran habe ich jetzt gar nicht gedacht:
0## 0
10# 1
110 0
111 1
0 0 0 1 1 1 1 0
0 1
1 1 1
A~B + AC
also:
((x % 4 == 0) && (x % 100 != 0)) || ((x % 4 == 0) && (x % 400 == 0))
Da 4 Teiler von 400 ist, gilt das, was du geschrieben hast:
((x % 4 == 0) && (x % 100 != 0)) || (x % 400 == 0)
Alternativ sollte dann aber auch (x % 4 == 0) && ((x % 100 != 0) || (x % 400 == 0)) richtig sein.
Viele Grüße
Karl
|
|
|
|