Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-02-2006, 08:57   #1
matty.ma
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...
matty.ma è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2006, 10:29   #2
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16215
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" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2006, 10:29   #3
wisher
Senior Member
 
L'Avatar di wisher
 
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
__________________
wisher è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2006, 11:02   #4
matty.ma
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
matty.ma è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2006, 11:09   #5
wisher
Senior Member
 
L'Avatar di wisher
 
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);
			}
	}
}
fammi sapere se funziona (spero di si) e se nn hai capito qualcosa
__________________
wisher è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2006, 11:35   #6
dnarod
Senior Member
 
L'Avatar di dnarod
 
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|
dnarod è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2006, 11:46   #7
wisher
Senior Member
 
L'Avatar di wisher
 
Iscritto dal: Aug 2005
Messaggi: 2755
Quote:
Originariamente inviato da dnarod
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...
che ne dici di questo?
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);
	}
}
__________________
wisher è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2006, 12:28   #8
dnarod
Senior Member
 
L'Avatar di dnarod
 
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|
dnarod è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2006, 12:52   #9
dnarod
Senior Member
 
L'Avatar di dnarod
 
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|
dnarod è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2006, 13:38   #10
matty.ma
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
matty.ma è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2006, 13:38   #11
wisher
Senior Member
 
L'Avatar di wisher
 
Iscritto dal: Aug 2005
Messaggi: 2755
Quote:
Originariamente inviato da dnarod
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...
se vuoi la somma di tutti i valori precedenti devi mettere la chiamata ricorsiva prima della somma, e poi lascia return senza niente
__________________
wisher è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2006, 13:55   #12
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
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;
}
Comunque bisogna ammettere che usare una funzione ricorsiva per fare 'sta cosa è molto ROTFL.
__________________
Andrea, Senior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
Java Versions Cheat Sheet
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2006, 14:20   #13
Qu@ker
Member
 
Iscritto dal: Apr 2004
Messaggi: 130
Quote:
Originariamente inviato da dnarod
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...
Non so se ho capito:
Codice:
int somma_successivi(lista *l)
{
	if (! l->next)
		l->somma = 0;
	else
		l->somma = somma_successivi(l->next);

	return (l->somma + l->valore);
}
Qu@ker è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2006, 14:28   #14
Qu@ker
Member
 
Iscritto dal: Apr 2004
Messaggi: 130
Quote:
Originariamente inviato da andbin
Questa è la più compatta che mi è venuta in mente:
Codice:
int minuscole(char *s)
{
        return (islower(*s) != 0) + ((*s) ? minuscole(s+1) : 0);
}
Qu@ker è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2006, 14:43   #15
dnarod
Senior Member
 
L'Avatar di dnarod
 
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|
dnarod è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2006, 15:20   #16
matty.ma
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 ??
matty.ma è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2006, 15:26   #17
wisher
Senior Member
 
L'Avatar di wisher
 
Iscritto dal: Aug 2005
Messaggi: 2755
Quote:
Originariamente inviato da matty.ma
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 ??
il discorso è + o - lo stesso, puoi trasformare l'intero in stringa con itoa(intero) oppure utilizzi la divisione per 10 e il resto per avere la cifra che devi elaborare
__________________
wisher è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
World of Warcraft: Forever è il Classic+...
La Serie A con DAZN e Amazon Prime con l...
Giochi Ubisoft su Steam senza Ubisoft Co...
Miami Beach ha autorizzato la maxi opera...
Apple regala un altro anno di funzioni s...
Alla fine è successo davvero: Vol...
Il meglio di Amazon del weekend in uno s...
Speciale TV in offerta su Amazon: Hisens...
Non c'è pace per Trezor: 347.000 e-mail ...
È un portatile Dell e li vale tut...
Apple iPhone 17 Pro Max 256GB a 1.195€ (...
GPT-6 Astra è davvero AGI o non s...
LG OLED G6S 48'' a 845€ e G6 55'' a 1368...
Mantax Otax: il malware Android che crip...
Musk incassa un altro maxi contratto IA:...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 06:56.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v