Kalendarz na dany rok.

0

Witam,
Czy znalazła by się jakaś dobra dusza która napisałaby krótki opis działania programu wypisującego kalendarz na dany rok.

 
#include <stdio.h>


char *dzien(int n)
{
     if(n==0)
     return "po";
     if(n==1)
     return "wt";
     if(n==2)
     return "sr";
     if(n==3)
     return "cz";
     if(n==4)
     return "pi";
     if(n==5)
     return "so";
     return "ni";
}


int przestepca(int r)
{
    if(r%4==0 && r%100!=0)
    return 1;
    return 0;
}


char *miesiac(int m)
{
     if(m==0)
     return "styczen";
     if(m==1)
     return "luty";
     if(m==2)
     return "marzec";
     if(m==3)
     return "kwiecien";
     if(m==4)
     return "maj";
     if(m==5)
     return "czerwiec";
     if(m==6)
     return "lipiec";
     if(m==7)
     return "sierpien";
     if(m==8)
     return "wrzesien";
     if(m==9)
     return "pazdziernik";
     if(m==10)
     return "listopad";
     if(m==11)
     return "grudzien";
}


void wys(int l)
{

     if(l<10)
     printf("%i  ", l);
     else
     printf("%i ",l);
}

void spacje(int l)
{
     while(l>0)
     {
               printf("   ");
               l--;
     }
}

int main()
{
    int miesiace[20]={31,28,31,30,31,30,31,31,30,31,30,31};   
    
    
    int i,j;
    int r=2015;
    int d=2;
    int g;
    
    printf("Podaj rok\n");
    scanf("%i", &r);
    
    for(i=1800;i<r;i++)
    {
           for(j=0;j<12;j++)
           {
                            g=0;
                            for(;;)
                            {
                                   d++;
                                   d%=7;
                                   g++;
                                   if(j!=1)
                                   if(g==miesiace[j])
                                   break;
                                   
                                   if(j==1)
                                   {
                                           if(g==miesiace[j]+przestepca(i) )
                                           break;
                                   }
                                   
                            }
                                                               
           }            
    }
    
    
    int z;
    
    for(j=0;j<12;j++)
    {
                      printf("%s\n", miesiac(j));
                      for(z=0;z<7;z++)
                      {
                                     printf("%s ", dzien(z));
                      }
                      printf("\n");
                      spacje(d+1);
                            g=0;
                            for(;;)
                            {
                                   d++;
                                   d%=7;
                                   if(d==0)
                                   printf("\n");
                                   g++;
                                   
                                   wys(g);
                                   if(j!=1)
                                   if(g==miesiace[j])
                                   break;
                                   
                                   if(j==1)
                                   {
                                           if(g==miesiace[j]+przestepca(i) )
                                           break;
                                   }
                                   
                                   
                            }
                            printf("\n\n\n");
                                                               
    }
    
    
    
    
    
  //  printf("%i\n", d);
    
    system("pause");
}
 

Z góry dziękuję za pomoc.

0

Co to jest? Wiesz co to są klasy, obiekty. Po co piszesz if-y, w tym wypadku switche są o wiele optymalniejsze.
Wiesz co to jest optymalizacja? JA bym tego nie nazwał programem.

0

Umiejętność programowania, to również umiejętność analizy. My nie możemy Ci pomóc - musisz posiąść tą umiejętność sam. Powodzenia!

3
Kixon napisał(a):
 
int przestepca(int r)

Funkcja wyszukująca przestępcę? Może znajdziesz posadę w wymiarze sprawiedliwości :)

0

int przestepca(int r)
{
if(r%4==0 && r%100!=0)
return 1;
return 0;
}

ŹLE.

Według tego kodu AD 2000 nie był "przestępcą". A był.

int przestepca(int r)
{
	if(r%400==0)
		return 1;
	if (r%100==0)
		return 0;
	if (r%4==0)
		return 1;
	return 0;
}

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