Algoritmos e Estruturas de Dados I – Modularização
-
Upload
shaylee-kinsella -
Category
Documents
-
view
36 -
download
4
description
Transcript of Algoritmos e Estruturas de Dados I – Modularização
![Page 1: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/1.jpg)
Profa. Mercedes Gonzales Márquez
Algoritmos e Estruturas de Dados I –
Modularização
![Page 2: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/2.jpg)
Modularização Sempre é possível dividir problemas grandes e complicados em
problemas menores e de solução mais simples. A decomposição de um problema é fator determinante para a redução da sua complexidade.
Um algoritmo que envolve um problema grande pode ser dividido em um algoritmo principal e em diversos subalgoritmos ou módulos, tantos quantos forem necessários ou convenientes.
![Page 3: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/3.jpg)
Modularização O algoritmo principal é aquele por
onde começa a execução, e chama, eventualmente, os demais subalgoritmos.
Subalgoritmo é um algoritmo que, geralmente, resolve um pequeno problema, e que está subordinado a um outro algoritmo que solicitará seu acionamento. É possível que um subalgoritmo chame outro subalgoritmo.
![Page 4: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/4.jpg)
Construindo sub-algoritmos
Critérios para orientar o processo de decomposição.
Dividir o problema em suas partes principais. Analisar a divisão obtida para garantir
coerência. Se alguma parte ainda permanecer
complexa, sub-dividi-la mais. Analisar o resultado para garantir
entendimento e coerência.
![Page 5: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/5.jpg)
Vantagens da Modularização Dividir problemas grandes em vários
problemas menores, de baixa complexidade.Número pequeno de variáveisPoucos caminhos de controle (caminhos do início ao fim)
Utilizar soluções gerais para classes de problemas ao invés de soluções específicas para problemas particulares. ReusabilidadeSolucionar uma única vez o problema
![Page 6: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/6.jpg)
Vantagens da Modularização
Permite delimitar o escopo (nível de abrangência) de variáveis.Variáveis locais.
Evita a repetição, dentro de um mesmo algoritmo, de uma sequência de ações em diferentes pontos.
![Page 7: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/7.jpg)
Variáveis globais e locais Todo módulo é constituído por um sequência
de comandos que operam sobre um conjunto de variáveis que podem ser globais ou locais.
Variáveis globais : Podem ser usadas em módulos internos a outro módulo do algoritmo onde foram declaradas.
Variáveis locais: Só podem ser usadas no módulo do algoritmo onde foram declaradas. Elas não possuem significado fora deste módulo.
![Page 8: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/8.jpg)
Variáveis globais e locais Uma variável local é criada
(alocada na memória) no momento em que o sub-algoritmo que a define é chamado.
Uma variável local é liberada da memória no momento em que o sub-algoritmo que a define termina.
Uma variável local somente existe (só pode ser utilizada) dentro do subalgoritmo que a define
![Page 9: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/9.jpg)
Variáveis globais e locais Caso um mesmo identificador
(nome de variável) seja declarado em sub-algoritmos distintos, esses identificadores são considerados distintos entre si (variáveis distintas)
O uso de variáveis locais minimiza a ocorrência de “efeitos colaterais” : o programador pode definir e utilizar as variáveis que desejar em um sub-algoritmo sem interferir com outros sub-algoritmos
![Page 10: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/10.jpg)
Sintaxe de um algoritmo modularizado
Algoritmo <nome>Definição de tiposDeclaração de variáveis globaisDefinição de módulosInício
Conjunto de ações do algoritmo principal (incluidas as chamadas aos módulos com seus correspondentes nomes)FimQuando o nome de um módulo é encontrado, ocorre um desvio no algoritmo principal ou (sub)algoritmo chamador para que os comandos do módulo sejam executados. Ao término do módulo, a execução retornará ao ponto subsequente ao da sua chamada.
![Page 11: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/11.jpg)
Parâmetros
Parâmetros são canais pelos quais se estabelece uma comunicação bidirecional entre um subalgoritmo e o algoritmo chamador (algoritmo principal ou outro subalgoritmo).
Os dados são passados pelo algoritmo chamador através de argumentos ou também chamados parâmetros reais, e são recepcionados por meio de parâmetros formais.
![Page 12: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/12.jpg)
Parâmetros
Parâmetros Formais: São os nomes simbólicos introduzidos no cabeçalho dos subalgoritmos, usados na definição dos parâmetros do mesmo. Dentro de um subalgoritmo trabalha-se com estes nomes da mesma forma como se trabalha com variáveis locais ou globais.
Parâmetros Reais (ou argumentos):São aqueles que substituem os parâmetros formais quando da chamada do subalgoritmo.
![Page 13: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/13.jpg)
Passagem de Parâmetros
Por valorO argumento ou parâmetro real é avaliado, gerando um valor que é copiado para a variável declarada no módulo (parâmetro formal)Qualquer alteração do parâmetro formal não é "transmitida" para a variável do argumento.
O argumento da chamada (parâmetro real) pode ser uma constante, uma variável ou uma expressão:
5, v1, v1+5-v2
![Page 14: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/14.jpg)
Passagem de Parâmetros Exemplo:
Algoritmo <teste>Inteiro:xModulo porvalor(inteiro:a)Inicio
a ← 5FimInicio x ← 10
porvalor(x)escreva (x)
Fim
![Page 15: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/15.jpg)
Passagem de ParâmetrosPor referência
- O argumento ou parâmetro real tem que ser uma variável: v1, v2 ...- A variável do argumento (parâmetro real) é associada com a variável declarada no subalgoritmo (parâmetro formal) durante a execução do subalgoritmo.
- Qualquer alteração da variável do subalgoritmo (parâmetro formal) acontece também na variável do argumento.
- Usaremos a seguinte convenção: o símbolo & indicará a passagem por referência no argumento e * no parâmetro formal.
![Page 16: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/16.jpg)
Passagem de Parâmetros Exemplo:
Algoritmo <teste>Inteiro:xProcedimento
porreferencia(inteiro:*a)Inicio
*a ← 5FimInicio x ← 10
porreferencia(&x)escreva (x)
Fim
![Page 17: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/17.jpg)
Tipos de sub-algoritmos
Tipos de Sub-algoritmos:Funções (functions) Procedimentos (procedures)
![Page 18: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/18.jpg)
Procedimentos Procedimento: Um conjunto de ações que não irá
devolver valores ao (sub)algoritmo chamador.
Forma geral de um procedimento (sintaxe):Procedimento <nome>(<parâmetros formais>)Declaração de variáveis locais do procedimento
InícioComandos do procedimento
Fim Chamada de um procedimento (sintaxe):
Nome_procedimento(argumentos)
![Page 19: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/19.jpg)
Procedimentos Juntando definição e chamada de um
procedimento :Algoritmo <nome_algoritmo>
Definição de tiposDeclaração de variáveis globaisProcedimento <nome_procedim>(<parâmetros-formais>)Declaração de variáveis locais do procedimento Inicio
Comandos do procedimentoFim/* algoritmo principal*/Início
Comandos do algoritmo principalnome_procedimento(argumentos)Comandos do algoritmo principal
Fim
![Page 20: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/20.jpg)
Procedimentos – Exemplos simples Exemplo 1: Faça um algoritmo que
dado um valor real global x, chame um procedimento que calcula o quadrado de x.
Algoritmo <Quad>real: xProcedimento Quadrado()real: zInícioz ← x*xEscreva (“O quadrado do número é =“,z)FimInícioEscreva (“Digite um número: “)Leia ( x )Quadrado()Fim
![Page 21: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/21.jpg)
ProcedimentosExemplo 2 (muito simples com finalidade de explicar a diferença entre variáveis locais e globais) : Faça um algoritmo que use um procedimento para ler o nome de uma pessoa e outro para mudá-lo.Algoritmo <EscreveNome>literal: nomeProcedimento le_nome()InícioLeia (nome)FimProcedimento muda_nome()Inícioescreva (“Vamos mudar o nome”)leia (nome)FimInícioLe_nomeEscreva (nome)Muda_nomeEscreva (nome)Fim
![Page 22: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/22.jpg)
ProcedimentosExemplo 3 (muito simples com finalidade de explicar a diferença entre variáveis locais e globais) : Faça um algoritmo que use um procedimento para ler o nome de uma pessoa e outro para mudá-lo (use nome como var local)Algoritmo <EscreveNome>literal: nomeProcedimento le_nome()Início
Leia (nome)FimProcedimento muda_nome()literal:nomeInício
escreva (“Vamos mudar o nome”)leia (nome)
FimInício
Le_nomeEscreva (nome)Muda_nomeEscreva (nome)
Fim
![Page 23: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/23.jpg)
Procedimentos No exemplo 3, a variável global nome
e a variável local nome representam posições de memória totalmente diferentes, logo, qualquer mudança no conteúdo da variável local, não afetará o conteúdo da variável global.
![Page 24: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/24.jpg)
Funções Função Um conjunto de ações cujo objetivo é
retornar ao ponto de sua chamada um valor, o qual será associado ao próprio nome que identifica a função. Por isso, as funções podem ser utilizadas em expressões como se fossem variáveis.
O conceito de funções é originário da ideia de função matemática, onde um valor é calculado a partir de outro(s) valor(es) fornecido(s) à função.
O comando retorne explicita qual é o valor a retornar.
![Page 25: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/25.jpg)
Funções Forma geral de uma função
(sintaxe):Função tipo <nome>(<parâmetros-formais>)Declaração de variáveis locais da funçãoInício
ComandosFimonde, tipo é o tipo do valor que será retornado,lista-de-parâmetros-formais é a lista das variáveis (com seus tipos) que recepcionam as variáveis fornecidas quando da chamada da função
![Page 26: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/26.jpg)
Funções Chamada de uma função (sintaxe):
nome(lista-de-parâmetros-reais) onde, lista-de-parâmetros-reais é a lista das variáveis que se corresponderão com os parâmetros formais durante a execução da função. Os parâmetros reais devem concordar em números, ordem e tipo com os parâmetros formais.
Exemplo:
![Page 27: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/27.jpg)
Funções INSTRUÇÃO Retorne Comando usado apenas nas funções
que tem o efeito de parar a execução da função e enviar um valor para o algoritmo chamador. No corpo de instruções da função deve haver, pelo menos, uma instrução Retorne.
Sintaxe:Retorne ( <expressão> )
Exemplos: Retorne ( area )Retorne ( pi*r*r )
![Page 28: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/28.jpg)
Funções Exemplo 1: Faça um algoritmo que dado
um valor real x, chame uma função que retorne o quadrado de x.Algoritmo <Quad>real: x, yFunção real quadrado(real:w)real: zInício
z ← w*wretorne (z)
FimInício Escreva (“Digite um número: “) Leia ( x ) y ← quadrado (x) Escreva (“ y = “ , y )Fim
![Page 29: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/29.jpg)
FunçõesEx.2 - Faça uma função para determinar se um número inteiro é par ou não. Utilize esta função para calcular o total de números pares dentre um total de n números inteiros positivos.Algoritmo <Pares_Impares>inteiro: n,i,x,somaparFunção inteiro par(inteiro:w)Início
se (mod(w,2)=0) entãoretorne (1)
senãoretorne(0)
fim seFimInício Leia (n) Para i de 1 até n repita
Leia ( x ) somapar ← somapar+par(x)
Fim paraFim
![Page 30: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/30.jpg)
FunçõesEx.3 - 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 seu divisores). A função deve retornar um valor booleano.
Função logico perfeito (inteiro: num)inteiro:soma,i
Iníciosoma ←0
para i de 1 até num/2 repitase (mod(num,i)=0)
soma←soma+ifim se
fim parase (soma=num)
retorne(1)senão
retorne(0)Fim
![Page 31: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/31.jpg)
FunçõesEx.4 - Faça uma função que recebe a idade de uma pessoa em anos, meses e dias e retorna essa idade expressa em dias. Assume que os meses tem 30 dias.
Função inteiro idadedias(inteiro:anos, meses,dias)inteiro: diastInício
diast←anos*365+meses*30+diasretorne(diast)Fim
![Page 32: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/32.jpg)
FunçõesEx.5 - Faça uma função para calcular o máximo divisor comum (MDC) de dois números dados como parâmetros. Sabe-se que o MDC tem as seguintes propriedades :
1.MDC(x,y)=MDC(x-y,y), se x>y2.MDC(x,y)=MDC(y,x)3.MDC(x,x)=x
ExemplosMDC(24,8)=MDC(16,8)=MDC(8,8)=8
MDC(13,4)=MDC(9,4)=MDC(5,4)=MDC(1,4)=MDC(4,1)= MDC(3,1)=MDC(2,1)=MDC(1,1)=1
MDC(13,5)=MDC(8,5)=MDC(3,5)=MDC(5,3)=MDC(2,3)=
MDC(3,2)=MDC(1,2)=MDC(2,1)=MDC(1,1)=1
![Page 33: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/33.jpg)
Funções
Função inteiro mdc (inteiro: x,y) Inicio
enquanto (x<>y)enquanto (x>y)
x ←x-yfim enquantoenquanto (y>x)
y ←y-xfim enquanto
fim enquantoretorne(x)
fim
![Page 34: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/34.jpg)
FunçõesEx.6 –Fazer uma função que transforme horas, minutos e segundos em segundos. Ex. 2 hr 40 min 10 seg -> 9610 segundos.Fazer um algoritmo que:•Leia um conjunto de dados de empregado contendo, o número de um empregado, a hora de início (horas, minutos e segundos) e hora de término de uma determinada tarefa. A entrada de dados finalizará quando o número do empregado for negativo;•Calcule, para cada empregado, a duração da tarefa que ele executou, num mesmo dia, utilizando o módulo anteriormente definido;•Escreva, para cada empregado, o seu número e a duração de sua tarefa em horas, minutos e segundos.
![Page 35: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/35.jpg)
Funções e ProcedimentosEx.7.Escreva um algoritmo que leia as medidas dos tres lados a, b e c de um paralelepípedo, calcule e escreva o valor da sua diagonal.
L=sqr(a2+b2) D=sqr(L2+c2)
a
bc D
L
![Page 36: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/36.jpg)
FunçõesAlgoritmo <paralelepipedo>double:a,b,c,d Função double hipotenusa(double: a,b)double: hipInício
hip ←sqr(a**2+b**2)retorne(hip)
fimInício
leia (a,b,c)d←hipotenusa(hipotenusa(a,b),c)escreva d
Fim
![Page 37: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/37.jpg)
Funções e ProcedimentosEx.8. Segundo a conjectura de Goldbach, qualquer número par, maior que 2, pode ser escrito como a soma de dois números primos. Ex. 8=3+5, 16=11+5, 68=31+37, etc.Dado um conjunto de números inteiros positivos pares, fazer um algoritmo que calcule, para cada número, um par de números primos cuja soma seja igual ao próprio número. Adotar como flag um número negativo. Para verificar se um número é primo, fazer uma função que deverá retornar em uma variável lógica o valor verdadeiro, se o número for primo, e falso, em caso contrário.
![Page 38: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/38.jpg)
FunçõesAlgoritmo <conjectura>inteiro: I,parFunção logico primo(inteiro: n)inteiro:iInício
i ←2enquanto (i<=sqr(n)) faça
se (mod(n,i)=0) entãoretorne(0)
fim sei ←i+1
fim enquantoretorne(1)
fimInício
leia (par)enquanto (par>0) faça
![Page 39: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/39.jpg)
FunçõesInício
leia (par)enquanto (par>0) faça
para i de 1 até par repitase (primo(i) e primo (par-i)) então
escreva (i, par-i)i ←par
fim sefim paraleia (par)
fim enquantoFim
![Page 40: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/40.jpg)
Funções e ProcedimentosEx.9. Fazer uma função que, dado um número
inteiro N, retorne a soma dos divisores deste número, exceto ele próprio. Fazer um algoritmo que, utilizando a função anterior, determine e escreva todos os pares de números amigos em um intervalo ´[A,B]. Os valores de A e B (A<B), inteiros maiores que zero , deverão ser lidos.
Dois números inteiros M e N são amigos se a soma dos divisores de M, excluindo M, é igual a N e a soma dos divisores de N, excluindo N, é igual a M.
Antes de se elaborar um algoritmo para este problema, algumas observações se fazem necessárias:
(1)Se um número inteiro X possui um divisor Y menor que sua raiz quadrada, o quociente da divisão de X por Y será maior que a raiz quadrada de X e será, também, um divisor de X. Exemplo: X=64 Y=4, X/Y=16>sqr(64) e é, também, divisor de 64.
(2)Se o número inteiro X possuir raiz quadrada exata, ela será naturalmente um divisor de X.
![Page 41: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/41.jpg)
FunçõesAlgoritmo <amigos>inteiro: a,b,si,siamigoFunção inteiro soma_div(inteiro: n)inteiro:soma, iInício
soma ←1i ←2enquanto (i<sqr(n)) faça
se (mod(n,i)=0) entãosoma ←soma+ i + n/i
fim sei ←i+1
fim enquantose (i=sqr(n))
soma←soma+ifim seretorne(soma)
fim
![Page 42: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/42.jpg)
Funções
Inícioleia (a,b)para i de a até b repita
si ← soma_div(i)se (si>=a e si<=b e soma_div(si)=i)
escreva (i,si)fim se
fim sefim
![Page 43: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/43.jpg)
FunçõesEx.10 - Escrever uma função que receba dois números inteiros positivos, e determine o produto dos mesmos, utilizando o seguinte método de multiplicação.Dividir, sucessivamente , o primeiro número por 2, até que se obtenha 1 como quociente;Paralelamente, dobrar, sucessivamente, o segundo número;Somar os números da segunda coluna que tenham um número ímpar na primeira coluna. O total obtido é o produto procurado.Exemplo:
• 9 x 6
9 6→ 6+4 122 241 48→48
------ 54
![Page 44: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/44.jpg)
Funções
função inteiro produto(inteiro:x,y) inteiro:produto Início
produto ←0 Enquanto (x<>1) faça
Se (mod(x,2)=1) então produto←produto+y
Fim sex←div(x,2)y←y*2
Fim enquantoretorne(produto+y)
Fim
![Page 45: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/45.jpg)
FunçõesEx.11 -A mediana de um conjunto de números é o elemento m do conjunto, tal que a metade dos números restantes é maior ou igual a m e a metade é menor ou igual a m, se o número de elementos do conjunto for ímpar. Se for par, a mediana será a média dos dois elementos, m1 e m2, tal que a metade dos elementos restantes no vetor é maior ou igual a m1 e m2 e metade é menor ou igual a m1 e m2. Escreva uma função que leia um conjunto A de inteiros e calcule a mediana de ambos os conjuntos.
![Page 46: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/46.jpg)
Funções
função real mediana(inteiro:V[], n) Início/* Use um algoritmo de ordenação de
vetores de forma que os elementos de V já fiquem ordenados*/
Se (mod(n,2)=0) entãoretorne((V[n/2]+V[(n/2)+1])/2)
senãoretorne(V[(n+1)/2])
fim seFim
![Page 47: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/47.jpg)
FunçõesEx.12 -A função ganhador determina o número que apareceu mais vezes dentre um conjunto de n números. Supõe-se que os valores possíveis de cada número estão entre 1 e 6, inclusive, e que sempre haverá um único número vencedor. Obs. Os n números estão armazenados em um vetor V que é passado como parâmetro e o valor n é também passado por parâmetro.Sabendo-se que um jogo de dados ocorre 40 vezes por dia, faça um algoritmo que lendo os dados dos 30 dias correspondentes a um mês de jogo:(a) Determine o número ganhador do dia, utilizando-se a função anterior e escreva este número e a mensagem “RESULTADO DIARIO”; (b) Verifique também qual o número ganhador do mês e escreva este número e a mensagem “RESULTADO MENSAL DO JOGO”.
![Page 48: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/48.jpg)
Funções
função inteiro ganhador(inteiro:V[], n)Inteiro: i,maior,contmaior,cont[6]Inicio
Para i de 1 até 6 repita cont[i] ←0
Fim ParaPara i de 1 até n repita
cont[V[i]] ← cont[V[i]]+1Fim Paramaior←1contmaior←cont[1]Para i de 2 até 6 repita
Se (cont[i]>contmaior) então contmaior← cont[i]maior←i
Fim seFim Para
Retorne(maior)Fim
Algoritmo <ganhadores>inteiro: i
![Page 49: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/49.jpg)
Funções
para i de 1 até 30 repitapara j de 1 até 40 repitaleia dia[j]fim parames[i] ← ganhador(dia,40)
fim paraganhador_mensal ← ganhador(mes,30)
Fim
![Page 50: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/50.jpg)
Funções Ex.13- Faça um algoritmo que leia n pontos
no plano e determine se os pontos estão dentro ou fora de uma circunferência de raio R e centro em (h,k).
![Page 51: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/51.jpg)
Funções e ProcedimentosEx.14. Determinar os números inteiros, menores que 50.000.000 que são capicuas. Capicuas são números que têm o mesmo valor se lidos da esquerda para a direita ou da direita para a esquerda. Exemplo: 44, 232, 1661, etc.Deverão ser escritos os seguintes algoritmos:•Um módulo principal•Uma função que calcule quantos algarismos tem um determinado número inteiro•Uma procedimento para separar um número em n algarismos•Uma procedimento para formar o número na ordem inversa
Algoritmo <capicuas>inteiro:i,na ,V[8]Função inteiro numero_algarismos (inteiro: num) inteiro:i Inicio
i ←0enquanto (num<>0) repita
num ←div(num,10)i ←i+1
fim enquanto retorne(i) fim
![Page 52: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/52.jpg)
Funções e ProcedimentosProcedimento separa_algarismos (inteiro: na,num,*V[]) inteiro:i Inicio
Para i de 1 ate na repita *V[i] ←mod(num,10)num←div(num,10)
Fim ParaFim Função inteiro numero_ordem_inversa (inteiro:na,V[]) inteiro:i,inverso Inicio
inverso ←0 Para i de 1 ate na repita
inverso ←V[i]*10**(na-i)+inverso Fim ParaRetorne(inverso)
Fim Inicio /*modulo principal*/Para i de 1 até 50000000 repita
na←numero_algarismos(i) separa_algarismos(na,i,&V[8])se (i=numero_ordem_inversa(na,V[8]))
escreva (“O numero”,i,“é um numero capicua”)fim se
Fim ParaFim
![Page 53: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/53.jpg)
Funções e ProcedimentosEx.15 - Foi realizada uma pesquisa de algumas características físicas de 50 habitantes de uma certa região. De cada habitante foram coletados os seguintes dados: sexo, cor dos olhos (azuis, verdes ou castanhos), cor dos cabelos (louros, pretos ou castanhos) e idade. Faça um procedimento que leia esses dados em um vetor de registro. O vetor de registro deve ser enviado por referência.
Procedimento leia (habitante:*dados[50])inteiro: iInício
Para i de 1 até 50 repita
leia(*dados[i].sexo,*dados[i].cor_olhos,*dados[i].cor_cab) leia(*dados[i].idade) Fim paraFim
Nota: No algoritmo principal deve ser definido o tipo habitante.
![Page 54: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/54.jpg)
Funções e Procedimentos Faça um procedimento que receba o vetor de registro
definido no exercício anterior, por referëncia, e retorne também por referëncia: a maior idade entre os habitantes e a quantidade de individuos do sexo feminino cuja idade está entre 18 e 35 (inclusive) e que tenham olhos verdes e cabelos louros.
Procedimento informacoes(habitante:*dados[50], inteiro:*maioridade,*soma)
inteiro: iInício *soma←0 *maioridade ← 0 Para i de 1 até 50 repita
se (*dados[i].idade>*maioridade) *maioridade ← *dados[i].idade
se (*dados[i].sexo=“F” e *dados[i].idade>=18 e *dados[i].idade<=35 e
*dados[i].cor_olhos=“verdes” e*dados[i].cor_cab=“louros”)
*soma ←*soma+1fim se
Fim paraFim
![Page 55: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/55.jpg)
Funções e ProcedimentosEx.16.Escreva um algoritmo que leia uma sequência de 100 números e os armazene em um vetor. Depois deve ser lida uma subsequência de 5 números. Desenvolva um módulo para verificar se a subsequência aparece completa e na mesma ordem em algum ponto do vetor, caso ocorra informar a primeira posição do vetor onde a subsequência ocorre.Exemplo:Sequência de 100 números5 5 7 4 6 1 0 2 5 7 4 8 9 1 3 5 7 9 1 2 2 4 5 7 6 7 8 9 …Subsequência5 7 4 8 9Resposta: Subsequência ocorre a partir da posição 9
![Page 56: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/56.jpg)
Funções e ProcedimentosFunção logico comparasubsequencia (inteiro:
V[100],S[5], *pos) Inteiro: i,jInicio
Para i de 1 até 96 repitaj ←1Se (V1[i]=S[1]) então
Enquanto (j<=4 & V[i+j]=S[j+1]) façaj←j+1
Fim enquantoSe (j=5) então
*pos ←iRetorne (1) /*se os elementos de S
forem diferentes faça i←i+j para buscar outra subsequencia*/
Fim seFim se
Fim paraRetorne(0)
Fim
![Page 57: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/57.jpg)
Funções e ProcedimentosEx.17.Dado um polinômio na forma
P(x) = a1xn + a2xn-1 + ... + anx + an+1, (a)Fazer um módulo que retorne o valor do polinômio e o de sua derivada no ponto x, recebendo como parâmetros de entrada a ordem do polinômio, os coeficientes e o x.(b)Fazer um algoritmo que:
- leia a ordem do polinômio e os seus coeficientes.
-utilizando o módulo da parte (a), calcule o valor do polinômio e o de sua derivada para n diversos valores de x, onde o n os valores x são lidos.
![Page 58: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/58.jpg)
Funções e ProcedimentosFunção real valor_polinomio (inteiro: n, real:
a[],real:x) inteiro: i
Real: valorInicio
valor ←0Para i de 1 até n+1 repita
valor ←valor + a[i]*x**(n+1-i)Fim Pararetorne (valor)
FimAlgoritmo <valor_polinomio_e_polderivada>Inteiro: i,num_x,jreal: a[100],xInicio
Leia (n)Para i de 1 até n+1 repita
leia (a[i])Fim Para
![Page 59: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/59.jpg)
Funções e Procedimentos
Leia (num_x)Para i de 1 até num_x repita
leia (x)valor_pol ←valor_polinomio(n,a,x)/*Calculo dos coeficientes do polinomio
derivada*/Para j de 1 até n repita
b[j] ←(n+1-j)*a[j]Fim Paravalor_der ←valor_polinomio(n-1,b,x)
Fim ParaFim
![Page 60: Algoritmos e Estruturas de Dados I – Modularização](https://reader036.fdocumentos.com/reader036/viewer/2022062408/56813615550346895d9d8a5f/html5/thumbnails/60.jpg)
Funções e ProcedimentosEx.18. Calcular e escrever a área total de 10 tetraedros, dadas as coordenadas de cada um de seus quatro vértices. Para tanto, deverão ser utilizados os seguintes módulos:(a)Que calcula a distância entre dois pontos do espaço;(b)Que calcula a área de um triângulo em função de seus lados
onde é o semi-perímetro do triângulo (a+b+c)/2.
)()(a)x( cxbxAREA