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 ;D

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 ;D

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 ;D

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 ;D

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 :D 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! ;D

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;
}