Técnicas de Linguagens de Programação – 10º Ano Unidade I Lógica de Programação Prof. Carlos Almeida - ESEN Prof. Pascoal Albuquerque - ESS “Não estamos aqui para sobreviver e sim para explorar a oportunidade de vencer adquirindo o saber!” "Penso noventa e nove vezes e nada descubro; deixo de pensar, mergulho em profundo silêncio - e eis que a verdade se me revela." (Albert Einstein) Introdução à Lógica de Programação Lógica Lógica de programação é a técnica de encadear pensamentos para atingir determinado objectivo. Sequência Lógica Sequência Lógica são passos executados até atingir um objectivo ou solução de um problema. A lógica de programação é necessária para pessoas que desejam trabalhar com desenvolvimento de sistemas e programas, ela permite definir a sequência lógica para o desenvolvimento. Instruções Instruções são um conjunto de regras ou normas definidas para a realização ou emprego de algo. Em informática, é o que indica a um computador uma acção elementar a executar. Por exemplo, se quisermos fazer uma omelete de batatas, temos que colocar em prática uma série de instruções: descascar as batatas, bater os ovos, fritar as batatas, etc... Essas instruções tem que ser executadas em uma ordem adequada; não se pode descascar as batatas depois de fritá-las. Uma instrução tomada em separado não tem muito sentido; para obtermos o resultado, precisamos colocar em prática o conjunto de todas as instruções, na ordem correcta. Algoritmo Um algoritmo é uma sequência ordenada e precisa de passos, acções ou operações, que conduzem à solução de um dado problema. Em informática, a formulação de um algoritmo não é mais do que a descrição, de forma ordenada, com clareza e rigor, das operações que se pretende realizar em computador para resolver um problema ou atingir determinados objectivos. Exemplos de algoritmos não computacionais: “Chupar um rebuçado”: • Pegar no rebuçado • Retirar o papel • Chupar o rebuçado • Deitar o papel no lixo “Somar dois números quaisquer”: • Escreva o primeiro número no rectângulo A • Escreva o segundo número no rectângulo B • Somar o número do rectângulo A com o número do rectângulo B • Colocar o resultado no rectângulo C Algoritmo não é a solução de um problema, pois, se assim fosse, cada problema teria um único algoritmo. Algoritmo é um caminho para a solução de um problema, e em geral, os caminhos que levam a uma solução são muitos. Algoritmos não se aprende: • Copiando Algoritmos • Estudando Algoritmos Algoritmos só se aprendem: • Construindo Algoritmos • Testando Algoritmos Aprender algoritmos não se consegue a não ser através de muitos exercícios. Programas Os programas de computadores nada mais são do que algoritmos escritos numa linguagem de computador (Pascal, C, Cobol, Fortran, Visual Basic entre outras) e que são interpretados e executados por uma máquina, no caso um computador. Um programa é por natureza muito específico e rígido em relação aos algoritmos da vida real. Exercícios Faça um algoritmo para somar dois números e multiplicar o resultado pelo primeiro número. Crie uma sequência lógica para tomar banho. Descreva com detalhes a sequência lógica para trocar um pneu de um carro. Faça um algoritmo detalhado para trocar uma lâmpada. Desenvolvendo algoritmos Regras para construção do Algoritmo Usar somente um verbo por frase. Imaginar que se está a desenvolver um algoritmo para pessoas que não trabalham com informática. Usar frases curtas e simples. Ser objectivo. Procurar usar palavras que não tenham sentido duvidoso. Fases Vimos que ALGORITMO é uma sequência lógica de instruções que podem ser executadas. Entretanto ao montar um algoritmo, precisamos primeiro dividir o problema apresentado em três fases fundamentais. ENTRADA: São os dados de entrada do algoritmo. PROCESSAMENTO: São os procedimentos utilizados para chegar ao resultado final. SAÍDA: São os dados já processados. ENTRADA PROCESSAMENTO SAÍDA Exemplo de Algoritmo Imagine o seguinte problema: Calcular a média final dos alunos. Os alunos realizarão 3 provas: P1, P2 e P3. Onde: Média Final = (P1+P2+P3)/3 Para montar o algoritmo proposto, faremos três perguntas: a) Quais são os dados de entrada? R: Os dados de entrada são P1, P2 e P3 b) Qual será o processamento a ser utilizado? R: O procedimento será somar todos os dados de entrada e dividilos por 3: (P1 + P2 + P3)/3 c) Quais serão os dados de saída? R: O dado de saída será a média final Algoritmo: Calcular Média do aluno Receber a nota da prova1 Receber a nota de prova2 Receber a nota de prova3 Somar todas as notas e dividir o resultado por 3 Mostrar o resultado da divisão Teste do Algoritmo Após desenvolver um algoritmo ele deverá sempre ser testado. Deve-se seguir as instruções do algoritmo de maneira precisa para verificar se o procedimento utilizado está correcto ou não. Exemplo: Nota da Prova 1 Nota da Prova 2 Nota da Prova 3 Utilizar a tabela abaixo: P1 P2 P3 Média Exercícios Identifique os dados de entrada, processamento e saída no algoritmo seguinte Receba código do produto Receba valor do produto (valor unitário) Receba quantidade do produto Calcule o valor total (Quantidade * Valor do produto) Mostre o código do produto e o valor total Faça um algoritmo para “Calcular o stock médio de uma peça”, sendo que STOCKMÉDIO = (QUANTIDADE MÍNIMA + QUANTIDADE MÁXIMA) /2 Teste o algoritmo anterior com dados à sua escolha. Formas de Apresentação dos Algoritmos para Computador Pseudocódigo Os algoritmos podem ser descritos em uma linguagem chamada pseudocódigo. Os algoritmos são independentes das linguagens de programação. Ao contrário de uma linguagem de programação não existe um formalismo rígido de como deve ser escrito o algoritmo. O algoritmo deve ser fácil de se interpretar e fácil de codificar. O algoritmo deve ser o intermediário entre a linguagem falada e a linguagem de programação. A pseudolinguagem pode ser visto como a tentativa de fundir a expressividade da linguagem natural e o rigor lógico de esquemas como o fluxograma. A pseudolinguagem permite a descrição do algoritmo de uma forma linear, fácil de ler e fácil de compreender. Exemplo de pseudocódigo Algoritmo circunferência [Este algoritmo dá as características de uma circunferência] Dados raio: inteiro área, perímetro: reais PI 3,14159 Início Ler (raio) área PI x raio2 perímetro 2 x PI x raio Escrever (área, perímetro) Fim Pseudocódigo Num algoritmo, podemos definir três secções: Cabeçalho • É dado o nome ao algoritmo. Começa com a palavra "Algoritmo". Declarações • Descrição das variáveis usadas. Corpo • Contém a sequência dos passos (acções) do algoritmo. Inicia-se com a palavra "Início“ e termina com "Fim". Comentários • Cada passo do algoritmo pode iniciar com um comentário entre dois parênteses rectos. Estes comentários dão uma breve descrição do passo ou dum grupo de passos seguintes. • Os comentários são uma parte importante do algoritmo. Eles servem para tornar a leitura, do algoritmo, mais fácil e clara. Fluxogramas É uma forma padronizada e eficaz para representar os passos lógicos de um determinado processamento. Define uma sequência de símbolos, com significado bem definido. Sua principal função é a de facilitar a visualização dos passos de um processamento. Actualmente, a sua utilização restringe-se a um apoio complementar na documentação do algoritmo, valendo pela vantagem gráfica da apresentação das interligações. Alguns Símbolos Usados na Construção de Fluxogramas Processamento em geral (ex. soma de dois números) Leitura/Escrita de dados (escrever a nota da prova 1) Início/Fim de processamento (ex. inicio do algoritmo) Conector de fluxos (Ligação entre partes do fluxograma) Decisão condicional Escolha múltipla Subprograma Linha de fluxo Exemplo de Fluxograma Início Ler valor 1 Ler valor 2 Valor 1 > Valor 2 No Valor 1 < Valor 2 Yes Yes Escrever valor 1 é maior Escrever valor 2 é maior Rotina Adeus Fim No Escrever valores iguais Algoritmo Comparar Dados valor1, valor2: Inteiros frase: Caracteres Início Ler (valor1, valor2) Se valor1 > valor2 então frase “valor1 é maior” Senão Se valor1 < valor2 então frase “valor2 é maior”” Senão frase “valores iguais” Fim se Fim se Escrever (frase) Chamar Rotina Adeus Fim Abordagem Estruturada e Concepção Top-Down Numa linguagem estruturada como por ex. o Pascal distingue-se a parte onde são declarados os dados e o corpo com as instruções do programa – parte declarativa e parte operativa. A abordagem top-down procura identificar os pontos essenciais da questão; parte-se dos pontos mais gerais para os seus componentes mais particulares, em níveis sucessivos mais concretos, até ao nível de pormenor desejado. Elementos Fundamentais de Programação Constantes, Variáveis e Tipos de Dados Variáveis e constantes são os elementos básicos que um programa manipula. Uma variável é um espaço reservado na memória do computador para armazenar um tipo de dado determinado. Variáveis devem receber identificadores (nomes) para poderem ser referenciadas e modificadas quando necessário. Um programa deve conter declarações que especificam de que tipo são as variáveis que ele utilizará e por vezes um valor inicial. Tipos de dados podem ser por exemplo: inteiros, reais, caracteres, lógico, etc. As expressões combinam variáveis e constantes para calcular novos valores. Constantes Constante é um determinado valor fixo que não se modifica ao longo do tempo, durante a execução de um programa. Conforme o seu tipo, a constante é classificada como sendo numérica, lógica e literal (caracteres). Variáveis Variável é a representação simbólica dos elementos de um certo conjunto. Cada variável corresponde a uma posição de memória, cujo conteúdo pode se alterado ao longo do tempo durante a execução de um programa. Embora uma variável possa assumir diferentes valores, ela só pode armazenar um valor a cada instante. Tipos de Dados As variáveis e as constantes podem ser basicamente de quatro tipos: numéricas, carácter (caracteres individuais), cadeias de caracteres (strings ou cadeias alfanuméricas) e lógicas (ou booleanas). Numéricas: específicas para armazenar números, que posteriormente poderão ser utilizados para cálculos. Podem ser ainda classificadas como Inteiras ou Reais. As variáveis do tipo inteiro são para armazenamento de números inteiros e as reais são para o armazenamento de números que possuam casas decimais. Carácter (caracteres individuais): Específicas para armazenar um carácter. Os caracteres disponíveis são geralmente os caracteres da Tabela ASCII. Este tipo de dado pode assumir qualquer carácter da referida Tabela ASCII, mas apenas um de cada vez. Cadeias de caracteres (strings ou cadeias alfanuméricas): Específicas para armazenar uma cadeia de caracteres alfanuméricos (adequados ao manuseamento de texto). No Pascal, o carácter apóstrofo (‘) (também chamado “plica”) delimita uma cadeia de caracteres (Ex: ‘Bom trabalho!’ ). Lógicas ou booleanas: Armazenam somente dados lógicos que podem ser Verdadeiro (“True”) ou Falso (“False”). Exemplos em Pseudocódigo Produto * Quantidade Fim: lógico Nome: caracteres[20] Preço 23,5 Casar Verdadeiro Saltar 1 Op: carácter Idade: inteiro Média, Nota1, Nota2: reais Total Operadores Os operadores são meios pelo qual incrementamos, decrementamos, comparamos e avaliamos dados dentro do computador. Temos três tipos de operadores: Operadores Aritméticos Operadores Relacionais Operadores Lógicos Operadores aritméticos Os operadores aritméticos são os utilizados para obter resultados numéricos. Além da adição, subtracção, multiplicação e divisão, podem utilizar também o operador para exponenciação. Alguns símbolos para os operadores aritméticos são: + Adição - Subtracção / Divisão Mod div Resto da divisão (Resto) Divisão inteira (Quociente) * multiplicação ^ potenciação Operadores de comparação ou relacionais Os operadores relacionais são utilizados para comparar String de caracteres e números. Os valores a serem comparados podem ser caracteres ou variáveis. Estes operadores sempre retornam valores lógicos (Verdadeiro ou Falso / True ou False) Para estabelecer prioridades no que diz respeito a qual operação executar primeiro, utilize os parênteses. Os operadores relacionais são: = <> Igual a Diferente de >= Maior que Menor que Maior ou igual a <= Menor ou igual a > < Operadores lógicos ou booleanos Os operadores lógicos servem para combinar resultados de expressões, retornando se o resultado final é verdadeiro ou falso. Os operadores lógicos são: OU E NÃO NÃO OU OR AND NOT XOR a) Operador AND: TRUE AND TRUE => TRUE TRUE AND FALSE => FALSE FALSE AND TRUE => FALSE FALSE AND FALSE => FALSE b) Operador OR: TRUE OR TRUE TRUE OR FALSE FALSE OR TRUE FALSE OR FALSE => TRUE => TRUE => TRUE => FALSE c) Operador NOT: NOT TRUE NOT FALSE => FALSE => TRUE d) Operador XOR: TRUE XOR TRUE TRUE XOR FALSE FALSE XOR TRUE FALSE XOR FALSE => FALSE => TRUE => TRUE => FALSE Instruções Básicas Comando de escrita: Comado de leitura: Escrever(“Paula”) Escrever(“A minha idade é: “, IDADE) Ler(NOME) Ler(IDADE, NOME) Instruções de atribuição A VALOR NUM 3 A3+B/2 CIDADE “Lisboa”