ALGORITMOS I Procedimentos e Funções Auxiliadora Freire Fonte: Guimarães, A de M - Algoritmos e estruturas de dados Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 1 Yuri Lacerda (http://sites.google.com/site/yurilacerda/disciplinas/algoritmos-e-programao-i) ALGORITMOS I MÓDULOS • São blocos de instruções que realizam tarefas específicas. • Carregado uma vez e pode ser executado quantas vezes for necessário. • Podem ser usadas para economizar espaço e tempo de programação já que podem ser usadas várias vezes num mesmo programa. Auxiliadora Freire Fonte: Guimarães, A de M - Algoritmos e estruturas de dados Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 2 Yuri Lacerda (http://sites.google.com/site/yurilacerda/disciplinas/algoritmos-e-programao-i) ALGORITMOS I MÓDULOS • Cada módulo, além de ter acesso às variáveis do programa que o chamou (são as variáveis globais), pode ter suas próprias variáveis (são as variáveis locais), que existem apenas durante sua chamada. • Ao se chamar um módulo, também é possível passar-lhe determinadas informações que recebem o nome de parâmetros. Auxiliadora Freire Fonte: Guimarães, A de M - Algoritmos e estruturas de dados Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 3 Yuri Lacerda (http://sites.google.com/site/yurilacerda/disciplinas/algoritmos-e-programao-i) ALGORITMOS I MÓDULOS Vantagens • Dividir e estruturar um algoritmo em partes logicamente coerentes; • Facilidade de testar os trechos em separado; • Evitar repetição do código-fonte; • Maior legibilidade de um algoritmo. Auxiliadora Freire Fonte: Guimarães, A de M - Algoritmos e estruturas de dados Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 4 Yuri Lacerda (http://sites.google.com/site/yurilacerda/disciplinas/algoritmos-e-programao-i) ALGORITMOS I Procedimentos e Funções Tipos de subprogramas: Procedimentos - são estruturas que agrupam um conjunto de comandos, que são executados quando o procedimento é chamado. Funções - tipo especial de procedimento onde depois de executada a chamada, o valor calculado é retornado no nome da função que passa a ser uma variável da expressão. Função Recursiva – são aquelas que chamam a si próprias. Auxiliadora Freire Fonte: Guimarães, A de M - Algoritmos e estruturas de dados Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 5 Yuri Lacerda (http://sites.google.com/site/yurilacerda/disciplinas/algoritmos-e-programao-i) ALGORITMOS I Procedimentos e Funções • Funções e procedimentos permitem modularizar algoritmos. • As funções são chamados dentro do corpo do programa principal como se fossem comandos. Após seu término, a execução continua a partir do ponto onde foi chamado. • Cada função, tem acesso às variáveis do programa que o chamou (são as variáveis globais), e tem acesso as suas próprias variáveis (são as variáveis locais), que existem apenas durante sua chamada. Auxiliadora Freire Fonte: Guimarães, A de M - Algoritmos e estruturas de dados Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 6 Yuri Lacerda (http://sites.google.com/site/yurilacerda/disciplinas/algoritmos-e-programao-i) ALGORITMOS I Funções Recursivas Uma função recursiva possui: • Um passo básico (ou mais) cujo resultado é imediatamente conhecido. • Um passo recursivo tenta resolver um subproblema do problema inicial. A execução de uma função recursiva consiste em resolver subproblemas sucessivamente mais simples até se atingir o caso mais simples de todos, cujo resultado é imediato. Auxiliadora Freire Fonte: Guimarães, A de M - Algoritmos e estruturas de dados Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 7 Yuri Lacerda (http://sites.google.com/site/yurilacerda/disciplinas/algoritmos-e-programao-i) ALGORITMOS I Procedimentos e Funções • Variável global é vista pelo programa principal e por todos os módulos pertencentes a ele. • Variável local é visível ao módulo em que ela foi declarada e aos módulos hierarquicamente inferiores. • Ao se chamar um módulo, também é possível passar-lhe determinadas informações que recebem o nome de parâmetros. • Parâmetros - são valores que, na linha de chamada, ficam entre os parênteses e que estão separados por vírgulas. Auxiliadora Freire Fonte: Guimarães, A de M - Algoritmos e estruturas de dados Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 8 Yuri Lacerda (http://sites.google.com/site/yurilacerda/disciplinas/algoritmos-e-programao-i) ALGORITMOS I Procedimentos e Funções Declaração de um procedimento: procedimento <nome-de-procedimento> [(<seqüência-de-declarações-de-parâmetros>)] var // Seção de Declarações Internas inicio // Seção de Comandos fimprocedimento Auxiliadora Freire Fonte: Guimarães, A de M - Algoritmos e estruturas de dados Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 9 Yuri Lacerda (http://sites.google.com/site/yurilacerda/disciplinas/algoritmos-e-programao-i) ALGORITMOS I Exemplo: Procedimento 1. Retornar soma de dois números ALGORITMO “SOMA DOIS NUMEROS” PROCEDIMENTO soma ( a, b: INTEIRO) inicio result <- a + b escreval("Resultado", result) FIM_PROCEDIMENTO Auxiliadora Freire Fonte: Guimarães, A de M - Algoritmos e estruturas de dados Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 10 Yuri Lacerda (http://sites.google.com/site/yurilacerda/disciplinas/algoritmos-e-programao-i) ALGORITMOS I Exemplo: Procedimento 1. Retornar soma de dois números (CONT) // Programa principal var x,y, result : inteiro INICIO escreva ("entre com dois numeros: ") LEIA (x,y) soma(x,y) FIMALGORITMO Auxiliadora Freire Fonte: Guimarães, A de M - Algoritmos e estruturas de dados Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 11 Yuri Lacerda (http://sites.google.com/site/yurilacerda/disciplinas/algoritmos-e-programao-i) ALGORITMOS I Exemplo: Procedimento –Ling. C 1. Retornar soma de dois números ALGORITMO “SOMA DOIS NUMEROS” LING. C #include <stdio.h> #include <stdlib.h> int result; // variável global PROCEDIMENTO soma ( a, b: INTEIRO) inicio // Declaração do Procedimento void soma ( int a, int b ) int result ; { result <- a + b escreval ("Resultado", result) result = a + b; printf(“Resultado %d ", result); FIM_PROCEDIMENTO Auxiliadora Freire Fonte: Guimarães, A de M - Algoritmos e estruturas deFIM_PROCEDIMENTO dados Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 12 Yuri Lacerda (http://sites.google.com/site/yurilacerda/disciplinas/algoritmos-e-programao-i) } // ALGORITMOS I Exemplo: Procedimento – Ling C 1. Chama o proc. soma de dois números (CONT) // Programa principal var x,y, result : inteiro INICIO int main() { int x,y; escreva ("entre com dois numeros: ") LEIA (x,y) printf("entre com dois numeros: "); scanf("%d %d", &x,&y); soma(x,y) soma(x,y); escreval ("Resultado", result) FIMALGORITMO system("pause"); } Auxiliadora Freire Fonte: Guimarães, A de M - Algoritmos e estruturas de dados Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 13 Yuri Lacerda (http://sites.google.com/site/yurilacerda/disciplinas/algoritmos-e-programao-i) ALGORITMOS I Procedimentos e Funções Declaração de uma função: funcao <nome-de-função> [(<seqüência-dedeclarações-de-parâmetros>)]: <tipo-de-dado> var // Seção de Declarações Internas inicio // Seção de Comandos fimfuncao Auxiliadora Freire Fonte: Guimarães, A de M - Algoritmos e estruturas de dados Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 14 Yuri Lacerda (http://sites.google.com/site/yurilacerda/disciplinas/algoritmos-e-programao-i) ALGORITMOS I Exemplo: Função 1. Retornar soma de dois números ALGORITMO (função) Declaração da função funcao soma: inteiro var result: inteiro inicio result <- x + y retorne result fimfuncao Auxiliadora Freire Fonte: Guimarães, A de M - Algoritmos e estruturas de dados Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 15 Yuri Lacerda (http://sites.google.com/site/yurilacerda/disciplinas/algoritmos-e-programao-i) ALGORITMOS I Exemplo: Função 1. Retornar soma de dois números (cont) ALGORITMO (prog. Princ) // Programa principal VAR x,y: INTEIRO INICIO ESCREVA ("entre com dois numeros: ") LEIA (x,y) ESCREVA ("Resultado", soma) FIMALGORITMO Auxiliadora Freire Fonte: Guimarães, A de M - Algoritmos e estruturas de dados Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 16 Yuri Lacerda (http://sites.google.com/site/yurilacerda/disciplinas/algoritmos-e-programao-i) ALGORITMOS I Exemplo: Função – Ling C 1. Retornar soma de dois números ALGORITMO (função) LING C #include <stdio.h> #include <stdlib.h> int result; // VARIÁVEL GLOBAL Declaração da função funcao soma: inteiro var result: inteiro inicio int soma (int a, int b) { int result; // INICIO result <- x + y result = a + b; retorne result return result; fimfuncao Auxiliadora Freire } // FIM DA FUNÇÃO SOMA Fonte: Guimarães, A de M - Algoritmos e estruturas de dados Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 17 Yuri Lacerda (http://sites.google.com/site/yurilacerda/disciplinas/algoritmos-e-programao-i) ALGORITMOS I Exemplo: Função – Ling C 1. Retornar soma de dois números (cont) ALGORITMO (prog. Princ) // Programa principal VAR x,y: INTEIRO INICIO LING C int main() int x,y; // INICIO ESCREVA ("entre com dois numeros: ") printf("entre com dois numeros: "); LEIA (x,y) scanf("%d %d", &x,&y); ESCREVA ("Resultado", soma) printf("soma %d \n", soma(x,y)); FIMALGORITMO system("pause"); } // FIMALGORITMO Auxiliadora Freire Fonte: Guimarães, A de M - Algoritmos e estruturas de dados Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 18 Yuri Lacerda (http://sites.google.com/site/yurilacerda/disciplinas/algoritmos-e-programao-i) Exercício de fixação – Lista 1 Utilizando funções - Faça os algoritmos 1 - Escreva uma função para calcular se um dado inteiro é par ou ímpar. 2 - Escreva uma função para calcular o fatorial de um dado inteiro. 3 – Escreva uma função que retorne o menor número de um vetor (números reais); 4 - Implemente uma calculadora (números reais) com suas funções básicas: soma, subtração, multiplicação e divisão. 5 – Escreva uma função para calcular a distancia entre dois pontos (x1, y1) e (x2, y2). Obs.: os valores de x1, x2, y1 e y2 são inteiros, mas a saída é ponto-flutuante. Auxiliadora Freire Fonte: Guimarães, A de M - Algoritmos e estruturas de dados Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 19 Yuri Lacerda (http://sites.google.com/site/yurilacerda/disciplinas/algoritmos-e-programao-i) Exercício de fixação – Lista 1 Utilizando funções - Faça os algoritmos 6 - Escreva uma função de potenciação, em que os dados de entrada são: base e expoente (inteiros). 7 - Escreva uma função recursiva para calcular o fatorial de um dado inteiro. 8 - O que faz a seguinte função recursiva ? SE ( b = 0 ) entao a SENAO a <- a+1 b <- b-1 FIMSE Auxiliadora Freire Fonte: Guimarães, A de M - Algoritmos e estruturas de dados Jaime Evaristo (http://professor.ic.ufal.br/jaime/) Slide 20 Yuri Lacerda (http://sites.google.com/site/yurilacerda/disciplinas/algoritmos-e-programao-i)