thoga31 Posted December 18, 2011 at 06:25 PM Report #427284 Posted December 18, 2011 at 06:25 PM 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!
nunopicado Posted December 19, 2011 at 08:46 AM Report #427325 Posted December 19, 2011 at 08:46 AM 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.
apocsantos Posted December 19, 2011 at 05:28 PM Report #427383 Posted December 19, 2011 at 05:28 PM 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"
nunopicado Posted December 19, 2011 at 08:54 PM Report #427437 Posted December 19, 2011 at 08:54 PM 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.
pwseo Posted December 19, 2011 at 09:11 PM Report #427441 Posted December 19, 2011 at 09:11 PM 0..31. O #32 é o espaço 🙂
nunopicado Posted December 19, 2011 at 09:43 PM Report #427447 Posted December 19, 2011 at 09:43 PM 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.
pmg Posted December 19, 2011 at 09:51 PM Report #427452 Posted December 19, 2011 at 09:51 PM O caracter 127 tambem e meio esquisito 😉 What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
nunopicado Posted December 19, 2011 at 09:57 PM Report #427456 Posted December 19, 2011 at 09:57 PM 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.
thoga31 Posted December 19, 2011 at 10:11 PM Author Report #427462 Posted December 19, 2011 at 10:11 PM 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!
nunopicado Posted December 19, 2011 at 10:29 PM Report #427473 Posted December 19, 2011 at 10:29 PM 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.
Flinger Posted December 22, 2011 at 12:43 PM Report #427868 Posted December 22, 2011 at 12:43 PM Então e se eu usar UTF8? 😁
nunopicado Posted December 22, 2011 at 01:01 PM Report #427874 Posted December 22, 2011 at 01:01 PM Então e se eu usar UTF8? 😁 Aí tens de arranjar um snippet de uma tabela UTF8... :😄 Este é para ASCII! 😄 "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.
thoga31 Posted December 22, 2011 at 10:18 PM Author Report #427996 Posted December 22, 2011 at 10:18 PM Como utilizamos UTF8 em Pascal/Delphi? ? Knowledge is free!
apocsantos Posted December 22, 2011 at 10:55 PM Report #428003 Posted December 22, 2011 at 10:55 PM 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"
nunopicado Posted December 23, 2011 at 02:25 AM Report #428031 Posted December 23, 2011 at 02:25 AM Como utilizamos UTF8 em Pascal/Delphi? ? 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.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now