Hallo Leute ich brauche eure hilfe bei meiner C Hausarbeit.
Ich muss die Gaußsche Osterformel in C Programmieren.
Wenn ich das Jahr EIngebe soll das Datum fürn Ostersonntag erscheinen.
Ich darf printf und scanf nur einmal verwenden und die Umrechnung des Oster-Datums bezogen auf März darf nur mit Ausdrücken erfolgen, Verzweigungen(if, if-else, switch-case, ternarer Operator) sind nicht erlaubt.
Also nur mit < oder >.
Hilfe bei C Hausarbeit
Re: Hilfe bei C Hausarbeit
Hier wird gern geholfen, aber ein klein bißchen mehr als bloß die Aufgabenstellung wirst Du schon selbst mitbingen müssen...
It's as simple as that. And remember, Beethoven wrote his first symphony in C.
-
- Beiträge: 6
- Registriert: Do Apr 24, 2014 5:11 pm
Re: Hilfe bei C Hausarbeit
Das Problem ist ja, das ich keinen Ansatz finde.
Bis jetzt habe ich nur das hier:
int a, b, c, k, p, q, M, d, N, e, Ostern, x, y, z; //x=Jahr y=Monat z=Tag
scanf ("%d", &x);
a = x % 19;
b = x % 4;
c = x % 7;
k = x / 100;
p = (8*k + 13) / 25;
q = k / 4;
M = (15 + k - p - q) % 30;
d = (19*a + M) % 30;
N = (4 + k - q) % 7;
e = (2*b + 4*c + 6*d + N) % 7;
Ostern = (22 + d + e);
Bis jetzt habe ich nur das hier:
int a, b, c, k, p, q, M, d, N, e, Ostern, x, y, z; //x=Jahr y=Monat z=Tag
scanf ("%d", &x);
a = x % 19;
b = x % 4;
c = x % 7;
k = x / 100;
p = (8*k + 13) / 25;
q = k / 4;
M = (15 + k - p - q) % 30;
d = (19*a + M) % 30;
N = (4 + k - q) % 7;
e = (2*b + 4*c + 6*d + N) % 7;
Ostern = (22 + d + e);
Re: Hilfe bei C Hausarbeit
und dein Problem ist?
(überleg' mal, was Du von deinen Vorgaben noch nicht verwendet hast)
(überleg' mal, was Du von deinen Vorgaben noch nicht verwendet hast)
It's as simple as that. And remember, Beethoven wrote his first symphony in C.
-
- Beiträge: 6
- Registriert: Do Apr 24, 2014 5:11 pm
Re: Hilfe bei C Hausarbeit
Es funktioniert einfach nicht, da ich das Programm ohne If und Else schreiben muss.
Da unten ist mein Programm. Ich darf das If und Else halt nicht verwenden und weiß nicht wie ich es ohne Ausdrücken kann. So würde das Programm richtig laufen.
#include <stdio.h>
int main ()
{
int a, b, c, k, p, q, M, d, N, e, Ostern, x, y, z;
scanf ("%d", &x);
a = x % 19;
b = x % 4;
c = x % 7;
k = x / 100;
p = (8*k + 13) / 25;
q = k / 4;
M = (15 + k - p - q) % 30;
d = (19*a + M) % 30;
N = (4 + k - q) % 7;
e = (2*b + 4*c + 6*d + N) % 7;
Ostern = (22 + d + e);
if (Ostern <= 31){
z = Ostern;
y = 3;
}
else {
z = Ostern - 31;
y = 4;
}
printf ("%02d.%02d.%04d\n", z, y, x);
return 0;
}
Da unten ist mein Programm. Ich darf das If und Else halt nicht verwenden und weiß nicht wie ich es ohne Ausdrücken kann. So würde das Programm richtig laufen.
#include <stdio.h>
int main ()
{
int a, b, c, k, p, q, M, d, N, e, Ostern, x, y, z;
scanf ("%d", &x);
a = x % 19;
b = x % 4;
c = x % 7;
k = x / 100;
p = (8*k + 13) / 25;
q = k / 4;
M = (15 + k - p - q) % 30;
d = (19*a + M) % 30;
N = (4 + k - q) % 7;
e = (2*b + 4*c + 6*d + N) % 7;
Ostern = (22 + d + e);
if (Ostern <= 31){
z = Ostern;
y = 3;
}
else {
z = Ostern - 31;
y = 4;
}
printf ("%02d.%02d.%04d\n", z, y, x);
return 0;
}
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Hilfe bei C Hausarbeit
Das funktioniert schon, dazu muss man aber etwas Mathematik und Rundung anwenden:Da unten ist mein Programm. Ich darf das If und Else halt nicht verwenden und weiß nicht wie ich es ohne Ausdrücken kann. So würde das Programm richtig laufen.
Code: Alles auswählen
y = 3 + Ostern/32;
Ostern -= 1;
z = 1 + Ostern % 31;
Bei der y-Zuweisung prüfst du, ob du im Monat April gelandet bist. Das passiert, wenn du mehr als 31, also mindestens 32 Tage hast. Wie es so will, werden in C die ganzzahligen Divisionen abgerundet. Solange du also unterhalb von 32 bist, ist das Ergebnis der Divison 0. Sobald du darüber bist, ist es 1.
Bei der z-Zuweisung willst du nach der 31 wieder mit 1 beginnen. Das macht Modulo: Ganzzahliger Divionsrest.
Nun ist es aber so, dass man hier nicht einfach Modulo 31 oder 32 rechnen könnte, da sonst einmal 0 heraus kommt.
Daher subtrahiere ich 1 von Ostern, sodass die Monate nun 0-Basiert sind(im Gegensatz zu 1 Basierten Monaten), kann nun den Modulo 31 nehmen, der mir für den 32 Tag(31 nach Abzug) 0 ausgibt, Plus 1 ergibt das den ersten April.
Voila, ohne if oder else
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
-
- Beiträge: 6
- Registriert: Do Apr 24, 2014 5:11 pm
Re: Hilfe bei C Hausarbeit
Danke Danke Danke.
Auf die Idee bin ich einfach nicht gekommen obwohl es so simpel ist xD.
Wirklich vielen Dank dieses Forum ist wirklich Klasse.
Ich sitze seit einer Woche an dieser Aufgabe und schäme mich etwas das ich auf die Lösung nicht gekommen bin.
Auf die Idee bin ich einfach nicht gekommen obwohl es so simpel ist xD.
Wirklich vielen Dank dieses Forum ist wirklich Klasse.
Ich sitze seit einer Woche an dieser Aufgabe und schäme mich etwas das ich auf die Lösung nicht gekommen bin.