Professional Documents
Culture Documents
APOSTILA
MODULO 2: ALGORITMOS NUMÉRICOS
1. INTRODUÇÃO
O objetivo desse modulo é a Lógica de Programação dando uma base teórica e prática, suficientemente
boa, para que, o aluno domine os algoritmos e esteja habilitado a aprender uma linguagem de
programação. Será mostrado também um grupo de algoritmos clássicos para tarefas cotidianas, tais como:
ordenação e pesquisa.
2. DEFINIÇÃO DE ALGORITMO
1
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
Algoritmo não é a solução de um problema, pois, se assim fosse, cada problema teria
um único algoritmo. Algoritmo é um caminho para a solução de um problema, e em geral,
os caminhos que levam a uma solução são muitas.
Copiando Algoritmos
Estudando Algoritmos
Algoritmos só se aprendem:
Construindo Algoritmos
Testando Algoritmos
3. FASES DE UM ALGORITMO
Quando temos um problema e vamos utilizar um computador para resolvê-lo inevitavelmente temos que
passar pelas seguintes etapas:
a) Definir o problema.
b) Realizar um estudo da situação atual e verificar quais a(s) forma(s) de resolver o problema.
c) Terminada a fase de estudo, utilizar uma linguagem de programação para escrever o programa que
deverá a princípio, resolver o problema.
d) Analisar junto aos usuários se o problema foi resolvido. Se a solução não foi encontrada, deverá ser
retornado para a fase de estudo para descobrir onde está a falha.
2
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
4. CONCEITOS
Algoritmo
É uma seqüência finita de ações que descrevem como um problema pode ser resolvido.
Instrução
São frases que indicam as ações a serem executadas. São compostas de um verbo no
imperativo/infinitivo mais um complemento.
Programa
Ações de um algoritmo obedecendo à sintaxe de uma linguagem de programação
1. Análise Preliminar
2. Solução
3. Teste de qualidade
3
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
4. Alteração
5. Produto Final
6. DECOMPOSIÇÃO (TOP-DOWN)
Exemplo 1
Exemplo 2
Exemplo 3
1. Abra o porta-malas
6. Levante o carro
4
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
7. Retire as porcas
8. Retire o pneu
9. Coloque o estepe
7. DESENVOLVIMENTO ESTRUTURADO
São técnicas que permitem sistematizar e ajudar o desenvolvimento de algoritmos para a resolução de
grandes e complexos problemas de computação.
5
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
8. FORMA DE REPRESENTAÇÃO
DESCRIÇÃO NARRATIVA
Ex. Cálculo da média de um aluno:
– Obter as notas da primeira e da segunda prova
– Calcular a média aritmética entre as duas
– Se a média for maior ou igual a 7, o aluno foi aprovado, senão
ele foi reprovado
FLUXOGRAMA
6
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
Exemplo de Fluxograma
Vamos a seguir, exibir um fluxograma que teria o objetivo de calcular o valor diário de um
salário mínimo.
Seguindo uma lógica simples, teríamos que dividir o valor do salário mínimo (que
sabemos ser equivalente a R$ 240,00) e dividir este total por 30 (número de dias de um
mês).
7
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
Observe que da forma que o mesmo foi exposto, existe um procedimento lógico para o calculo
proposto, bem como, poderemos repetir este procedimento por quantas vezes necessários, que o resultado
sempre será correto e preciso.
8
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
Algoritmo Nome_Do_Algoritmo
variáveis
Declaração das variáveis
Procedimentos
Declaração dos procedimentos
Funções
Declaração das funções
Início
Corpo do Algoritmo
Fim
exemplo:
Algoritmo Média
Variáveis
real N1, N2, Média
Início
Ler N1, N2
Média = (N1+N2)/2
Se Média >= 7 Então
Escrever “Aprovado”
Senão
Escrever “Reprovado”
Fim.
9. TIPOS DE PROCESSAMENTO
PROCESSAMENTO SEQÜENCIAL
As instruções do algoritmo são executadas uma após a outra, sem que haja
desvio na seqüência das instruções, sendo cada instrução executada uma única
vez.
9
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
1. Inicio
2. Some as duas primeiras notas
3. Some a terceira nota com o resultado da instrução 2
4. Some a Quarta nota com o resultado da instrução 3
5. Divida resultado da instrução 4 por 4
6. Fim
1. Inicio
2. 10+5 = 15
3. 15+8 =23
4. 23+1 =24
5. 24 / 4=6
6.Fim
PROCESSAMENTO CONDICIONAL
Ex. Obter a média aritmética das quatro notas. Se a média for maior ou igual a sete, o
aluno está aprovado, caso contrário, está reprovado.
1. Inicio
2. Some as duas primeiras notas
3. Some a terceira nota com o resultado da instrução 2
4. Some a Quarta nota com o resultado da instrução 3
5. Divida resultado da instrução 4 por 4
6. Se o resultado da instrução 5 for maior ou igual a 7
7. Aprove o aluno
8. Se o resultado da instrução 5 for menor que 7
9. Reprove o aluno
10. Fim
10
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
1. Inicio
2. 10+5 = 15
3. 15+8 =23
4. 23+1 =24
5. 24 / 4=6
6. Resposta negativa
7. Resposta afirmativa ⇒ resultado < 7
então ⇒ aluno reprovado
6. Fim
Note que a instrução 6 foi executada. Como a resposta foi negativa (a média foi
inferior a sete), o aluno foi reprovado não sendo executada a instrução sete.
Conjunto de instruções (pode ser apenas uma) que é executado um determinado número de
vezes.
Ex. Obter a média aritmética das quatro notas de todos os alunos da sala.
1. Inicio
2. Para cada aluno da sala
3. Some as duas primeiras notas
4. Some a terceira nota com o resultado da instrução 3
5. Some a Quarta nota com o resultado da instrução 4
6. Divida o resultado da instrução 5 por 4
7. Fim
11
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
3. 10+5 = 15
4. 15+8 =23
5. 23+1 =24
6. 24/4 = 6
3. 4+6 = 10
4. 10+7=17
5. 17+3=20
6. 20/4 = 5
A identação (deslocamento para a direita) de uma instrução, significa que tais instruções estão
subordinadas a instrução anterior.
TIPO INTEIRO
Dados numéricos positivos ou negativos, excluindo-se qualquer número
fracionário.
Ex. 35, 0, -56
TIPO REAL
Dados numéricos positivos, negativos e números fracionários.
Ex. 1.2,-45.897
12
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
TIPO CARACTERE
São tipos caracteres, as seqüências contendo letras, números e símbolos
especiais. Uma seqüência de caracteres deve ser indicada entre aspas. Sendo
também conhecido como: alfanumérico, string, literal ou cadeia.
TIPO LÓGICOS
São tipos lógicos ou booleanos, os dados com valores verdadeiro e falso, sendo
que este tipo poderá representar um dos dois valores.
O nome de uma variável é utilizado para sua identificação e posterior uso dentro de um programa, sendo
assim, é necessário estabelecer algumas regras de utilização das mesmas.
O primeiro caractere do nome de uma variável deve ser sempre uma letra;
Não poderão ser utilizados outros caracteres que não sejam letras e números.
13
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
12. CONSTANTES
Expressões
Neste caso, a fórmula para se calcular a área de um retângulo é igual ao produto de sua altura por sua
base, poderemos então montar a fórmula como se segue:
Observe que no exemplo acima, utilizamos três variáveis: altura, base e AREA, sendo que o resultado
final é armazenado na variável AREA, ou seja, local de memória onde será armazenado o resultado da
avaliação da expressão e o operador é o sinal de ‘*’ que em linguagem de computador representa a
multiplicação.
14
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
Já que falamos em operadores, vamos ser um pouco mais claros neste tópico. Os operadores são
elementos ativos que tem influência sobre os operandos e através de sua ação resultam um determinado
valor. No exemplo acima, os operandos seriam as variáveis “altura” e “base” e o operador de
multiplicação o “*”.
• Binários : quando trabalham sobre os operandos em uma expressão. Os mais conhecidos são os
símbolos + - * /, que representam a soma, subtração, multiplicação e divisão respectivamente.
• Unários : quando tem influência sobre um único operando, indicando por exemplo que este se trata de
um número negativo e não vem acompanhado um um outro operando, exemplo: ao representar o
número quatro negativo, podemos utilizar ( -4 ). Isso não quer dizer que queremos subtrair o quatro de
um outro valor.
Assim como classificamos os operadores, podemos também classificar as expressões quanto ao seu tipo,
conforme mostra a lista a seguir:
• Expressão aritmética - quando o resultado de sua avaliação for um número, podendo este ser positivo
ou negativo assim como inteiro ou real;
• Expressão lógica - quando o resultado de sua avaliação for um valor lógico, ou seja, verdadeiro (.T.)
ou falso (.F.);
Cada uma das expressões vistas acima, possuem seus operadores em específico. A seguir, vamos mostrar
uma tabela contendo esses operadores:
Na solução da grande maioria dos problemas é necessário que as variáveis tenham seus valores
consultados ou alterados e, para isto, devemos definir um conjunto de OPERADORES, sendo eles:
OPERADOR DE ATRIBUIÇÃO:
OPERADORES ARITMÉTICOS:
+ = Adição Quociente = Quociente da divisão de inteiros
* = Multiplicação Resto (a,b) = Resto da divisão de inteiros
- = Subtração ou inversor do sinal. EXP(a,b) = Exponenciação ab (^)
/ = Divisão
15
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
OPERADORES LÓGICOS:
Não - negação.
PRIORIDADE DE OPERADORES:
Durante a execução de uma expressão que envolve vários operadores, é necessária a existência de
prioridades, caso contrário poderemos obter valores que não representam o resultado esperado.
2º - Efetuar Funções
5º - Operadores Relacionais
6º - Operadores Lógicos
16
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
A lógica para se montar uma expressão é ponto determinante na questão do resultado ser ou não
verdadeiro, ou seja, de ser o resultado esperado.
Toda linguagem de programação tem por obrigação possuir instruções primitivas, pois
sem estas, não existiria comunicação com periféricos.
Antes de mais nada, você saberia diferenciar periféricos de entrada e de saída de dados? A
resposta é simples, periféricos de entrada são aqueles responsáveis pela passagem de dados
do mundo externo para a memória do computador, como por exemplo o teclado, unidade de
CD-ROM, etc... Já os periféricos de saída recebem os dados do computador para um outro
equipamento externo, como por exemplo o monitor de vídeo, impressora, winchester, etc...
Toda instrução, primitiva ou não possui uma sintaxe, ou seja, uma regra que deverá ser
seguida para a construção de seu código, e caso esta não seja obedecida, o seu programa
pode simplesmente não funcionar.
Devemos saber também que o conjunto de ações que serão realizadas pelo computador após a
execução de um determinado comando é conhecida como semântica.
17
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
No algoritmo é preciso representar a troca de informações que ocorrerá entre o mundo da máquina e o
nosso mundo, para isso, devemos utilizar comandos de entrada e saída, sendo que, a nível de algoritmo
esses comandos representam apenas a entrada e a saída da informação, independe do dispositivo utilizado
(teclado, discos, impressora, monitor,...), mas, sabemos que nas linguagens de programação essa
independência não existe, ou seja, nas linguagens de programação temos comandos específicos para cada
tipo de unidade de Entrada/Saída.
Onde expressão_1 , determinará qual linha do vídeo e expressão_2 a coluna. Sendo de 1 até
24 para linha e de 1 até 80 para coluna.
EXEMPLO:
Algoritmo media
VARIAVEIS
REAL quilometragem,litros,media
Inicio
ESCREVER “Entre com a quilometragem inicial e a Quantidade de litros
gastos”
LER quilometragem
LER litros
Media = quilometragem/litros
ESCREVER media
Fim.
Observe que no pseudocódigo, quando queremos enviar uma expressão como saída, a mesma
é colocada dentro de aspas, porém quando queremos enviar o conteúdo de uma variável, esta
deverá estar fora de aspas.
18
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
SEQÜÊNCIA :
usada para executar comandos passo a passo, sabendo que todos eles serão executados na ordem
de escrita, sem nenhum desvio. Uma seqüência pode possuir um ou vários comandos, os quais
devem ser delimitados pelos identificadores Início e Fim.
Inicio
Comando_1
...
Comando_n
Fim
SELEÇÃO:
usada para tomar decisões, ou seja desviar a execução do algoritmo de acordo com uma condição,
podendo ser simples ou composta.
Simples Composta
Se (Expressão Lógica) Então Se (Expressão Lógica) Então
Sequência_1 Sequência_1
Fim_se Senão
Sequência_2
Fim_se
EXEMPLO:
Algoritmo testa_salario
Variaveis
Real Salario
Real Salario_final
Inicio
Ler salario
19
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
Observe que, durante a execução do pseudocódigo, após obtermos, através de uma instrução
de entrada de dados, o valor do salário do funcionário, efetuamos um teste “Se”, que possui
duas condições, uma verdadeira e uma falsa. As instruções que serão executadas no caso de
um teste verdadeiro, devem estar abaixo da cláusula “Então”, já as instruções que serão
executadas no caso de um teste falso, devem estar abaixo da cláusula “senão”. A instrução
“Fim_se”, termina o bloco de testes.
Se <teste>
Então
Lista de comandos a serem executados caso teste=verdadeiro
Senão
Lista de comandos a serem executados caso teste=falso.
Fim_se
Os símbolos que estiverem na direção de “True” serão executados caso o teste seja
verdadeiro. Já os símbolos que estiverem na direção de “false” serão executados caso o teste
tenha um resultado falso.
20
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
Existem casos em que não basta ter apenas as “direções” verdadeiro e falso para tomar uma determinada
decisão, e sim, uma série de testes sobre um mesmo bloco. Este tipo de estrutura é chamada de estrutura
de decisão do tipo “ESCOLHA”.
Faca Caso
Caso <condição 1>
Lista de instruções caso condição 1 = verdadeira
Caso <condição 2>
Lista de instruções caso condição 2 = verdadeira
Caso <condição 3>
Lista de instruções caso condição 3 = verdadeira
Outro caso
Lista de instruções caso todas condições = falsa
Fim_Caso
21
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
No fluxograma, o símbolo que representa cada uma das condições acima, é o mesmo que o
símbolo que representa a estrutura de decisão.
Veja a sintaxe da estrutura de decisão de escolha no fluxograma:
Vamos imaginar um exemplo parecido, de reajuste de salário, porém teremos as seguintes situações para
reajuste:
Algoritmo testa_salario2
Variaveis
Real Salário , Salario_final
Inicio
Ler salario
Faca caso
Caso salario < 400
Salario_final=(salario*1.09)
Caso salario >= 400 .e. salario<800
Salario_final=(salario*1.07)
22 Caso salario>=800 .e. salario<1000
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
Salario_final=(salario*1.05)
Outro caso
Salario_final=(salario*1.03)
Escrever Salario_final
Fim.
Observe que, temos aqui uma novidade, ou seja, em uma única condição, estamos na verdade
realizando dois testes, isto porque usamos o operador lógico “AND” “.e.”, ou seja, se salário
menor ou igual a 400 e salário menor que 800 faça isso... assim sucessivamente.
Quando usamos o operador lógico “.e.”, os testes, neste caso dois, que formam o caso,
devem ser verdadeiros. O outro operador lógico “.ou.”, retorna verdadeiro caso um dos testes
que formam o conjunto satisfaça a uma determinada condição.
EXERCÍCIO:
crie o fluxograma do pseudocódigo visto acima.
A seguir iremos estudar as estruturas de repetição e desenvolver mais exemplos sobre o que
estudamos neste módulo.
Vamos falar um pouco sobre as estruturas de repetição, ou seja, uma parte do código que
deverá ser executada x vezes.
1. Loops contados : -> quando se tem, de forma prévia, o número de vezes que uma
determinada sequência de comandos será executada.
2. Loops condicionais : -> aqueles que não possuem um número pré-determinado de vezes
que a estrutura de comandos será executada, porém este número estará vinculado a uma
determinada condição.
Onde:
A variável é aquela que irá receber a contagem. Os valores iniciais e finais representam onde
começa e termina a contagem da repetição. O número de Passo (incremento) estipula a forma
da contagem, como por exemplo, incrementos de 1 em 1, 2 em 2 .... e após , a sequência de
comandos que será executada durante o loop.
23
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
Vale lembrar que o incremento não é de declaração obrigatória, e, caso não seja declarado,
assume automaticamente o valor 1.
Já os loops condicionais são aqueles cujo conjunto de comandos em seu interior é executado
até que uma determinada condição seja satisfeita.
24
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
Algoritmo soma
Variaveis
Real Soma // Acumulador
Inteiro Contador // Contador
Inicio
Soma = 0
Escrever“A soma dos números de 1 à 10 é igual a”
Para contador = 1 até 10
Soma = soma + contador
Proximo
Escrever soma
Fim.
25
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
ANINHAMENTOS
Vamos falar sobre "aninhamentos", ou seja, ter um conjunto de comandos de uma outra
construção dentro de um qualquer um dos tipos de construções apresentadas até este
momento, para isso, teremos que ter a construção interna embutida dentro da construção
externa.
O conjunto de comandos é um conjunto de comandos simples, podem ser inclusive de
instruções primitivas.
Por exemplo, temos uma determinada situação:
Vamos testar a região na qual um determinado cliente tem o seu domicílio e, dentro do
estado na qual este cliente reside naquela região, teremos uma tarifa de postagem
diferenciada.
EXERCÍCIOS PROPOSTOS
• Exercício 001 :
Escreva um pseudocódigo que irá receber a entrada de dois números e irá retornar como saída
a entrada (número) de maior valor.
• Exercício 002 :
Escreva um pseudocódigo na qual o usuário irá ter a oportunidade de entrar com 5 números e
o sistema irá gerar como resultado a soma dos 5 números entrados pelo usuário.
• Exercício 003 :
Uma empresa irá oferecer um reajuste salarial, cujo percentual será decidido através das
seguintes situações:
• Funcionários do sexo masculino com tempo de casa superior ou igual a 10 anos terão
direito a um reajuste de 5%;
• Funcionários do sexo masculino com tempo de casa inferior a 10 anos terão direito a um
reajuste de 3%;
• Funcionários do sexo feminino com tempo de casa superior ou igual a 8 anos terão direito
a um reajuste de 5%;
• Funcionários do sexo feminino com tempo de casa inferior a 8 anos terão direito a um
reajuste de 3%;
• Funcionários em qualquer uma das situações acima, porém com mais de um dependente
terá ainda um reajuste de 2% sobre o salário reajustado anteriormente.
• Exercício 004 :
26
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
O tema deste módulo será o das variáveis indexadas. Com uso freqüente na programação
convencional, variável indexada é um conjunto de variáveis do mesmo tipo, referenciadas
pelo mesmo nome e que armazenam valores distintos.
A sua distinção se dá pela divisão da variável, possuindo esta uma posição de armazenamento
dentro de seu conjunto, e esta é realizada por meio de índices, daí o nome “indexada”.
Existem dois tipos de variáveis indexadas:
• Vetor : quando a variável indexada possui um único índice;
• Matrix : quando a variável indexada
Variaveis
Matriz Tipo Nome_variável [dimensão1,dimensão2...]
...
...
No exemplo acima, criamos na verdade cinco variáveis nomes, porém elas estão divididas da
seguinte forma:
Sendo que cada uma das dimensões, poderá armazenar um valor diferenciado.
A variável Salario é do tipo Real, e possui 5 dimensões, assim como a variável Nome.
Os exemplos acima são do tipo Vetor, abaixo veremos uma variável indexada do tipo matriz:
27
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
Vamos exibir um exemplo onde iremos preencher os valores para a variável nome em suas
diversas dimensões e em seguida listar os mesmos:
Algoritmo Nomes
Variaveis
Matriz Caracter Nome[5]
Inteiro Conta , Lista
Inicio
Para conta = 1 até 5
Ler Nome[conta]
Proximo
Exercício 001 :
Escreva um pseudocódigo que irá Ler e armazenar em variável indexada 10 números e após o final da leitura, irá
exibir a soma dos 10 números armazenados nas dez dimensões da variável indexada.
Exercício 002 :
Escreva um pseudocódigo que irá ler e armazenar em variável indexada 50 números e após o final de leitura, irá
apresentar o número da dimensão e o valor armazenado da dimensão de variável indexada que conterá o maior
valor lido.
28
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
“BOLHA DE CLASSIFICAÇÃO”
Quando trabalhamos com variáveis indexadas, poderemos entre outros criar “índices”, ou
seja, ordenar os vetores para que eles sejam apresentados em uma determinada ordem. Este
procedimento, também é conhecido, em sua forma mais simples como “Bolha de
Classificação”. Sua lógica consiste na leitura de todos os elementos de um vetor,
comparando-se os valores de seus elementos vizinhos, e neste momento é empregada a
seguinte seqüência:
Algoritmo classificação
Variaveis
Matriz Inteiro numero[50]
Inteiro A,B
Real Aux
Inicio
Para A = 1 até 50
Ler numero[A]
Proximo
B=50
Faça Enquanto B > 1
Para A = 1 até ( B-1 )
Se numero[A] > numero[A+1}
Então
Aux=numero[A]
numero[A]=numero[A+1]
numero[A+1]=Aux
Fim_se
Proximo
B=B-1
Fim_enquanto
Escrever “Abaixo, a listagem ordenada dos números entrados”
Para A de 1 até 50
Escrever numero[A]
Proximo
Fim.
29
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
PESQUISA SEQÜENCIAL
Iremos efetuar a leitura de 100 nomes, em seguida, será solicitado um nome qualquer e,
iremos verificar se, dentre os 100 nomes entrados, existe o nome na qual foi solicitada a
pesquisa. Veja este algoritmo a seguir:
Algoritmo pesquisa
Variaveis
Matriz caracter nome[100]
Caracter pesquisado
Inteiro contador
Lógico encontrado
Inicio
Para contador = 1 até 100 f
Ler nome[contador]
Proximo
Ler pesquisado
Escrever “Aguarde ... pesquisando no banco de dados”
contador=1
encontrado=FALSO
Faça Enquanto contador<101 .E. NÃO encontrado
Se nome[contador]=pesquisado
Então
Encontrado=VERDADEIRO
Senão
Contador=contador+1
Fim_se
Fim_enquanto
Se encontrado
Então
Escreva “O valor está contido no banco de dados”
Senão
Escreva “O valor não existe no banco de dados”
Fim_se
Fim.
30
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
31
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
Cabeçalho :
Corpo :
• Funções;
• Procedimentos.
O subalgoritmo tipo função é aquele na qual um valor é calculado com base em outros
valores, normalmente passados pelo algoritmo principal.
O subalgoritmo tipo procedimento é aquele que retorna zero ou mais valores ao
algoritmo que o invocou, sendo que, ao contrário das funções, esses valores não são
explícitos, ou seja, a chamada de procedimentos nunca é realizada ao meio de expressões
é só é realizada em comandos isolados dentro do algoritmo, como instruções de entrada e
saída de dados.
Veja a seguir um algoritmo e seu subalgoritmo para se calcular a raiz quadrada de um
determinado número:
Algoritmo Raiz_quadrada
Var num1, num2 : real
Função Raiz(numero:real) : real
Var calc : real
Inicio
Calc = SQR(numero)
Retorne Calc
Fim
Inicio
Escreva “Numero para Raiz Quadrada”
Leia num1
Num2 = Raiz(num1)
Escreva “Raiz quadrada é igual a:”, num2
Fim
32
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
Com certeza, teria sido mais fácil executar o calculo de raiz quadrada diretamente no
algoritmo principal, porém o fizemos assim para que você tenha uma idéia de como
funciona um subalgoritmo, ou seja, a passagem de valores de uma rotina principal, para uma
rotina secundária e o retorno do valor resultante deste processamento.
No módulo passado nos referíamos aos subalgoritmos. Aqui vamos falar um pouco sobre
variáveis globais e locais.
VARIÁVEL GLOBAL
Como o próprio nome diz, uma variável global pode ser utilizada em qualquer parte do
algoritmo ou em seus subalgoritmos, ou seja, elas são visíveis em todo o procedimento que
engloba o processamento.
VARIÁVEL LOCAIS
Ao contrário, as variáveis locais são definidas exclusivamente dentro de um subalgoritmo e
sua vida se restringe ao uso dentro do próprio subalgoritmo onde foi declarada.
- Um “avião” foi fabricado pela Embraer, porém este poderá voar em qualquer parte do
mundo. Este avião poderia ser comparado a uma variável global.
- O “elevador” do edifício “ABC”, foi implantado naquele edifício e sua vida, ou seja,
sua utilidade está apenas naquele edifício. Este elevador poderia ser comparado a uma
variável local.
Algoritmo Raiz_quadrada
Var num1, num2 : real
Função Raiz(numero:real) : real
Var calc : real
Inicio
Calc = SQR(numero)
Retorne Calc
Fim
Inicio
Escreva “Numero para Raiz Quadrada”
Leia num1
Num2 = Raiz(num1)
Escreva “Raiz quadrada é igual a:”, num2
Fim
Observe que as variáveis NUM1 e NUM2 utilizadas no processo, foram declaradas no inicio do
algoritmo principal, ou seja, estas são variáveis globais. Já a variável CALC, definida dentro
da função RAIZ é uma variável local, ou seja, operável apenas dentro daquela função.
33
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
Pelo que observamos até este ponto, um subalgoritmo é um nome dado a um determinado
trecho do algoritmo principal, que, na maioria das vezes, é responsável pela execução de uma
única tarefa dentro do contexto do sistema. Estudamos que existem dois tipos de
subalgoritmos:
Parâmetros formais :
São aqueles que, de forma automática substituem parâmetros determinados por “nomes
simbólicos” por valores passados durante a execução do processo. Veja o exemplo a seguir:
Na verdade, o parâmetro formal “número” será substituído por um parâmetro real, ou seja,
um valor numérico para o calculo da raiz quadrada de um determinado número.
Parâmetros reais :
Quando não temos parâmetros formais e sim valores pré-estabelecidos que não serão
alterados durante o processamento.
Através desta lógica, devemos saber que, durante o processamento dos dados, quando são
substituídos parâmetros formais por valores reais, os parâmetros reais são calculados e os
parâmetros formais recebem uma cópia dos valores resultantes do processamento. Seguindo
esta lógica, iremos entender que, os parâmetros formais não afetam os parâmetros reais.
34
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
PESQUISA SEQÜENCIAL
Dados :
vetor de n elementos (n conhecido)
elemento a ser pesquisado no vetor
Resultado:
Se o elemento existe, mostra-se a sua posição ou o total de ocorrências deste no vetor.
Se o elemento não existe, mostra-se uma mensagem de falhas.
As considerações que podem ser feitas sobre os dados de entrada (vetor), são do tipo: o vetor
esta ou não ordenado; o elemento ocorre uma única vez (pesquisa única) ou repetidas vezes
no vetor (pesquisa única). Isso acarreta os seguintes tipos de pesquisa:
a. Desordenada Única
b. Desordenação Múltipla
c. Ordenada Única
d. Ordenada Múltipla
PESQUISA BINÁRIA
Dados :
Resultado
36
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
SELECTION SORT
Este método é um dos mais simples e intuitivos dentre os métodos existentes. Sua estratégia básica é selecionar
o menor elemento da seqüência considerada e colocá-lo no início da seqüência. Assim, dada uma seqüência de
tamanho n, várias iterações são efetuadas, sendo que a cada vez que esta estratégia é aplicada, uma nova
seqüência é gerada pela eliminação do menor elemento da seqüência original.
Procedure SelectionSort ( var vet : vetor; n : integer);
{ordenado crescente}
var
i, j, pmin : integer;
begin
for i← 1 to (n-1) do
begin
pmin ← i;
for j← (i+1) to n do
if vet[j] < vet[pmin]
then pmin ← j;
trocar (vet[i], vet[pmin] ) ;
end;
end;
BUBBLE SORT
A estratégia utilizada pelo BubbleSort consiste de comparações e trocas entre elementos consecutivos da
seqüência, a fim de "empurrar" o maior elemento para a última posição. Assim, várias iterações são efetuadas e,
para cada seqüência considerada, a aplicação da estratégia gera uma nova seqüência pela eliminação do maior
elemento da seqüência original.
Além disto, uma variável de controle (lógica) é utilizada para registrar a ocorrência ou não de troca entre
elementos da seqüência. Quando nenhuma troca é efetuada, tem-se que a seqüência considerada já estava
ordenada. Esta particularidade determina, em alguns casos, um número menor de comparações que o método
Selection Sort.
37
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
20. RECURSIVIDADE
Recursão é um método geral para resolver problemas reduzindo-os a problemas mais simples
do mesmo tipo. A estrutura geral de uma solução recursiva de um problema é assim :
Resolva de forma recursiva um problema
• Se o problema é trivial, faça o obvio (resolva-o)
• Simplifique o problema
• Resolva de forma recursiva (um problema mais simples)
• Combine (na medida do possível) a solução do(os) problemas mais simples em uma
solução do problema original
Exemplos :
38
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
39
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
40
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
41
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
42
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
43
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
44
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
45
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
46
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
Neste ultimo algoritmo começamos a perceber que quando é necessário armazenar mais de uma
informação sobre uma determinada pessoa é necessário mais de um vetor para isto, ou seja se eu quiser
guardar o Nome, o Telefone e a Data de Nascimento da pessoa eu iria precisar de três vetores, um para
cada tipo de dado, esta necessidade de mais de um vetor está relacionado com o fato do vetor ser uma
estrutura homogênea ou seja, só consegue armazenar um único tipo de dado.
47
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
ÍNDICE
1. INTRODUÇÃO 1
2. DEFINIÇÃO DE ALGORITMO 1
3. FASES DE UM ALGORITMO 2
4. CONCEITOS 3
6. DECOMPOSIÇÃO (TOP-DOWN) 4
7. DESENVOLVIMENTO ESTRUTURADO 5
8. FORMA DE REPRESENTAÇÃO 6
9. TIPOS DE PROCESSAMENTO 9
12. CONSTANTES 14
48
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA
CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB
20. RECURSIVIDADE 38
49
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA