Zadanie obliczające piątki 13-stego w danym roku

0

Witam, z góry przepraszam za trywialność problemu, ale materiały jakie podpowiada nam nasz wykładowca nijak są w stanie mi pomóc. Pisałem kiedyś w Javie i nie do końca jeszcze wyczuwam różnice między Javą, a C. Program kompiluje się z masą ostrzeżeń, a jak go uruchamiam to wyskakuje pusty terminal, co muszę zmienić?

"Napisz program, który czyta liczbę naturalną r (1600 < r < 10 000)
i drukuje wszystkie piątki trzynastego w roku r.
(W Polsce w tym czasie obowiązywał i zakładamy, że będzie obowiązywał
kalendarz gregoriański)"

pierwszyStycznia to dzień jaki był 1.01.1600

#include <stdio.h>
#include <stdlib.h>

int main()
{
   int jakiDzienPierwszego(int pierwszyStycznia, int rok){
        int jakiDzien;
        jakiDzien = (pierwszyStycznia + 366*ilePrzestepnych(rok) + 365*(rok - ilePrzestepnych(rok)))%7;
        return jakiDzien;
    }

    int ilePrzestepnych(int rok){
        int i;
        int ilePrzestepnych = 0;
        for(i = 0; i < rok - 1600; i++){
            if(czyPrzestepny(i) == 1)
                ilePrzestepnych++;
        }
        return ilePrzestepnych;
   }

   int czyPrzestepny(int rok){
        if(rok == 0 || (rok%4 == 0 && rok%400 == 0) || (rok%4 == 0 && rok%100 != 0))
            return 1;
        return 0;
   }

    void wypiszPiatki(int pierwszyStycznia, int rok){
        puts("W danym roku piatki trzynastego beda w tych miesiacach:");
        switch(jakiDzienPierwszego(pierwszyStycznia, rok)){
            case 0:
                if(czyPrzestepny(rok) == 1)
                    puts("Wrzesien oraz grudzien.");
                else
                    puts("Maj.");
                break;
            case 1:
                if(czyPrzestepny(rok) == 1)
                    puts("Czerwiec.");
                else
                    puts("Wrzesien oraz grudzien.");
                break;
            case 2:
                if(czyPrzestepny(rok) == 1)
                    puts("Marzec oraz listopad.");
                else
                    puts("Czerwiec.");
                break;
            case 3:
                if(czyPrzestepny(rok) == 1)
                    puts("Luty oraz sierpien.");
                else
                    puts("Luty, marzec oraz listopad.");
                break;
            case 4:
                if(czyPrzestepny(rok) == 1)
                    puts("Maj.");
                else
                    puts("Sierpien.");
                break;
            case 5:
                if(czyPrzestepny(rok) == 1)
                    puts("Pazdziernik.");
                else
                    puts("Maj.");
                break;
            case 6:
                if(czyPrzestepny(rok) == 1)
                    puts("Styczen, kwiecien oraz lipiec");
                else
                    puts("Styczen oraz pazdziernik");
                break;
        }
    }

    int main (void){
        int pierwszyStycznia = 1;
        int rok;

        puts("Podaj rok, a ja wypisze jego piatki 13-stego");
        scanf("%d", &rok);
        wypiszPiatki(pierwszyStycznia, rok);

        return 0;
    }
}

0

Może chodzi o to, że czyPrzestepny jest funkcją, a ładujesz to do ifa jak zmienną...

0

Ok, zmieniłem, nadal nic.

1

Aż sam sprawdziłem na ideone i to rzeczywiście się kompiluje http://ideone.com/YjYATb nawet C potrafi zadziwiać.
W C taki kod:

int main()
{
   //funkcje
  int main(void)
  {
     //kod
     return 0;
  }
}

to niezły kwiatek, albo moja niewiedza z tego języka sięga dalej niż przypuszczałem. Usuń tego pierwszego main a program się uruchomi

//funkcje

int main(void)
{
    //kod
    return 0;
}

0

Dzięki, w życiu bym tego sam nie zauważył :)

0
int jakiDzienPierwszego(int rok)
{
	int x = rok + 4799;
	return (365*x + x/4 - x/100 + x/400 + 1) % 7;
}

Wartość zwracana 0 to niedziela. Jak chcesz inaczej to zmień składnik + 1 we wzorze na inny.

1 użytkowników online, w tym zalogowanych: 0, gości: 1