Skocz do zawartości

[C] Przecięcia zera


klb

Polecane posty

Mam do napisania program. Treść zadania:

Napisać program, który ma odczytywać sekwencję liczb całkowitych z terminala i wyliczać częstotliwość wystąpień przecięć zera we wczytywanym strumieniu wejściowym. Przecięcie zera następuje każdorazowo, gdy po wartości dodatniej następuje wartość ujemna lub po wartości ujemnej dodatnia (także, gdy między tymi wartościami pojawia się jedno lub więcej zer). W przypadku wykroczenia wyliczanej częstotliwości poza zadany przedział na wyjściu programu powinien pojawić się odpowiedni komunikat. W szczególności:

 

* pod uwagę mają być brane jedynie liczby z przedziału od -10 do 10 oraz liczba 99 oznaczająca koniec strumienia danych; pozostałe wartości są uznawane za niepoprawne i pomijane;

* częstotliwość ma być określana jako liczba wystąpień przecięcia zera w kolejnych grupach złożonych z 99 liczb - wartość częstotliwości spoza przedziału od 5 do 8 uznawana jest za niepoprawną i powoduje pojawienie się na wyjściu programu odpowiedniego komunikatu; w pozostałych przypadkach nie jest generowany żaden komunikat.

 

 

a więc w skrócie:

Program ma zliczać przecięcia zer (tj. gdy użytkownik poda pierwszą liczbę np. 1, a drugą np. -2, to mamy przecięcie - gdy liczba poprzednia i następna różnią się od siebie znakiem [2 i -5, 10 i -199 itp.])

 

1)Mamy do wprowadzenia 99 liczb i ma to być podzielone na 5 grup (żeby wprowadzać po 20 liczb do jednej grupy, a nie wpisywać wszystkie 99 jednorazowo)

 

2) Gdy użytkownik poda 0 to nie ma być ono liczone jako podana liczba! Program ma pomiać 0

 

3) Liczby muszą być spełniać następujące warunki:

-muszą być z przedziału od -10 do 10 bez zera

 

 

UWAGA!

Program nie ma być dokładnie taki jak w treści! Nie ma zliczać częstotliwości tylko liczbę tych przecięć! Nie trzeba liczyć częsttliwości

 

 

Oto kod, który naskrobałem:

 

 #include <stdio.h>

#define min -10
#define max 10
#define koniec 99

int main(void)
{   
   int a, b, ilosc, przeciecia, liczba;
   int iloczyn=a*b;

    printf("Program wylicza przeciecia zera\n");
    printf("________________________________\n\n");   

    for (liczba=1; liczba<= 20;)
        {
                printf("Podaj %2d liczbe z przedzielu od -10 do 10 (bez zera) ", liczba);
                scanf("%d", &b);

        if(b==99)
        {
                 printf("Podana liczba to 99\n\n");

                 if(liczba==20  && przeciecia>5 && przeciecia<8)

                      printf("Liczba przeciec wynosi: %2d\n", przeciecia);

                 else if(liczba<20)

                      printf("Grupa liczb jest za mala. Podaj kolejne liczby\n");

                 else printf("Liczba przeciec nie spelnia wakunku\n");

        }  

        if(b>min && b!=0 && b<max)
        {
                 liczba++;

                 if(iloczyn<0)
                 {
                      przeciecia++;
                      a=b;
                 }

                 if(ilosc==20)
                 {           
                             if(przeciecia>5 && przeciecia<8)
                             printf("Liczba przeciec wynosi %2d\n", przeciecia);

                             else printf("Liczba przeciec nie spelnia warunku\n");
                 }

                 else a=b;



        }          



        }


   return (0);
}





 

 

 

Moje pytanie brzmi: dlaczego po zakończeniu wpisywania liczb przez użytkownika program kończy działanie, a nie pokazuje liczby przecięć?

 

Z góry thx za pomoc,

Pozdrawiam,

klb

Link do komentarza
Udostępnij na innych stronach

Program prawidłowo odrzuca liczby nie należące do przedziału <-10,10>\{0} . Codzi o to, że po wprowadzeniu 20 liczb (czyli zakończeniu pętli) program nie podaje komunikatu o przecięciach zera tylko się wyłącza

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...