Witam, mam następujące zadanie:
Napisać program (w języku C)wyznaczający N kolejnych wyrazów następującego ciągu (począwszy od 3 wyrazu):
y(i)=b1*y(i-1)+b2*y(i-2) gdzie: y1 = 0.3; y2 = 0.7;
Następnie, wszystkie wyznaczone wyrazy należy zapisać do pliku tekstowego „wyniki.txt”. Ponadto program powinien zawierać funkcję, która będzie obliczać i zwracać do programu głównego sumę oraz iloczyn trzech różnych losowo wybranych wyrazów wyznaczonego ciągu.
Stworzyłem program, zapisuje wyrazy ciągu do pliku tekstowego, ale nie mam zielonego pojęcia jak zrobić sprawdzanie , czy dana liczba się już powtórzyła. Próbowałem już przez tablice, continue/break, if'y, w pętli do while, for itp. ale nie chciało działać. Teraz doszedłem do takiego momentu który przedstawię poniżej - losuje różne, ale trójkami, tak jak na screen'ie poniżej:
http://i.imgur.com/bBd0BKp.jpg
W tym przypadku losowanie powinno zakończyć od razu, gdy natrafi na 1, a nie robi tylko losuje dalej.
Kod za losowanie w końcu postanowiłem poszukać w internecie, ale większość jest w C++, a nawet w tych C nie za bardzo rozumiem. Czy mógłby mi ktoś podać jakiś prosty kod/wskazówki jak to zrobić, bo już siedzę nad tym z 2 godziny...
Poza tym - dlaczego wyniki mi zapisuje do pliku, mimo że zapomniałem dopisać fclose()? W kazdych innych programach co pisałem, plik był pusty, bo nie zapisano zmian.
Kod (nie przejmujcie się, że funkcja fun nic nie zwraca, bo program jest w wersji wczesna alpha :)).
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
float fun( float * tabf, int Nf )
{
float suma, iloczyn, los, los1 = 0, los2 = 0, los3 = 0, ilpetli = 0;
int j;
for( j = 0; j < 3; j++ )
{
los = 1 + rand() % Nf;
los3 = los2;
los2 = los1;
los1 = los;
printf( "Wylosowana liczba %.f\n", los );
ilpetli++;
if( ilpetli >= 2 &&( los1 == los2 || los2 == los3 || los1 == los3 ) )
{
j--;
}
}
}
int main()
{
FILE * plik;
plik = fopen( "wyniki.txt", "wt" );
float b1, b2, y1 = 0.3, y2 = 0.7, y = 0, wynik;
int N, i;
printf( "Podaj ilosc wyrazow N ciagu y[N]:\n" );
scanf( "%d", & N );
float tab[ N ];
printf( "Podaj b1:\n" );
scanf( "%f", & b1 );
printf( "Podaj b2:\n" );
scanf( "%f", & b2 );
printf( "\n" );
srand( time( NULL ) );
if( N == 1 )
{
printf( "y[1]=0.3\n" );
fprintf( plik, "y[1]=0.3\n" );
}
if( N == 2 )
{
printf( "y[1]=0.3\ny[2]=0.7\n" );
fprintf( plik, "y[1]=0.3\ny[2]=0.7\n" );
}
for( i = 3; i <= N; i++ )
{
y = b1 * y2 + b2 * y1;
y1 = y2;
y2 = y;
printf( "y[%d]=%f\n", i, y );
fprintf( plik, "y[%d]=%f\n", i, y );
tab[ i ] = y;
}
wynik = fun( tab, N );
system( "PAUSE" );
return 0;
}
Pozdrawiam