Pagina 1 di 1
Help per un povero studente di informatica.
Inviato: sabato 25 novembre 2006, 0:54
da Bola
Ragazzi mi sono incartato su un programma del piffero!!! Cioè, sembra una minchiata ma mi ci sono incartato
Se mi potete aiutare ve ne sarei molto grato, lo devo consegnare entro domenica alle 24. Eccovi il testo:
Problema N. 3
Scrivere una funzione ricorsiva di nome is_fib_prime() che verifichi se l’n-esimo numero di Fibonacci è primo.
Suggerimento: tale funzione dovrebbe chiamare nel suo corpo altre due: una funzione
fibonacci() che calcola il numero di Fibonacci per qualche numero intero n non-negativo, e
una funzione is_prime() che verifica se un numero intero m non-negativo è primo.
Per implementare tutto ciò ho creato questo programma che però non riesce a verificare se il numero di fibonacci è primo o no:
Codice: Seleziona tutto
#include<stdio.h>
#include<stdlib.h>
long fibonacci(long numero);
long valore;
long n;
int main()
{
printf("Scrivi un numero intero non troppo grande ");
scanf("%ld", &n);
valore=fibonacci(n);
printf("Il %ld numero della sequena di Fibonacci e'': %ld\n\n", n, valore);
is_fib_prime(valore);
return 0;
}
long fibonacci(long numero)
{
if(numero==0||numero==1)
return numero;
else
return fibonacci(numero-1)+fibonacci(numero-2);
}
P.S. ho tolto la parte che tentava di verificare se il numero di fibonacci era primo o no dato che era TOTALMENTE errata.
Grazie per un eventuale aiuto

Re: Help per un povero studente di informatica.
Inviato: sabato 25 novembre 2006, 2:08
da m4ik4
se non ti interessa la complessità dell'algoritmo, puoi fare una cosa molto semplice, dividere il numero n (passato da tastiera) per tutti i valori compresi fra 1 e n-1... se uno dei resti della divisione è uguale a zero, interrompi il ciclo e ritorni true!
da quello che ho capito è un esame di programmazione, quindi non ti interessa se la soluzione è la migliore.. devi solo mostrare al professore che sai programmare..
dove studi informatica?
Re: Help per un povero studente di informatica.
Inviato: sabato 25 novembre 2006, 2:27
da Bola
Studio a La Sapienza a Roma
Cmq si è programmazione I
Re: Help per un povero studente di informatica.
Inviato: sabato 25 novembre 2006, 9:31
da m4ik4
Bola ha scritto:
Studio a La Sapienza a Roma
Cmq si è programmazione I
ma va bene quello che ti ho detto io?
ahahah, pure io studio informatica alla sapienza!

Re: Help per un povero studente di informatica.
Inviato: sabato 25 novembre 2006, 9:35
da زΛςκΛζ
BOLA anche io studio alla sapienza di roma informatica (good)........che anno sei???e che canale se sei del primo anno...il mio pro (bad)blema invece è sulla torre di hanoi

che palle...non è tanto facile perchè il prof ha invertito le lettere con i numeri..per ora niente da fare...
Re: Help per un povero studente di informatica.
Inviato: sabato 25 novembre 2006, 10:29
da Bola
Canale E-O 2° anno ripetente primo (l'altr'anno facevo ingegneria informatica (bad))
No cmq la soluzione da te proposta nn va bene m4ik4....

Re: Help per un povero studente di informatica.
Inviato: sabato 25 novembre 2006, 10:45
da m4ik4
perché? qual'è il problema?
Re: Help per un povero studente di informatica.
Inviato: sabato 25 novembre 2006, 14:28
da Bola
ad esempio 9 non è numero primo e se lo dividi per i valori compresi tra 1 e n-1 al valore 3 viene 9%3 cioè 9/3=3 resto 0 e se restituisce true ho che 9 viene considerato numero primo

Re: Help per un povero studente di informatica.
Inviato: sabato 25 novembre 2006, 14:43
da gelina
Anch'io studio informatica!
Io l'esame di programmazione l'ho già dato e ho ancora la soluzione dell'esercizio per verificare se un numero è primo. Ora lo vado a cercare tra i miei appunti e se non hai ancora risolto il problema e ti serve ti posto il codice.
Solo un po' di pazienza che devo scartabellare tra una montagna di fogli! Ciao!
Re: Help per un povero studente di informatica.
Inviato: sabato 25 novembre 2006, 15:04
da gelina
Eccomi qua, l'ho trovato, ci ho messo meno di quello che pensavo a recuperarlo.
Questa è la funzione che ci avevano proposto durante le esercitazioni di laboratorio per verificare se un numero è primo.
Codice: Seleziona tutto
/* funzione che verifica se un numero è primo */
int numeroprimo(int num)
{
int div=3;
if(num>=1 && num<=3)
return 1;
//i numeri 1,2,3 sono primi
if(!(num%2)) return 0;
// i numeri pari non possono essere primi
while (div < sqrt(num))
if !(num%div) return 0;
else div+=2; // cosi non controlla i numeri pari
return 1;
// se il programma arriva a questo punto vuol dire che num=div, quindo è un numero primo
}
Ciao!
Re: Help per un povero studente di informatica.
Inviato: sabato 25 novembre 2006, 15:06
da m4ik4
Bola ha scritto:
ad esempio 9 non è numero primo e se lo dividi per i valori compresi tra 1 e n-1 al valore 3 viene 9%3 cioè 9/3=3 resto 0 e se restituisce true ho che 9 viene considerato numero primo
scusami... se un numero è primo, vuol dire che è divisibile solo per 1 e per se stesso...! quindi se 9 è divisibile per tre, vuol dire che NON è primo.. e quindi fai tornare true o false, in base alla tua esigenza!!se prendiamo 11, lo dividi per tutti i valori compresi fra 2 e 10, vedi che nessun numero divide 11... quindi è primo!
quello di prima era un''idea... poi, è ovvio che un minimo la devi controllare e arrangiare! ti ho detto che tornava true... invece gli devi far tornare false... vabbè, ci si arriva! ti ho pure detto che dovevi dividere per tutti i valori fra 1 e n-1... invece i valori saranno fra 2 e n-1... ma ci si arriva pure qui!
edit: non è istruttivo passare una funzione e fargli il compitino...!! prima o poi, tutti dobbiamo sbattere la testa su esercizi più o meno difficili..
Re: Help per un povero studente di informatica.
Inviato: sabato 25 novembre 2006, 16:53
da Bola
k risolto e messo a punto il problema, e comunque concordo sul fatto della non istruttività a scopiazzare, ma è pure vero che se uno ha un codice di esempio sottomano capisce prima, capisce meglio e magari rielabora qualcosa di meglio (b2b)
questo è il sorgente:
Codice: Seleziona tutto
#include<stdio.h>
#include<stdlib.h>
int is_fib_prime(unsigned n);
unsigned fibonacci(unsigned n);
int is_prime(unsigned m);
int main(void)
{
unsigned numero,valore;
printf("Scrivi un numero intero maggiore di zero e non negativo: ");
scanf("%u",&numero);
if(numero!=0){
valore=fibonacci(numero);
if(is_fib_prime(numero)) printf("Il %u numero della serie di Fibonacci e' %u ed e' primo", numero, valore);
else printf("Il %u numero della serie di Fibonacci e' %u e non e' primo", numero, valore);
}
else printf("La serie di Fibonacci inizia da 1 quindi 0 non e' un valore corretto");
return 0;
}
unsigned fibonacci (unsigned n)
{
if((n==0)||(n==1)) return n;
else return fibonacci(n-1)+fibonacci(n-2);
}
int is_fib_prime(unsigned n)
{
unsigned m;
m=fibonacci(n);
return is_prime(m);
}
int is_prime(unsigned m)
{
int j;
for (j=2; j<m/2; j++)
if (m%j!=0) return 0;
return 1;
}