Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Pascal - Conta numero di cifre
Forum - Pascal - Conta numero di cifre

Avatar
totipianurese (Normal User)
Newbie


Messaggi: 20
Iscritto: 09/06/2008

Segnala al moderatore
Postato alle 11:27
Mercoledì, 18/06/2008
Ragazzi, come posso contare che una variabile di tipo intero, da quanti cifre (NUMERI) è formata??

Il mio problema è : inserendo una serie di valori, devo trovare il valore più grande e devo stampare da quante cifre è formato.

Ultima modifica effettuata da WARRIOR il 19/06/2008 alle 21:46
PM Quote
Avatar
John (Ex-Member)
Pro


Messaggi: 191
Iscritto: 18/11/2007

Segnala al moderatore
Postato alle 14:43
Mercoledì, 18/06/2008
Codice sorgente - presumibilmente Delphi

  1. function potenza(base,esponente:integer):longint;
  2. var k,W:longint;
  3. begin
  4.  K:=1;
  5.  W:=base;
  6.  While K < Esponente do
  7.        begin
  8.        K:=K+1;
  9.        W:=Base*W;
  10.        end;
  11. potenza:=W;
  12. end;
  13.  
  14. function cifre(f:longint):integer;
  15. var d:integer;
  16. begin
  17. d:=0;
  18. repeat
  19.  d:=d+1;
  20. until ((f div (potenza(10,d))<1));
  21. cifre:=d;
  22. end;



è molto semplice trovare le cifre da cui è composto un numero INTERO:
Logica vuole che se un numero n diviso 10 dà un risultato <1 allora ha 1 cifra, se diviso 100 dà risultato <1 allora ha 2 cifre...

Esempio:
n=548
548/10=54.8
548/100=5.48
548/1000=0.548 <== questo è minore di uno, perciò n ha 3 cifre (10^3=1000)

Quindi una regoletta che si intuisce è:
Un numero n è formato da d cifre quando quel numero diviso (10 elevato alla d) produce un risultato minore di n.


Ti ho scritto brevemente una funzione che ti restituisce il numero di cifre di un numero, continuando ad incrementare un contatore D fino a quando n/(10^d) risulta minore di 1...
semplicemente devi usarlo così:

Codice sorgente - presumibilmente Pascal

  1. ...
  2. var a,c:integer
  3. ...
  4. ...
  5. readln(a);
  6. c:=cifre(a);
  7. writeln('Il numero ',a,' ha ',c,' cifre');
  8. ...



Spero di aver soddisfatto la tua richiesta!!
Per ogni dubbio o domanda, non esitare a contattarmi!:k::k:

Ultima modifica effettuata da John il 18/06/2008 alle 14:52
PM Quote
Avatar
John (Ex-Member)
Pro


Messaggi: 191
Iscritto: 18/11/2007

Segnala al moderatore
Postato alle 15:13
Mercoledì, 18/06/2008
Mi sono accorto di un errore quando si inseriscono numeri negativi....:-|
Nessun problema!!!8-)
Ho anche trovato la soluzione:


nel caso tu dovessi contare anche le cifre di qualche numero negativo, devi cambiare così il repeat..until della function cifre:

Codice sorgente - presumibilmente Pascal

  1. repeat
  2.  d:=d+1;
  3. until abs(f div (potenza(10,d)))<1;



così controlli se il valore assoluto (che è sempre positivo) della divisione è minore di 1...
Così anche |-548/1000| risulta minore di 1, altrimenti si fermava a contare una cifra perchè -548 è sempre minore di 1...

P.S.Scusa se preciso adesso ma me ne sono accorto dopo averti risp... :k::k:

PM Quote
Avatar
totipianurese (Normal User)
Newbie


Messaggi: 20
Iscritto: 09/06/2008

Segnala al moderatore
Postato alle 17:19
Mercoledì, 18/06/2008
;) GRZ mille. ciao:k:

PM Quote
Avatar
Fedingo (Ex-Member)
Newbie


Messaggi: 11
Iscritto: 05/11/2007

Segnala al moderatore
Postato alle 22:52
Mercoledì, 18/06/2008
scusate.... ma non è più semplice trasformare il numero in stringa e vedere quanto è lunga la stringa?? mi sembra si più semplice la cosa... basta stare attenti se c'è il meno o il punto...8-|

PM Quote