Ir para o conteúdo
thoga31

Tabela ASCII - programa completo

Mensagens Recomendadas

thoga31

Este programa permite:

  • Visualizar a Tabela ASCII em formato de Tabela;
  • Premir uma tecla e visualizar
    • A ordem;
    • O caracter correspondente;
    • Se é especial, função ou regular;

    [*]Converter uma ordem ASCII no seu caracter correspondente

    [*]Converter um texto com um máximo de 100 caracteres num conjunto de ordens dos caracteres.

Foi programado recorrendo única e exclusivamente ao paradigma estrutural. Ou seja, todo o programa corre com base em procedimentos, cuja navegação é auxiliada por variáveis locais de controlo.

program ASCII_1;
uses crt;
var oqf : char;  // O Que Fazer - voltar a mostrar menu ou sair?


procedure pausa;
(* Faz pausa ao programa, e só termina quando for premido "Enter" *)
var tecla : char;
begin
     repeat
           tecla := readkey;
     until (tecla = #13);
end;


procedure tabela;
(* Mostra tabela ASCII *)
var i : integer;
begin
     clrscr;
     writeln('TABELA de caracteres regulares (#32 .. #255)');
     for i:=32 to 255 do begin
         write(i:3,' ',char(i),' | ');
     end;
     write('Enter para voltar...');
     pausa;
end;


procedure conv_tecla;
(* Converte a tecla premida na ordem e caracter ASCII respectivo *)
(* Bom para detectar teclas especiais *)
var tecla : char;
    especial : char;
begin
     clrscr;
     writeln('Prima tecla. "Enter" para sair. "Enter" é de ordem #13.');
     writeln;
     repeat
           tecla := readkey;
           if (tecla = #0) then begin  // Tecla especial, com dupla ordem, cuja primeira é #0
              especial := readkey;
              writeln('ESPECIAL: #0 + #',ord(especial),' = ',char(especial));
           end else begin
               if (ord(tecla) < 32) then write('  FUNCAO: ')
               else write(' REGULAR: ');
               writeln('#',ord(tecla),' = ',char(tecla));
           end;
     until (tecla = #13);
end;


procedure conv_ord;
var n : byte; // de 0 a 255, só!
begin
     clrscr;
     writeln('ORDEM > CARACTER. "13" para sair.');
     writeln;
     repeat
           repeat
                 write('Ordem (32 .. 255): ');  // exclui ordens de caracteres de funcoes
                 readln(n);
           until (n in [32..255] + [13]);
           writeln('Caracter de ordem ',n,': ',char(n));
     until (n = 13);  // equivale ao "Enter" do conversor de teclas
end;


procedure conv_frases;
var frase : string[200];
    i : integer;
begin
     clrscr;
     writeln('CONVERSOR DE FRASES');
     write('Introduza frase (ate 200 caracteres): ');
     readln(frase);
     writeln;
     for i:=1 to length(frase) do  // Mostra ordens
         write(ord(frase[i]):3,' ');
     writeln;
     for i:=1 to length(frase) do begin  // Mostra respectivos caracteres por baixo
         write('  ',frase[i],' ');
     end;
     pausa;
end;


procedure conversor_menu(var i_oi : char {Indicador "Onde Ir?"});
(* Conversor ASCII - menu *)
begin
     clrscr;
     writeln('CONVERSOR');
     writeln('   1 - Tecla > Ordem + Caracter (eq. Caracter > Ordem)');
     writeln('   2 - Ordem > Caracter');
     writeln('   3 - Conversor de frases');
     writeln('   0 - Voltar');

     repeat (* Leitura da opção, de entre as "0", "1" "2" e "3" *)
           i_oi := readkey;
     until (char(i_oi) in ['0'..'3']);

     case char(i_oi) of  (* Selecção de acção consoante opção *)
          '1': conv_tecla;
          '2': conv_ord;
          '3': conv_frases;
     end;
     // Se é "0", simplesmente tem de sair do procedimento e regressar ao Menu
end;


procedure menu(var opt : char);
(*  Menu Principal *)
var oi : char; // Controlador "Onde Ir?", para o Conversor
begin
     clrscr;
     writeln('TABELA ASCII');
     writeln('   1 - Ver tabela');
     writeln('   2 - Conversor');
     writeln('   0 - Sair');
     writeln;
     write('Opcao: ');

     repeat (* Leitura da opção, de entre as "0", "1" e "2" *)
           opt := readkey;
     until (char(opt) in ['0'..'2']);

     case char(opt) of  (* Selecção de acção consoante opção *)
          '1': tabela;
          '2': begin
               repeat
                     conversor_menu(oi);
               until (char(oi) = '0');
               end;
     end;
     // Se é "0", simplesmente tem de sair do procedimento, indicando a "O Que Fazer" que deve terminar programa
end;


begin (* BLOCO PRINCIPAL *)
     repeat
           menu(oqf);  // Menu, retornando "O Que Fazer"
     until (char(oqf) = '0');  // Opção "0" indica término do programa
end.

Documento na Wiki

Cumprimentos ;)

NOTA: sem link para o Ideone pois ocorre um "Time Limite Exceed" sempre que se tenta correr com novo input.

Optimizado para Free Pascal. Para testar, compilem nos vossos PCs. :)


Knowledge is free!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

Algo que faz sempre falta quando se programa em consola e se quer embelezar a coisa. Aliás, faz falta para muito mais!

;)


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
apocsantos

    Boa tarde,

    Não querendo ser critico, faltam os caracteres de controlo (1 a 32), que podiam ser impressos e também fazem jeito.

{"NUL\0", "SOH\0","ETX\0", "EOT\0", "ENQ\0","ACK\0","BEL\0","BS\0","TAB\0","TAB\0","LF\0","VT\0","FF\0","CR\0","SO\0","SI\0", "DLE\0","DC1\0","DC2\0","DC3\0","DC4\0","NAK\0","SYN\0","ETB\0","CAN\0","EM\0","SUB\0","ESC\0","FS\0","GS\0","RS\0","US\0","Spc\0"}

    Tenho isso feito em C, mas posso converter a pascal basta arranjar uns 10 minutos, para tirar a ferrugem de pascal e escrever a procedure para os 33 caracteres de controlo.

Cordiais cumprimentos,

Apocsantos


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

assinatura.jpg

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

Não querendo ser critico, faltam os caracteres de controlo (1 a 32), que podiam ser impressos e também fazem jeito.

    Tenho isso feito em C, mas posso converter a pascal basta arranjar uns 10 minutos, para tirar a ferrugem de pascal e escrever a procedure para os 33 caracteres de controlo.

É verdade, fazem muita falta (talvez mais até do que os restantes.

Mas... 33? Não são só 31 (1-31), ou estou-me a esquecer de algum?


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

0..31. O #32 é o espaço :)

Pois, 32 (0..31). O #0 também é de controlo!  ;)


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

O caracter 127 tambem e meio esquisito ;)

Tens razão, é o DEL. Não me lembrava desse! Afinal são mesmo 33!


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

Não querendo ser critico, faltam os caracteres de controlo (1 a 32), que podiam ser impressos e também fazem jeito.

Qual crítica qual quê! Críticas construtivas são sempre bem-vindas, ora essa! ;)

Eu só não meti esses no ciclo For porque são ícones esquisitos que aparecem e nada sugerem sobre a função que têm. Uma tabela só de caracteres especiais seria muito fixe, bem como incluir isso no Conversor, já que este dá o ícone estranho e não a função. :)


Knowledge is free!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

Hieroglifos é sempre boa arte... ;):) :)

Mete um case dentro do for, com hipoteses previstas se o código estiver entre 0 e 31, mais o 127, e no else metes o que já tens. Nas hipoteses, metes o nome da função.

Assim já resolve!


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

Então e se eu usar UTF8?  :cheesygrin:

Aí tens de arranjar um snippet de uma tabela UTF8...  ::D

Este é para ASCII!  :D


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
apocsantos

    Boa noite,

    Tens na system unit, funções para esse efeito. Esperimenta converter de UTF8 para ANSI por exemplo:

UTF8ToAnsi(caracter)

    Espero ter ajudado.

Cordiais cumprimentos,

Apocsantos


"A paciência é uma das coisas que se aprendeu na era do 48k" O respeito é como a escrita de código, uma vez perdido, dificilmente se retoma o habito"

assinatura.jpg

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

Como utilizamos UTF8 em Pascal/Delphi? :hmm:

Por exemplo o Lazarus usa UTF8 nativo se não me engano.

No Delphi é como disse o ApocSantos


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.