PDA

View Full Version : Ricorsione


MetalMassacre
12-11-2002, 15:30
Ciao a tutti,esperti o meno.... devo fare una PROCEDURA RICORSIVA,

int decr (int tab[] , int n)

nella quale vi è un array di interi, tale procedura restituisce 0 se i numeri inseriti sono decrescenti (in valore assoluto) altrimenti 1...


ho iniziato ad impostarla...ma coem ricorsione non è il massimo...
non riesco a districarmine....

avete consigli?


#include <stdlib.h>
#include <stdio.h>
#define DIM 5

int decr (int tab[], int n)
{ if (abs (tab[n-1])> abs (tab[n-2]))
return 1;
else decr (tab, n-1); /*boo quà sto ancora improvvisando...*/

}




int main()
{int a,i=0;
int tab [DIM];
printf ("Scrivi %d numeri\n",DIM);

for (i=0; i<DIM; i++)
{printf ("Digita il %d numero\n",i+1);
scanf ("%d",&tab[i]);}

a= decr (tab, DIM);
printf ("%d\n",a);

system("PAUSE");
return 0;
}

cionci
12-11-2002, 16:39
Manca la condizione di arresto...
Una funzione del genere ti andrebbe in ciclo...

Non è che poi ci si possa inventare l'impossibile con una funzione così semplcie ;)

Io l'avrei fatta così :

int decr(int tab[], int n)
{
if(n <= 1) /*condizione di errore*/
return 1;

if(abs(tab[n-1]) > abs(tab[n-2]))
return 1;

if(n == 2) /*condizione di arresto*/
return 0;

return decr(tab, n-1);
}

cn73
12-11-2002, 21:13
coinci, mi speghi l'utilizzo del tag code?? Non ne ero a conoscenza :)

MetalMassacre
13-11-2002, 01:09
Originariamente inviato da cn73
[B]coinci, mi speghi l'utilizzo del tag code?? Non ne ero a conoscenza :)

Che è? Cosa mi sono perso??? Che sarebbe?:confused:

cionci
13-11-2002, 08:07
Originariamente inviato da cn73
[B]coinci, mi speghi l'utilizzo del tag code?? Non ne ero a conoscenza :)
Fai {code}codice indentato{/code}...ovviamente con le []...
E ti lascia il codice indentato...c'è anche il tag PHP, per scrivere codice php :)

cn73
13-11-2002, 09:18
Fantastico ;)

MetalMassacre
13-11-2002, 14:33
Originariamente inviato da cionci
[B]Manca la condizione di arresto...
Una funzione del genere ti andrebbe in ciclo...

Non è che poi ci si possa inventare l'impossibile con una funzione così semplcie ;)

Io l'avrei fatta così :

int decr(int tab[], int n)
{
if(n <= 1) /*condizione di errore*/
return 1;

if(abs(tab[n-1]) > abs(tab[n-2]))
return 1;

if(n == 2) /*condizione di arresto*/
return 0;

return decr(tab, n-1);
}




Grazie !!! intanto ho partorito questa...ceh ad occhio è simile alla tua....che dici? può andare?


int decr (int tab[], int n)
{ if (n==1)
return 0;
if (abs (tab[n-1])< abs (tab[n-2]))
decr (tab, n-1);
else return 1;
}



Fisso oggi ha fatto array multidimensionali....!!! meglio che vada a studiarli che se mi prendo indietro ora che le cose si fanno complicate....son finito!:eek:


Posso una domanda illecita? dato che dai programmare bene lo fai per lavvoro o per studio? .... tanto per farmi i cavoli tuoi....:D


ciao

cionci
13-11-2002, 15:42
Per entrambe le cose ;)

Sì...può andare bene, ma manca il return...altrimenti non funziona niente...

int decr (int tab[], int n)
{
if (n==1)
return 0;

if (abs (tab[n-1])< abs (tab[n-2]))
return decr (tab, n-1); /*mancava il return qui*/

return 1; /*tolto l'else per evitare warning in compilazione*/
}

Questa va bene se consideri che nel caso di un vettore di lunghezza unitaria la funzione debba tornare 0...

MetalMassacre
14-11-2002, 14:37
Ciao, ho un nuovo quesito....
devo fare una funzione che dato un array di caratteri e un successivo carattere inserito dall'utente, determini se tale carattere è effettivamente presente nell'array....
la funzione deve restituire un puntatroie all'elemento dell'array che contiene il carattere insewrito dall'utente se tale elemento esiste, altrimenti restituisce NULL.


Io ho partorito sto aborto....ma il compilatore mi da un errore prima della chiamata della procedura....?????






#include <stdlib.h>
#include <stdio.h>
#define DIM 5

char *cerca_carattere (char a[], char caract, int dim)
{char *p;
for (p=&a[0]; p<=&a[dim-1]; p++)
if (*p==caract)
return p ; }


int main()
{int i;
char caract;
char tab[DIM];
for (i=0; i<DIM; i++)
{printf ("Scrivi la %d lettera\n", i+1);
scanf ("%c", & tab[i]);}
printf ("Digita un ulteriore carattere\n");
scanf ("%c",&caract);
char *cerca_carattere (tab,caract,DIM)

system("PAUSE");
return 0;
}

cionci
14-11-2002, 16:09
#include <stdlib.h>
#include <stdio.h>
#define DIM 5

char *cerca_carattere (char a[], char caract, int dim)
{char *p;
for (p=&a[0]; p<=&a[dim-1]; p++)
if (*p==caract)
return p ;
/*una funzione deve sempre ritornare in qualsiasi suo ramo di terminazione, quindi nel caso che il carattere non venga trovato devo ritornare qualcosa, cioè NULL*/

return NULL;
}


int main()
{int i;
char caract;
char tab[DIM];
char *p; /* variabile in cui mettere il risultato della ricerca */
for (i=0; i<DIM; i++)
{printf ("Scrivi la %d lettera\n", i+1);
scanf ("%c", & tab[i]);}
printf ("Digita un ulteriore carattere\n");
scanf ("%c",&caract);
p = cerca_carattere (tab,caract,DIM); /*assegnazione del risultato a p*/
if(p != NULL)
printf("\nCarattere trovato!!!\n");
system("PAUSE");
return 0;
}