Ir ao conteúdo
  • Cadastre-se

Algoritmo não funcionando como deveria/ Pascal


Posts recomendados

  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.

 

 

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

@Samuel Botelho    Não consegui acertar o seu código pois não entendi o funcionamento dele

então modifiquei ele .   veja como ficou:

Uses crt;
label
  l1;
var
  a,b,c,g : integer;
  num       : string;
  num2      : string;
  begin
    clrscr();
    repeat
      writeln('Digite um numero de 0 ate 999 ');
      readln(num2);
      clrscr();
      b:=length(num2);
      if b = 3 then num:=     num2;
      if b = 2 then num:='0' +num2;
      if b = 1 then num:='00'+num2;
      val(num2,a,c);
      if a=0 then write('Zero');
      if a>999 then write('Só Pode Ser Ate 999');
      if(( b > 0) and (b<4)and(a>0)and(a<1000)) then
      begin
        if num[1]='9' then write('Novecentos '  );
        if num[1]='8' then write('Oitocentos '  );
        if num[1]='7' then write('Setecentos '  );
        if num[1]='6' then write('Seiscentos '  );
        if num[1]='5' then write('Quinhentos '  );
        if num[1]='4' then write('Quatrocentos ');
        if num[1]='3' then write('Trezentos '   );
        if num[1]='2' then write('Duzentos '    );
        a:=0;
        if num[1]='1' then
        begin
          a:=2;
          if num[2]='0' then
          begin
            if num[3]='0' then
            begin
              write('Cem');
              a:=1;
            end;
          end;
        end ;
        g:=0;
        if a = 2      then write('Cento '      );
        if num[2]<>'0' then
        begin
          if num[1]<>'0' then
          begin
            write(' e ');
            g:=1;
          end;
          if num[2]='9' then write('Noventa '  );
          if num[2]='8' then write('Oitenta '  );
          if num[2]='7' then write('Setenta '  );
          if num[2]='6' then write('Sessenta ' );
          if num[2]='5' then write('Cinquenta ');
          if num[2]='4' then write('Quarenta ' );
          if num[2]='3' then write('Trinta '   );
          if num[2]='2' then write('Vinte '    );
          if num[2]='1' then
          begin
            g:=2;
            if num[3]='9' then write('Dezenove');
            if num[3]='8' then write('Dezoito' );
            if num[3]='7' then write('Dezesete');
            if num[3]='6' then write('Dezseis' );
            if num[3]='5' then write('Quinze'  );
            if num[3]='4' then write('Quatorze');
            if num[3]='3' then write('Treze'   );
            if num[3]='2' then write('Doze'    );
            if num[3]='1' then write('Onze'    );
            if num[3]='0' then write('Dez'     );
          end;
        end;
        if num[3]<>'0'then
        begin
          if g <> 2 then
          begin
            if ((num[1]='0')and(num[2]='0')) then goto l1;
            if ((num[3] <> '0') or (g<>4)) then write('e ');
          l1:
            if num[3]='9' then write('Nove'  );
            if num[3]='8' then write('Oito'  );
            if num[3]='7' then write('Sete'  );
            if num[3]='6' then write('Seis'  );
            if num[3]='5' then write('Cinco' );
            if num[3]='4' then write('Quatro');
            if num[3]='3' then write('Tres'  );
            if num[3]='2' then write('Dois'  );
            if num[3]='1' then write('Um'    );
          end;
        end;
      end;
      writeln('          digite   S  para sair');
    Until num[3]='s';
    clrscr();
  end.

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...