• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

funkcja podająca nazwe miesiąca i liczbe jego dni źle działa

VPS Starter Arubacloud
0 głosów
1,747 wizyt
pytanie zadane 31 stycznia 2018 w C i C++ przez mn130496 Gaduła (3,530 p.)

Witam

Mam za zadanie napisać program , który po podaniu liczby dni poda nazwę miesiąca i liczbę jego dni i mam 

użyć konstrukcji else if. Napisałem Taki program:

/*Napisz program, ktory po podaniu numeru miesiaca podaje liczbe jego dni i
nazwe miesiaca w postaci slownej. Zastosowac konstrukcjê else-if.*/
#include <stdio.h>
#include <stdlib.h>
int ilosc_dni(int nr)
{
    if(nr>12)
    {
        return(0);
    }
    else if(nr==1)
    {
        return(1);
    }
    else if(nr==2)
    {
        return(2);
    }
     else if(nr==3)
     {
         return(3);
     }
      else if(nr==4)
      {
          return(4);
      }
       else if((nr==5));
       {
           return(5);
       }
       if(nr==6)
       {
           return(6);
       }
       else if(nr==7)
       {
           return(7);
       }
       else if(nr==8)
       {
           return(8);
       }
       else if(nr==9)
       {
           return(9);
       }
       else if(nr==10)
       {
           return(10);
       }
       else if(nr==11)
       {
           return(11);
       }
       else if(nr==12)
       {
           return(12);
       }

}
int main(void)
{
    int nr;
    printf("Podaj numer miesiaca: ");
    scanf("%d",&nr);
    if(ilosc_dni(nr)==1)
    {
        printf("Jest to styczen i ma 31 dni. \n");
    }
    else if(ilosc_dni(nr)==2)
    {
        printf("Podany miesiac to luty i ma 28 lub 29 dni. \n");
    }
    else if(ilosc_dni(nr)==3)
    {
        printf("Podany miesiac to marzec ima 31 dni. \n");
    }
    else if(ilosc_dni(nr)==4)
    {
        printf("Podany miesiac to kwiecien i ma 30 dni. \n");
    }
    else if(ilosc_dni(nr)==5)
    {
        printf("Podany miesiac to maj i ma 31 dni. \n");

    }
    else if(ilosc_dni(nr)==6)
    {
        printf("Podany miesiac to czerwiec  30 dni. \n");
    }
    else if(ilosc_dni(nr)==7)
    {
        printf("Podany misiac to lipiec i ma 31 dni. \n");
    }
    else if(ilosc_dni(nr)==8)
    {
        printf("Podany miesiac to sierpien i ma 31 dni. \n");
    }
    else if(ilosc_dni(nr)==9)
    {
        printf("Podany miesiac to wrzesien i ma 30 dni. \n");
    }
    else if(ilosc_dni(nr)==10)
    {
        printf("Podany miesiac to Pozdziernik i ma 31. \n");
    }
    else if(ilosc_dni(nr)==11)
    {
        printf("Podany miesiac to listopad i ma 30 dni. \n");
    }
    else if(ilosc_dni(nr)==12)
    {
        printf("Podany miesiac to Grudzien i ma 31 dni. \n");
    }
    else
    {
        printf("Podany miesiac nie istnieje\n");
    }
    system("pause");
    return (0);
}

Problem jest taki , że do momentu podawania 5 wszystko działa dobrze a gdy podaje ;iczby od 6 do 12 to program za każdym razem podaje, że jest to maj i ma 31 dni.Czy ktoś może mi pomóc w znalezieniu błędu?

Z góry dziękuję.. 

komentarz 31 stycznia 2018 przez hhh Gaduła (4,110 p.)
Czy nie lepiej byłoby wczytac jednego inta i wyswietlanie komunikatów zrobić na krótkim switch-u?
komentarz 31 stycznia 2018 przez mn130496 Gaduła (3,530 p.)
zadanie muszę zrobić za pomocą konstrukcji else if wynika to z treści zadania
komentarz 31 stycznia 2018 przez Secrus Nałogowiec (32,880 p.)
średnik po else if (nr ==5)

1 odpowiedź

+3 głosów
odpowiedź 31 stycznia 2018 przez Pac Plus Mądrala (5,560 p.)
edycja 1 lutego 2018 przez Pac Plus
 
Najlepsza

Myślę, że nie o to chodziło twojemu nauczycielowi. Konstrukcja tej pierwszej funkcji jest bez sensu, skoro dostajesz daną liczbę to po co ci funjcja która zwróci dokładnie to samo co wpisał użytkownik?

W każdym razię na koniec lini 27 wpisałéś średnik po instrukcji `else if`. Ale polecam zastanowić się jak możesz zamienić te spaghetti w algorytm.

 

Koncept algorytmu/podstawowe informacje:

Niestety nie możemy nauczyć komputera liczyć na kostkach. Musimy przekazać mu pare informacji które wiemy o dniach miesiąca, takich jak rok przemienny. Poniżej napisałem tabelke która pomoże nam w określeniu działania algorytmu.

1 Styczeń 31
2 Luty 28 (29 w roku przemiennym)
3 Marzec 31
4 Kwiecieć 30
5 Maj 31
6 Czerwiec 30
7 Lipiec 31
8 Sierpień 31
9 Wrzesień 30
10 Październik 31
11 Listopad 30
12 Grudzień 31

 

Algorytm:

Najprościej możesz to zapisać w ten sposób:


int zwrocIloscDniWMiesiacu(short miesiac, bool rokPrzemienny) {
  if ( miesiac == 2 ) { // Luty
    if ( rokPrzemienny )
      dniWMiesiacu = 29;
    else
      dniWMiesiacu = 28;
  } else if ( miesiac == 4 || miesiac == 6 ||
	      miesiac == 9 || miesiac == 11 )
    dniWMiesiacu = 30;
  else
    dniWMiesiacu = 31;

  return dniWMiesiacu;
}

Zawsze zaczynaj od kartki papieru i długopisa zanim podejdziesz do klawiatury. To oszczędzi ci dużo czasu.

Podobne pytania

0 głosów
1 odpowiedź 401 wizyt
pytanie zadane 11 lipca 2018 w PHP przez kubusop Początkujący (420 p.)
0 głosów
2 odpowiedzi 1,929 wizyt
pytanie zadane 4 października 2016 w C i C++ przez Tymek Nowicjusz (160 p.)
0 głosów
1 odpowiedź 123 wizyt
pytanie zadane 22 kwietnia 2018 w JavaScript przez Vinchit Obywatel (1,040 p.)

93,008 zapytań

141,975 odpowiedzi

321,256 komentarzy

62,350 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...