Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR ha finalmente lanciato il suo nuovo flagship: Magic 8 Pro. Lo abbiamo provato a fondo in queste settimane e ve lo raccontiamo nella nostra recensione completa. HONOR rimane fedele alle linee della versione precedente, aggiungendo però un nuovo tasto dedicato all'AI. Ma è al suo interno che c'è la vera rivoluzione grazie al nuovo Snapdragon 8 Elite Gen 5 e alla nuova MagicOS 10
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Le webcam Insta360 Link 2 Pro e Link 2C Pro sono una proposta di fascia alta per chi cerca qualità 4K e tracciamento automatico del soggetto senza ricorrere a configurazioni complesse. Entrambi i modelli condividono sensore, ottiche e funzionalità audio avanzate, differenziandosi per il sistema di tracciamento: gimbal a due assi sul modello Link 2 Pro, soluzione digitale sul 2C Pro
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-02-2006, 09: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, 11:29   #2
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16213
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, 11: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, 12: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, 12: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, 12: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, 12: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, 13: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, 13: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, 14: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, 14: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, 14:55   #12
andbin
Senior Member
 
L'Avatar di andbin
 
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;
}
Comunque bisogna ammettere che usare una funzione ricorsiva per fare 'sta cosa è molto ROTFL.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 14-02-2006, 15: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, 15: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, 15: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, 16: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, 16: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


HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
Il CEO di Nothing, Carl Pei, avverte: i ...
Serie A, richieste di risarcimento agli ...
Ferrari e Shell fanno una scelta che nes...
Fanatec svela Podium DD: 25 Nm di coppia...
I modelli AI cinesi sono ormai a pochi m...
Netflix diventa la casa globale dei film...
Monitor gaming in forte sconto su Amazon...
500 miliardi di dollari e meno dazi: l'a...
Da Detroit scopriamo le livree di Red Bu...
Microsoft, Meta e Amazon aderiscono al p...
Microsoft integrerà Copilot in Es...
Samsung Internet for Windows: il browser...
Logitech fa sul serio: mouse PRO, tastie...
Spotify aumenta ancora il prezzo del ser...
Bose QuietComfort Ultra (2ª Gen) scendon...
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: 10:34.


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