Przechodzenie zera

0

Witam mam następujące zadanie

 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.

mój program wygląda tak

 #include <stdio.h>
#include <math.h>
#define grupa 10
#define stop 99
#define freqmin 5
#define freqmax 7
#define liczbamin -10
#define liczbamax 10

int main ()
{
int liczba = 0;
int znak = 0;
int freq = 0;
int numer = 0;


 while (liczba != stop) {
  scanf ("%d", &liczba);

        if ((liczba <= liczbamax) && (liczba >= liczbamin))
          {
           if(liczba<0 )
            znak= -1;
           else
            znak= 1;
          }


	if((znak==1) && (liczba<0)) {
                freq++;
                numer++;
                znak= -1;
               }

	if((znak==1) && (liczba>=0)) {
                 numer++;
               }

	if((znak==-1) && (liczba>0)) {
                 freq++;
                 numer++;
                 znak= 1;
               }

	if((znak==-1) && (liczba<=0)) {
                 numer++;

            }
		if((numer==grupa) &&  (freq<=freqmax) && (freq>=freqmin)) {

                printf("%d", freq);
                numer=0;
		}

             if((numer==grupa) && ((freq>freqmax) || (freq<freqmin)))
              {
               printf("czestotliwosc niepoprawna");
               break;

              }
       }

      return 0;
}
 

Niestety zawsze pokazuje mi częstotliwość niepoprawna(co 10 linijkę) i nie wiem w którym miejscu popełniłem błąd,
proszę wszystkich o wyrozumiałość gdyż jestem całkowitym laikiem.

Z góry dziękuję za każdą pomoc

0

w pierwszym if ustawiasz znak na podstawie wartości liczba, a potem robisz porównanie znak i liczba dla tej samej liczby, więc nie obserwujesz zmian.
Popraw to tak, by przed pętlą wczytać pierwszą liczbę i na tej podstawie ustal wartości początkowe.

Spróbuj to uprościć, bo strasznie to przekombinowałeś.

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