Representação de Algoritmos - Linguagens de Programação A representação de algoritmos em uma pseudo-linguagem mais próxima às pessoas é bastante útil principalmente quando o problema a ser tratado envolve um grande número de passos. No entanto, para que esses passos possam ser entendidos pelo computador é necessário representar tal algoritmo em uma linguagem de programação. • • • • Pascal Fortran C C++ As linguagens de programação obrigam o uso de formas rígidas na especificação de seus passos, ou seja, obrigam as pessoas a detalharem as operações que deverão ser executadas. Uma dica aqui é refinar a solução do problema de um nível mais abstrato até chegar ao nível de detalhamento que deve ser representado em uma linguagem de programação. Essa prática, além de prover um tipo de documentação, também ajuda muito no tratamento dos erros que eventualmente possam surgir. Convencionamos aqui que um algoritmo representado em uma linguagem de programação é um programa. Ex.: programa em Pascal para somar dois números. program somadoisnum; { esse programa soma dois números e exibe o resultado na tela } var n1, n2, result : integer; begin readln(n1); readln(n2); result := n1 + n2; writeln(result); end. Os algoritmos descritos em pseudo-linguagem não podem ser executados (entendidos) por computadores. É necessário ainda uma fase de tradução da linguagem de programação para a linguagem que a máquina entenda. Essa fase é conhecida por compilação, e é relizada pelo Compilador. Comandos Conjunto de palavras-chave de uma linguagem de programação que tem por finalidade dizer ao computador como ele deve executar uma tarefa. No exemplo de algoritmo descrito acima (receita de bolo), os comandos eram palavras-chaves representados por verbos da língua portuguesa, em computadores os comandos são usualmente palavras originária da língua inglesa. Exemplo: write, read, do, ... Compiladores Para que o computador execute o programa escrito em Pascal, é necessário traduzi-lo para a linguagem de máquina. Compiladores são estes tradutores, que além disso, ainda testam o código mostrando os erros. Compilador • • • • traduz o programa escrito em uma linguagem de programação para linguagem de máquina. verifica se as formas rígidas na espeficicação dos passos foi seguida corretamente. compiladores são relacionados diretamente com a máquina para a qual será feita a tradução. gera um arquivo executável do programa descrito. Principais compiladores usados: • • Turbo Pascal 7 - Clássico compilador de Pascal, Utiliza interface DOS; Pascalzim - Desenvolvido no Departamento de Ciências da Computação da Universidade de Brasília, Utiliza interface Windows, e tem como principal recurso a procura e substituição de palavras. • Free Pascal - Compilador gratuito, compatível com Pascal e Object Pascal (linguagem usada no Delphi). É muito compatível com a linguagem usada no Turbo Pascal 7, e possui versões para sistemas Windows, GNU/Linux, Mac, DOS, OS/2, Haiku, e GNU/BSD. É um projeto de código livre (open source). Bibliotecas Bibliotecas são um conjunto de funções e procedimentos chamadas por comandos nos programas. Por exemplo a biblioteca CRT responde ao comando clrscr (limpar a tela). No caso do compilador Turbo Pascal acessamos a biblioteca da seguinte forma: program teste; uses crt; var Observação: o compilador Pascalzim já acessa a biblioteca CRT, não sendo necessário acessá-la. História do Pascal Ano de 1971. O professor Niklaus Wirth projeta uma linguagem como trabalho escolar para estudantes de programação da Universidade Técnica de Zurique, Suíça. Essa linguagem vem a se chamar Pascal, homenageando o filósofo e matemático do século XVII, Blaise Pascal. A partir dessa época, diversas versões de Pascal foram implementadas, com destaque especial a Borland / Inprise, que construiu os melhores e mais populares compiladores Pascal. Turbo Pascal 1: Desde a sua primeira versão, o compilador pascal da Borland (chamado de Turbo Pascal) já possuía ambiente para digitação e depuração do código fonte, e fazia a compilação e linkedição do código em um único processo. Outra característica dos compiladores Turbo Pascal: são extremamente rápidos e geram executáveis enxutos, e com código nativo. Turbo Pascal 2 e 3: Foram acrescentadas algumas funcionalidades nessas versões, como o acesso a diretórios através do ambiente de programação, para a localização de arquivos. Foi incluído novos procedimentos e funções. Turbo Pascal 4: Foram introduzidas rotinas do DOS para leitura de diretórios, leitura e escrita de atributos de arquivos; ferramentas para acesso à memória e portas de hardware; facilidades para a construção de rotinas gráficas, com estilo de contornos e preenchimentos; foi implementado na versão 4 o conceito de unidade (Unit), fazendo com que um mesmo código fosse compartilhado entre vários programas fonte, e sem a necessidade da recompilação; esta versão ainda foi responsável pela implementação de novos tipos de dados e finalmente, a possibilidade de deixar o programa residente. Turbo Pascal 5: Ocorreu uma importante evolução no compilador - a depuração. O programa agora pode ser executado passo a passo, inclusive com o acompanhamento do conteúdo das variáveis. Turbo Pascal 5.5: Esta versão foi a responsável pela estréia do Pascal Orientado a Objetos, dando origem a primeira implementação do Object Pascal. Programação Pascal Abordaremos aqui, a utilização dos conceitos de programação pascal por meio de exemplos. 1. Estrutura principal A estrutura principal de um programa em pascal se apresenta da seguinte forma: program cabeçalho; declarações begin comandos end. As palavras em negrito são palavras reservadas ou palavras chave da linguagem, que não podem ser declaradas como identificadores. Elas definem o tipo de dados ou estrutura que se deseja utilizar. 2. Palavras Chaves (reservadas): and, array, begin, case, const, div, do, downto, else, end, file, for, function, goto, if, in, label, mod, nil, not, of, or, packed, procedure, program, record, repeat, set, then, to, type, until, var, while, with 3. Identificador • • Um identificador é formado por uma única letra, ou então por uma letra seguida de letras ou dígitos, em qualquer número. Considera-se dois identificadores como distintos quando considerados seus oito primeiros caracteres. 4. Comentários Os comentários são identificados por estarem delimitados pelos caracteres { e }, ou pelo caracteres (* e *). Comentários são ignorados pelo compilador na fase de tradução do programa. Comentários são úteis no sentido de destacar ou documentar o programa, para torná-lo mais legível e fácil de entender o seu objetivo, quando retomado para correção ou alteração após determinado tempo. Declarações A parte de declarações em um programa está relacionada a alocação de memória para os dados que serão utilizados no decorrer do programa. O montante do memória alocada está relacionada ao tipo de dado a ser utilizado. Podem ser declarados aqui regiões de memória que podem ter seu conteúdo alterado (variáveis), regiões de memória que não são permitidos a alteração de seu conteúdo, e também outros tipos além dos pré-definidos pela linguagem. 1. Tipos pré-definidos da linguagem Pascal: • • • • integer char boolean (TRUE, FALSE) string 2. Variáveis • Variáveis são entidades que são representadas por identificadores. Sintaxe: var lista-de-identificadores : tipo; lista-de-identificadores : tipo; Exemplo: var nota, A12 : real; i, codigo : integer; flag, Sim : boolean; letra1, letra2: char; 3. Constantes Define identificadores que não se alteram durante a execução do algoritmo. Exemplo: const pi = 3,1415 4. Declaração de outros Tipos Além dos tipos pré-definidos pela linguagem Pascal, há a possibilidade de se definir outros tipos. Exemplo: type LETRASMA = ´A´ .. ´Z´; INDICES = 0 .. 100; DIAS = (dom, seg, ter, qua, qui, sex, sab); var diasemana : DIAS; Construção do programa em Pascal O programa se constitui num texto, que pode ser editado em qualquer editor de texto ou diretamente no compilador, sendo necessário ser salvo com a terminação .pas de pascal, em seguida compilado (traduzido para linguagem de máquina), para depois ser executado. Nos compiladores de hoje já é possível executar direto pulando todas estas etapas. O programa em Pascal se constitui basicamente de: {comentários entre chaves não são lidos pelo compilador} program Nome_do_programa; {identificação do programa} uses CRT; {acessar uma biblioteca,necessário no Turbo Pascal} var {declaramos as variáveis} a,b,c:real; {variáveis:tipo} begin {início do corpo do programa} read(a); {comandos dentro do corpo} c:=a; {comandos terminam com ponto e vírgula} end. {fim do corpo do programa com ponto} Exemplo de programa em Pascal: program nomey; uses crt; var nome:string; begin clrscr; write('Escreva um nome '); read(nome); writeln('O nome que voce escreveu foi: ',nome); readkey; end. Exemplo 2. Este programa lê o número de um aluno e suas três notas, calcula a média das notas, ponderada pelos pesos 2,3,4 respectivamente, e imprime o número do aluno, suas três notas e a média. program Notas ; var numal : integer ; n1, n2, n3, media : real ; begin writeln ('Digite o numero do aluno seguido das tres notas') ; readln ( numal, n1, n2, n3 ) ; media := ( 2*n1 + 3*n2 + 4*n3 ) / 9 ; writeln ('Aluno: ', numal:4) ; writeln ('Notas: ', n1:6:2, n2:6:2, n3:6:2) ; writeln ('Media: ', media:6:2 ) ; end. Exemplo 3. O programa abaixo lê três números representando os lados de um triângulo, verifica se o mesmo é possível e classifica-o quanto ao tipo: equilátero, isóceles ou escaleno. Conforme o caso, a mensagem adequada é impressa. program classifica ; var a, b, c : real; begin write ('Digite os valores dos lados do triangulo:'); readln (a, b, c); if ( a >= b+c ) or ( b >= a+c ) or ( c >= a+b ) then writeln ('O triangulo é impossivel') else if ( a = b ) and ( a = c ) then writeln ('O triangulo é equilatero') else if ( a = b ) or ( a = c ) or ( b = c ) then writeln ('O triangulo é isoceles') else writeln ('O triangulo é escaleno') end. (* classifica *)