Torna indietro   Hardware Upgrade Forum > Software > Programmazione

OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum
Abbiamo partecipato all'OVHcloud Summit 2025, conferenza annuale in cui l'azienda francese presenta le sue ultime novità. Abbiamo parlato di cloud pubblico e privato, d'intelligenza artificiale, di computer quantistici e di sovranità. Che forse, però, dovremmo chiamare solo "sicurezza"
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a
Abbiamo potuto mettere le mani in anteprima sul nuovo monitor MSI dedicato ai giocatori: un mostro che adotta un pannello QD-OLED da 26,5 pollici con risoluzione 2560 x 1440 pixel, frequenza di aggiornamento fino a 500 Hz e tempo di risposta di 0,03 ms GtG
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro
DJI aggiorna la sua linea di droni ultraleggeri con Neo 2, un quadricottero da 160 grammi che mantiene la compattezza del predecessore ma introduce una stabilizzazione meccanica a due assi, sensori omnidirezionali e un sistema LiDAR
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-10-2006, 18:32   #1
dnclover
Member
 
Iscritto dal: Jan 2006
Messaggi: 46
[C] spezzettare un numero nelle sue singole cifre

Salve ragazzi,
sono nuovo del mondo della programmazione e chiedo a voi per favore l'algoritmo risolutivo per il seguente problema e cioè:

Prendere in input un numero di 5 cifre e spezzettarlo nelle sue singole cifre,visualizzarle una ad una separata da 3 spazi e riconoscere quante cifre uguali di un numero a piacere sono presenti nel numero immesso inizialmente.

Non vi chiedo di darmi l'algoritmo completo (oddio se possibile mi farebbe comodo in modo da poterlo studiare :-) ),ma la mia maggiore difficoltà è spezzettare il numero nelle sue singole cifre e visualizzarle una ad una.

Vi ringrazio anticipatamente,ciao a tutti
dnclover è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2006, 18:37   #2
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da dnclover
Salve ragazzi,
sono nuovo del mondo della programmazione e chiedo a voi per favore l'algoritmo risolutivo per il seguente problema e cioè:

Prendere in input un numero di 5 cifre e spezzettarlo nelle sue singole cifre,visualizzarle una ad una separata da 3 spazi e riconoscere quante cifre uguali di un numero a piacere sono presenti nel numero immesso inizialmente.

Non vi chiedo di darmi l'algoritmo completo (oddio se possibile mi farebbe comodo in modo da poterlo studiare :-) ),ma la mia maggiore difficoltà è spezzettare il numero nelle sue singole cifre e visualizzarle una ad una.

Vi ringrazio anticipatamente,ciao a tutti
Ma per la conversione da intero a stringa ti devi scrivere la funzione oppure puoi affidarti a quello che il C mette a disposizione?
Perchè in tal caso è banale, basta sprintf o itoa e poi lavori sui singoli caratteri.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2006, 18:40   #3
dnclover
Member
 
Iscritto dal: Jan 2006
Messaggi: 46
Penso di poter utilizzare al massimo if,while e credo che si debbano utilizzare gli operatori % (mod) e / (diviso),nessuna funzione avanzata.
Grazie
dnclover è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2006, 19:06   #4
AngeL)
Senior Member
 
L'Avatar di AngeL)
 
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
ci provo... (è in c++, qualcuno modifichi i cout e i cin in c )
Codice:
#include <iostream>
using namespace std;

int main()
{
//questo codice spezzetta il numero in un array:
//la prima cifra del numero diventa array[0], la seconda array[1] e cosi' via
int numero;
int cifre[5]={0,0,0,0,0};//per evitare errori
cout << "Inserire il numero: ";
cin >> numero;
 for(int i=4;i>=0;i--)
 {
  while(numero%10)//finchè il numero non è divisibile per 10
  {
  numero--;
  cifre[i]++;
  }
  numero/=10;
 }
cout << "Le cifre sono:\n";
 for(int i=0;i<5;i++)
 {
 cout << cifre[i] << endl;
 }
}
dovrebbe funzionare

edit: questo è il ragionamento che ho fatto:
facciamo che numero = 12345;
decremento il numero di un'unità finchè non è divisibile per 10 (cioè finche l'unità non diventa 0) e per ogni unità che tolgo, ne aggiungo una nell'array cifre, al posto in cui si trovava nel numero, -1 (5 sarà in cifre[4]).
quando il numero diventa divisibile per 10 lo divido peer dieci cosi' che le ex decine diventino le unità, cosi' che si possa di nuovo fare il procedimento da capo.
facendo tutto questo procedimento 5 volte (quante sono le ficre del numero) si ottiene il numero spezzettato nell'array cifre: cifre[0]==1, cifre[1]==2, cifre[2]==3 e così via.

re-edit: uh, non mi ero accorto che questo è il mio 400 post

Ultima modifica di AngeL) : 17-10-2006 alle 19:18.
AngeL) è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2006, 19:31   #5
dnclover
Member
 
Iscritto dal: Jan 2006
Messaggi: 46
Quote:
Originariamente inviato da AngeL)
ci provo... (è in c++, qualcuno modifichi i cout e i cin in c )
Codice:
#include <iostream>
using namespace std;

int main()
{
//questo codice spezzetta il numero in un array:
//la prima cifra del numero diventa array[0], la seconda array[1] e cosi' via
int numero;
int cifre[5]={0,0,0,0,0};//per evitare errori
cout << "Inserire il numero: ";
cin >> numero;
 for(int i=4;i>=0;i--)
 {
  while(numero%10)//finchè il numero non è divisibile per 10
  {
  numero--;
  cifre[i]++;
  }
  numero/=10;
 }
cout << "Le cifre sono:\n";
 for(int i=0;i<5;i++)
 {
 cout << cifre[i] << endl;
 }
}
dovrebbe funzionare

edit: questo è il ragionamento che ho fatto:
facciamo che numero = 12345;
decremento il numero di un'unità finchè non è divisibile per 10 (cioè finche l'unità non diventa 0) e per ogni unità che tolgo, ne aggiungo una nell'array cifre, al posto in cui si trovava nel numero, -1 (5 sarà in cifre[4]).
quando il numero diventa divisibile per 10 lo divido peer dieci cosi' che le ex decine diventino le unità, cosi' che si possa di nuovo fare il procedimento da capo.
facendo tutto questo procedimento 5 volte (quante sono le ficre del numero) si ottiene il numero spezzettato nell'array cifre: cifre[0]==1, cifre[1]==2, cifre[2]==3 e così via.

re-edit: uh, non mi ero accorto che questo è il mio 400 post
Ciao Angel,
ti ringrazio tantissimo per il codice ma purtroppo non mi è utile perchè a me serve in C ed in più dovrebbe essere un algoritmo molto più semplice visto che è un esercizio del secondo capitolo del libro di deitel & deitel (C how to program) in italiano.
Comunque grazie tante
dnclover è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2006, 19:37   #6
AngeL)
Senior Member
 
L'Avatar di AngeL)
 
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
Quote:
Originariamente inviato da dnclover
a me serve in C
non c'è problema... basta modificare l'header e i cin e i cout.
Quote:
Originariamente inviato da dnclover
dovrebbe essere un algoritmo molto più semplice
piu semplice di un for e di un while è difficile farlo..
AngeL) è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2006, 20:56   #7
AngeL)
Senior Member
 
L'Avatar di AngeL)
 
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
ecco il codice in c:
Codice:
#include <stdio.h>

int main()
{
//questo codice spezzetta il numero in un array:
//la prima cifra del numero diventa array[0], la seconda array[1] e cosi' via
int numero;
int cifre[5]={0,0,0,0,0};//per evitare errori
printf("Inserire il numero\n");
scanf("%d",&numero);
 for(int i=4;i>=0;i--)
 {
  while(numero%10)//finchè il numero non è divisibile per 10
  {
  numero--;
  cifre[i]++;
  }
  numero/=10;
 }
 printf("Le cifre sono: %d, %d, %d, %d e %d\n",cifre[0],cifre[1],cifre[2],cifre[3],cifre[4]);
}
AngeL) è offline   Rispondi citando il messaggio o parte di esso
Old 17-10-2006, 22:26   #8
Gino+89+
Member
 
L'Avatar di Gino+89+
 
Iscritto dal: Nov 2005
Città: Mantova
Messaggi: 115
Io ti do una mia soluzione molto legnosa ma che uso sempre pure in assembly:

Codice:
/*
 *Prendere in input un numero di 5 cifre e spezzettarlo nelle sue singole cifre,
 *visualizzarle una ad una separate da 3 spazi e riconoscere quante cifre 
 *uguali di un numero a piacere sono presenti nel numero immesso inizialmente.
 */
#include <stdio.h>

int main()
{
int num,i;
int moltiplicatore=10000;
int vett[5];
int numInit;
int count=0;

         printf("Inserisci num predefinito:");
         scanf("%d",&numInit);
         while(getchar()!='\n');   
         
         printf("\nInserisci il numero -5 cifre- :");
         scanf("%d",&num);
         while(getchar()!='\n');
         
         for(i=0;i<5;i++)
         {
           vett[i]=num/moltiplicatore;
           num=num%moltiplicatore;
           if(num==numInit)
             count++;
           moltiplicatore/=10;
         }
         
         for(i=0;i<5;i++)
           printf("%d   ",vett[i]);
           
         printf("\n\nCi sono %d numeri uguali al num predefinito",count);
         
         getchar();
return 0;
}
L'unica cosa che non gira (ora vado a letto) è il fatto della variabile da confrontare ma per il resto tutto ok...al posto di moltiplicatore potevi scrivere divisore che era meglio ma capiscimi è tardi...

Ultima modifica di Gino+89+ : 17-10-2006 alle 22:29.
Gino+89+ è offline   Rispondi citando il messaggio o parte di esso
Old 18-10-2006, 00:23   #9
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
la mia versione per la parte che reputi difficile:
Codice:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>

int main() {
	unsigned int Number = 0;

	do {
		if (scanf("%u", &Number) < 1) {
			continue;
		}
	}
	while (Number > 99999);

	for (Weight = 4; Weight >= 0; Weight--) {
		printf("%4d", (Number / (int)pow(10, Weight)) % 10);
	}
	printf("\n");

	getchar();
	return 0;
}
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 18-10-2006, 09:23   #10
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da dnclover
Penso di poter utilizzare al massimo if,while e credo che si debbano utilizzare gli operatori % (mod) e / (diviso),nessuna funzione avanzata.
Grazie
sprintf funzione avanzata ?
ti consiglio di imparare ad usarla prima possibile perché se inizi a lavorare in C farai tante sprintf e pochissimi cicli con potenze di 10 e % ... nella maggior parte dei posti di lavoro, intendo, poi ci saranno le eccezioni ...
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 18-10-2006, 09:52   #11
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da trallallero
sprintf funzione avanzata ?
ti consiglio di imparare ad usarla prima possibile perché se inizi a lavorare in C farai tante sprintf e pochissimi cicli con potenze di 10 e % ... nella maggior parte dei posti di lavoro, intendo, poi ci saranno le eccezioni ...
Non si capisce bene, ma l'esercizio potrebbe anche essere quello di convertire interi in caratteri senza usare le funzioni messe a disposizione dal C. Altrimenti è veramente banale.
Una soluzione che mi viene in mente per convertire a mano interi in char è una sequenza di divisioni per potenze del 10 e sommare 48.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 18-10-2006, 10:04   #12
lovaz
Senior Member
 
L'Avatar di lovaz
 
Iscritto dal: Jul 2002
Messaggi: 4334
Ma cosa convertite a fare?

Basta prendere in input i 5 CARATTERI che rappresentano le cifre
del numero, e stamparli poi come richiede l'esercizio!

Sempre se ho capito bene...
lovaz è offline   Rispondi citando il messaggio o parte di esso
Old 18-10-2006, 10:04   #13
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da tomminno
Non si capisce bene, ma l'esercizio potrebbe anche essere quello di convertire interi in caratteri senza usare le funzioni messe a disposizione dal C. Altrimenti è veramente banale.
Una soluzione che mi viene in mente per convertire a mano interi in char è una sequenza di divisioni per potenze del 10 e sommare 48.
beh di modi, come sempre, ce ne sono vari, ma non capisco perché vietare l'uso di funzioni C standard strausatissime. Penso che la cosa piú importante, nella programmazione, sia imparare a trovare la soluzione ottimale ovvero piú veloce, piú leggibile, piú dinamica, mantenibile etc. E non trovare l'algoritmo matematico che usa potenze o moduli. Per quello c'é l'esame "matematica"

cosa c'é di meglio di un:
Codice:
sprintf( s, "%i", num );

while (s[i])
   sprintf( ss + strlen(ss), "%c   ", s[i++] )
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 18-10-2006, 10:05   #14
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da lovaz
Ma cosa convertite a fare?

Basta prendere in input i 5 CARATTERI che rappresentano le cifre
del numero, e stamparli poi come richiede l'esercizio!

Sempre se ho capito bene...
ancora piú semplice
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 18-10-2006, 10:36   #15
tomminno
Senior Member
 
Iscritto dal: Oct 2005
Messaggi: 3306
Quote:
Originariamente inviato da trallallero
beh di modi, come sempre, ce ne sono vari, ma non capisco perché vietare l'uso di funzioni C standard strausatissime. Penso che la cosa piú importante, nella programmazione, sia imparare a trovare la soluzione ottimale ovvero piú veloce, piú leggibile, piú dinamica, mantenibile etc. E non trovare l'algoritmo matematico che usa potenze o moduli. Per quello c'é l'esame "matematica"

cosa c'é di meglio di un:
Codice:
sprintf( s, "%i", num );

while (s[i])
   sprintf( ss + strlen(ss), "%c   ", s[i++] )
A me a Fondamenti 1 come esercizio (non certo dell'esame) lo hanno dato quello di convertire senza sprintf, itoa o atoi.
I corsi di matematica servono a ben altro che non trovare algoritmi.
tomminno è offline   Rispondi citando il messaggio o parte di esso
Old 18-10-2006, 10:52   #16
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da tomminno
A me a Fondamenti 1 come esercizio (non certo dell'esame) lo hanno dato quello di convertire senza sprintf, itoa o atoi.
I corsi di matematica servono a ben altro che non trovare algoritmi.
si é vero, sicuramente a matematica non fai neanche i cicli, ma era per dire dai
parlavo di potenze e resti di divisioni, roba matematica
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 18-10-2006, 11:17   #17
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da trallallero
sprintf funzione avanzata ?
non può usare sprintf perché l'esercizio chiede che le 5 cifre siano stampate distanziate di 3 caratteri...
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 18-10-2006, 11:58   #18
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da 71104
non può usare sprintf perché l'esercizio chiede che le 5 cifre siano stampate distanziate di 3 caratteri...
non capisco
la sprintf la usi solo per "stringare" l'integer su un char d'appoggio.
Poi prendi char per char e lo "ristringhi" diviso da 3 chars ...

(povera lingua italiana )
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
Old 18-10-2006, 13:46   #19
Marco Giunio Silano
Senior Member
 
L'Avatar di Marco Giunio Silano
 
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 879
Quote:
Originariamente inviato da trallallero
non capisco
la sprintf la usi solo per "stringare" l'integer su un char d'appoggio.
Poi prendi char per char e lo "ristringhi" diviso da 3 chars ...

(povera lingua italiana )
amen
__________________
Hosti non solum dandam esse viam ad fugiendum, sed etiam muniendam / Ceterum censeo Carthaginem esse delendam / Et facere et pati fortia romanum est / Nemo Romanorum pacis mentionem habere dignatus est / Roma locuta, causa finita
Milla
Marco Giunio Silano è offline   Rispondi citando il messaggio o parte di esso
Old 18-10-2006, 13:50   #20
trallallero
Senior Member
 
L'Avatar di trallallero
 
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
Quote:
Originariamente inviato da Marco Giunio Silano
amen
amen é ebraico
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z Mb - Win Eight SP (1 > yours) 16 Valve
trallallero è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


OVHcloud Summit 2025: le novità del cloud europeo tra sovranità, IA e quantum OVHcloud Summit 2025: le novità del cloud...
Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI Care e DisplayPort 2.1a Un mostro da MSI: QD-OLED WQHD a 500 Hz con AI C...
DJI Neo 2 in prova: il drone da 160 grammi guadagna il gimbal e molto altro DJI Neo 2 in prova: il drone da 160 grammi guada...
L'IA "seria" di Appian è diversa: inserita nei processi e rispetta dati e persone L'IA "seria" di Appian è divers...
Polestar 3 Performance, test drive: comodità e potenza possono convivere Polestar 3 Performance, test drive: comodit&agra...
I social network hanno stancato gli ital...
Star Citizen supera i 900 milioni di dol...
Netflix ha eliminato la funzione Cast pe...
L'IA è una bolla e scoppier&agrav...
Un rapporto collega i data center di Ama...
Troppa concorrenza per Cherry (quella de...
Entro il 2035 la Cina vuole costruire de...
Tineco in super sconto: ultimo giorno di...
La Cina creerà una costellazione ...
I veicoli elettrici emettono radiazioni ...
Stai per acquistare una PS5? Attento al ...
iPhone 17 Pro Max finalmente disponibile...
Apple, Sony, Bose, Beats, Sennheiser, CM...
Arriva il Raspberry Pi 5 da 1 GB, ma por...
Draghi scuote l'Europa: 'rischio stagnaz...
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: 21:08.


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