PDA

Visualizza la versione completa : Primo programma in C con funzioni


nicola92
10-03-2009, 19:11
Salve a tutti, riuscite a capire che cosa non funziona in questo semplice programma in C?

#include <stdio.h>
#include <stdlib.h>
int FR(int v);
int main()
{
int k;
int a;
scanf("%d",&k);
a=FR(k);
printf("%d\n",a);
system("pause");
return 0;
}

int FR(int v)
{
if (v=1)
{ return 1;
}else{
return v+FR(v-1);
}
}
/*
Dovrebbe fare la stessa cosa di questo programma in Visual Basic 6...

Option Explicit
Dim k As Integer

Private Sub cmdMain_Click()
k = CInt(InputBox("Inserisci un numero", ""))
MsgBox FR(k)
End Sub

Private Function FR(v As Integer)
If v = 1 Then
FR = 1
Else
FR = v + FR(v - 1)
End If
End Function */

Pacio88
10-03-2009, 19:31
Personalmente non so dirti dove sia l'errore perchè non so in che linguaggio è scritto il secondo programma...

La prossima volta ricordati di inserire il codice all'interno del tag CODE.

nicola92
10-03-2009, 19:59
Il secondo programma è scritto in VB6
(Cos'è il tag CODE?)

Rubox
10-03-2009, 20:06
int FR(int v)
{
if (v=1){
return 1;
} else {
return v+FR(v-1);
}
}


Scusa, ma qual è l'errore che riscontri?

Nel blocco condizionale della funzione FR non dovrebbero esserci due segni di uguale? Altrimenti, così come l'hai scritta tu, è un'assegnazione e non un confronto.

KrOW
10-03-2009, 20:07
Ciao . . . Il problema sta nell' istruzione

if(v=1)
In questo caso verrà eseguita sempre questa istruzione . . . Se volevi effettuare un confronto devi scrivere

if(v==1)
Edit: come non detto :D

Rubox
10-03-2009, 20:10
OT

Scusa nicola92, ma che succede se alla funzione FR passi un valore v negativo?
Non hai un'uscita dalle chiamate ricorsive

nicola92
10-03-2009, 20:19
Grazie, l'errore stava nell'istruzione (v=1), se metto un doppio uguale funziona.
Se metto un numero negativo il programma si chiude, perché? Devo cambiare tipo di variabile?

YuYevon
10-03-2009, 20:30
Perché non provi a spiegartelo da solo il motivo? Secondo te, con un numero negativo cosa succede nella funzione ricorsiva? La variabile viene decrementata... cioè se all'inizio è -1 diventa -2, -3, -4... e quando si ferma la ricorsione? E soprattutto... si ferma la ricorsione? :zizi:

Rubox
10-03-2009, 20:36
Originariamente inviato da nicola92
Grazie, l'errore stava nell'istruzione (v=1), se metto un doppio uguale funziona.
Se metto un numero negativo il programma si chiude, perché? Devo cambiare tipo di variabile?

Io, nel codice che hai postato, non vedo nessun controllo sul numero che acquisisci e passi a FR. Quindi, se metti un numero negativo, la funzione FR sarà richiamata all'infinito.

nicola92
10-03-2009, 20:43
Ok, grazie mille per l'aiuto! :)

Loading