Oppure

Loading
18/06/08 9:27
totipianurese
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 19/06/08 19:46
aaa
18/06/08 12:43
John
function potenza(base,esponente:integer):longint;
var k,W:longint;
begin
 K:=1;
 W:=base;
 While K < Esponente do
       begin
       K:=K+1;
       W:=Base*W;
       end;
potenza:=W;
end;

function cifre(f:longint):integer;
var d:integer;
begin
d:=0;
repeat
 d:=d+1;
until ((f div (potenza(10,d))<1));
cifre:=d;
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ì:

...
var a,c:integer
...
...
readln(a);
c:=cifre(a);
writeln('Il numero ',a,' ha ',c,' cifre');
...


Spero di aver soddisfatto la tua richiesta!!
Per ogni dubbio o domanda, non esitare a contattarmi!:k::k:
Ultima modifica effettuata da John 18/06/08 12:52
aaa
18/06/08 13:13
John
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:

repeat
 d:=d+1;
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:
aaa
18/06/08 15:19
totipianurese
;) GRZ mille. ciao:k:
aaa
18/06/08 20:52
Fedingo
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-|
aaa