Ir ao conteúdo
  • Cadastre-se

Problema com Pascal: moeda por extenso


Posts recomendados

Pessoal , estou fazendo um trabalho do curso, em que o usuario digita um valor em real e o programa exibe o valor digitado em extenso, então se o usuario digita 1881,56, o programa deve exibir, Mil, oitocentos e oitenta e um Reais e cinquenta e seis centavos, o o algoritmo ficou gigante, acho que dava pra resumir muita coisa, mas sou iniciante ainda, e nao aprendi muito de vetores e funções, minha lógica nao é tão formada ainda, decidi fazer o programa, focando se o usuario nao digitar centavos primeiro, apenas numeros inteiros, ate ai eu consegui fazer tranquilo, agora que fui tentar fazer os centavos, nao consigo fazer ele exibir os centavos, alguem pode me dar uma luz? Desculpe pelo código grande demais :(

Program moedaporextenso ;

function unidade(n:integer):string;
begin
  case n of
    0:unidade:=' ';
    1:unidade:='Um';
    2:unidade:='Dois';
    3:unidade:='Tres';
    4:unidade:='Quatro';
    5:unidade:='Cinco';
    6:unidade:='Seis';           
    7:unidade:='Sete';
    8:unidade:='Oito';
    9:unidade:='Nove';
    10:unidade:='Dez';
    11:unidade:='Onze';
    12:unidade:='Doze';
    13:unidade:='Treze';
    14:unidade:='Quatorze';
    15:unidade:='Quinze';
    16:unidade:='Dezesseis';
    17:unidade:='Dezessete';
    18:unidade:='Dezoito';
    19:unidade:='Dezenove';
  end
end;

function dezena(n:integer):string;
begin
  case n of
    2:dezena:='Vinte';
    3:dezena:='Trinta';
    4:dezena:='Quarenta';
    5:dezena:='Cinquenta';
    6:dezena:='Sessenta';
    7:dezena:='Setenta';
    8:dezena:='Oitenta';
    9:dezena:='Noventa';
  end
end;

function centena(n:integer):string;
begin
  case n of
    1:centena:='Cento';
    2:centena:='Duzentos';
    3:centena:='Trezentos';
    4:centena:='Quatrocentos';
    5:centena:='Quinhentos';
    6:centena:='Seiscentos';
    7:centena:='Setecentos';
    8:centena:='Oitocentos';
    9:centena:='Novecentos';
  end
end;

var  u, d, c, m, um, dm, cm, umi, dmi, cmi, mi, uc, dc, centsint,x: integer;
result, din, casadosmil, casadomilhao, strimili, centavos, cenv: string;
cents: real;
ok: boolean;

Begin
centavos:=' centavos';
strimili:=' Milhões, ';
din:= ' Reais';
ok:= false;
repeat
  Write('Digite um valor em reais(R$): ');
  read(x);
  if(x>=0) then
  begin
    ok:=true;
  end;
until ok=true;
if x = 1000000000 then
begin
  result:='Um Bilhão de';       
end;
cents := frac(x);
centsint := int(cents);
if (centsint > 0) and (centsint <= 99) then
begin
  if centsint = 1 then
  begin
    centavos:= ' centavo';
  end;
  if centsint < 20 then
  begin
    cenv:=unidade(centsint);
  end
  else if centsint < 100 then
  begin
    uc:=centsint mod 10;
    dc:=centsint div 10;
    if uc = 0 then
    begin
      cenv:=dezena(dc);
    end
    else
    begin
      cenv:=dezena(dc)+' e '+unidade(uc);
    end;
    end;             
end;
if x = 1 then
  begin
    din:= ' Real';
  end;
if x < 20 then
  begin
    result:=unidade(x);
  end
  else if x < 100 then
  begin
    u:=x mod 10;
    d:=x div 10;
    if u = 0 then
    begin
      result:=dezena(d);
    end
    else
    begin
      result:=dezena(d)+' e '+unidade(u);
    end;             
  end
  else if x < 1000 then
  begin
    c:=x div 100;
    d:=(x mod 100) div 10;
    u:=(x mod 100) mod 10;
    if d = 1 then
    begin
      case u of
      0: result:=centena(c)+' e Dez';
      1: result:=centena(c)+' e Onze';
      2: result:=centena(c)+' e Doze';
      3: result:=centena(c)+' e Treze';
      4: result:=centena(c)+' e Quatorze';
      5: result:=centena(c)+' e Quinze';
      6: result:=centena(c)+' e Dezesseis';
      7: result:=centena(c)+' e Dezessete';
      8: result:=centena(c)+' e Dezoito';
      9: result:=centena(c)+' e Dezenove';
      end;
    end
    else if ((u = 0) and (d = 0)) and (c = 1) then
    begin
      result:='Cem';
    end
    else if u = 0 then
    begin
      result:=centena(c)+' e '+dezena(d);
    end
    else
    begin
      if d = 0 then
      begin
        result:=centena(c)+' e '+unidade(u);
      end
      else
      begin
        result:=centena(c)+' e '+dezena(d)+' e '+unidade(u);
      end;
    end;
  end
  //parte nova
  else if x < 1000000 then
  begin
    m:=x div 1000;
    c:=(x mod 1000) div 100;
    d:=((x mod 1000) mod 100) div 10;
    u:=((x mod 1000) mod 100) mod 10;
    if m < 20 then
    begin
      casadosmil:= unidade(m);
    end
    else if m < 100 then
    begin
      um:=m mod 10;
      dm:=m div 10;
      if um = 0 then
      begin
        casadosmil:=dezena(dm);
      end
      else
      begin
        casadosmil:=dezena(dm)+' e '+unidade(um);
      end;
    end
    else if m < 1000 then
    begin
      cm:=m div 100;
      dm:=(m mod 100) div 10;
      um:=(m mod 100) mod 10;
      if dm = 1 then
      begin
        case um of
        0: casadosmil:=centena(cm)+' e Dez';
        1: casadosmil:=centena(cm)+' e Onze';
        2: casadosmil:=centena(cm)+' e Doze';
        3: casadosmil:=centena(cm)+' e Treze';
        4: casadosmil:=centena(cm)+' e Quatorze';
        5: casadosmil:=centena(cm)+' e Quinze';
        6: casadosmil:=centena(cm)+' e Dezesseis';
        7: casadosmil:=centena(cm)+' e Dezessete';
        8: casadosmil:=centena(cm)+' e Dezoito';
        9: casadosmil:=centena(cm)+' e Dezenove';
        end;
      end
      else if ((um = 0) and (dm = 0)) and (cm = 1) then
      begin
        casadosmil:='Cem';
      end
      else if (um = 0) and (dm = 0)then
      begin
        if (cm >= 2) and (cm <= 9) then
        begin
        casadosmil:=centena(cm);
        end;
      end
      else if um = 0 then
      begin
        casadosmil:=centena(cm)+' e '+dezena(dm);
      end
      else
      begin
        if dm = 0 then
        begin
          casadosmil:=centena(cm)+' e '+unidade(um);
        end
        else
        begin
          casadosmil:=centena(cm)+' e '+dezena(dm)+' e '+unidade(um);
        end;
      end;
    end;
  
    result:= casadosmil+' Mil, '+centena(c)+' e '+dezena(d)+' e '+unidade(u);
  
        if u = 0 then
    begin
      result:= casadosmil+' Mil, '+centena(c)+' e '+dezena(d);
    end
    else
    begin
      if d = 0 then
      begin
        result:=casadosmil+' Mil, '+centena(c)+' e '+unidade(u);
      end
      else
      begin
        if c = 0 then
        begin
          result:=casadosmil+' Mil, '+dezena(d)+' e '+unidade(u);
        end
      end;
    end;
    if d = 1 then
    begin
      case u of
      0: result:=centena(c)+' e Dez';
      1: result:=centena(c)+' e Onze';
      2: result:=centena(c)+' e Doze';
      3: result:=centena(c)+' e Treze';
      4: result:=centena(c)+' e Quatorze';
      5: result:=centena(c)+' e Quinze';
      6: result:=centena(c)+' e Dezesseis';
      7: result:=centena(c)+' e Dezessete';
      8: result:=centena(c)+' e Dezoito';
      9: result:=centena(c)+' e Dezenove';
      end;
    end
    else if ((d = 0) and (c = 0)) and (u = 0) then
    begin
      result:=casadosmil+' Mil';
    end      
        else if (u = 0) and (d = 0) then
    begin
      result:=casadosmil+' Mil, '+centena(c);
    end
    else if (u = 0) and (c = 0) then
    begin
      result:=casadosmil+' Mil, '+dezena(d);
    end
    else if (d = 0) and (c = 0) then
    begin
      result:=casadosmil+' Mil, '+unidade(u);
    end;
end
// show do milhão
else if x < 1000000000 then
begin
   mi:=x div 1000000;
    m:=(x mod 1000000) div 1000;
    c:=((x mod 1000000) mod 1000) div 100;
    d:=(((x mod 1000000) mod 1000) mod 100) div 10;
    u:=(((x mod 1000000) mod 1000) mod 100) mod 10;
    if mi = 1 then
    begin
      strimili:=' Milhão, ';
    end;
    if mi < 20 then
    begin
      casadomilhao:= unidade(mi);
    end
    else if mi < 100 then
    begin
      umi:=mi mod 10;
      dmi:=mi div 10;
      if umi = 0 then
      begin
        casadomilhao:=dezena(dmi);
      end
      else
      begin
        casadomilhao:=dezena(dmi)+' e '+unidade(umi);
      end;
    end
    else if mi < 1000 then
    begin
      cmi:=mi div 100;
      dmi:=(mi mod 100) div 10;
      umi:=(mi mod 100) mod 10;
      if dmi = 1 then
      begin
        case umi of
        0: casadomilhao:=centena(cmi)+' e Dez';
        1: casadomilhao:=centena(cmi)+' e Onze';
        2: casadomilhao:=centena(cmi)+' e Doze';
        3: casadomilhao:=centena(cmi)+' e Treze';
        4: casadomilhao:=centena(cmi)+' e Quatorze';
        5: casadomilhao:=centena(cmi)+' e Quinze';
        6: casadomilhao:=centena(cmi)+' e Dezesseis';
        7: casadomilhao:=centena(cmi)+' e Dezessete';
        8: casadomilhao:=centena(cmi)+' e Dezoito';
        9: casadomilhao:=centena(cmi)+' e Dezenove';
        end;
      end
      else if ((umi = 0) and (dmi = 0)) and (cmi = 1) then
      begin
        casadomilhao:='Cem';
      end
      else if (umi = 0) and (dmi = 0)then
      begin
        if (cmi >= 2) and (cmi <= 9) then
        begin
        casadomilhao:=centena(cmi);
        end;
      end
      else if umi = 0 then
      begin
        casadomilhao:=centena(cmi)+' e '+dezena(dmi);
      end
      else
      begin
        if dmi = 0 then
        begin
          casadomilhao:=centena(cmi)+' e '+unidade(umi);
        end
        else
        begin
          casadomilhao:=centena(cmi)+' e '+dezena(dmi)+' e '+unidade(umi);
        end;
      end;
    end;
    if m < 20 then
    begin
      casadosmil:= unidade(m);
    end
    else if m < 100 then
    begin
      um:=m mod 10;
      dm:=m div 10;
      if um = 0 then
      begin
        casadosmil:=dezena(dm);
      end
      else
      begin
        casadosmil:=dezena(dm)+' e '+unidade(um);
      end;
    end
    else if m < 1000 then
    begin
      cm:=m div 100;
      dm:=(m mod 100) div 10;
      um:=(m mod 100) mod 10;
      if dm = 1 then
      begin
        case um of
        0: casadosmil:=centena(cm)+' e Dez';
        1: casadosmil:=centena(cm)+' e Onze';
        2: casadosmil:=centena(cm)+' e Doze';
        3: casadosmil:=centena(cm)+' e Treze';
        4: casadosmil:=centena(cm)+' e Quatorze';
        5: casadosmil:=centena(cm)+' e Quinze';
        6: casadosmil:=centena(cm)+' e Dezesseis';
        7: casadosmil:=centena(cm)+' e Dezessete';
        8: casadosmil:=centena(cm)+' e Dezoito';
        9: casadosmil:=centena(cm)+' e Dezenove';
        end;
      end
      else if ((um = 0) and (dm = 0)) and (cm = 1) then
      begin
        casadosmil:='Cem';
      end
      else if (um = 0) and (dm = 0)then
      begin
        if (cm >= 2) and (cm <= 9) then
        begin
        casadosmil:=centena(cm);
        end;
      end
      else if um = 0 then
      begin
        casadosmil:=centena(cm)+' e '+dezena(dm);
      end
      else
      begin
        if dm = 0 then
        begin
          casadosmil:=centena(cm)+' e '+unidade(um);
        end
        else
        begin
          casadosmil:=centena(cm)+' e '+dezena(dm)+' e '+unidade(um);
        end;
      end;
    end;
  
        result:= casadomilhao+strimili+casadosmil+' Mil, '+centena(c)+' e '+dezena(d)+' e '+unidade(u);
        if u = 0 then
    begin
      result:= casadomilhao+strimili+casadosmil+' Mil, '+centena(c)+' e '+dezena(d);
    end
    else
    begin
      if d = 0 then
      begin
        result:= casadomilhao+strimili+casadosmil+' Mil, '+centena(c)+' e '+unidade(u);
      end
      else
      begin
        if c = 0 then
        begin
          result:= casadomilhao+strimili+casadosmil+' Mil, '+dezena(d)+' e '+unidade(u);
        end
      end;
    end;
    if d = 1 then
    begin
      case u of
      0: result:=centena(c)+' e Dez';
      1: result:=centena(c)+' e Onze';
      2: result:=centena(c)+' e Doze';
      3: result:=centena(c)+' e Treze';
      4: result:=centena(c)+' e Quatorze';
      5: result:=centena(c)+' e Quinze';
      6: result:=centena(c)+' e Dezesseis';
      7: result:=centena(c)+' e Dezessete';
      8: result:=centena(c)+' e Dezoito';
      9: result:=centena(c)+' e Dezenove';
      end;
    end
    else if ((d = 0) and (c = 0)) and (u = 0) then
    begin
      result:=casadomilhao+strimili+casadosmil+' Mil';
    end      
        else if (u = 0) and (d = 0) then
    begin
      result:=casadomilhao+strimili+casadosmil+' Mil, '+centena(c);
    end
    else if (u = 0) and (c = 0) then
    begin
      result:=casadomilhao+strimili+casadosmil+' Mil, '+dezena(d);
    end
    else if (d = 0) and (c = 0) then
    begin
      result:=casadomilhao+strimili+casadosmil+' Mil, '+unidade(u);
    end;
end;
if (centsint > 0) and (centsint <= 99) then
begin
   write(result, din+' e '+cenv+centavos);
end
else
begin
   write(result, din);
end;
End.

 

  • Curtir 1
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...