Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
Samuel Botelho

Algoritmo não funcionando como deveria/ Pascal

Recommended Posts

  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

Compartilhar este post


Link para o post
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.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×