Algop - aula 09
-
Upload
thiago-toscano-ferrari -
Category
Engineering
-
view
98 -
download
3
Transcript of Algop - aula 09
![Page 2: Algop - aula 09](https://reader035.fdocumentos.com/reader035/viewer/2022062220/55cb306dbb61eba1248b47ba/html5/thumbnails/2.jpg)
SubprogramaçãoSubprogramação A subprogramação é uma ferramenta
que contribui com a tarefa de programar:
Favorecendo a estruturação do programa; Facilitando a correção do programa; Facilitando a modificação do programa; Melhorando a legibilidade do programa; Divisão do problema a ser resolvido em
partes (modularização).
![Page 3: Algop - aula 09](https://reader035.fdocumentos.com/reader035/viewer/2022062220/55cb306dbb61eba1248b47ba/html5/thumbnails/3.jpg)
SubprogramaçãoSubprogramação Com a modularização de um programa,
as partes que o compõem podem ser desenvolvidas por diferentes equipes;
Para isto deve-se estabelecer antes padrões de programação;
Deve-se definir também que dependência haverá entre os vários subprogramas.
![Page 4: Algop - aula 09](https://reader035.fdocumentos.com/reader035/viewer/2022062220/55cb306dbb61eba1248b47ba/html5/thumbnails/4.jpg)
SubprogramaçãoSubprogramação A dependência entre os sub-programas
deve ser a mínima possível;
Um subprograma é um grupo de instruções arranjadas de forma lógica, que executem uma ação bem definida;
A subprogramação tende a diminuir a complexidade da resolução de um problema já que, por um instante, a atenção é voltada apenas para uma parte do problema;
![Page 5: Algop - aula 09](https://reader035.fdocumentos.com/reader035/viewer/2022062220/55cb306dbb61eba1248b47ba/html5/thumbnails/5.jpg)
SubprogramaçãoSubprogramação As linguagens de programação
oferecem algum tipo de suporte à subprogramação.
Exemplos: Algol: bloco; FORTRAN: subrotina; Modula: co-rotinas; ADA: tarefas; C: funções; Pascal: procedimentos e funções.
![Page 6: Algop - aula 09](https://reader035.fdocumentos.com/reader035/viewer/2022062220/55cb306dbb61eba1248b47ba/html5/thumbnails/6.jpg)
SubprogramaçãoSubprogramação Procedimentos
Procedimento é uma forma de criar um sub-programa;
Quando um determinado conjunto de instruções tiver que ser repetido dentro da solução de um problema, é conveniente colocá-lo dentro de um procedimento;
Para se criar um procedimento é necessário:
Um identificador (o nome do procedimento);
Uma lista de parâmetros (que possibilitam a comunicação entre o programa principal e o procedimento);
As ações a serem executadas (que formam o corpo do procedimento);
![Page 7: Algop - aula 09](https://reader035.fdocumentos.com/reader035/viewer/2022062220/55cb306dbb61eba1248b47ba/html5/thumbnails/7.jpg)
Funções
Função também é uma forma de criar um sub-programa;
Procedimento e Função podem ambos retornar valores através de seus parâmetros;
Entretanto, a função deve obrigatoriamente retornar um valor processado através do seu nome identificador;
Uma função deve ser ativada em um contexto de expressão.
SubprogramaçãoSubprogramação
![Page 8: Algop - aula 09](https://reader035.fdocumentos.com/reader035/viewer/2022062220/55cb306dbb61eba1248b47ba/html5/thumbnails/8.jpg)
Existem problemas mais adequados ao uso de funções, enquanto outros adequam-se melhor ao uso de procedimentos;
Tudo que um procedimento pode fazer, uma função também pode;
Dicas para escolha do tipo de subprograma:
Se o valor que é processado na unidade será reutilizado em uma expressão, existem grandes possibilidades de que uma função seja mais adequada;
Se o objetivo da unidade é apenas fazer uma mudança de estado (valor) em um ou mais objetos, adote um procedimento.
SubprogramaçãoSubprogramação
![Page 9: Algop - aula 09](https://reader035.fdocumentos.com/reader035/viewer/2022062220/55cb306dbb61eba1248b47ba/html5/thumbnails/9.jpg)
SubprogramaçãoSubprogramação
Um subprograma pode ser ativado em qualquer parte do programa (em algumas linguagens somente depois de definido);
Sua ativação se dá através do uso de seu identificador como uma instrução;
![Page 10: Algop - aula 09](https://reader035.fdocumentos.com/reader035/viewer/2022062220/55cb306dbb61eba1248b47ba/html5/thumbnails/10.jpg)
SubprogramaçãoSubprogramação
Exemplo de aplicação: Fazer um algoritmo para calcular a combinação (análise combinatória) de N elementos tomados P a P. Sabe-se que isto é possível através da seguinte expressão:
Cp=nn!
p! (n-p)!
com n p
![Page 11: Algop - aula 09](https://reader035.fdocumentos.com/reader035/viewer/2022062220/55cb306dbb61eba1248b47ba/html5/thumbnails/11.jpg)
SubprogramaçãoSubprogramação A solução deste problema pelos métodos vistos até
agora (sem o uso da subprogramação) teria N e P como argumentos de entrada e C como argumento de saída;
Seriam necessários os seguintes passos: Calcular o fatorial de N (armazenar numa variável, Calcular o fatorial de N (armazenar numa variável,
ex: FatN);ex: FatN);
Calcular o fatorial de P (armazenar numa segunda Calcular o fatorial de P (armazenar numa segunda variável, ex: FatP);variável, ex: FatP);
Calcular o fatorial de N-P (armazenar numa terceira Calcular o fatorial de N-P (armazenar numa terceira variável, ex:FatNP);variável, ex:FatNP);
E finalmente calcular a expressão: E finalmente calcular a expressão: FatN/(FatP*FatNP).FatN/(FatP*FatNP).
![Page 12: Algop - aula 09](https://reader035.fdocumentos.com/reader035/viewer/2022062220/55cb306dbb61eba1248b47ba/html5/thumbnails/12.jpg)
Subprogramação
Note que nesta solução teríamos que descrever várias vezes uma mesma seqüência de ações que são utilizadas para o cálculo do fatorial de um número;
Esta seqüência tem um comportamento padrão;
![Page 13: Algop - aula 09](https://reader035.fdocumentos.com/reader035/viewer/2022062220/55cb306dbb61eba1248b47ba/html5/thumbnails/13.jpg)
Suponha que tivéssemos à disposição um procedimento genérico, chamado FAT, para calcular o fatorial de um número qualquer:
Como poderíamos fazer istoComo poderíamos fazer isto??
Subprogramação
![Page 14: Algop - aula 09](https://reader035.fdocumentos.com/reader035/viewer/2022062220/55cb306dbb61eba1248b47ba/html5/thumbnails/14.jpg)
Função FAT (x: inteiro):inteiro;
I,Fatorial:inteiro; Inicio
Fatorial 1; Para I 1 até x Faça Fatorial Fatorial * I; Fim-Para;
FAT Fatorial;Fim;
Cor
po
Identificado
rParâmetro(s
)
Subprogramação
![Page 15: Algop - aula 09](https://reader035.fdocumentos.com/reader035/viewer/2022062220/55cb306dbb61eba1248b47ba/html5/thumbnails/15.jpg)
SubprogramaçãoSubprogramação em PASCAL
Uma subrotina é um subprograma com variáveis e comandos próprios e que, para ser executada, precisa ser chamada pelo programa principal.
Na linguagem PASCAL existem dois tipos de subrotinas:
Procedimento (procedure) Função (function)
Diferença entre elas: A função retorna um valor O procedimento não retorna valor (apenas executa
comandos);
![Page 16: Algop - aula 09](https://reader035.fdocumentos.com/reader035/viewer/2022062220/55cb306dbb61eba1248b47ba/html5/thumbnails/16.jpg)
Procedimento em PASCAL Sintaxe
procedure nome (lista-de-parâmetros);declaração de variáveis locais;
begincomandos;
end;
Exemplo:procedure Troca (var A,B: real);var aux: real;begin
aux:=A;A:=B;B:=aux;
end;
![Page 17: Algop - aula 09](https://reader035.fdocumentos.com/reader035/viewer/2022062220/55cb306dbb61eba1248b47ba/html5/thumbnails/17.jpg)
Função em PASCAL Sintaxe
function nome (lista-de-parâmetros): tipo;declaração de variáveis locais;
begincomandos;nome:=<valor a ser retornado>;
end;
Exemplo:function Hipotenusa (A,B: real): real;begin
Hipotenusa:= sqrt( sqr(A) + sqr(B) );end;
Obs: a função sqrt retorna a raiz quadrada de um valor numérico.
![Page 18: Algop - aula 09](https://reader035.fdocumentos.com/reader035/viewer/2022062220/55cb306dbb61eba1248b47ba/html5/thumbnails/18.jpg)
SUBPROGRAMAS
Em Pascal, dentro do Programa Principal, os SUBPROGRAMASSUBPROGRAMAS devem ser definidos depois da declaração das variáveis;
![Page 19: Algop - aula 09](https://reader035.fdocumentos.com/reader035/viewer/2022062220/55cb306dbb61eba1248b47ba/html5/thumbnails/19.jpg)
SUBPROGRAMAS
Dentro do Programa Principal, os SUBPROGRAMAS devem ser definidos depois da declaração das variáveis
program NOME;Relação das Unidades Utilizadas
Definição de Tipos de Dados Definição de ConstantesDeclarações de VariáveisDefinição de Funções e ProcedimentosDefinição de Funções e Procedimentos
{Programa Principal}
begin
comandos
end.
![Page 20: Algop - aula 09](https://reader035.fdocumentos.com/reader035/viewer/2022062220/55cb306dbb61eba1248b47ba/html5/thumbnails/20.jpg)
program COMBINACAO; uses crt; var N,K:integer; C:real;
function FAT(X:integer):integer; var I,P:integer; begin P:=1; for I:= 1 to X do begin P:=P*I; end; FAT := P; end;
Begin {Programa Principal} clrscr; {limpa a tela} write('FORNECA O VALOR DE N: '); readln(N); write('FORNECA O VALOR DE K: '); readln(K); C := FAT(N)/(FAT(K)*FAT(N-K)); writeln('COMBINACAO DE ',N,',',K,': ',C:5:0); readkey;end.
![Page 21: Algop - aula 09](https://reader035.fdocumentos.com/reader035/viewer/2022062220/55cb306dbb61eba1248b47ba/html5/thumbnails/21.jpg)
Exercícios 1) Escrever uma função para determinar se um número inteiro é par.
Usar a função no programa principal;
2) Faça um procedimento chamado POTENCIA que contenha dois parâmetros de entrada: o número inteiro que se deseja elevar à potência e a potência. O procedimento deve mostrar na tela o cálculo resultante de se elevar o número à potência. Faça um programa que lê dois números X,Z e usa o procedimento indicado para mostrar o cálculo de Xz;
3) Faça um subprograma para verificar se um ano é bissexto ou não. Utilize a regra: Um ano é bissexto se é divisível por 4, mas não por 100, ou
então se é divisível por 400. Exemplo: 1988 é bissexto pois é divisível por 4 e não é por 100; 2000 é
bissexto porque é divisível por 400;
4) Faça uma função que recebe um número inteiro como parâmetro de entrada e retorna verdadeiro se ele for par e falso se for ímpar;
5) Escreva uma função que recebe as 3 notas de um aluno e uma letra. Se a letra for ‘A’ a função calcula e retorna a média aritmética das notas do aluno, se for ‘P’, a sua média ponderada (pesos: 5, 3 e 2);
![Page 22: Algop - aula 09](https://reader035.fdocumentos.com/reader035/viewer/2022062220/55cb306dbb61eba1248b47ba/html5/thumbnails/22.jpg)
Exercícios 6) Faça um programa que leia dois números e mostre na tela as
seguintes opções (1-Somar; 2-Multiplicar; 3-Subtrair; 4-Sair do Programa;). Crie um procedimento que tenha como parâmetro de entrada a opção digitada e os dois números, e mostre o resultado da operação na tela. O programa deve repetir o procedimento até que o usuário digite a opção 4. Neste caso o programa finaliza sem chamar o procedimento;
7) Faça uma função que recebe a idade de uma pessoa em anos, meses e dias e retorna essa idade expressa em dias;
8) Faça uma função que verifique se um valor é perfeito ou não. Um valor é dito perfeito quando ele é igual a soma dos seus divisores excetuando ele próprio. (Ex: 6 é perfeito, 6 = 1 + 2 + 3, que são seus divisores). A função deve retornar um valor booleano;
9) Faça uma função que recebe, por parâmetro, um valor inteiro e positivo e retorna o número de divisores desse valor;
10) Dado a fórmula matemática f(x) = x2 - 3x + 5. Faça um programa que leia um número na variável X e use a função f(X) para exibir o resultado;