|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Sep 2005
Messaggi: 43
|
Programmino ricorsivo in C
Salve a tutti avrei bisogno di un aiutino :
Scrivere una funzione ricorsiva che ha come parametro di ingresso una stringa e restituisce in uscita il numero delle lettere minuscole presenti in essa Qualcuno mi potrebbe scrivere il codice in C ?? Se non fosse ricorsivo era naturalmene più facile, essendo ricorsivo faccio fatica... |
![]() |
![]() |
![]() |
#2 |
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Suggerimento: il numero di lettere minuscole di una stringa è pari al numero di lettere minuscole dopo il suo primo carattere, più 1 se e solo se il primo carattere è una lettera minuscola.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" ![]() Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
passa il puntatore a char:
se è il terminatore ritorna 0 altrimenti se maiuscola ritorna 0+la chiamata della funzione con punatore al prox elem se minuscola ritorna 1+la chiamata della funzione con punatore al prox elem
__________________
|
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Sep 2005
Messaggi: 43
|
Quello che ho capito è che devo controllare carattere per carattere , quindi mi basta controllare il primo , verificare se è minuscolo con un IF
if ( c >= 'a' && c <= 'z' ) n++; */ Dove n è la mia variabile che contiene il numero di caratteri minuscoli /* e poi richiamare di nuovo la funzione, però il mio problema è quello di non sapere come richiamare la funzione per poter controllare il secondo carattere la funzione va definita così ? int nome_funzione (argomenti) Ma per argomenti devo mettere solo quelli in ingresso ovvero CHAR |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
allora prova con
Codice:
int contaminuscole(char* stringa){ if((*stringa)=='\0') return 0; else{ if((*stringa)>='a'&&(*stringa)<='z'){ stringa++; return 1+contaminuscole(stringa); } else { stringa++; return 0+contaminuscole(stringa); } } }
__________________
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 4329
|
non apro un 3d nuovo, ma ho un problema ricorsivo su lista pure io (java ma è uguale). in effetti è straordinariamente semplice, ma ho un blocco mentale: ho una lista puntata (singolarmente) e devo mettere, in un campo specifico, in ogni elemento la somma dei successivi (che contengono un altro dato int); quindi zero nell ultimo elemento e, a mano a mano, la somma dell ultimo e penultimo, ultimo penultimo terzultimo, eccetera fino al primo...
me lo sono levato dalle balle iterativamente, ma lo trovo brutalmente orribile e nooby come metodo, mi vergogno quasi di chiedere...
__________________
|18k+|slk800|a7n8x|1Gb/ddr400|Gf4mx440|Pio108|WD 160Gb|Case|Uni|Album|AnimeClick|OneManga| |ClassicThrash!|BNR Metal|TrueMetal|Dime|Chuck| |
![]() |
![]() |
![]() |
#7 | |
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
Quote:
nn l'ho testato ma mi pare andare Codice:
void dnarod(nodo* lista){ //ultimo if(lista->next==NULL){ lista->valore=0; return; } //penultimo if(lista->next->next==NULL){ nodo->valore=lista->next->valore;; return dnarod(lista->next);} //generico else{ lista->valore=(lista->next->valore+lista->next->next->valore); return dnarod(lista->next); } }
__________________
|
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 4329
|
grazie, ma quello mette in un elemento la somma dei due successivi...il primo elemento deve avere la somma di tutti i successivi, e cosi via, il secondo, la somma di tutti i successivi al secondo eccetera...pero forse ci sono arrivato grazie!!
__________________
|18k+|slk800|a7n8x|1Gb/ddr400|Gf4mx440|Pio108|WD 160Gb|Case|Uni|Album|AnimeClick|OneManga| |ClassicThrash!|BNR Metal|TrueMetal|Dime|Chuck| |
![]() |
![]() |
![]() |
#9 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 4329
|
ho capito adesso che volevi dire...il fatto è che gli elementi hanno 2 campi, uno col valore intero e l altro nel quale devo mettere le informazioni...non devo cambiare i valori degli elementi, devo mettere le informazioni volute nell altro campo non mutando i valori, altrimenti cio che mi hai consigliato tu sarebbe stato giusto...
__________________
|18k+|slk800|a7n8x|1Gb/ddr400|Gf4mx440|Pio108|WD 160Gb|Case|Uni|Album|AnimeClick|OneManga| |ClassicThrash!|BNR Metal|TrueMetal|Dime|Chuck| |
![]() |
![]() |
![]() |
#10 |
Member
Iscritto dal: Sep 2005
Messaggi: 43
|
X quanto riguarda me vi ringrazio della risposta e del codice che mi serve per capire come funizona una funzione ricorsiva
|
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
Quote:
__________________
|
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Questa è la più compatta che mi è venuta in mente:
Codice:
int conta_minuscole (char *s) { if (*s) return (*s >= 'a' && *s <= 'z' ? 1 : 0) + conta_minuscole (++s); else return 0; } ![]()
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
![]() |
![]() |
![]() |
#13 | |
Member
Iscritto dal: Apr 2004
Messaggi: 130
|
Quote:
Codice:
int somma_successivi(lista *l) { if (! l->next) l->somma = 0; else l->somma = somma_successivi(l->next); return (l->somma + l->valore); } |
|
![]() |
![]() |
![]() |
#14 | |
Member
Iscritto dal: Apr 2004
Messaggi: 130
|
Quote:
Codice:
int minuscole(char *s) { return (islower(*s) != 0) + ((*s) ? minuscole(s+1) : 0); } |
|
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 4329
|
grazie, ho acceso il cervello e ho risolto...mi vergogno di me stesso
![]()
__________________
|18k+|slk800|a7n8x|1Gb/ddr400|Gf4mx440|Pio108|WD 160Gb|Case|Uni|Album|AnimeClick|OneManga| |ClassicThrash!|BNR Metal|TrueMetal|Dime|Chuck| |
![]() |
![]() |
![]() |
#16 |
Member
Iscritto dal: Sep 2005
Messaggi: 43
|
Mi sto preparando per un compito, ma se per caso devoi Scrivere una funzione ricorsiva che ha come parametro di ingresso un numero naturale e restituisce in uscita il numero delle sue cifre uguali a 0 o 5.
Se si tratta di numeri e non di stringhe come devo comportarmi ?? |
![]() |
![]() |
![]() |
#17 | |
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
Quote:
__________________
|
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 19:02.