|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
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 |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
Perchè in tal caso è banale, basta sprintf o itoa e poi lavori sui singoli caratteri. |
|
|
|
|
|
|
#3 |
|
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 |
|
|
|
|
|
#4 |
|
Senior Member
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;
}
}
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. |
|
|
|
|
|
#5 | |
|
Member
Iscritto dal: Jan 2006
Messaggi: 46
|
Quote:
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 |
|
|
|
|
|
|
#6 | ||
|
Senior Member
Iscritto dal: May 2006
Città: Salerno
Messaggi: 936
|
Quote:
Quote:
|
||
|
|
|
|
|
#7 |
|
Senior Member
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]);
}
|
|
|
|
|
|
#8 |
|
Member
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;
}
Ultima modifica di Gino+89+ : 17-10-2006 alle 22:29. |
|
|
|
|
|
#9 |
|
Bannato
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;
}
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
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 |
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
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. |
|
|
|
|
|
|
#12 |
|
Senior Member
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...
__________________
|Java Base| |
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
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 |
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
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 |
|
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
Quote:
I corsi di matematica servono a ben altro che non trovare algoritmi. |
|
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
![]() 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 |
|
|
|
|
|
|
#17 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
![]() 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 |
|
|
|
|
|
|
#19 | |
|
Senior Member
Iscritto dal: Jun 2006
Città: Inverno: Novgorod. Estate: Haifa
Messaggi: 879
|
Quote:
__________________
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 |
|
|
|
|
|
|
#20 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
Quote:
__________________
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 |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:08.











|
ancora piú semplice










