Você está na página 1de 50

Universidade Federal do Pará

Departamento de Engenharia Mecânica

APOSTILA
MODULO 2: ALGORITMOS NUMÉRICOS

PROFESSOR Dr. SAÏD MOUNSIF


CURSO DE EXTENSÃO EM PROGRAMAÇÃO NUMÉRICA USANDO AS FERRAMENTAS DE MATLAB

1. INTRODUÇÃO

A automatização de tarefas é um aspecto marcante da sociedade moderna. O aperfeiçoamento tecnológico


alcançado, com respeito a isto, teve como elementos fundamentais a análise e a obtenção de descrições da
execução de tarefas em termos de ações simples o suficiente, tal que pudessem ser automatizadas por uma
máquina especialmente desenvolvida para este fim, O COMPUTADOR.

Em ciência da computação houve um processo de desenvolvimento simultâneo e interativo de máquinas


(hardware) e dos elementos que gerenciam a execução automática (software) de uma dada tarefa. E essa
descrição da execução de uma tarefa, como considerada acima, é chamada algoritmo.

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

"O conceito central da programação e da Ciência da Computação é o


conceito de algoritmos, isto é, programar é basicamente construir
algoritmo.
É a descrição, de forma lógica, dos passos a serem executados no
cumprimento de determinada tarefa.
"O algoritmo pode ser usado como uma ferramenta genérica para
representar a solução de tarefas independente do desejo de automatizá-
las, mas em geral está associado ao processamento eletrônico de dados,
onde representa o rascunho para programas (Software).
"Serve como modelo para programas, pois sua linguagem é intermediária
à linguagem humana e às linguagens de programação, sendo então, uma
boa ferramenta na validação da lógica de tarefas a serem automatizadas.
"Um algoritmo é uma receita para um processo computacional e consiste
de uma série de operações primitivas, interconectadas devidamente,
sobre um conjunto de objetos. Os objetos manipulados por essas receitas
são as variáveis.
Como qualquer modelo, um algoritmo é uma abstração da realidade. A
abstração é o processo de identificar as propriedades relevantes do
fenômeno que esta sendo modelado. Usando o modelo abstrato, podemos
nos centrar unicamente nas propriedades relevantes para nós,
dependendo da finalidade da abstração, e ignorar as irrelevantes.
Os algoritmos, apesar de servirem para representar a solução de qualquer
problema, no caso do Processamento de Dados, eles devem seguir as
regras básicas de programação para que sejam compatíveis com as
linguagens de programação.

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.

O aprendizado de algoritmos não se consegue a não ser através de muitos exercícios.

Algoritmos não se aprende:

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.

Ex. Ligue os faróis ; Abra a porta

Programa
Ações de um algoritmo obedecendo à sintaxe de uma linguagem de programação

5. COMO CONSTRUIR UM ALGORITMO

1. Análise Preliminar

Entenda o problema, identifique os dados e os resultados.

2. Solução

Desenvolver algoritmo para resolver o problema

3. Teste de qualidade

Ideal testar todas as combinações possíveis

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

Resultado do algoritmo não satisfatório, altere-o e submeta a um novo teste.

5. Produto Final

Algoritmo concluído e testado

6. DECOMPOSIÇÃO (TOP-DOWN)

Dividir o problema em problemas menores.

Exemplo 1

1. Troque o pneu furado.

Exemplo 2

1. Pegue o material necessário (Inicio)

2. Troque o pneu furado (Meio)

3. Guarde o material (Fim)

Exemplo 3

1. Abra o porta-malas

2. Retire o macaco, o estepe e a chave em cruz e o sinalizador

3. Coloque o sinalizador atrás do carro

4. Afrouxe as porcas do pneu furado

5. Coloque o macaco na posição correta

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

10. Coloque as porcas

11. Desça o carro

12. Retire o macaco

13. Aperte as porcas do pneu trocado

14. Guarde o macaco, o pneu furado , o sinalizador e a chave em cruz.

15. Feche o porta-malas

Algumas instruções poderiam ser dividas mais uma vez.

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.

Os Objetivos destas técnicas são:

Facilitar o desenvolvimento do algoritmos


Facilitar o seu entendimento pelos humanos
Antecipar a comprovação de sua correção
Facilitar a sua manutenção e modificação
Permitir que o seu desenvolvimento possa ser empreendido simultaneamente por uma
equipe de pessoas

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

Representação gráfica de algoritmos, ou seja, das instruções e/ou módulos


do processamento, conhecido também como diagrama de bloco, através de
formas geométricas, facilitando a compreensão da lógica utilizada pelo
profissional. Existem atualmente vários padrões para definir as formas
geométricas a serem utilizadas para as diversas instruções (passos) a
serem seguidos pelo sistema.

veja alguns símbolos que são utilizados no 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 como ficaria este fluxograma:

A principio marcamos o inicio do fluxograma;


Em seguida, armazenamos em uma posição de memória (variável), o valor de
240,00. Esta posição de memória teve a denominação de “salariominimo”;
Em seguida, armazenamos em uma posição de memória denominada “media” o
valor da variável “salariominimo” dividido por 30;
Em seguida, enviamos ao periférico de saída (impressora), o conteúdo da variável
“media” equivalente à R$ 8,00.
Em seguida, finalizamos o fluxo.

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

PSEUDOCÓDIGO, TAMBÉM CONHECIDO COMO LINGUAGEM ESTRUTURADA

A representação de um algoritmo na forma de pseudocódigo é a seguinte:

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

Ex. Obter a média aritmética das quatro notas

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

Se as quatro notas são 10,5,8,1

1. Inicio
2. 10+5 = 15
3. 15+8 =23
4. 23+1 =24
5. 24 / 4=6
6.Fim

PROCESSAMENTO CONDICIONAL

Um conjunto de instruções (pode ser apenas uma instrução) é executado ou não


dependendo de uma condição. Se a condição que estiver sendo testada tiver
resposta afirmativa, o conjunto de instruções é executado.

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

Se as quatro notas são 10,5,8,1

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.

PROCESSAMENTO COM REPETIÇÃO

Conjunto de instruções (pode ser apenas uma) que é executado um determinado número de
vezes.

Sendo determinado uma condição de parada.

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

Se existem dois alunos na sala e suas notas são: 10, 5, 8, 1 e 4, 6, 7, 3

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.

10. TIPOS DE DADOS

Os dados são representados pelas informações a serem processadas por um computador.


Estas informações estão caracterizadas por quatro tipos de dados: inteiros, reais,
caracteres e lógicos.

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.

Ex. “PROGRAMAÇÃO”, “Rua Alfa, 52 apto 1”, “7”, “249-4455”

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.

11. VARIÁVEIS (IDENTIFICADORES)

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 nome de uma variável pode conter um ou mais caracteres;

O nome de uma variável não pode conter caracteres com acentos;

O primeiro caractere do nome de uma variável deve ser sempre uma letra;

Não pode possuir espaços em branco;

Não pode ser uma palavra reservada a uma instrução de programa;

Não poderão ser utilizados outros caracteres que não sejam letras e números.

Os nomes escolhidos devem explicitar seu conteúdo.

Ex. NOMEUSUARIO, FONE1, X, DELTA25, Z4,..ect.

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

Tudo aquilo que é fixo ou estável

Ex. o valor do π --> 3.14159

13. OPERAÇÕES BÁSICAS

Expressões

Na lógica de programação uma expressão tem o mesmo objetivo/conceito do termo expressão da


matemática comum, ou seja, um conjunto de variáveis e constantes que se relacionam por meio de
operadores aritméticos. Este conjunto de expressão e operadores aritméticos (soma por exemplo), formam
uma fórmula que, após solucionada fornecem um resultado em específico.

Observe o gráfico a seguir:

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:

AREA = altura * base

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 “*”.

Em lógica de programação, os operadores podem ser classificados em dois grupos:

• 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.);

• Expressão literal - quando o resultado de sua avaliação for um valor literal.

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:

NomeDaVariavel = Valor ou Expressão Atribuída.

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

FUNÇÕES PRIMITIVAS: SEN(x); COS(x); TG(x); ABS(x); INT(x); Raiz(x); PI( );


OPERADORES RELACIONAIS: São utilizados para relacionar variáveis ou expressões,
resultando num valor lógico (Verdadeiro ou Falso), sendo eles:

= - igual ≠ - diferente (<>)


< - menor > - maior
≤ - menor ≥ - maior ou igual
ou igual

OPERADORES LÓGICOS:

São utilizados para avaliar expressões lógicas, sendo eles:

.E. - e lógico ou conjunção.

.Ou. - ou lógico ou disjunção.

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.

A maioria das linguagens de programação utiliza as seguintes prioridades de operadores :

1º - Efetuar operações embutidas em parênteses "mais internos"

2º - Efetuar Funções

3º - Efetuar multiplicação e/ou divisão

4º - Efetuar adição e/ou subtração

5º - Operadores Relacionais

6º - Operadores Lógicos

O programador tem plena liberdade para incluir novas variáveis, operadores ou


funções para adaptar o algoritmo as suas necessidades, lembrando sempre, de que, estes
devem ser compatíveis com a linguagem de programação a ser utilizada.

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

Com base no que colocamos, fazemos as perguntas a seguir:

Na expressão A*B-C, qual será a sequência de execução?

Na expressão (A*B)-C, qual será a sequência de execução?

Na expressão A*(B-C), qual será a sequência de execução?

Na expressão ( A*(B-C*(D/E))), qual será a sequência de execução?

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.

14. PRIMEIRAS INSTRUÇÕES

Após dominarmos os assuntos anteriormente tratados, passaremos a estudar as instruções


primitivas, ou seja, comandos básicos que executam tarefas consideradas essenciais para a
execução de qualquer programa de computador. Um exemplo deste tipo de instrução são
aquelas responsáveis pela comunicação do operador com o computador por meio do teclado
(entrada de dados) ou ainda a impressão de um relatório (saída de dados “sem contar com a
parte estética do relatório, alinhamento de colunas, etc...).

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

COMANDOS DE ENTRADA E SAÍDA :

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.

COMANDO DE ENTRADA DE DADOS

Ler (variável_1, variável_2,...)

COMANDO DE SAÍDA DE DADOS

Escrever (expressão_1, expressão_2,...)

COMANDO DE POSICIONAMENTO NA TELA

Posicionar (expressão_1, expressão_2,...)

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

COMANDOS DE CONTROLE DE FLUXO:

Para representar a solução de um problema devemos escrever o conjunto de passos a serem


seguidos, sendo que, a maioria dos problemas exigem uma dinâmica na sua solução, impondo
assim que os algoritmos executem conjunto de instruções de acordo com as possíveis
situações encontradas no problema original. E de acordo com a Programação Estruturada os
mecanismos utilizados para esse controle são: Sequência, Seleção e Repetição.

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:

Imagine a seguinte situação : em uma empresa, será solicitado o salário de um determinado


funcionário, para se calcular seu novo salário, sendo que, se este tiver um salário superior a
R$ 300,00, o reajuste será de 5%, caso contrário o reajuste será de 8%.
Observe que teremos que testar o valor do salário, para saber o índice a ser aplicado.
Vamos criar então um pseudocódigo com este objetivo:

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

Se salario <= 300


então
Salario_final=(salario*1,08)
senão
Salario_final=(salario*1,05)
Fim_se
Escrever “Salario_final”
Fim.

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.

Observe a sintaxe de uma estrutura de decisão a seguir:

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

Em fluxograma, uma estrutura de decisão é representada pelo símbolo:

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

Observe o trecho do pseudocódigo acima, representado no fluxograma:

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”.

Observe a seguir a sintaxe da estrutura de decisão do tipo escolha em pseudocódigo:

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:

Salários inferiores a R$ 400,00 = reajuste de 9%


Salários iguais a R$ 400,00 e inferiores a R$ 800,00 = reajuste de 7%
Salários iguais a R$ 800,00 e inferiores a R$ 1000,00 = reajuste de 5%
Fora das faixas supra citadas = reajuste de 3%

Veja o pseudocódigo do exemplo citado:

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.

15. ESTRUTURAS DE REPETIÇÃO

Vamos falar um pouco sobre as estruturas de repetição, ou seja, uma parte do código que
deverá ser executada x vezes.

Em linguagem de programação, as estruturas de repetição são conhecidas como laços (loops).


Trabalhamos basicamente com dois tipos de estruturas de repetição:

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.

Em pseudocódigo, utilizamos a seguinte sintaxe para loops contados:

Para <variavel> = <valor inicial> até <valor final> Passo <numero>


<sequencia de comandos>
Proximo

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

No fluxograma, utilizamos a seguinte sintaxe para representar loops contados:

A lógica de trabalho do laço contado é apresentada a seguir:

1. No inicio da leitura do código/fluxo, o valor inicial é atribuído à variável;


2. O valor da variável é comparado ao valor final;
3. Se o valor da variável for maior que o valor final, a sequência de comandos que faz parte
do laço não é executado e o controle do processo passa para a próxima linha após o final
do laço ( PROXIMO ) ou para o símbolo ao lado (no caso de fluxograma);
4. Se o valor da variável for menor ou igual ao do valor final, a sequência de comandos é
executada e, ao final do último comando, o valor do incremento é adicionado a variável e
retorna-se à comparação entre variável e valor_final, repetindo todo o processo anterior.

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.

O pseudocódigo mais comum utilizado neste sentido é o apresentado a seguir:

Faça Enquanto <condição>


<sequência de comandos>
Fim_enquanto

A sintaxe de execução deste é:

1. No inicio da execução do enquanto, a condição é testada;


2. Se o resultado do teste for verdadeiro, a sequência de comandos é executada e ao
término desta, retorna-se ao teste da condição;
3. Sendo a condição falsa, o controle da aplicação passa para a próxima linha após o
Fim_enquanto.

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

No fluxograma, poderemos representar este tipo de operação da forma que segue:

Em resumo, neste tipo de operação, a execução somente abandonará o laço quando a


condição for falsa.

Veja um exemplo a seguir, utilizando-se de pseudocódigo, onde iremos apresentar a soma de


uma contagem de números de 1 à 5:

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.

No exercício acima, teremos como resultado a expressão :

A soma dos números de 1 à 10 é igual a 55

Desenhe o fluxograma do pseudocódigo acima descrito.

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.

Na verdade, teremos testes dentro de testes e cada um com um determinado procedimento.

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 :

Escreva um fluxograma na qual o usuário dará a entrada de 10 números e ao final o sistema


irá exibir o maior número entrado.

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

16. ESTRUTURA DE DADOS

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

O número de índices dentro de uma variável é denominado dimensão.


Para se definir uma variável indexada, utilizamos a seguinte sintaxe:

Variaveis
Matriz Tipo Nome_variável [dimensão1,dimensão2...]
...
...

Veja a seguir alguns exemplos de definição de variáveis indexadas:

Matriz Caracter Nome [ 5 ]

No exemplo acima, criamos na verdade cinco variáveis nomes, porém elas estão divididas da
seguinte forma:

Nome[1] , Nome[2], Nome[3], Nome[4], Nome[5]

Sendo que cada uma das dimensões, poderá armazenar um valor diferenciado.

Matriz Real Salario[5]

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:

Matriz Inteiro CodigoProduto[3,10]

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

No exemplo anterior, teremos a variável CodigoProduto, dividida nas seguintes dimensões:

CodigoProduto[1,1] CodigoProduto[2,1] CodigoProduto[3,1]


CodigoProduto[1,2] CodigoProduto[2,2] CodigoProduto[3,2]
CodigoProduto[1,3] CodigoProduto[2,3] CodigoProduto[3,3]
CodigoProduto[1,4] CodigoProduto[2,4] CodigoProduto[3,4]
CodigoProduto[1,5] CodigoProduto[2,5] CodigoProduto[3,5]
CodigoProduto[1,6] CodigoProduto[2,6] CodigoProduto[3,6]
CodigoProduto[1,7] CodigoProduto[2,7] CodigoProduto[3,7]
CodigoProduto[1,8] CodigoProduto[2,8] CodigoProduto[3,8]
CodigoProduto[1,9] CodigoProduto[2,9] CodigoProduto[3,9]
CodigoProduto[1,10] CodigoProduto[2,10] CodigoProduto[3,10]

Vamos comparar as variáveis indexadas a um Bloco de uma quadra residencial. O bloco é


único, porém está dividido em diversos apartamentos ( dimensões ) e em cada apartamento
reside um morador diferente ( valor armazenado ).

Quando estamos trabalhando com variáveis indexadas, temos que obrigatoriamente


especificar o indice da variável na qual queremos trabalhar. Nos exemplos acima, não
poderíamos nos referir apenas a variável NOME, mas sim a NOME[x], onde o “x” seria uma
dimensão válida, neste caso de 1 à 5.

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

Para lista = 1 até 5


Escrever nome[lista]
Proximo
Fim.

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:

1. Serão realizadas uma varredura a menos do total de elementos do vetor;


2. Na primeira varredura, verificamos que o elemento do vetor já se encontra em seu
devido lugar;
3. Na segunda varredura, o procedimento é análogo à primeira varredura e vai até o
último elemento;
4. Ao final do procedimento, o vetor estará classificado segundo o critério escolhido.

Vamos à prática, no exemplo a seguir, iremos realizar a leitura de 5 números e em seguida


classifica-los em ordem crescente:

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

Um outro processo que poderá ser utilizado em programação, é a pesquisa seqüencial, ou


seja, serão verificados todos os componentes de um vetor, para verificar se nestes estão
armazenados um determinado valor. Exemplo:

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

17. MODULARIZANDO ALGORITMOS

Em determinadas situações, devido à complexidade de alguns algoritmos, é necessária a


divisão do mesmo em diversas partes, para que assim, o sistema tenha uma operação precisa.
Essa divisão de tarefas é denominada de “Subalgoritmos”. Os subalgoritmos nada mais são do
que rotinas que possuem uma função especifica.

A modularização consiste num método para facilitar a construção de grandes programas,


através de sua divisão em pequenas etapas, que são : módulos, rotinas, sub-rotinas ou sub-
programas. Permitindo o reaproveitamento de código, já que podemos utilizar um módulo
quantas vezes for necessário, eliminando assim a necessidade de escrever o mesmo código em
situações repetitivas.

Vamos imaginar a seguinte situação:

Em um sistema comercial, em várias etapas temos que verificar se o número do CPF do


cliente foi digitado de forma correta. Imaginando que tal situação se repete por 38 vezes no
sistema. Teríamos que escrever 38 vezes o mesmo trecho de código? Não, para isso teríamos
uma rotina “subalgoritmo” que teria esta função. Este subalgoritmo teria um nome e, sempre
que fosse necessária a verificação do CPF, bastaria invocar “chamar” este subalgoritmo.

De um modo geral, os subalgoritmos são importantes devido aos seguintes aspectos:

Estruturação de algoritmos, facilitando assim a detecção de erros. Imagine se a rotina


de verificação do CPF do cliente tiver um erro lógico. Em uma primeira hipótese, teríamos
que corrigir a mesma em 38 pontos diferentes do sistema, porém utilizando subalgoritmo,
teríamos apenas que realizar uma correção em um ponto do sistemas;

Modularização de sistemas, que justamente é utilizada para a reutilização de rotinas


“subalgoritmos” em vários pontos do algoritmo principal;

Subdivisão de algoritmos extensos, facilitando assim a sua compreensão.

O esquema de um algoritmo e seus subalgoritmos pode ser observado a seguir:

Algoritmo (nome do algoritmo)


Variaveis
Definição das variáveis globais
<definição dos subalgoritmos>
Inicio
<estrutura do algoritmo principal>
Fim.

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

Quando o sistema está executando o algoritmo principal e, é invocado algum subalgoritmo


(através de um nome dado ao mesmo), a execução deste é interrompida e, o sistema passa a
executar os comandos constantes do subalgoritmo. Ao final desta execução, o sistema retorna
automaticamente para o algoritmo principal a partir do ponto onde foi realizada a chamada
do subalgoritmo.

Um subalgoritmo é composto por:

Cabeçalho :

onde é definido o nome do subalgoritmo e as variáveis que serão utilizadas pelo


mesmo;

Corpo :

onde são especificadas as instruções do subalgoritmo.

Os subalgoritmos podem ser de dois tipos:

• 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.

Imagine a seguinte situação:

- 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.

Veja o algoritmo utilizado no módulo anterior:

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:

1. Funções : que retornam um único valor para o algoritmo que a invocou;


2. Procedimentos : que retornam mais de um valor ou nenhum valor ao algoritmo que o
invocou.

Nas funções e procedimentos, temos as variáveis globais, definidas no inicio de um algoritmo


e que podem ser utilizadas por todos os subalgoritmos assim como pelo algoritmo principal e
as variáveis locais, que são definidas dentro de um subalgoritmo e só podem ser utilizadas
dentro deste.

Para completar o nosso quebra-cebeças, temos também o que chamados de parâmetros, ou


seja, as portas pelas quais se realiza a comunicação bidirecional entre o algoritmo principal e
seus subalgoritmos e vice e versa. Possuímos dois tipos de parâmetros:

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:

Função Raiz(numero:real) : real


Var calc : real
Inicio
Calc = SQR(numero)
Retorne Calc
Fim

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

18. ALGORITMOS DE PESQUISA

A capacidade de armazenar informações foi um passo decisivo na evolução da ciência da


computação e para o nível generalizado de utilização do computador. Com isso, a capacidade
de recuperar informações, para posterior processamento, assume papel de suma importância
na utilização cotidiana do computador, existindo para isto inúmeros exemplos, como:
recuperação de dados de dados de transações bancárias de um cliente através de um número
de conta, no cadastro de cliente/operações de um banco. Portanto, algoritmos de pesquisa
devem ser projetados de forma a garantir a confiabilidade e eficiência exigidas pela
importância das aplicações existentes.

A pesquisa de dados pode ser efetuada tanto em unidades de memória secundárias


(disco rígido, disquetes, fita), quanto na memória principal do computador.

PESQUISA SEQÜENCIAL

O método mais simples de determinar a presença, ou não, de um elemento numa seqüência,


é percorrê-la a partir do seu início, efetuando comparações, até que o elemento seja
encontrado ou o fim da seqüência seja alcançado. Este método é chamado de 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

O método de pesquisa seqüencial é fácil de escrever e é razoavelmente eficientes para


seqüências com poucos elementos. Entretanto, para seqüências de tamanho considerável, que
ocorrem na maioria das aplicações existentes, a utilização do método torna-se inviável. Uma
estratégia interessante e eficiente é utilizada no método de pesquisa binária.
35
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

Descrição Geral do Método:

• Definir intervalo inicial (i, f) de busca


• Determinar a posição média do intervalo(m = (i+f) DIV 2)
• Comparar o elemento da posição média (v[m]) com o elemento E:
• Caso sejam iguais então terminou as pesquisa
• Caso contrário definir o novo intervalo de busca
• Aplicar sucessivamente o passo anterior até encontrar E ou não existir mais o intervalo de
busca

São aspectos fundamentais do método:

• vetor de entrada tem que estar ordenado


• intervalo de busca inicial é (i,f) = (1,n)
• intervalo de busca, considerado a cada iteração, é definido do seguinte modo:
(i,m-1), se (E < v[m])
(m+1,f), se (E > v[m])
tendo a metade do tamanho do intervalo original
• O teste de repetição é (i <= f) e Não Achou

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 falha

19. ALGORITMOS DE ORDENAÇÃO

Os problemas de ordenação são comuns tanto em aplicações comerciais quanto científicas.


Entretanto, raro são os problemas que se resumem à pura ordenação de seqüências de
elementos. Normalmente, os problemas de ordenação são inseridos em problemas de
pesquisa, intercalação e atualização. Isto torna ainda mais importante o projeto e a
construção de algoritmos eficientes e confiáveis para tratar o problema.

O nosso objetivo é analisar os seguintes tipos de ordenação :

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.

Procedure BubbleSort ( var vet : vetor ; n integer) ;


{ordem crescente}
var
i, limite : integer;
trocou : boolean;
begin
limite ← n;
repeat
trocou ← false;
for i← 1 to (limite - 1) do
begin
if vet[i] > vet [i+1] then
begin
trocar(vet[i], vet[i+1]);
trocou ← true;
end;
end;
limite ← limite - 1
until not trocou
end;

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

Este método baseia-se no seguinte processo de inserção controlada:

• Com o primeiro elemento da seqüência forma-se uma seqüência de tamanho 1, ordenada.


• Cada elemento restante da seqüência original é inserido na seqüência, de modo que esta
permaneça ordenada. Isto é feito através de uma pesquisa na seqüência ordenada que
determina a posição que o novo elemento deverá ser inserido.
• Quando um elemento é inserido a frente de outro, estes deverão ser deslocados de uma
posição.

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

Um subprograma recursivo chama a si próprio constantemente, cada vez em uma situação


mais simples, até chegar ao caso trivial, quando pára. Devemos lembrar que recursividade
deve ser utilizada na solução de problemas que tenham a natureza recursiva.

Exemplos :

Somatório de inteiros : Se n =1; Somatório = 1. Caso contrário Somatório = n + Somatório(n-1)

Fatorial: Se n=0 ou n=1 ; Fatorial = 1. Caso contrário Fatorial = n*Fatorial(n-1)

MDC: Se b divide a, então o MDC é b. Caso contrário, MDC(a,b) = MDC(b,a mod b)

N-ésimo termo da série de Finonacci: 1° e 2° = 1 e n-ésimo = (n-1)+(n-2)

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

21. EXEMPLO DE ALGORITMOS

um exemplo simples de algoritmo, este apenas lê um nome e deseja um bom dia


para a

um exemplo de utilização de comandos de entrada e saida

um exemplo de utilização de Comandos da Álgebra Convencional

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

um exemplo de utilização de Comandos da Atribuição:

um exemplo de utilização da estrutura SE

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

um exemplo de utilização da estrutura SE

um exemplo de utilização da estrutura SE

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

um exemplo de utilização da estrutura SE

um exemplo de utilização do bloco caso:

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

um exemplo da utilização da estrutura CASO:

um exemplo da utilização do laço de repetição REPITA ... ATÉ QUE

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

um exemplo da utilização do laço de repetição REPITA ... ATÉ QUE

um exemplo da utilização do laço de repetição Enquanto

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

um exemplo da utilização do laço Faça

um exemplo da utilização de declaração de variáveis

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

um exemplo da utilização de estrutura homogênea composta de várias variáveis: Vetores

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

5. COMO CONSTRUIR UM ALGORITMO 3

6. DECOMPOSIÇÃO (TOP-DOWN) 4

7. DESENVOLVIMENTO ESTRUTURADO 5

8. FORMA DE REPRESENTAÇÃO 6

9. TIPOS DE PROCESSAMENTO 9

10. TIPOS DE DADOS 12

11. VARIÁVEIS (IDENTIFICADORES) 13

12. CONSTANTES 14

13. OPERAÇÕES BÁSICAS 14

14. PRIMEIRAS INSTRUÇÕES 17

15. ESTRUTURAS DE REPETIÇÃO 23

16. ESTRUTURA DE DADOS 27

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

17. MODULARIZANDO ALGORITMOS 31

18. ALGORITMOS DE PESQUISA 35

19. ALGORITMOS DE ORDENAÇÃO 36

20. RECURSIVIDADE 38

21. EXEMPLO DE ALGORITMOS 39

49
PROF. DR. SAÏD MOUNSIF
UFPA–CT-DEPARTAMENTO DE ENGENHARIA MECÂNICA

Você também pode gostar