Help per un povero studente di informatica.

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
Bola
Prode Principiante
Messaggi: 133
Iscrizione: giovedì 9 marzo 2006, 17:25

Help per un povero studente di informatica.

Messaggio 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
Avatar utente
m4ik4
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 382
Iscrizione: mercoledì 7 giugno 2006, 19:21

Re: Help per un povero studente di informatica.

Messaggio 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?
"Io vivo in un sogno da cui non riesco a destarmi" - Spike - Cowboy Bebop
Bola
Prode Principiante
Messaggi: 133
Iscrizione: giovedì 9 marzo 2006, 17:25

Re: Help per un povero studente di informatica.

Messaggio da Bola »

Studio a La Sapienza a Roma ;D

Cmq si è programmazione I
Avatar utente
m4ik4
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 382
Iscrizione: mercoledì 7 giugno 2006, 19:21

Re: Help per un povero studente di informatica.

Messaggio 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! :)
"Io vivo in un sogno da cui non riesco a destarmi" - Spike - Cowboy Bebop
Avatar utente
زΛςκΛζ
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 417
Iscrizione: domenica 2 aprile 2006, 15:57
Località: Roma

Re: Help per un povero studente di informatica.

Messaggio 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...
Non ho più dubbi, Ubuntu è la piattaforma Linux che userò fino alla fine dei miei giorni
Bola
Prode Principiante
Messaggi: 133
Iscrizione: giovedì 9 marzo 2006, 17:25

Re: Help per un povero studente di informatica.

Messaggio 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.... :(
Avatar utente
m4ik4
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 382
Iscrizione: mercoledì 7 giugno 2006, 19:21

Re: Help per un povero studente di informatica.

Messaggio da m4ik4 »

perché? qual'è il problema?
"Io vivo in un sogno da cui non riesco a destarmi" - Spike - Cowboy Bebop
Bola
Prode Principiante
Messaggi: 133
Iscrizione: giovedì 9 marzo 2006, 17:25

Re: Help per un povero studente di informatica.

Messaggio 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 :)
gelina
Prode Principiante
Messaggi: 52
Iscrizione: lunedì 6 novembre 2006, 8:47

Re: Help per un povero studente di informatica.

Messaggio 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!
gelina
Prode Principiante
Messaggi: 52
Iscrizione: lunedì 6 novembre 2006, 8:47

Re: Help per un povero studente di informatica.

Messaggio 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!
Avatar utente
m4ik4
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 382
Iscrizione: mercoledì 7 giugno 2006, 19:21

Re: Help per un povero studente di informatica.

Messaggio 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..
Ultima modifica di m4ik4 il sabato 25 novembre 2006, 15:08, modificato 1 volta in totale.
"Io vivo in un sogno da cui non riesco a destarmi" - Spike - Cowboy Bebop
Bola
Prode Principiante
Messaggi: 133
Iscrizione: giovedì 9 marzo 2006, 17:25

Re: Help per un povero studente di informatica.

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

Ultima modifica di Bola il sabato 25 novembre 2006, 17:18, modificato 1 volta in totale.
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: Majestic-12 [Bot] e 5 ospiti