Cześć. To mój pierwszy post, jestem bardzo początkujący, programowaniem zająłem się kilkanaście dni temu.
Mam do napisania taki program:
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 kod wygląda tak: (te komunikaty pisałem dla pomocy, żeby wiedzieć gdzie jest program przy testowaniu)
#include <stdio.h>
#define STOP 99
#define WIELKOSC_GR 10
#define L_MIN -10
#define L_MAX 10
#define CZEST_MIN 5
#define CZEST_MAX 8
int main () {
int a, b, i=0, z=0;
printf ("Podawaj liczby\n");
do{
scanf ("%d", &a);
if (i==WIELKOSC_GR){
printf ("koniec grupy\n");
if (z>=CZEST_MIN && z<=CZEST_MAX)
{
printf ("poprawna czestotliwosc\n");
a=0, b=0, i=0, z=0;
}
else
printf ("niepoprawna czest\n");
return 0; }
else {
printf ("nie koniec grupy, podano dopiero %d liczb\n", i);
if (a>=L_MIN && a<=L_MAX) {
printf ("dobra wartosc liczby\n");
if (a==0)
i++;
else
{
i++;
if (a*b<0)
{
z++;
printf ("przeciecie zera. liczba przeciec: %d\n", z);
b=a;
}
else
printf ("nie ma przeciecia. aktualnie przeciec: %d\n", z);
b=a;
}
}
else
printf ("zla wartosc\n");
a=0;
}
}
while (a!=STOP);
return 0;
}
Gdzie jest problem? Ano, niestety gdy wpisuję 99 czyli mój STOP program dalej wykonuje pętlę- dlaczego? Napisałem dla porówanania takie coś:
#include <stdio.h>
int main () {
int a;
do
{
scanf ("%d", &a);
printf ("L");
}
while (a!=5);
}
i tu pętla działa okej, wpisuję liczby, wyświetla się znak, ale gdy wpiszę 5 program kończy działanie.
Proszę o pomoc co robię źle. I wyrozumiałość, naprawdę nie mam doświadczenia.
Pozdrawiam.