LA SALLE Curso Técnico em Informática Método de Programação Prof. Esp. Valter N. Silva e-mail: [email protected] Tel: (0XX) (51) 9991-5369 1 Algoritmo Produzir um programa para um computador é definir, detalhadamente, os passos lógicos que o computador precisa seguir para executar uma determinada tarefa. Só é possível informar ao computador o que fazer se tivermos uma idéia clara de como pretendemos que ele faça o que desejamos. 2 Algoritmo Está aí dificuldade de programação: mostrar que um dado problema pode ser resolvido por um conjunto seqüencial de instruções. Neste sentido, primeiro raciocinamos sobre o assunto, tentando definir com clareza os passos necessários para a solução imaginada e, por fim codificamos em uma linguagem que o computador possa entender. 3 Dentre as formas de representação de algoritmos mais conhecidas sobressaltam: Descrição Narrativa; Fluxograma Convencional; Pseudocódigo, conhecida como Linguagem estruturada ou Portugol. 4 Descrição Narrativa: Receita de bolo: Misture os ingredientes Unte a forma com manteiga Despeje a mistura na forma Se houver coco ralado então despeje sobre a mistura Leve a forma ao forno Enquanto não corar Deixe a forma no forno Retire do forno Deixe esfriar 5 Fluxograma Convencional Início Ler N1, N2 Média (N1+N2)/2 “Reprovado” Média > 7 .S. “Aprovado” .N. Fim 6 Pseudocódigo ou Linguagem Estruturada Algoritmo Média Var N1, N2, Média : real Início Leia N1, N2 Média (N1 + N2) / 2 Se Média < 7 Então Escreva “Reprovado” Senão Escreva “Aprovado” Fim_se Fim. 7 Dados Numéricos O conjunto dos números naturais é representado por N e é dado por: N = {1,2,3,4,...) Conjunto dos números inteiros. Z = { ...,-3,-2,-1,0,1,2,3,...} Conjunto de números reais. PI = 3,14159 8 Dados Numéricos Inteiros Os números inteiros são aqueles que não possuem componentes decimais ou fracionários, podendo ser positivos ou negativos. Exemplo de números inteiros: 28 – número inteiro positivo 0 – número inteiro -12 – número inteiro negativo 9 Dados Numéricos Reais Os dados de tipo real são aqueles que podem possui componentes decimais ou fracionários, e podem também ser positivos ou negativos. Exemplo de dados do tipo real: 24.01 – número real positivo com duas casas decimais 144. - número real positivo com zero casas decimais -13.3 - numero real negativo com uma casa decimal 0.0 - número real com uma casa decimal 0. - número real com zero casas decimais 10 Dados Literais (caracter) O tipo de dados literal é constituído por uma seqüência de caracteres contendo letras, dígitos e/ou símbolos especiais. Este tipo de dados é também muitas vezes chamado de alfanumérico, (0..9 – A ..Z, a .. Z) carateres especiais ( #, /, %, *, ?, ~, !, @ ...) cadeia (ou cordão) de caracteres, ou ainda, do inglês , STRING. Obs.: Os dados literais são representados nos algoritmos pela coleção de caracteres , delimitada em seu início e término com o caracteres aspas ( “ ). Exemplos: “QUANDO ?” - Literal de comprimento 8 “” - Literal de comprimento 1 “1-2+7=“ - Literal de comprimento 6 11 Dados Lógicos O tipo de dados lógico é usado para representar dois únicos valores lógicos possíveis: verdadeiro e falso. É comum encontrar referências como tipos de valores lógicos como sim/não, 1,0, true/false. (dois estados) Exemplo: .V. - valor lógico verdadeiro .F. - valor lógico falso 12 Algoritmos Seqüenciais. Consiste de comandos de atribuição de entrada e saída encadeados em uma seqüência. 1 Escrever um algoritmo que leia 3 notas de um aluno e calcule a média aritmética. Ao final escreva a média. 13 Algoritmo de notas Programa Notas Variáveis MA, N1, N2, N3: real Início Ler (N1, N2,N3) MA : = (N1+N2+N3) / 3 Escrever “Média Aritmética: “ , MA Fim do Algoritmo. 14 Exemplo 2 Faça um Algoritmo que calcule as raízes de uma equação de 2º grau, a partir dos coeficientes A,B,C fornecidos pelo usuário. 15 Algoritmo Programa calculo; Variáveis A,B, C, X1, X2 : real; Início Ler (A, B,C) X1 : = (-B+SQRT(B*B-4*A*C) / 2 * A X2 : = (-B-SQRT(B*B-4+A+C)/2*A Escrever “As Raízes: “ ,X1,X2 Fim 16 Atenção Para que um computador possa desempenhar uma tarefa é necessário que esta seja detalhada passo a passo numa forma compreensível pela máquina, utilizando aqui que se chama de programa. Neste sentido, um programa de computador nada mais é que um algoritmo escrito numa forma compreensível pelo computador. 17 Para se ter um algoritmo é necessário preciso: a) b) c) d) e) Que se tenha um número finito de passos Que cada passo esteja precisamente definido; Que existam entradas ou valores iniciais; Que existam uma ou mais saídas; Que exista uma condição de fim. 18 Elementos de um algoritmo a) b) c) d) Seqüência; Seleção; Repetição condicional; Repetição contada; 19 Tipos Primitivos de Dados A elaboração de qualquer algoritmo seria impossível se desconsiderasse as estruturas de dados envolvidos, pois todo o trabalho do computador está baseado na manipulação das informações contidas na sua memória. 20 Declaração de variáveis Var <nome da variável> : <Tipo primitivo de dados> Ou <lista de variáveis> : <Tipo primitivo de dados> Sintaxe: var idade : inteiro salario, inflacao : real endereco : caracter verdade : logico 21 Tipos de informações As informações tratadas em um algoritmo podem ser classificadas em dois tipos: Constantes Informações que não sofrem alterações com o decorrer da execução do algoritmo. Instrução de atribuição muito utilizado nos algoritmos como () e na programação em pascal (:=) Sintaxe: const nome := “Angela” mensagem := “Bom noite !” UF : = “RS” 22 Variáveis: Informações que tem a possibilidade de serem alteradas em algum instante no decorrer da execução do algoritmo ( programa). Sintaxe: var nome : caracter; salario : real; idade : inteiro; 23 Comando de atribuição Comando de atribuição <variável> := <expressão> 24 Estrutura de um algoritmo Algoritmo < nome do algoritmo > Var < declaração de variáveis > Const < declaração de constante > Inicio escrever ler Comandos testar calcular Fim. 25 Comando de entrada e saída Entrada: ler < lista de variáveis> Saída: escrever < lista de variáveis> Exemplo: Ler A, B, C calcular Escrever “A media do aluno é: “, media 26 Algoritmos Condicional. 1 Faça um algoritmo que receba 3 números reais diferentes e informe qual é o maior . Algoritmo nros; Var A, B, C : inteiro; Ler A, B e C Se A é Maior que B Então Se A é Maior que C Escrever “A é o maior” Senão Escrever “C é o maior” Fim Se Senão Então Se B é maior que C Escrever “B” é o maior” Senão Escrever “C é o maior” Fim Se Fim Se 27 Fim do Algoritmo. 2 Leia número, nome e salário atual de um funcionário. Calcule o novo salário com um reajuste de 10 %. Escreva o número, nome e salário novo ao final da leitura do registro. Algoritmo Salário Var nro : inteiro nome : Literal[30] salário : real inicio ler nro, nome, salário salário := (salário * 1.10) escrever (número, nome, salário) fim. 28 3 - Leia o ano de nascimento de uma pessoa e calcule sua idade. Caso seja maior ou igual à 21 anos exiba a seguinte mensagem: “Maior de idade” caso contrário “Menor de idade”. Algoritmo idade Var Ano_nasc: inteiro; Ano_atual: inteiro; Idade: inteiro; Inicio Ler ano_atual Ler ano_nasc Idade := (ano_atual – ano_nasc) Escrever idade Se idade >= 21 Então Escrever “Maior de idade” Senão Escrever “Menor de idade” Fim. 29 Fluxograma Exemplo: Ler salário de funcionários da empresa XYZ e conceder reajuste salarial conforme os cargos. Aos Técnicos o reajuste será de 50 %, os Gerentes 30 % e aos demais 10 %. 30 Algoritmo Programa reaj_salario; Var Salario, sal_reaj : real; Prof : literal[20]; Início; Leia salário, prof; Escolha Caso prof = “Técnico” Sal_reaj 1.5 * salário Caso prof = “Gerente” Sal_reaj 1.3 * salário Senão Sal_reaj 1.1 * salário Fim escolha Escrever “ Salario Reajuste = “ ; Sal_reaj; Fim. 31 Fluxograma seguido de algoritmo Algoritmo Início Program reaj_salario; Ler Salário var Salario, Sal_reaj : real; Prof.. Prof : literal[20]; Prof = Início; V “Técnico”. Sal_Reaj. 1.5 * Salário Leia salário, prof; Escolha Prof = “Gerente”. F V Caso prof = “Técnico” Sal_Reaj. Sal_reaj 1.3 * Salário Caso prof = “Gerente” Sal_reaj. 1.1 * Salário “Salário Reajustado”, Sal_reaj Sal_reaj 1.3 * salário; Senão Sal_reaj 1.1 * salário; Fim escolha Escrever Fim 1.5 * salário; “Salário Reajustado”, Sal_reaj; Fim. 32 Fluxograma seguido de algoritmo Início Algoritmo Média Ler N1, N2 Média (N1+N2)/2 Média > 7 .S. “Aprovado” .N. “Reprovado” Var N1, N2, Média : real Início Leia N1, N2 Média (N1 + N2) / 2 Se Média < 7 Então Escreva “Reprovado” Senão Escreva “Aprovado” Fim_se Fim. Fim 33 Exercícios 1)Desenvolver um algoritmo que leia a altura, largura e profundidade após calcule o perímetro. Programa área; Variavel A,L,P : integer; Início Escrever(‘Altura:’); ler(A); Escrever(‘Largura:’); ler(L); Escrever(‘Profundidade:’); ler(P); escrever(‘Resposta: ‘,A*L*P,’cm3); fim. 34 1) Ler 10 nº e mostre a quantidade de nº negativos e positivos. Programa ler_num; variavel X,N,POS,NEG : inteiro; início limpar tela; escrever(´Informe 10 numeros´); X:= 1; enquanto (X< 11) faça início ler(N); se (N < 0 ) então neg := neg +1 senão pos := pos + 1; fim. X:=X +1; escrever(´Numeros positivos: ´, POS); escrever(´Numeros negativos:´, NEG); fim Fim. 35 2) Digite um número que não seja negativo, caso ocorra de um ser negativo escreva-o na tela e envie esta mensagem Este número eh negativo, quando o número for positivo você enviará duas mensagens: Você digitou certo Este número não é negativo programa nro_correto; variável numero : real; início escrever(´Digite um numero não negativo´); ler(numero); se numero < 0 então início escrever(´Voce digitou : ´, numero); escrever(´Este numero eh negativo´); fim senão início escrever(´Voce digitou certo: ´, numero); escrever(´Este valor não eh negativo´); fim; 36 fim. Atenção !!! - repete o bloco de comandos até que a condição seja verdadeira; - não é necessário incluir inicio e fim para especificar o bloco de comandos pertencentes ao comando repetir; - como a condição é testada somente no final do comando, o bloco de comandos do repetir é executado pelo menos uma vez. 37 Algoritmo 1 – Conhecer dois valores (variáveis A e B); 2 - Efetuar a soma dos valores A e B e implicar o valor da soma em X; 3 – Verificar se X e maior ou igual 10, caso sim mostre X+5, senão mostre X-7. Programa ADICIONA_NUMEROS; Var X, A, B : integer; Inicio escrever(‘Informe um valor para a variável A: ‘); ler(A); escrever(‘Informe um valor para a variável B: ‘); ler(B); X := A + B; escrever(‘O resultado equivalente a: ‘); se (X >= 10) então então(X + 5) senão então(X – 7); fim. 38 Operadores Aritméticos As quatro operações básicas: + adição - subtração * multiplicação / divisão 39 Operadores Relacionais e Lógicos < menor que > maior que <= menor ou igual que >= maior ou igual que = igual a <> diferente de e; ou; não negação 40 Operadores Lógicos Existem ocasiões onde é necessário trabalhar com o relacionamento de duas ou mais condições ao mesmo tempo na mesma instrução se...então, efetuando desta forma testes múltiplos. Para estes casos é necessário trabalhar com a utilização dos operadores lógicos, também conhecidos como operadores boleanos. 41 Os operadores relacionais são três: e, ou e não. Em alguns casos, o uso de operadores lógicos evita a utilização de muitas instruções se...senão encadeadas. 42 PONTO E VÍRGULA: O ponto e vírgula no Algoritmo (Turbo Pascal) indica o fim do comando e sua presença é obrigatória. INÍCIO E FIM DE PROGRAMA: Todos os programas em Algoritmo (Turbo Pascal) devem começar e terminar desse modo: programa Exemplo; . . início . . fim. O "programa" indica o início do programa; "Exemplo" é um nome qualquer dado ao programa; “início" indica o início e ‘fim" o fim do processamento. 43 Operador Lógico: E O operador do tipo E é utilizado quando dois ou mais relacionamentos lógicos de uma determinada condição necessitam ser verdadeiros. Abaixo é apresentada a tabela verdade para este tipo de operador: Condição 1 Falsa Falsa Verdadeira Verdadeira Condição 2 Falsa Verdadeira Falsa Verdadeira Resultado Falso Falso Falso Verdadeiro 44 O operador E faz com que somente seja executada uma determinada operação se todas as condições mencionadas forem simultaneamente verdadeiras, gerando assim um resultado lógico verdadeiro. Exemplo: programa TESTA_LOGICA_E; var numero : inteiro; início escrever('Informe um número: '); ler(numero); se (numero >= 20) e (numero <= 90) então escrever('O número está na faixa de 20 a 90') senão escrever('O número está fora da faixa de 20 a 90'); fim. 45 Operador Lógico: OU O operador o tipo ou dos relacionamentos relacionamento) de verdadeiro. Abaixo é este tipo de operador: Condição 1 Falsa Verdadeira Falsa Verdadeira é utilizado quando pelo menos um lógicos (quando houver mais de um uma condição necessita ser apresentada a tabela verdade para Condição 2 Falsa Falsa Verdadeira Verdadeira Resultado Falso Verdadeiro Verdadeiro Verdadeiro 46 Exemplo: programa TESTA_LOGICA_OR; var sexo : literal; início escrever('Entre com o seu sexo: '); ler(sexo); escrever; se sexo = 'masculino' ou sexo = 'feminino' então escrever('O seu sexo ‚ válido') senão escrever('O seu sexo ‚ inválido'); fim. 47 Operador Lógico: NÃO O operador do tipo não é utilizado quando se necessita estabelecer que uma determinada condição deve não ser verdadeira ou deve não ser falsa. O operador não se caracteriza por inverter o estado lógico de uma condição. Abaixo é apresentada a tabela verdade para este tipo de operador: Condição 1 Verdadeira Falso Resultado Falso Verdadeiro 48 O operador não faz com que seja executada uma determinada operação, invertendo o resultado lógico da condição. Veja o exemplo a seguir: programa TESTA_NÃO_LOGICA; var A, B, C, X : inteiro; início; escrever('Entre um valor para a variável A: '); ler(A); escrever('Entre um valor para a variável B: '); ler(B); escrever('Entre um valor para a variável X: '); ler(X); se não (X > 5) então C := (A + B) * X senão C := (A - B) * X; escrever('O resultado da variável C corresponde a: ', C); fim. 49 Os Loopings Existem situações onde é necessário repetir um determinado trecho de um programa um número de vezes. Isto pode ser conseguido de duas formas: a primeira, onde será escrito o mesmo trecho tantas vezes quanto necessário, um tanto trabalhoso, e a Segunda forma onde poderá ser utilizado o conceito de looping. Os loopings são conhecidos também por: laços ou malhas. A principal vantagem em se utilizar o conceito de looping é que passa a ter um tamanho menor. 50 Estrutura Enquanto...faça Enquanto <(condição)> faça início <instruções para condição verdadeira> fim; 51 Algoritmo 1 – Criar uma variável para servir como contador com valor inicial 1; 2 – Enquanto o valor do contador for menor ou igual a 5, processar os passos 3, 4 e 5; 3 – Ler os valores; 4 – Efetuar o cálculo, implicando o resultado em R; 5 – Apresentar o valor calculado contido na variável R; 6 – Acrescentar o contador com mais 1; 7 – Quando contador for maior que 5 encerrar o processamento. 52 Programa LOOPING_1A; Var A, B, R, I : inteiro; início I := 1; enquanto ( I<= 5) faça início escrever(‘Entre um valor para A: ‘); ler(A); escrever(‘Entre um valor para B: ‘); ler(B); R := A + B; escrever(‘O resultado corresponde a: ‘, R); fim; fim. 53 looping Um programa que vai executar a rotina varias vezes, mas este não sabe quantas vezes ao certo deverá executar o trecho de programa. Neste caso, não seria conveniente manter um contador para controlar o looping, seria melhor que o programa fizesse ao usuário uma pergunta, solicitando se o mesmo deseja ou não continuar executando programa. 54 Algoritmo 1- Criar uma variável para ser utilizada como resposta; 2- Enquanto a resposta for sim, executar os passos 3, 4 e 5; 3- Ler os valores; 4- Efetuar o cálculo, aplicando o resultado em R; 5- Apresentar o valor calculado contido na variável R; 6- Quanto a resposta for diferente de sim, encerrar o processamento. 55 Programa LOOPING_1B; var A, B, R : inteiro; RESP : literal; início RESP := ‘SIM’; enquanto (RESP = ‘SIM’) or (RESP = ‘S’) faça início escrever(‘Entre um valor para A: ‘); ler(A); escrever(‘Entre um valor para B: ‘); ler(B); R := A + B; escrever(‘O resultado corresponde a: ‘, R); escrever(‘Deseja continuar ? ‘); ler(RESP); fim; fim. 56 Repita..Até O comando repita controla repetições de trecho de programas tal como o para. Mas há duas diferenças fundamentais que são estas: Comando: repita controla a condição de repetição após sua execução. Ele é sempre executado pelo menos uma vez. 1.O número de vezes que as linhas de programas situadas dentro do repita...até não precisa estar predefinido. Os próprios comandos situados no repita...até podem determinar a saída ou não do laço de repetição. 2.A verificação da suficiência ou não da condição de repetição é feita no fim do laço. 57 1) O programa abaixo só terminará se for digitado um número menor que zero. Programa teste1; var valor : real; início valor 0; repita escrever(‘Digite um número:’ ); ler(valor); Quando o número(valor) digitado for até valor < 0; menor que zero (número negativo), o programa terminará o laço. fim. 58 2)O programa a seguir imprime números de zero a 100. Programa Teste2; var I : real; início I 0; repita escrever( I ); I I + 1; até I > 100; fim. 59 3) Este algoritmo deverá ler 150 valores e calcular a soma deles, utilizando o comando Repita..até. Programa teste3. Var soma, x, valor : inteiro; Início Escrever (‘Digite 150 valores inteiro: ‘); Soma:= 0; X 1; Repita Ler(valor); Soma (Soma + Valor); X (X + 1); Até X > 150; Escrever (‘Soma Final dos Valores: ‘, Soma); End. 60 4) Desenvolva um algoritmo que acesse números maiores que zeros, quando for digitado um número igual a zeros ou menor o programa deverá encerrar. Programa maior_que_zero; Variável Num : inteiro; início Repetir Escreva(‘Digite um Valor:’); Ler (num) Se num > 0 então Escreva(‘Raíz Quadrada: ’, Num, ‘eh’, SQRT(num):2:2); Até num =< 0; fim. 61 Para..Faça Atenção !! A variável contadora é controlada automaticamente pelo comando PARA. Não devemos alterar o valor desta variável durante a execução do PARA. O próprio comando PARA testa a variável contadora e encerra a sua execução quando esta variável tiver o valor > que o valor final definido; 62 Para..Faça 1) Esta estrutura de repetição é utilizada quando se sabe o número de vezes em que um trecho de programa deve ser repetido. Exemplo: Programa teste; Var cont : inteiro; Início para cont := 1 até 4 faça inicio comando1; comando2; fim; Fim. 63 2) Este algoritmo deverá ler 150 valores e calcular a soma deles, utilizando o comando Para..Faça. Programa teste4; Var soma, X, valor : interiro; Início Escrever(‘Digite 150 valores inteiros: ‘); soma 0; Para X 1 até 150 faça início ler(valor); soma soma + valor; fim; Escrever (‘Soma final dos valores: ‘, soma); Fim. 64 3) Ler 10 nº e mostre a quantidade de nº negativos e positivos. Programa ler_num; variável CONT,N,POS,NEG : inteiro; início escrever(´Informe 10 números: ´); cont 0; para cont 1 até 10 faça início ler(N); se (N < 0 ) então neg := neg +1 senão pos := pos + 1; fimse fim escrever(´Números positivos..: ´, POS); escrever(´Números negativos.: ´, NEG); Fim. 65 4) Ler 05 notas a cada nota lida o algoritmo deverá exibir caso a NOTA ser igual ou superior a 7 a seguinte mensagem: ‘ Você está na Média’) caso contrário a mensagem deverá ser: ‘ Você está abaixo da Média’). Programa Medias; variável CONT,NOTA : inteiro; início escrever(´Ler notas: ´); para CONT 1 até 5 faça início ler(Nota); se (N >=7 ) então escrever(‘Você está na média’) senão escrever(‘Você está abaixo da Média’); fim; Fim. 66