Olá, sou iniciante na área e entrei recentemente pro curso de ADS. Como trabalho foi pedido que eu fizesse um programa completando o algoritmo que o professor mandou.
Pois bem: o algoritmo consiste em ler numeros ineiros de 1 a 999 e mosrar por extenso( se eu digitar 344 ele deve escrever trezentos e quarenta e quatro).Eu fiz o algoritmo porém não está funcionando como deveria, ele lê a casa das centenas e dos decimais com precisão porém não lê a casa das unidades ( coloca dezena como se fosse unidade [ EX: escrevo 285, o alg. mostra duzentos e oitenta e cinquenta]).
Outro erro presente é que ele não lê as casas de 11~19 (que tem aribuições diretamente para elas, o que acontece é que o algoritmo processa esses números embasado na centena caso eu escreva um deles[ EX: 612, ele escreverá seiscentos e dezesseis, porque 6 de certo modo se ligou a dezesseis. Outro EX: 418, será escrito quatrocentos e quatorze])
Abaixo o código. Desde já agradeço!!!
Program validador1_999 ;
Var Um,DE,CE,EX:array[1..9] of string[30];
Vet:array[1..3] of integer;
Num,aux,a,b:integer; {PODE SER QUE PRECISE DE MAIS VARIÁVEIS}
Tem_e:boolean;
Begin
{Monta os vetores com os extensos}
Um[1]:= 'um';
Um[2]:='dois';
Um[3]:='tres';
Um[4]:='quatro';
Um[5]:='cinco';
Um[6]:='seis';
Um[7]:='sete';
Um[8]:='oito';
Um[9]:='nove';
EX[1]:='onze';
EX[2]:='doze';
EX[3]:='treze';
EX[4]:='quatorze';
EX[5]:='quinze';
EX[6]:='dezesseis';
EX[7]:='dezessete';
EX[8]:='dezoito';
EX[9]:='dezenove';
DE[1]:='dez';
DE[2]:='vinte';
DE[3]:='trinta';
DE[4]:='quarenta';
DE[5]:='cinquenta';
DE[6]:='sessenta';
DE[7]:='setenta';
DE[8]:='oitenta';
DE[9]:='noventa';
CE[1]:='cento';
CE[2]:='duzentos';
CE[3]:='trezentos';
CE[4]:='quatrocentos';
CE[5]:='quinhentos';
CE[6]:='seiscentos';
CE[7]:='setecentos';
CE[8]:='oitocentos';
CE[9]:='novecentos';
Repeat // valida
Read (Num)
Until (Num) <1000;
While (Num) >0 do
Begin
Tem_e := false;
Aux:=num;
B:=4;
Repeat //separa os dígitos do número lido
B:=b-1;
Vet[b]:=num mod 10;
Num:=num div 10
Until (num = 0);
{Verifica a exceção da centena (100)}
If (aux=100) Then
Write ( 'cem' )
Else
Begin
{Verifica se tem centena, obviamente <> 100}
If (vet[1]<>0)then
Begin
Tem_e:=true;
Write ( CE[vet[1]] );
{Verifica a exceção das dezenas 11 – 19}
If (vet[2] = 1) and (vet[2] <> 0) then
Begin
If tem_e Then
Write ( ' e ' );
Write ( EX[vet[1]] )
End
Else
Begin
{Verifica se tem dezena, obviamente <> de 11,12,13,...,19}
If vet[2] <> 0 then
Begin
If tem_e then
Write ( ' e ' );
Write ( DE[vet[2]] );
If (vet[3] <> 0) then
Begin
If tem_e then
Write ( ' e ' );
Write ( DE[vet[3]] )
End
End
End
End
End;
Repeat
Readln (num)
Until num <1000
End
End.