Professional Documents
Culture Documents
1 FUNDAMENTOS DE PROGRAMAO
1.1 O QUE SO ALGORITMOS ? O uso de algoritmos quase to antigo quanto a matemtica. Com o passar do tempo, entretanto, ele foi bastante esquecido pela matemtica. Com o advento das mquinas de calcular e mais tarde os computadores, o uso de algoritmos ressurgiu com grande vigor, como uma forma de indicar o caminho para a soluo dos mais variados problemas. Algoritmo no a soluo do problema, pois, se assim fosse, cada problema teria um nico algoritmo. Algoritmo o caminho para a soluo de um problema, e em geral, os caminhos que levam a uma soluo so muitos. Ao longo dos anos surgiram muitas formas de representar os algoritmos, alguns utilizando linguagens semelhantes s linguagens de programao e outras utilizando formas grficas. O aprendizado de algoritmos no se consegue a no ser atravs de muitos exerccios. Algoritmos no se aprendem: - Copiando algoritmos - Estudando algoritmos Algoritmos s se aprendem: - Construindo algoritmos - testando algoritmos
especificao da sequncia ordenada de passos que deve ser seguida para a realizao de uma tarefa, garantindo a sua repetibilidade, d-se o nome de algoritmo. Embora esta definio de algoritmo seja correta, podemos definir algoritmo, de maneira informal e completa como: Algoritmos um conjunto de regras, bem definidas, para a soluo de um problema em um tempo finito e com um nmero finto de passos. Algoritmo pode ser definido tambm como um conjunto de valores como entrada e produz algum valor ou conjunto de valores como sada. Um algoritmo deve sempre possuir pelo menos um resultado, normalmente chamado de sada, e satisfazer a propriedade da efetividade, isto , todas as operaes. especificadas no algoritmo devem ser suficientemente bsicas para que possam ser executadas de maneira exata e num tempo finito. Na prtica no importante ter-se apenas um algoritmo, mas sim, um bom algoritmo. O mais importante de um algoritmo a sua correo, isto , se ele resolve realmente o problema proposto e o faz exatamente. Para se ter um algoritmo, necessrio: i. Que se tenha um nmero finito de passos; ii. Que cada passo esteja precisamente definido, sem possveis ambiguidades; iii. Que existam zero ou mais entradas tomadas de conjuntos bem definidos; iv. Que existam uma ou mais sadas;
Pgina 1
Todo o trabalho realizado por um computador baseado na manipulao das informaes contidas em sua memria. Estas informaes podem ser classificadas em dois tipos:
Prof Valria Ap. Perez Faria Pgina 2
Na programao, uma varivel um objeto (uma posio, frequentemente localizada na memria) capaz de reter e representar um valor ou expresso. Enquanto as variveis s existem em tempo de execuo, elas so associadas a nomes, chamados identificadores, durante o tempo de desenvolvimento. 1.3.1 ARMAZENAMENTO DE DADOS NA MEMRIA Para armazenar os dados na memria, imagine que a memria de um computador um grande arquivo com vrias gavetas, onde cada gaveta pode armazenar apenas um nico valor (seja ele numrico, caractere ou lgico). Se um grande arquivo com vrias gavetas, necessrio identificar com um
Prof Valria Ap. Perez Faria Pgina 3
Como o prprio nome diz, instrues primitivas so os comandos bsicos que efetuam tarefas essenciais para a operao dos computadores, como entrada e sada de dados (comunicao com o usurio e com dispositivos perifricos), e movimentao dos mesmos na memria. Estes tipos de instruo esto presentes na absoluta maioria das linguagens de programao. Antes de passar descrio das instrues primitiva, necessria a definio de alguns termos que sero utilizados: Dispositivo de entrada o meio pelo qual as informaes (mais especificamente os dados) so transferidos pelo usurio ou pelos nveis secundrios de memria ao computador. Os exemplos mais comuns so o teclado, o mouse, leitora tica, leitora de cdigo de barras, as fitas e discos magnticos. Dispositivo de sada o meio pelo qual as informaes (geralmente os resultados da execuo de um programa) so transferidos pelo computador ao usurio ou aos nveis secundrios de memria. Os exemplos mais comuns so o monitor de vdeo, impressora, fitas e discos magnticos. Sintaxe a forma como os comandos devem ser escritos, a fim de que possam ser entendidos pelo tradutor de programas. A violao das regras sintticas considerada um erro sujeito pena do no reconhecimento por parte do tradutor; Semntica o significado, ou seja, o conjunto de aes que sero exercidas pelo computador durante a execuo do referido comando. Daqui em diante, todos os comandos novos sero apresentados por meio de sua sintaxe e sua semntica, isto , a forma como devem ser escritos e a(s) ao(es) que executam. INTRODUO A LINGUAGEM PASCAL
1.5
A linguagem Pascal se destina programao de computadores. Foi desenvolvida no final dos anos 60 na Sua e seu nome uma homenagem ao criador da primeira calculadora mecnica, o matemtico francs do sculo XVII Blaise Pascal. Um dos principais fatores que motivaram o surgimento da linguagem foi a obteno de uma linguagem simples, capaz de incentivar a edio de programas claros e facilmente legveis, favorecendo a utilizao das boas tcnicas de programao. Assim como as outras linguagens de programao, o Pascal possui vrias verses. Cada fabricante cria sua prpria verso com suas particularidades. As verses mais famosas so o Turbo Pascal, da Borland International, e o MSPascal, da Microsoft. Existem verses de Pascal para todos os tipos de
Prof Valria Ap. Perez Faria Pgina 5
Pgina 7
Pgina 9
SIMPLES
ESTRUTURADO
ARRAY
STRING
ORDINAL
REAL
REAL
BOOLEAN
CHAR
INTEIRO
INTEGER
Vale ressaltar que a linguagem no possui apenas os tipos abaixo, mas estes que aparecero em 99% dos problemas. Em resumo vamos trabalhar com o seguintes tipos: - Integer - Real - String - Char - Boolean (Lgico) - Array 2.1.2.1 TIPO INTEIRO O tipo inteiro formado pelo subconjunto de inteiros, de acordo com a seguinte tabela: Tipo Domnio Tamanho ------------------------------------------------------------integer [-32768, 32767] 2 bytes -------------------------------------------------------------
Pgina 10
2.1.5 COMANDO DE ATRIBUIO A atribuio de um valor ou de uma expresso a um identificador feita atravs do operador de atribuio := . A sintaxe de uma operao de atribuio : Identificador := expresso; Neste tipo de operao, a expresso e o identificador devem ser do mesmo tipo, exceto no caso em que o identificador for do tipo real e a expresso do tipo inteiro (pois, neste caso, o valor inteiro da expresso ser automaticamente transformado em real). Exemplo: Considere a seguinte declarao de variveis:
Prof Valria Ap. Perez Faria Pgina 12
Pgina 13
Estas operaes podem ser utilizadas com operandos reais ou inteiros, exceto DIV e MOD que exigem operandos inteiros. A prioridade entre as operaes a mesma da Matemtica: i. Primeiramente, so efetuadas as multiplicaes e divises (/, DIV e MOD); por ltimo, so efetuadas as adies e subtraes. Temos ento dois nveis de prioridades.
ii.
Dentro de um mesmo nvel, so efetuadas as operaes da esquerda para a direita. Exemplo: Na expresso 5 - 2/3*7 + 1 as operaoes so efetuadas na seguinte ordem: diviso, multiplicao, subtrao e adio. Se uma expresso contiver parnteses, ento ser executado primeiramente o que estiver entre parnteses. Exemplo: Expresso Valor --------------------------------5 + 2*4 13 (5 + 2)*4 28 7 DIV 2*3 9 7 DIV (2*3) 1 ---------------------------------Observaes: i. No existe operador pr-definido para a potenciao. ii. O sinal de multiplicao nunca poder ser omitido. iii. A diviso / sempre fornece um resultado real, mesmo que os operandos sejam inteiros. iv. Se todos os operandos forem inteiros e as operaes envolvidas forem +, -, *, MOD ou DIV, ento o resultado ser inteiro.
Pgina 14
As funes INT e TRUNC so numericamente equivalentes. A diferena entre elas est apenas no tipo do valor retornado.
Pgina 15
Uma relao uma comparao realizada entre valores do mesmo tipo, cujo resultado TRUE ou FALSE. A comparao indicada por um dos operadores relacionais a seguir: = igual <> diferente < menor > maior <= menor ou igual >= maior ou igual No caso de variveis do tipo CHAR ou STRING, ser usada a ordem alfabtica para comparar duas constantes ou variveis. Exemplo: Sejam a, b, c, d variveis booleanas cujos valores so: a := 1 < 2; b := 3 >= 5; c := a OR b; d := a AND b; Como 1 < 2 uma relao verdadeira, temos que a tem valor TRUE; 3 >= 5 falso, logo, b tem valor FALSE. Sendo a TRUE e b FALSE temos que c TRUE, pois a OR b s seria FALSE se a e b fossem ambas FALSE. O valor de d FALSE, uma vez que b FALSE. Exemplo: Consideremos as variveis x, y, z, nome1, nome2 e teste declaradas abaixo: VAR x, y, z: byte; nome1, nome2: string; teste: boolean; Considere tambm as seguintes atribuies: x := 3; y := 10; z := 4; nome1 := 'Guizinha'; nome2 := 'Olezinho'; teste := false;
Pgina 16
Pgina 17
READLN(Var1, Var2, ...); ---> Transfere dados para as variveis Var1, Var2, ... e, aps a leitura dos dados, posiciona o cursor no incio da prxima linha da tela. Cada comando de leitura deve ser encerrado pressionando-se a tecla ENTER. Caso haja mais de um dado a ser lido por um comando de leitura, deve-se separ-los por pelo menos um espao em branco. Exemplo: Suponhamos que A e B sejam duas variveis reais de um programa. Quando a execuo do programa chegar em um comando como Read(A, B); Ento o computador ficar esperando que sejam digitados dois nmeros reais para que sejam atribudos s variveis A e B. Por exemplo, digitando-se uma linha como 3.05 -5.17 Pressionando-se ENTER ao final da digitao dos nmeros, sero atribudos os valores 3.05 a A e -5.17 a B. como se o programa contivesse as atribuies: A := 3.05; B := -5.17; 3.2 COMANDOS DE SADA Um comando de sada transfere dados para um dispositivo de sada (vdeo, impressora). Os dados que podem ser transferidos so valores ou expresses envolvendo constantes ou variveis. Dois comandos de sada bastante usados so WRITE e WRITELN que tm sintaxes: WRITE(v1, v2, ...); ---> Mostra na tela os valores de v1, v2, ... WRITELN(v1, v2, ...); ---> Mostra na tela os valores de v1, v2, ... e posiciona o cursor no incio da prxima linha na tela.
Pgina 18
WRITELN(a);
WRITELN(y);
Antonio 60 Jose 75 Maria 90 Enquanto que WRITELN(x, y, z); WRITELN(a, b, c); Exibir: Antonio Jose Maria 607590 Em cada um desses casos, o cursor ficar posicionado no incio de uma nova linha. Exemplo: Vamos elaborar agora nosso primeiro programa completo. Queremos digitar dois nmeros inteiros no teclado e desejamos que o computador mostre sua soma no vdeo. Sejam Num1 e Num2 os nomes das variveis que vo guardar na memria os valores dos nmeros digitados no teclado. A atribuio de valores a Num1 e Num2, neste caso, ser feita por um comando como READ(Num1, Num2);
Prof Valria Ap. Perez Faria Pgina 19
Pgina 21
Comando Sada ---------------------------------------------------------WRITE(x1) 8 WRITE(x1:2) ^8 WRITE(x1:10) ^^^^^^^^^8 WRITE(x1, s1, x2, s2) 8A19* WRITE(x1, ' ', s1, ' ', x2, ' ', s2) 8^19^* WRITE(x1, s1:2, x2:5, s2:3) 8^^^19^^* WRITE(x1:6, x2:2) ^^^^^819 WRITE(x1, ' ':5, x2) 8^^^^^19 ---------------------------------------------------------O smbolo ^ na tabela acima assinala os espaos em branco. Em um comando WRITE ou WRITELN, a impresso de n espaos em branco pode ser feita acrescentando-se lista de valores a serem impressos uma expresso da forma ' ':n, como no ltimo exemplo da tabela acima. O tamanho do campo de impresso pode ser uma expresso aritmtica. Por exemplo, WRITE(dado:5) o mesmo que WRITE(dado:(11 - 9 + 3)). Para se formatar a impresso de um valor real, devem ser fornecidos dois inteiros que correspondem ao tamanho do campo de impresso e quantidade de casas decimais a serem impressas. WRITE(x:M:N) ou WRITELN(x:M:N) ---> Imprime o valor de x em um campo de largura M,com N casas decimais. Se o valor de M for maior do que a quantidade necessria para a impresso do valor de x, ento a largura do campo ser completada com espaos em branco adicionados esquerda. O ponto decimal ou o sinal negativo ocupam um espao do campo de impresso. O tamanho do campo de impresso e a quantidade de casas decimais podem ser fornecidos em forma de expresso aritmtica. Valores reais sem formatao so impressos em forma de potncias de 10. Exemplo: Consideremos Pi e X constantes reais com valores respectivamente iguais a 3.1415926535 e -1991. A tabela a seguir mostra as diversas sadas geradas pelo respectivo comando WRITE. Denotamos os espaos em branco por_. Comando Sada --------------------------------------------------------------------------------WRITE(X:9:3) -1991.000 WRITE(X:15:2) ^^^^^^^-1991.00 WRITE(X:10:2) ^^-1991.00 WRITE(X) -1.9910000000E+03 WRITE(Pi) 3.1415926535E+00 WRITE(Pi:4:2) 3.14 WRITE(Pi:7:2) ^^^3.14 WRITE(Pi:10:3) ^^^^^3.141
Prof Valria Ap. Perez Faria Pgina 22
Pgina 23
Pgina 26
Pgina 28