Seite 1 von 1
Hilfe bei C Hausarbeit
Verfasst: Do Apr 24, 2014 5:15 pm
von DeadsGames
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 >.
Re: Hilfe bei C Hausarbeit
Verfasst: Do Apr 24, 2014 5:35 pm
von mfro
Hier wird gern geholfen, aber ein klein bißchen mehr als bloß die Aufgabenstellung wirst Du schon selbst mitbingen müssen...
Re: Hilfe bei C Hausarbeit
Verfasst: Do Apr 24, 2014 5:49 pm
von DeadsGames
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);
Re: Hilfe bei C Hausarbeit
Verfasst: Do Apr 24, 2014 6:01 pm
von mfro
und dein Problem ist?
(überleg' mal, was Du von deinen Vorgaben noch nicht verwendet hast)
Re: Hilfe bei C Hausarbeit
Verfasst: Do Apr 24, 2014 6:08 pm
von DeadsGames
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;
}
Re: Hilfe bei C Hausarbeit
Verfasst: Do Apr 24, 2014 6:44 pm
von cloidnerux
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.
Das funktioniert schon, dazu muss man aber etwas Mathematik und Rundung anwenden:
Was passiert hier?
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
Re: Hilfe bei C Hausarbeit
Verfasst: Do Apr 24, 2014 7:03 pm
von DeadsGames
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.