Sub-algoritmos (ou Funções) Quando se deseja fazer um algoritmo cujo processo é composta por diversas etapas, costuma-se dividir o algoritmo em partes, cada uma realizando uma determinada função Cada uma destas partes é chamada de sub-algoritmo ou sub-rotina ou simplesmente Função Estruturas de um algoritmo com Funções Exemplo 1 - Chamada a uma função sem passagem de parâmetros: comando 1 comando 2 executafuncaochamada() comando n executafuncaochamada() Retorna Exemplo 2 - Chamada a uma função com passagem de um parâmetro: nomefunc: String imprimenome(nomefunc); imprimenome(string parnomefunc) escreva ( Nome recebido como parâmetro =, parnomefunc); Retorna Algoritmos e Lógica de Programação Linguagem de Programação I Página 1
Exemplo 3 - Chamada a uma função com passagem de vários parâmetros: nomefunc: String; datanascimento: Date; datanascimento = 07/05/1970; imprimedados(nomefunc, datanascimento); imprimedados(string parnomefunc, Date pardatanascimento) escreva ( Nome recebido como parâmetro =, parnomefunc); escreva ( Idade recebida como parâmetro =, pardatanascimento); Retorna Exemplo 4 - Chamada a uma função com passagem e retorno de parâmetros nomefunc: String; datanascimento: Date; idade: inteiro; datanascimento = 07/05/1970; idade = calculaidade(nomefunc, datanascimento); escreva ( Nome funcionário =, nomefunc); escreva ( Idade retornada da função =, idade); inteiro calculaidade(string parnomefunc, Date pardatanascimento) idade = /* algoritmo que calcula idade usando a data de nascimento Retorna idade Algoritmos e Lógica de Programação Linguagem de Programação I Página 2
Exemplo 5 - Chamada a uma função com passagem e retorno de parâmetros nomefunc: String; datanascimento: Date; idade: inteiro; datanascimento = 07/05/1970; Se (calculaidade(nomefunc, datanascimento)) >= 18 escreva ( Nome funcionário =, nomefunc); escreva ( De maior ); escreva ( Nome funcionário =, nomefunc); escreva ( De menor ); -se inteiro calculaidade(string parnomefunc, Date pardatanascimento) idade = /* algoritmo que calcula idade usando a data de nascimento Retorna idade Exemplo 6 - Chamada a uma função sem passagem de parâmetros e retorno de uma tabela tbnome[100]: String; tbnome = carregatabela(); Para (ixnome =1, ixnome > 100, ixnome++) escreva (tbnome(ixnome)); -para String carregatabela() tbnomefuncao[100]: String ixnome = 1; leia (nome); Faça enquanto não for fim de arquivo tbnomefuncao(ixnome) = nome; ixnome++; -faça Retorna tbnomefuncao; Algoritmos e Lógica de Programação Linguagem de Programação I Página 3
Exemplo 7 Ler o valor de um determinado ano e responder se ele é um ano bissexto, ano par ou ano ímpar Algoritmo VerificaAno Leia (ano); Se verificabissexto(ano) escreva ( O ano é bissexto ); Se verificapar(ano) escreva ( O ano é par ); escreva ( O ano é ímpar ); -se -se booleano verificabissexto(inteiro parano) /* algoritmo verificar se um ano é bissexto Se o ano recebido é bissexto Retorna true; Retorna false; -se booleano verificapar(inteiro parano) Se resto(parano/2) = 0 Retorna true; Retorna false; -se Algoritmos e Lógica de Programação Linguagem de Programação I Página 4
Exercícios: Faça os algoritmos abaixo utilizando Funções: 1) FUAQ leia dez valores inteiros e positivos e seus pesos de um arquivo e mostre a média ponderada destes números - Fazer uma função que leia o arquivo e devolva uma tabela carregada - Fazer outra função que receba a tabela e devolva a média - Mostrar o resultado no algoritmo principal 2) FUAQ leia 100 valores inteiros e mostre quantos valores estão acima da média e quantos estão abaixo da média Utilize funções Não é permitido ler o arquivo duas vezes 3) Dado um arquivo com 100 registros contendo o nome e idade de uma pessoa, elabore um algoritmo que: - Guarde todos os dados em tabelas; - Escreva o nome das pessoas que tem idade maior que a idade da primeira pessoa; - Listar os nomes das pessoas que tem a idade maior que a média; - Listar os nomes das pessoas com maior e menor idade (prever vários nomes com a mesma idade) - Usar funções 4) FUAQ recebe o valor dos três valores e: - Verifique se podem ser os lados de um triângulo; - Se forem os lados, dizer que tipo de triângulo ele é 5) FUAQ um algoritmo que implemente uma calculadora que realize as seguintes funções: 0 Soma 1 Subtração 2 Multiplicação 3 Divisão 4 Fatorial 9 Sair 6) Ler um arquivo contendo nomes de pessoas de 50 posições Para cada registro lido, jogar cada letra do nome em uma tabela e chamar uma função que inverte a cadeia de caracteres, após a inversão, mostrar o conteúdo 7) FUAQ calcule o desvio-padrão de 50 números lidos de um arquivo Segue a fórmula do desvio-padrão: Algoritmos e Lógica de Programação Linguagem de Programação I Página 5
8) A tabela abaixo contém, em cada linha, as três notas de provas obtidas por um aluno durante o período letivo 1 5,0 7,0 4,0 2 8,5 9,0 9,0 3 6,3 4,2 4,2 99 7,0 5,3 6,5 100 8,6 9,8 4,9 Faça um algoritmo que calcule a média de cada aluno, a média geral da turma e que imprima um relatório com o layout abaixo: Número do Aluno Média do Aluno Média Turma 1 7,68 2 6,17 6,94 Algoritmos e Lógica de Programação Linguagem de Programação I Página 6