Program ten ma zliczać każdorazowe przecięcie zera w celu obliczenia częstotliwości przecięć. Potrzebuje jednak, aby program pobierał wartości z pliku, a nie z klawiatury. Program jednak nie potrzebuje informacji na temat czasu, który ma postać xx:xx:xx.yyy
. np 00:00:00.167
, a jedynie to co występuje po spacji, czyli wartość dodatnią czy też ujemną, które służyć będą do obliczania przecięć zera.
Plik posiada następujące informacje:
00:00:00.167 3.98
00:00:00.296 7.12
00:00:00.398 9.12
00:00:00.459 9.57
00:00:00.504 8.60
00:00:00.669 7.63
00:00:00.701 4.35
00:00:00.888 2.01
00:00:00.959 -1.65
00:00:01.091 -4.38
00:00:01.137 -7.23
00:00:01.230 -8.54
...
Kod źródłowy programu, który liczy przecięcia zera z klawiatury. Szukam dlatego sposobu jak sprawić, aby wartości te były odczytywane wprost z pliku.
#include <stdio.h>
#define PACZKA 99
#define MAX 10
#define MIN -10
#define GORA 14
#define DOL 8
int main()
{
float now=0.0, past=0.0;
int cut=0, index=0;
printf("\n Licznik przeciec zera. \n");
printf("Zakres liczb brany pod uwage: <-10;10>\n");
printf(" Kod 99 konczy prace licznika. \n\n");
while (now!=99) /*petla programu*/
{
/*now - aktualna wartosc
past - wartoscc poprzednia, nie 0
cut - liczba przeciec
index - liczba danych w zestawie*/
scanf("%f", &now);
if ((now>=MIN) && (now<=MAX)) /*zgodne dane*/
{
++index; /*dodanie liczby do licznika*/
if ((now*past)<0.0) ++cut;/*przeciecie zera*/
if (now!=0.0) past=now; /*pominiecie zer*/
if (index==PACZKA) /*koniec paczki*/
{
if((cut>=DOL) && (cut<=GORA)) /*po zebraniu danych sprawdza przeciecia*/
{
printf("Poprawna liczba przeciec: %d\n", cut);
}
else
{
printf("Niepoprawna liczba przeciec: %d\n", cut);
}
/*jezeli program napotka kod konczacy 99 przed
koncem paczki nie wyswietli aktualnej liczby przeciec*/
index=0; /*wyzerowanie danych*/
cut=0;
past=0.0;
}
}
}
return 0;
}