• 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,506 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ź 302 wizyt
pytanie zadane 11 lipca 2018 w PHP przez kubusop Początkujący (420 p.)
0 głosów
2 odpowiedzi 1,721 wizyt
pytanie zadane 4 października 2016 w C i C++ przez Tymek Nowicjusz (160 p.)
0 głosów
1 odpowiedź 105 wizyt
pytanie zadane 22 kwietnia 2018 w JavaScript przez Vinchit Obywatel (1,040 p.)

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...