kleines prob damit
-
Habs mal kompiliert.
scanf("i%",&a);
ist noch falsch, aber das hast du anscheinend schon korrigiert.
Das Ergebnis ist bei mir auch falsch: 25. März für 2008.
stdlib.h brauchst du für das Programm nicht.Bis kurz vor Anpfiff habe ich noch Zeit, ich kann ja mal gucken. Ist ja auch immer eine gute Übung.
-
#include <stdio.h> int main() { int a,b,c,d,e,f,g,h; printf("Geben sie gewuenschte Jahreszahl ein:\t"); scanf("d%",&a); b=(a %19)+1; c=(a/100)+1; d=(3*c/4)-12; e=((8*c+5)/25)-5; f=(5*a/1)-d-10; g=(11*b+20+e-d)%30; if (((g == 25) && (b > 11)) || (g == 24)) g++; h=44-g; if(h<21) h=h+30; h=h+7-((f+h)%7); if(h>31) { printf("April %d", h-31); } else{ printf("Maerz%d",h); } return 0; }
so sieht mein komplettes programm aus. das komische ist, dass die werte sich immer unterschieden, obwohl die gleiche eingabe erfolgt, bin grad auch am testen.
ist ja gut noch eine stunde !
was ist denn dein tipp ?
-
Bei mir läufts.
f=(5*a/1)-d-10;
Du teilst durch 1.
scanf("d%",&a);
"%d", nicht "d%"
-
Nagila Hawa schrieb:
Bei mir läufts.
f=(5*a/1)-d-10;
Du teilst durch 1.
scanf("d%",&a);
"%d", nicht "d%"
oh man nur blöde tippfehler
garnet gesehen, dass ich durch 4 muss! hattest du es von mir übernommen?
vielen dank, warst mir echt ne große hilfe! kann jetzt gleich fußball in ruhe genießen, hoffe du auch ! meint tipp ist 3:1
-
5:0!
Ich würde vorher noch die Ausgabe etwas schöner machen und etwas an der Form arbeiten.
if (((g == 25) && (b > 11)) || (g == 24))
Da sieht man zu auffällig, daß die Zeile eine ganz andere Form als der restliche code hat.
Ich habe neu geschrieben und dabei immer verglichen. und ein bischen sinnlos rumgespielt...
#include <stdio.h> int main(void) { char *pMonat[] = {"", "Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"}; int monat; int jahr; int ergebnis; int b, c, d, e, f, g, h; printf ("\nGeben sie die Jahreszahl an: "); scanf ("%d", &jahr); b = (jahr % 19) + 1; c = (jahr / 100) + 1; d = ((c * 3) / 4) - 12; e = (((c << 3) + 5) / 25) - 5; f = ((5 * jahr) / 4) - d - 10; g = ((11 * b) + 20 + e - d) % 30; if (((g == 25) && (b > 11)) || (g == 24)) g++; h = 44 - g; if (h < 21) h += 30; h = h + 7 - ((f + h) % 7); if (h > 31) { ergebnis = h - 31; monat = 3; } else { ergebnis = h; monat = 4; } printf ("\nIm Jahr %d ist der Ostersonntag am %d.%s.\n\n", jahr, ergebnis, pMonat[monat]); return 0; }
-
leider nur 1:0
also gegen portugal, muss mehr gehen!
naja back to topic
deine überarbeitung sieht sehr gut aus.
eine frage dazu,wieso hast dieses hier abgeändert:
e = (((c << 3) + 5) / 25) - 5;
-
Das ist keine sinnvolle Überarbeitung... nur Spielerei. So würde ich das Programm nicht stehen lassen.
Interessantere Überarbeitungen wären z.B. eine Überprüfung der Eingabe und die Möglichkeit das Jahr direkt über Parameter beim Aufruf mitzugeben.
Das Shiften ist auch nur Spielerei. In der Regel kann man so zeitaufwändige Multiplikationen und Divisionen beschleunigen. Das sollte der Compiler aber eigentlich selbst können.
http://www.cs.uiowa.edu/~jones/bcd/divide.html
-
Nagila Hawa schrieb:
Das "else if" aus z.B. Pascal wird in c "elif" geschrieben.
ja, als preprozessor-code. sonst bleibts beim 'else if'.
-
Ja, hast Recht... habe gerade mal ein paar alte Codes angeschaut. Überall "else if" benutzt.
Habe zu viel mit Python rumgespielt.
-
[/quote]
ja, als preprozessor-code. sonst bleibts beim 'else if'.
:)[/quote]
präprozessor!!