Buon pomeriggio dovrei scrivere un programma con un file di input e uno di output dove dovrò scrivere la sequenza di Fibonacci.
Ho scritto il programma ma non riesco a stampare nel file di output la sequenza giusta di Fibonacci perché non riesco a trovare i primi due 1 della sequenza.
Vi allego la traccia e il programma che ho fatto.
TRACCIA
*
* Sia dato un file contente una sequenza di interi positivi.
* Si vuole verificare se tale sequenza contiene un sottoinsieme di elementi, che
* rispettando l'ordine dato, costituisca una parte della successione di Fibonacci.
* Si ricordi che la successione di Fibonacci è una successione di numeri interi positivi
* in cui ciascun numero è la somma dei due precedenti e i primi due termini della successione
* sono per definizione F1=1 e F2=1.
* Scrivere un programma C che letta da file la sequenza di interi positivi, verifichi se esiste una
* sotto-sequenza che sia costituita dai primi N elementi della successione di Fibonacci.
* Il programma deve stampare in un nuovo file (il cui nome è dato in input da tastiera)
* gli elementi delle sequenza iniziale e
* gli indici della sequenza che costituiscono la (parte di) successione di Fibonacci contenuta.
*
*
*
Un esempio di file di input e' il seguente:
*
* 7 1 4 7 1 5 2 3 4 5 9 6 8 11
*
* Un esempio di esecuzione e':
*
* >>>Inserire nome file input: in.txt
*
* >>>Inserire nome file output: in.txt
*
* Il file out.txt conterrà :
*
* Numero elementi della sequenza iniziale: 14
* Indici della successione di Fibonacci estratta:
* 1 4 6 7 9 12
*
*
*/
#include <stdio.h>
#include <stdlib.h>
#define DIMR 20
#define NCAR 100
/* Prototipi delle funzioni */
int LeggiSequenza(char [], int S[DIMR], int *m );
int Fibonacci(int S[DIMR],int n, int m);
int ScriviSeq(char [], int S[DIMR], int r, int c, int val);
int StampaSequenza(int S[DIMR], int r, int c);
int main(int argc, char** argv) {
int S[DIMR];
char nomefile[NCAR];
int r, c, val;
printf("Inserire nome file di input >");
scanf("%s", nomefile);
/* Legge la sequenza di interi da file e costruisce la seguenza*/
r=LeggiSequenza(nomefile, S, &c);
/* Stampa Seguenza a video */
StampaSequenza(S,r,c);
/* Verifica se la seguenza è di Fibonacci */
val = Fibonacci(S, r, c);
if (val)
printf("Seguenza di Fibbonacci.\n");
else
printf("Non è una seguenza di Fibbonacci");
printf("Inserire nome file di output >");
scanf("%s", nomefile);
/* Stampa su file la matrice e dice se è o no una matrice FRAME*/
ScriviSeq(nomefile, S, r, c, val);
return (EXIT_SUCCESS);
}
int LeggiSequenza(char nomefile[], int S[DIMR], int *m )
{
int i;
FILE* file= fopen(nomefile,"r");
if(file==NULL){
printf("Errore nell'apertura del file %s\n",nomefile);
return EXIT_FAILURE;
}
fscanf(file,"%d",m);
if(*m>DIMR){
printf("La dimensione massima è %d\n",DIMR);
return 0;
}
while(!feof(file)){
for(i=0;i<*m;i++)
fscanf(file, "%d\n", &S[i]);
i;
}
fclose(file);
return i;
}
int Fibonacci(int S[DIMR],int n, int m)
{
//LA PARTE DOVE HO PROBLEMI
}
int ScriviSeq(char nomefile[], int S[DIMR], int r, int c, int val)
{
int i;
FILE* file=fopen(nomefile, "w");
if(file==NULL){
printf("errore nell'apertura del file %s\n",nomefile);
return 1;
}
for(i=0; i<r; i++){
fprintf(file, "%d", S[i]);
fprintf(file,"\n");
}
fclose(file);
return 0;
}
// La funzione stampa la successione a video
int StampaSequenza(int S[DIMR], int r, int c)
{
int i;
for(i = 0; i < r; i++) {
printf("%d ",S[i]);
printf("\n");
}
}
Il mio file di input è:
7 1 4 7 1 5 2 3 4 5 9 6 8 11
grazie mille in anticipo per chi mi potrà aiutare
P.S.: Il linguaggio in uso è il C