Programowanie w C, zadania

soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

Programowanie w C, zadania

Post autor: soku11 »

Z tego co widzę, to tutaj żadnych pętli ani tablic nie trzeba stosować (no może z tymi miesiącami można, no ale to później).
Napiszę jeszcze raz - wypisz sobie na kartce kolejne kroki, tzn. co i jak chcesz liczyć. Następnie zrób sobie pustą funkcję main i w niej po kolei pisz co potrzebujesz. Np.
...
10. Pobieram rok od użytkownika jako liczbę ze znakiem.
11. Sprawdzam, czy rok nie jest ujemny. Jeśli jest - wywalam komunikat i kończę działanie.
12. Obliczam ilość lat przestępnych od roku 0 do roku podanego przez użytkownika -1.
...
Teraz na podstawie tego tworzymy kawałek kodu:

Kod: Zaznacz cały

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


int policzPrzestepne(int rok);

int main(void)
{
  int rok=0;  /* 10 */
  int przestepne=0; /* 12 */
  /* .... */

  /* 10 */
  printf("Podaj rok: ");
  scanf("%d",&rok);

  /* 11 */
  if(rok<0)
  {
    printf("Podales ujemny rok!\n");
    return EXIT_FAILURE;
  }

  /* 12 */
  przestepne=policzPrzestepne(rok);
  

  /* .... */
  return EXIT_SUCCESS;
}


int policzPrzestepne(int rok)
{
  /* obliczanie ile jest lat przestepnych w roku 'rok' */
}

Pozdrawiam.
madaf007
Użytkownik
Użytkownik
Posty: 131
Rejestracja: 4 wrz 2008, o 17:01
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 33 razy

Programowanie w C, zadania

Post autor: madaf007 »

Ok dzięki:) Mniej więcej wiem o co chodzi, ale dalej nie mam pojęcia jak te miesiące uwzględnić. I mógłbyś mi jakoś wytłumaczyć zasadę działania tego int policzPrzestepne(int rok); co się dzieje z programem jak to dam w kodach?:)
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

Programowanie w C, zadania

Post autor: soku11 »

Heh... Napiszę po raz kolejny to samo, bo widać, że chyba nie czytasz tego co piszę :] Rozpisz sobie na kartce jak to ma działać. Jak to zrobisz - dopiero bierz się za zakodowanie. Piszesz teraz, że nie wiesz jak uwzględnić miesiące, a wcześniej napisałeś, że wiesz jak to ma wyglądać... Coś tutaj jest nie tak :/

Najlepiej przepisz metodę, którą chcesz użyć, to będę wiedział co w ogóle chcesz osiągnąć. Bo skąd niby mam wiedzieć jak TY chcesz uwzględnić miesiące w swojej metodzie. Jak będziesz miał dokładnie rozpisane, co po kolei robisz (jak w moim przykładzie), to będziesz wiedział co wpisać w swoim kodzie programu.

Pozdrawiam.
madaf007
Użytkownik
Użytkownik
Posty: 131
Rejestracja: 4 wrz 2008, o 17:01
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 33 razy

Programowanie w C, zadania

Post autor: madaf007 »

1.Użytkownik podaje rok.
2.Program wylicza ile od 1 roku naszej ery (bo nie ma roku 0) było roków przestępnych od roku -1 od podanego.
3.Program wylicza ile od 1 r.n.e. było roków normalnych od roku -1 od podanego.
4.Program mnoży przestępne * 366 dni oraz normalne *365 dni.
5.Użytkowanik podaje miesiąc.
6.Program uwzględnia miesiąc poprzedni od podanego.
7.Jeśli podany wcześniej rok jest rokiem przestępnym luty ma 29 dni, jeśli nie to 28.
8.Program sumuje dni z miesięcy za pomocą tablicy. (Chyba, że jest inny łatwy sposób.)
9.Użytkownik podaje dzień.
10.Program dodaje dni z roków, miesięcy oraz podanego dnia.


Napisałem, że wiem jak to ma wyglądać w sensie, że wiem jak ma działać program, ale nie mam pojęcia w niektórych kwestiach jak moje myślenie mam przenieść na język C. Nie wiem co i gdzie mam pisać. Dopiero się uczę i to jest dla mnie całkowita nowość także proszę o wyrozumiałość:). W zasadzie już tylko nie wiem jak ta moja tablica ma działać z miesiącami, no i nie wiem jak inaczej można obliczyć ile było roków normalnych a ile przestępnych inaczej niż tym przykładem co ja podałem wcześniej. Bo liczy mi dobrze dni od podanego roku, dodaje mi podany dzień, ale nie uwzględnia mi dni od podanego miesiąca, bo coś tablice knocę.

Pozdrawiam.
soku11
Użytkownik
Użytkownik
Posty: 6607
Rejestracja: 16 sty 2007, o 19:42
Płeć: Mężczyzna
Podziękował: 119 razy
Pomógł: 1823 razy

Programowanie w C, zadania

Post autor: soku11 »

Co do tablicy:
Jak masz tablicę z ilością dni:

Kod: Zaznacz cały

int miesiace[]={31,28,31,..};
Chcesz zapewne znaleźć ile dni ma wczytany miesiąc. No więc wczytujemy od użytkownika:

Kod: Zaznacz cały

scanf("%d",&m);
I żeby zobaczyć ile dni ma dany miesiąc odwołujemy się do tablicy w taki sposób:

Kod: Zaznacz cały

miesiace[m-1]
Odejmujemy na końcu jedynkę od wczytanego miesiąca, bo tablice są zawsze indeksowane od 0. Czyli miesiace[0], to styczeń, miesiace[1] - luty, itd.

Co do problemu wyznaczania ile było lat normalnych a ile przestępnych:
Aby zliczyć lata przestępne liczysz ile było lat podzielnych przez 4, następnie odejmujesz od wyniku tyle ile było lat podzielnych przez 100, odejmujesz ile było lat podzielnych przez 400 i dodajesz lata podzielne przez 100 i 400.
Jak nie chcesz się w takie coś bawić - robisz pętlę. A w pętli:
1. Przebiegasz od lata -1 do podanego roku -1 za każdym razem inkrementując rok.
2. Sprawdzasz czy podany rok jest przestępny. Jeśli jest przestępny - dodajemy 356. Jeśli nie - dodajemy 355.

Drugi sposób jest za pewne wolniejszy (różnicy i tak nie zobaczysz), ale duużo łatwiejszy do zapisania

Pozdrawiam.
madaf007
Użytkownik
Użytkownik
Posty: 131
Rejestracja: 4 wrz 2008, o 17:01
Płeć: Mężczyzna
Lokalizacja: Wrocław
Podziękował: 33 razy

Programowanie w C, zadania

Post autor: madaf007 »

soku11 pisze:Co do tablicy:
Jak masz tablicę z ilością dni:

Kod: Zaznacz cały

int miesiace[]={31,28,31,..};
Chcesz zapewne znaleźć ile dni ma wczytany miesiąc. No więc wczytujemy od użytkownika:

Kod: Zaznacz cały

scanf("%d",&m);
I żeby zobaczyć ile dni ma dany miesiąc odwołujemy się do tablicy w taki sposób:

Kod: Zaznacz cały

miesiace[m-1]
nie chcę znaleźć ile dni ma wczytany miesiąć tylko ile dni minęło od 1 stycznia do podanego miesiąca. Np. wpisując 4 chcę aby mi policzyło ile dni minęło od 1 stycznia do 31 marca nie uwzględniając już kwietnia, gdyż dni z kwietnia będą uwzględnione w zmiennej d - czyli podany dzień.
{
int miesiace[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if((r%4==0)&&!(r%100==0)||(r%400==0))
miesiace[1]+=1;
suma=suma+miesiace[m-1];
}
chce zrobić sumę tabeli, ale nie wychodzi cały czas.

W koncu działa:)
{
{
int m;
printf("miesiac:");
scanf("%d",&m);
m=m-1;
int miesiace[12]={31,28,31,30,31,30,31,31,30,31,30,31};
if((r%4==0)&&!(r%100==0)||(r%400==0))
miesiace[1]+=1;
for(i=0;i<m;i++)
suma=suma+miesiace;
}
ODPOWIEDZ