Professora: Flávia Balbino da Costa LINGUAGEM DE PROGRAMAÇÃO I PARTE IV CONTEÚDO PROGRAMÁTICO: Introdução à Programação Estrutura de um algoritmo Operadores e expressões Estruturas de Decisão Estruturas de Repetição Procedimentos e Funções PROCEDIMENTOS E FUNÇÕES Com a utilização de Sub-rotinas é possível dividir um problema grande em problemas menores. Dessa forma, podemos ter algoritmos mais simples com sub-rotinas. A sub- rotina serve para modularizar um programa. Como exemplo, em Pascal temos algumas sub-rotinas já existentes: CLRSCR (sub-rotina que “limpa” a tela) e Readkey (sub-rotina que ler qualquer caracter do teclado). MÉTODOS: Método de Refinamento sucessivo - É o processo de dividir sub-rotinas em outras. Método Top-Down- É sabido que a aplicação de sub-rotinas (módulos de programas) facilita a programação. Porém, a utilização de sub-rotinas deverá ser feita com a aplicação do método Top-Down. Este método se caracteriza por: MÉTODO TOP-DOWN: 1) Antes de iniciar a construção de algoritmo, o programador deverá ter em mente as principais tarefas que deverá executar; 2) Conhecidas todas as tarefas a serem executadas, tem-se em mente como deverá ser o programa principal, que vai controlar todas as sub-rotinas; 3) Definido o programa principal, é iniciado o processo de detalhamento de cada sub-rotina. VANTAGENS: 1) Cada módulo (sub-rotina) é efetuado em separado. Desta forma, cada um pode ser testado separadamente, garantindo que o programa completo esteja sem erro ao seu término. 2) Podemos repetir módulos em outros programas. APLICAÇÃO PRÁTICA DO USO DE SUB-ROTINAS: 1) Procedimento – Um bloco de algoritmo (Programa), com início e fim, que será identificado por um nome, por meio do qual será referenciado em qualquer parte do programa principal ou do programa chamador da sub-rotina. PROCEDIMENTOS Sintaxe: Procedimento <nome do procedimento> Var <variáveis> Início <comandos> Fim PROCEDIMENTOS Exemplo: Criar um algoritmo que apresente um menu de seleções no programa principal. Este menu dará ao usuário a possibilidade de escolher a adição, a subtração de duas variáveis ou o fim do programa. Escolhida a opção, deverá ser solicitada a entrada de dois números e processada a operação, deverá ser exibido o resultado. Solução: Algoritmo Calculo Var Opcao: Caracter Procedimento Rot_Soma Var A, B, R: Real Inicio Escreva (“Rotina de Soma”) Escreva (“Entre com o valor de A:”) Leia (A) Escreva (“Entre com o valor de B:”) Leia (B) R←A+B Escreva (“A + B:”, R) Fim Solução: Procedimento Rot_Subtracao Var A, B, R: Real Inicio Escreva (“Rotina de Subtração”) Escreva (“Entre com o valor de A:”) Leia (A) Escreva (“Entre com o valor de B:”) Leia (B) R←A -B Escreva (“A - B:”, R) Fim Solução: Início Opcao ← “0” Enquanto (Opcao<> “3”) faça Escreva (“1 – Adição”) Escreva (“2 – Subtração”) Escreva (“3 – Fim do Programa”) Escreva (“Escolha uma opção:”) Leia (Opcao) Se (Opcao=“1”) então Rot_Soma Senão Se (Opcao=“2”) então Rot_Subtracao FimSe FimSe FimEnquanto FimAlgoritmo VARIÁVEIS GLOBAIS E LOCAIS: No algoritmo anterior foram utilizadas variáveis dentro das subrotinas (variáveis A, B e R) e fora (no caso a variável opcao). Variável Global – quando é declarada no início do algoritmo principal, podendo ser utilizada em qualquer sub-rotina do algoritmo principal. Esta variável é visível a todas as sub-rotinas subordinadas ao algoritmo principal. VARIÁVEIS GLOBAIS E LOCAIS: Variável Local – quando é declarada dentro de uma sub-rotina e é válida somente dentro da sub-rotina à qual está declarada. Desta forma, as demais sub-rotinas e o algoritmo principal não poderão fazer uso destas variáveis como acontece com as variáveis globais, pois não visualizam a existência delas. ESCOPO DE VARIÁVEIS: O escopo de uma variável está vinculado a sua visibilidade (global e local) em relação às sub-rotinas de um programa, sendo que a sua visibilidade está relacionada à sua hierarquia. Variáveis A e B Variáveis A, B e C Variáveis A, B, C e E Variáveis A, B, C e F Variáveis A, B e D Variáveis A, B, D e G Programa Principal Var A, B: Inteiro Rotina 1 Var C: Inteiro Pro Rotina 1.1 Var E: Inteiro Rotina 1.2 Var F: Inteiro Rotina 2 Var D: Inteiro Rotina 2.1 Var G: Inteiro UTILIZAÇÃO DE PARÂMETROS: Finalidade – Serve como um canal de comunicação bidirecional entre uma sub-rotina e o programa principal ou uma sub-rotina hierarquicamente de nível mais alto. Desta forma, é possível passar valores entre um programa principal e uma sub-rotina (ou entre sub-rotinas) utilizando parâmetros que podem ser: 1) Formais; 2) Reais. PARÂMETROS FORMAIS E REAIS: Parâmetros Formais – Quando forem declarados por meio de variáveis juntamente com a identificação da sub-rotina. Parâmetros Reais – São considerados parâmetros reais, quando estes substituem os parâmetros formais, quando da utilização da sub-rotina por um programa principal ou por uma sub-rotina chamadora. Programa Calculo Sub-rotina Procedimento Soma (A, B: Inteiro) Var Z: Inteiro Início Z←A+B Escreva (Z) Fim Var Programa Principal X,Y: Inteiro Início Leia (X) Leia (Y) Soma (X, Y) FimAlgoritmo Parâmetros Reais Parâmetros Formais PASSAGEM DE PARÂMETROS: Ocorre quando é feito uma substituição dos parâmetros formais pelos reais no momento da execução da sub-rotina. parâmetros serão passados por variáveis e duas formas: 1) Por Valor 2) Por Referência Estes PASSAGEM DE PARÂMETROS POR VALOR: Caracteriza-se pela não alteração do valor do parâmetro real quando o parâmetro formal é manipulado dentro da sub-rotina. Em outras palavras, o valor passado pelo parâmetro real é copiado para o parâmetro formal, que no caso assume o papel de variável local da sub-rotina. Desta forma, qualquer modificação que ocorra na variável local afetará o parâmetro real correspondente. da sub-rotina não PASSAGEM DE PARÂMETROS POR VALOR: Dicas: 1) O processamento é executado dentro da sub-rotina; 2) O resultado fica “preso” na sub-rotina; 3) É somente para entrada de dados da sub-rotina. Algoritmo Fatorial Procedimento Fatorial (N:Inteiro) Var Parâmetro Formal i,fat: Inteiro Início Fat ← 1 Para i de 1 até N passo 1 faça Fat ← Fat * i FimPara Escreva (Fat) Passagem por Fim valor Var A: Inteiro Início Escreva (“Fatorial de que número:?”) Leia (A) Fatorial (A) Parâmetro Real FimAlgoritmo PASSAGEM DE PARÂMETROS POR REFERÊNCIA: Caracteriza-se pela ocorrência da alteração do valor do parâmetro real quando o parâmetro formal é manipulado dentro da sub-rotina. DICAS: Qualquer modificação no parâmetro formal implica modificação no parâmetro real correspondente; A alteração efetuada é desenvolvida para a rotina chamadora; Serve para que se tenha saída de um determinado valor de dentro de uma sub-rotina. Algoritmo Calc_Fatorial2 Procedimento Fatorial (N:Inteiro, Var Fat: Inteiro) Var i: Inteiro Início Fat ← 1 Para i de 1 até N passo 1 faça Fat ← Fat * i FimPara Passagem por Fim valor (Entrada) Var A, B: Inteiro Início Escreva (“Fatorial de que número:?”) Leia (A) Fatorial (A, B) Escreva (B) FimAlgoritmo OBS1: Não foi preciso declarar Fat dentro da sub-rotina, pois esta foi declarada no enunciado dela. Passagem por referência (Saída) OBS2: No enunciado da sub-rotina, entende-se que tudo que está depois de Var será a variável de passagem de parâmetro por referência. Exemplo: 1. Faça um algoritmo que tenha três procedimentos que façam os seguintes cálculos: Cubo de um número; Fatorial de um número; Verifique se este número é par, ímpar ou zero. Utilize a técnica de passagem de parâmetros por valor (entrada do número) e por referência (saída: cubo, fatorial e mensagem). Algoritmo Exemplo Procedimento Calculo (X:Inteiro, Var Cubo, Fat: Inteiro, Var Mens: Literal) Var R, I: Inteiro Início Cubo ← X * X * X Fat ← 1 Para I de 1 até X passo 1 faça Fat ← Fat * I FimPara Se (X = 0) então M ← ‘Número zero’ Senão R ← X – 2 * (X / 2) Se (R = 0) então M ← ‘Número par’ Senão M ← ‘Número ímpar’ FimSe FimSe Fim Continuação do Algoritmo Exemplo Var Num: Inteiro C, F: Real M: Literal Início Escreva (“Digite um número:”) Leia (Num) Calculo (Num, C, F, M) Escreva (‘Cubo:’, C) Escreva (‘Fatorial:’, F) Escreva (‘Mensagem:’, M) FimAlgoritmo APLICAÇÃO PRÁTICA DO USO DE SUB-ROTINAS: 2) Função – Sub-rotinas como os procedimentos, contendo início e fim e sendo identificado por um nome, por meio do qual também será referenciada em qualquer parte do programa. FUNÇÕES Sintaxe: Função <nome da função> (Parâmetros):<tipo de função> Var <variáveis> Início <comandos> Fim FUNÇÕES Observação: A função sempre retorna um determinado valor, que é retornado no próprio nome da função. Exemplo: Faça um algoritmo que tenha uma função que calcule o fatorial de um número. Algoritmo Calc_Fatorial3 Função Fatorial (N:Inteiro): Inteiro Var i, Fat: Inteiro Início Fat ← 1 Para i de 1 até N passo 1 faça Fat ← Fat * i FimPara Fatorial ← Fat Fim Var A: Inteiro Início Escreva (“Fatorial de que número:?”) Leia (A) Escreva (‘O fatorial é:’, Fatorial (A)) FimAlgoritmo Vamos treinar Procedimentos e Funções? Faça um algoritmo que faça uso de uma sub-rotina de função que retorne o valor da soma de dois números fornecidos como parâmetros. 2. Faça um algoritmo com as funções: par ou ímpar ou zero, cubo e fatorial. 3. Construa um algoritmo que faça a soma entre dois números informados pelo usuário. A soma tem que ser realizada por uma sub-rotina (Procedimento ou Função) e seu valor retornado ao Programa Principal. Exemplo: números informados: 2 e 5 Realizado: 2 + 3 + 4 + 5 = 14 1. Vamos treinar Procedimentos e Funções? 4. 5. 6. Desenvolva um algoritmo que crie uma sub-rotina para calcular o valor de uma potência de um número qualquer. Por exemplo, se for mencionado no programa principal a função potencia(2,3), deverá ser calculado 23 = 8. Este valor deverá ser retornado ao Programa Principal. Faça um algoritmo que tenha um procedimento que receba três números inteiros e retorne o maior deles. Faça um algoritmo que tenha uma função que verifica se um valor específico está dentro do intervalo entre dois valores digitados pelo usuário. Caso esteja contido no intervalo, a função deverá retornar a mensagem: “Está contido!”, caso contrário, a função retornará: “Não está contido!”.