Buonasera,
qualcuno potrebbe dare un occhiata a questo programma per controllare che sia giusto? Grazie in anticipo.
Si ricordi che la successione di Fibonacci è costituita da una sequenza di numeri interi in cui i primi due elementi sono per definizione 0 e 1, e ciascun numero successivo è ottenuto come somma dei due precedenti. La sequenza è quindi: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, … Realizzare un programma che riceve come argomento da riga di comando il nome di un file di testo contenente una sequenza di lunghezza indefinita di numeri interi. Il programma apre il file e verifica se la sequenza di numeri contenuta sia la successione di Fibonacci (partendo da 0) o meno. In caso affermativo il programma stampa a video 1 altrimenti 0. Controllare e segnalare eventuali situazioni di errore.
qualcuno potrebbe dare un occhiata a questo programma per controllare che sia giusto? Grazie in anticipo.
Si ricordi che la successione di Fibonacci è costituita da una sequenza di numeri interi in cui i primi due elementi sono per definizione 0 e 1, e ciascun numero successivo è ottenuto come somma dei due precedenti. La sequenza è quindi: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, … Realizzare un programma che riceve come argomento da riga di comando il nome di un file di testo contenente una sequenza di lunghezza indefinita di numeri interi. Il programma apre il file e verifica se la sequenza di numeri contenuta sia la successione di Fibonacci (partendo da 0) o meno. In caso affermativo il programma stampa a video 1 altrimenti 0. Controllare e segnalare eventuali situazioni di errore.
C:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
FILE* fp;
int *p, n=1, N=1, flag=1, i;
if(argc==2){
fp=fopen(argv[i], "rb");
if(fp){
while(n==N){ /* continuo finchè non sono sicuro di aver letto tutto*/
p=malloc(sizeof(int)*N); /*alloco matrice dinamica di N elementi*/
if(p){
n=fread(p, sizeof(int), N, fp); /*leggo N elementi*/
if(n==N){ /* potrebbero esserci elementi non letti*/
free(p);
N++;
}
}
}
for(i=0; i<N-2 && flag==1; i++){
if((p+i)+(p+i+1)==(p+i+2))
flag=0;
else
flag=1;
}
free(p);
printf("%d", flag);
return 0;
}
}
}