• Nenhum resultado encontrado

Notas de Aula de Algoritmos_

N/A
N/A
Protected

Academic year: 2019

Share "Notas de Aula de Algoritmos_"

Copied!
23
0
0

Texto

(1)

UNIFEI

UNIVERSIDADE FEDERAL DE ITAJUBÁ

Instituto de Engenharia de Sistemas e Tecnologias da Informação-IESTI

Disciplina ECO002/ELT102 – Técnicas de Programação

Professores Dr. Enzo Seraphim (seraphim@unifei.edu.br)

Dra.Thatyana de Faria Piola Seraphim (thatyana@unifei.edu.br) Msc. Rodrigo Maximiano Antunes de Almeida (rodrigomax@unifei.edu.br)

Notas de Aula de Algoritmos

Sumário

1 INTRODUÇÃO...3

1.1 Lógica...3

1.1.1 Sequência Lógica...3

1.1.2 Instruções...3

1.2 Algoritmo...4

1.2.1 Pseudocódigo...4

1.2.2 Regras para construção de Algoritmos...4

1.2.3 Fases para construção de Algoritmos...5

1.2.4 Teste de Mesa...5

1.3 Programas...6

2 PORTUGOL...6

2.1 Entrada, Processamento e Saída...6

2.1.1 Corpo Geral de um Programa...6

2.1.2 Linhas de comentário...7

2.1.3 Identação...7

2.2 Variáveis...7

2.2.1 Variáveis de entrada e saída...7

2.2.2 Identificadores...8

2.2.3 Tipos de dados...8

2.2.4 Tipos primitivos de dados...8

2.2.5 Sinal de atribuição...9

2.3 Operadores e Expressões...9

2.3.1 Operadores Aritméticos...9

2.3.2 Operadores Relacionais...9

2.3.3 Operadores lógicos...9

2.3.4 Expressões lógicas...10

2.3.5 Prioridade de Expressões...10

2.4 Comandos de i/o (input/output)...10

2.5 Funções Pré-Definidas...11

2.6 A tomada de Decisões...11

(2)

2.6.2 Desvios encadeados...12

2.6.3 Estruturas de Decisão...13

2.7 Laços ou Malhas de Repetição...13

2.7.1 Repetição com teste no Início do Looping...14

2.7.2 Repetição com teste lógico no fim do Looping...14

2.7.3 Repetição com variável de controle...15

2.8 Estrutura de Dados Homogêneas ...16

2.8.1 Matrizes de uma Dimensão ou Vetores...17

2.8.2 Operações Básicas com Matrizes do Tipo Vetor...17

2.8.3 Leitura dos Dados de uma Matriz...17

2.8.4 Escrita dos Dados de uma Matriz...18

2.8.5 Matrizes com mais de uma dimensão...18

2.8.6 Leitura dos Dados de uma Matriz...19

2.8.7 Escrita dos Dados de uma Matriz...19

2.9 Programação Modular...19

2.9.1 Sub-Rotinas...20

2.9.2 Procedimentos...20

2.9.3 Funções...22

(3)

1 Introdução

Muitas pessoas gostam de falar ou julgar que possuem e sabem usar o raciocínio lógico, porém, quando questionadas direta ou indiretamente, perdem esta linha de raciocínio, pois este depende de inúmeros fatores para completá-lo, tais como: calma, conhecimento, vivência, versatilidade, experiência, criatividade, ponderação, responsabilidade, entre outros.

A lógica é a ciência que estuda as leis e critérios de validade que regem o pensamento e a demonstração, ou seja, ciência dos princípios formais do raciocínio.

Usar a lógica é um fator a ser considerado por todos, principalmente pelos profissionais de informática (programadores, analistas de sistemas e suporte), pois seu dia-a-dia dentro das organizações é solucionar problemas e atingir os objetivos apresentados por seus usuários com eficiência e eficácia, utilizando recursos computacionais. Saber lidar com problemas, seja de ordem administrativa, de controle, de planejamento ou de estratégia requer atenção e bom uso do conhecimento. Nosso interesse é mostrar como desenvolver e aperfeiçoar melhor esta técnica, lembrando que, para isto, você deverá ser persistente e praticá-la constantemente, chegando à exaustão sempre que julgar necessário.

1.1 Lógica

Lógica representa todo raciocínio desenvolvido através de um sistema “razoável” de leis, preceitos ou teoremas. Através da lógica é possível descrever, analisar e comparar fatos.

A lógica de programação é necessária para pessoas que desejam trabalhar com desenvolvimento de sistemas e programas, pois permite definir uma sequência natural de atividades com a intenção de atingir um objetivo.

Lógica de programação é a técnica de encadear pensamentos em uma sequência lógica para atingir determinado objetivo.

1.1.1 Sequência Lógica

Estes pensamentos ou atividades podem ser descritos como uma sequência de instruções, que devem ser seguidas para cumprir uma determinada tarefa.

Sequência Lógica são passos executados até atingir um objetivo ou a solução de um problema.

1.1.2 Instruções

Na linguagem comum, entende-se por instruções "um conjunto de regras ou normas definidas para a realização ou emprego de algo".

Em informática instrução é a informação que indica a um computador qual a ação elementar ele deve executar.

Convém ressaltar que uma única ordem isolada não permite realizar o processo completo, e para isso é necessário um conjunto de instruções colocadas em ordem sequencial e lógica.

(4)

É evidente que essas instruções têm que ser executadas em uma ordem adequada – não se pode descascar as batatas depois de fritá-las.

Uma instrução tomada em separado não tem sentido; para obtermos o resultado, precisamos colocar em prática o conjunto de todas as instruções, na ordem correta.

Instruções são um conjunto de regras ou normas definidas para a realização ou emprego de algo. Em informática, é o que indica a um computador uma ação elementar a executar.

1.2 Algoritmo

Um algoritmo é formalmente uma sequência finita de passos que levam a execução de uma tarefa. Podemos pensar em algoritmo como uma receita, uma sequência de instruções que dão cabo de uma meta específica. Estas tarefas não podem ser redundantes e nem subjetivas na sua definição, devem ser claras e precisas.

Um Algoritmo é uma sequência de instruções ordenadas de forma lógica para a resolução de uma determinada tarefa ou problema.

Como exemplos, podemos citar os algoritmos das operações básicas (adição, multiplicação, divisão e subtração) de números reais decimais. Outros exemplos seriam os manuais de aparelhos eletrônicos, como um videocassete, que explicam passo-a-passo como, por exemplo, gravar um evento.

Até mesmo as coisas mais simples, podem ser descritas por sequências lógicas.

1.2.1 Pseudocódigo

Os algoritmos podem ser descritos em uma linguagem chamada pseudocódigo. Este nome é uma referência à implementação que será realizada em uma linguagem de programação. Quando formos programar em uma linguagem, por exemplo Pascal, estaremos gerando código em Pascal. Quando geramos uma algoritmo independente de uma linguagem de programação estamos escrevendo em pseudocódigo. Por isso os algoritmos são independentes das linguagens de programação. Ao contrário de uma linguagem de programação, não existe um formalismo rígido de como deve ser escrito o algoritmo.

O algoritmo deve ser fácil de interpretar e fácil de codificar, ou seja, ele deve ser o intermediário entre a linguagem falada e a linguagem de programação.

1.2.2 Regras para construção de Algoritmos

Para escrever um algoritmo precisamos descrever a sequência de instruções, de maneira simples e objetiva. Para isso utilizaremos algumas técnicas:

● Use somente um verbo por frase

● Imagine que você está desenvolvendo um algoritmo para pessoas que não entendem do assunto

● Use frases curtas e simples ● Seja objetivo

(5)

Exemplo de Algoritmo

O algoritmo descreve como "Chupar uma bala". • Pegar a bala

• Retirar o papel • Chupar a bala

• Jogar o papel no lixo

1.2.3 Fases para construção de Algoritmos

É importante ressaltar que qualquer tarefa que siga determinado padrão pode ser descrita por um algoritmo, como por exemplo: como fazer arroz doce; calcular o saldo financeiro de um estoque, etc.

Entretanto, ao montar um algoritmo, precisamos primeiro dividir o problema apresentado em três fases fundamentais:

Imagine o seguinte problema: Calcular a média final dos alunos da 3ª série. Os alunos realizarão quatro provas: P1, P2, P3 e P4.

Onde:

4

4 3 2

1 P P P

P

MédiaFinal= + + +

Para montar o algoritmo proposto, faremos três perguntas: a) Quais são os dados de entrada?

R: Os dados de entrada são P1, P2, P3 e P4 b) Qual será o processamento a ser utilizado?

R: O procedimento será somar todos os dados de entrada e dividi-los por 4 (quatro) 4

4 3 2

1 P P P

P + + +

c) Quais serão os dados de saída? R: O dado de saída será a média final Algoritmo: Receba a nota da prova1

Receba a nota de prova2 Receba a nota de prova3 Receba a nota da prova4

Some todas as notas e divida o resultado por 4 Mostre o resultado da divisão

1.2.4 Teste de Mesa

Após desenvolver um algoritmo, este deverá sempre ser testado. O teste é chamado de TESTE DE MESA, que significa seguir as instruções do algoritmo de maneira precisa para verificar se o procedimento utilizado está correto.

Realimentação

(6)

Veja o exemplo: Nota da Prova 1, Nota da Prova 2, Nota da Prova 3 , Nota da Prova 4 e Media. P1 P2 P3 P4 Média

1.3 Programas

Os programas de computadores são algoritmos escritos numa linguagem de computador que são interpretados e executados por uma máquina, no caso um computador. Notem que, dada esta interpretação rigorosa, um programa é por natureza, muito específico e rígido em relação aos algoritmos da vida real.

Um programa é um algoritmo escrito em uma linguagem computacional.

2 Portugol

Durante o curso aprenderemos a desenvolver os Algoritmos em uma pseudo-linguagem conhecida como "Portugol" ou Português Estruturado.

"Portugol" é derivado da aglutinação de Português + Algol. Algol é o nome de uma linguagem de programação estruturada usada no final da década de 50.

2.1 Entrada, Processamento e Saída

Para se criar um programa que seja executável dentro de um computador, você deverá ter em mente três pontos de trabalho: a entrada de dados, o seu processamento e a saída dos mesmos. Sendo assim, todo programa estará trabalhando com estes três conceitos. Se os dados forem entrados de forma errada, resultarão em respostas erradas.

As três fases do processo de execução de um programa são: a entrada de dados com a instrução LEIA; saída dos mesmos com a instrução ESCREVA e o processamento que será uma consequência da manipulação das variáveis de ação.

Uma entrada e uma saída poderão ocorrer dentro de um computador de diversas formas. Por exemplo, uma entrada poderá ser feita via teclado, modem, leitores ópticos, disco, entre outras. Uma saída poderá ser feita em vídeo, impressora, disco, entre outras formas. Devido a esta grande variedade, nossos programas escritos em português estruturado farão menção às instruções LEIA e ESCREVA sem se preocuparem com o meio de entrada e saída.

2.1.1 Corpo Geral de um Programa

{Comentário com mais de uma linha

Serve para explicação de funções e cabeçalhos}

ALGORITMO "identificador"

TIPO

<<identificador>> : <<tipo>> CONST

<<identificador>> <- <<dado>> VAR

<<identificador>> : <<tipo>> INICIO //comentario de uma linha

(7)

Exemplo 01 : Segue um Algoritmo que lê o nome e as 4 notas bimestrais de um aluno. Em seguida o Algoritmo calcula e escreve a média obtida.

ALGORITMO "MEDIA_FINAL"

VAR

NOTA1, NOTA2, NOTA3, NOTA4, MEDIA: INTEIRO INICIO

LEIA (NOTA1, NOTA2, NOTA3, NOTA4)

MEDIA <- (NOTA1 + NOTA2 + NOTA3 + NOTA4) / 4

ESCREVA (MEDIA) FIMALGORITMO

2.1.2 Linhas de comentário

Podemos inserir em um Algoritmo um comentário para aumentar a compreensão do mesmo, para isso basta que o texto fique entre Chaves "{}".

Exemplo:

LEIA (NOTA1, NOTA2, NOTA3, NOTA4) {LEITURA DAS NOTAS DO ALUNO}

2.1.3 Identação

Para facilitar a leitura do algoritmo, no momento em que estamos desenvolvendo-o devemos tomar o cuidado de identá-lo. A identação é a inserção de espaços antes da frase para facilitar a localização do contexto. Estes espaços servem como os espaços antes dos parágrafos facilitando a localização do leitor.

2.2 Variáveis

Variáveis são espaços, como caixas vazias, destinados a armazenar informações temporariamente. Estes valores são armazenados num local disponível na memória do computador.

A forma de declarar uma variável é: VAR nome_da_variável : <tipo>

* Todo Algoritmo ou programa deve possuir variável!

2.2.1 Variáveis de entrada e saída

Do ponto de vista do computador, as Variáveis de Entrada armazenam informações fornecidas por um meio externo, normalmente usuários ou discos.

Já as Variáveis de Saída armazenam os resultados obtidos através do programa/algoritmo e que serão apresentados para o usuário como resposta.

Exemplo ,dados dois valores calcular a soma de ambos:

A B C=A+B

7 5

(8)

De acordo com a figura acima A e B são Variáveis de Entrada e C é uma Variável de Saída. (inverter a seta de A e B)

2.2.2 Identificadores

São os nomes dados às variáveis, constantes, Tipo de Dados, Registros e programas. Estes indicadores servem para nos lembrar mais facilmente o que representa o conteúdo armazenado nas variáveis e constantes ou para que servem os programas que iremos desenvolver.

Regras Para construção de Identificadores:

• Não podem ser nomes de palavras reservadas (comandos da linguagem); • Devem possuir como 1º caractere uma letra ou Underscore ( _ );

• Ter como demais caracteres letras, números ou Underscore; • Ter no máximo 127 caracteres;

• Não possuir espaços em branco;

• A escolha de letras maiúsculas ou minúsculas é indiferente.

Exemplos:

NOME, nome, TELEFONE, IDADE_FILHO, IdadeFilho, NOTA1, SALARIO,

UMNOMEMUITODIFICILDELEIA

2.2.3 Tipos de dados

Todas as Variáveis devem assumir um determinado tipo de informação. O tipo de dado indica que tipo de informação podemos guardar dentro das variáveis.

O tipo de dado pode ser:

● Primitivo - Pré-definido pela linguagem;

● Sub-Faixa - É uma parte de um tipo já existente; ● Escalar - Definidos pelo programador.

2.2.4 Tipos primitivos de dados

Os tipos de dados primitivos são:

● inteiro − admite somente números inteiros. Geralmente é utilizado para representar uma contagem (quantidade).

● real- admite números reais (com ou sem casas decimais). Geralmente é utilizado para representar uma medição.

● caracter - admite caracteres alfanuméricos. Os números quando declarados como caracteres se tornam representativos e perdem a atribuição de valor.

● lógico - admite somente valores lógicos (verdadeiro/falso). Exemplo:

VAR

idade : inteiro;

salario : real;

(9)

2.2.5 Sinal de atribuição

Uma Variável nunca é eternamente igual a um valor, seu conteúdo pode ser alterado a qualquer momento. Portanto para atribuir valores a variáveis devemos usar o sinal de atribuição: "<-".Exemplos:

A <- 2 B <- 3 C <- A + B

2.3 Operadores e Expressões

2.3.1 Operadores Aritméticos

Tabela 1 - Operadores Aritméticos

Símbolo Operador

+ Adição

- Subtração

* Multiplicação

/ Divisão

MOD Resto da divisão entre 2 números inteiros.

2.3.2 Operadores Relacionais

Tabela 2 - Operadores Relacionais

Símbolo Operador

> Maior que

< Menor que

>= Maior ou Igual

<= Menor ou Igual

= Igual

<> Diferente

2.3.3 Operadores lógicos

Atuam sobre expressões retornando sempre valores lógicos como Falso ou Verdadeiro. • E − retorna verdadeiro se ambas as partes forem verdadeiras.

• Ou − basta que uma parte seja verdadeira para retornar verdadeiro. • Não − inverte o estado, de verdadeiro passa para falso e vice-versa.

TABELA VERDADE

A B A E B A OU B NÃO (A)

V V V V F

V F F V F

F V F V V

(10)

2.3.4 Expressões lógicas

As expressões compostas de operadores relacionais sempre retornam um valor lógico. Exemplos:

2+5>4 Verdadeiro

3<>3 Falso

De acordo com a necessidade, as expressões podem ser unidas pelos operadores lógicos. Exemplo:

3>1 OU 3>5 Verdadeiro

3>1 E 3>5 Falso

2.3.5 Prioridade de Expressões

Na matemática existem prioridades na resolução de expressões, por exemplo, sempre se resolve a multiplicação antes da soma. Em computação as prioridades são definidas de acordo com a linguagem escolhida. Para o PORTUGOL adotamos a seguinte sequência, da maior para a menor:

Sinal Descrição Tipo

NAO Negação Operador lógico * / MOD Multiplicação, divisão e resto Operador Aritmético

+ - Soma e subtração Operador Aritmético < <= > >= Menor, menor ou igual, maior, maior ou igual Operador Relacional = <> Igual, diferente Operador Relacional E OU E lógico, ou lógico Operador lógico

<- Atribuição

Do mesmo modo que na matemática, nas expressões computacionais podemos usar parênteses "( )" para priorizar expressões. É possível também ter parênteses dentro de parênteses.

Exemplos de prioridades: (2+2)/2 = 2

2+2 /2 = 3

2.4 Comandos de i/o (input/output)

(11)

Exemplo 02 : Segue um Algoritmo que lê o raio de uma circunferência e calcula sua área. ALGORITMO "AREA_CIRCUNFERENCIA"

VAR

RAIO, AREA : REAL INICIO

LEIA (RAIO) {PROCESSAMENTO}

AREA <- PI * RAIO*RAIO {ENTRADA}

ESCREVA ("AREA =", AREA) {SAÍDA}

FIMALGORITMO

2.5 Funções

Pré-Definidas

Uma função é um instrumento (Sub–algoritmo) que tem como objetivo retornar um valor ou uma informação.

A chamada de uma função é feita através da citação do seu nome seguido de seus argumentos iniciais entre parênteses quando for necessário.

As funções podem ser pré-definidas pela linguagem ou criadas pelo programador de acordo com o seu interesse.

A Tabela 3, mostra as funções mais comuns e importantes para o desenvolvimento, entretanto, cada linguagem possui suas funções próprias. As funções podem ser aritméticas, temporais, de texto, etc.

Tabela 3 - Funções Pré-Definidas

Função Descrição Função Descrição

ABS( X ) Valor absoluto de X LOG( X ) Logaritmo de X RAIZQ( X ) Raiz quadrada de X SIN( X ) Seno de X

QUAD( X ) Eleva X ao quadrado COS( X ) Coseno de X RAND() Retorna um numero

aleatorio

TAN( X ) Tangente de X RANDI( X ) Retorna um numero

aleatorio inteiro entre zero e X

INT( X) Retorna parte inteira do numero X

X mod (Y) Retorna o resto da divisão de X por Y

2.6 A tomada de Decisões

Em algumas situações é necessário executar uma sequência de comandos diferentes de acordo com o resultado de um teste. Por exemplo em um semáforo: Se estiver verde : continuar, senão : parar.

2.6.1 Desvio condicional

A estrutura de decisão pode ser Simples ou Composta, baseada em um resultado lógico. Simples:

SE <<CONDIÇÃO>> ENTAO <<COMANDO1>> FIMSE

Composta:

SE <<CONDIÇÃO>> ENTAO <<COMANDO1>> <<COMANDON>> SENAO

(12)

Exemplo 01 : Segue um Algoritmo que lê 2 números e escreve o maior. ALGORITMO "ACHA_MAIOR

VAR

A, B : INTEIRO INICIO

LEIA (A, B) SE A>B ENTAO

ESCREVA (A) SENAO

ESCREVA (B) FIMSE

FIMALGORITMO

Exemplo 02 : Segue um Algoritmo que lê o nome e as 4 notas bimestrais de um aluno. Em seguida o Algoritmo calcula e escreve a média obtida pelo aluno escrevendo também se o aluno foi aprovado ou reprovado. Média para aprovação maior ou igual a 6.

ALGORITMO "MEDIA_FINAL"

VAR

NOTA1, NOTA2, NOTA3, NOTA4, MEDIA: REAL

NOME : CARACTERE

INICIO

LEIA (NOME)

LEIA (NOTA1, NOTA2, NOTA3, NOTA4)

MEDIA <- (NOTA1 + NOTA2 + NOTA3 + NOTA4) / 4

SE MEDIA>=6 ENTAO

ESCREVA ('APROVADO') SENAO

ESCREVA ('REPROVADO') FIMSE

ESCREVA (NOME, MEDIA) FIMALGORITMO

2.6.2 Desvios encadeados

Usados para tomadas de decisões para mais de 2 opções. Forma Geral: SE <<CONDIÇÃO>> ENTAO

<<COMANDO1>> SENAO

SE <<CONDIÇÃO>> ENTAO <<COMANDO1>> SENAO

<<COMANDO1>> FIMSE

(13)

Exemplo 01 : Segue um Algoritmo que lê 3 números e escreve o maior. ALGORITMO "ACHA_MAIOR"

VAR

A, B, C : INTEIRO INICIO

LEIA (A, B, C)

SE ((A>B) E (A>C)) ENTAO ESCREVA (A)

SENAO

SE ((B>A) E (B>C)) ENTAO ESCREVA (B)

SENAO

ESCREVA (C) FIMSE

FIMSE FIMALGORITMO

2.6.3 Estruturas de Decisão

A estrutura de decisão equivale a um conjunto de desvios encadeados. Forma Geral:

ESCOLHA <<VARIAVEL>> CASO <<VALOR1>>

<<COMANDO1>> CASO <<VALORN>>

<<COMANDO1>> OUTROCASO

<<COMANDO1>> FIMALGORITMO

Exemplo 01 : Segue um Algoritmo que lê uma opção e apresenta o resultado ALGORITMO "IMPRIME_SEXO"

VAR

SEXO : INTEIRO INICIO

ESCREVA("DIGITE 1 PARA SEXO MASCULINO E 2 PARA SEXO FEMININO:") LEIA (SEXO)

ESCOLHA SEXO

CASO 1

ESCREVA ("HOMEM") CASO 2

ESCREVA ("MULHER") OUTROCASO

ESCREVA ("OPÇÃO INVALIDA") FIMESCOLHA

FIMALGORITMO

2.7 Laços ou Malhas de Repetição

(14)

Na programação estruturada existem comandos apropriados para efetuar a repetição de determinados trechos dos programas, o número de vezes que for necessário. A principal vantagem deste recurso é que o programa passa a ter um tamanho menor.

Todo looping deve possuir uma condição que indique quando deve terminar. É importante prestar atenção nesta condição. Uma condição mal feita pode prender o programa dentro do loop. Esta é uma das causas do “travamento” dos aplicativos.

2.7.1 Repetição com teste no Início do Looping

É usada para repetir N vezes uma ou mais instruções. Tendo como vantagem o fato de não ser necessário o conhecimento prévio do número de repetições.

ENQUANTO <<CONDIÇÃO>> FACA <<COMANDO1>>

<<COMANDO2>>

... <<COMANDON>> FIMENQUANTO

Exemplo 01 : Segue um algoritmo que calcula a soma dos salários dos funcionários de uma empresa. O programa termina quando o usuário digitar um salário menor que 0.

ALGORITMO "SOMA_SALARIOS"

VAR

SOMA, SALARIO : REAL INICIO

SOMA <- 0 SALARIO <- 1

ENQUANTO (SALARIO>=0) FACA LEIA (SALARIO)

SOMA <- SOMA+SALARIO

FIMENQUANTO ESCREVA (SOMA) FIMALGORITMO

A estrutura ENQUANTO...FAÇA...FIM_ENQUANTO tem o seu funcionamento controlado por decisão. Sendo assim poderá executar um determinado conjunto de instruções enquanto a condição verificada for Verdadeira. No momento em que esta condição se torna falsa, o processamento da rotina é desviado para fora do looping. Se a condição for Falsa logo de início, as instruções contidas no looping são ignoradas.

2.7.2 Repetição com teste lógico no fim do Looping

Assim como a estrutura ENQUANTO...FAÇA...FIMENQUANTO, a estrutura REPITA...ATE é usada para repetir N vezes uma ou mais instruções.

A diferença entre as duas é que a condição de continuidade é validada apenas no final fazendo com que a repetição seja executada pelo menos uma vez. Forma Geral:

REPITA

(15)

Exemplo 01 : Segue um algoritmo que calcula a soma dos salários dos funcionários de uma empresa. O programa termina quando o usuário digitar um salário menor que 0.

ALGORITMO "SOMA_SALARIOS"

VAR

SOMA, SALARIO : REAL INICIO

SOMA<-0

REPITA

LEIA (SALARIO)

SOMA<-SOMA+SALARIO

ATE (SALARIO<=0) ESCREVA (SOMA) FIMALGORITMO

Notar que neste exemplo o primeiro valor lido de SALÁRIO é somado, mesmo que ele for negativo. Exemplo 02 : Segue um algoritmo que escreve os 100 primeiros números pares.

ALGORITMO "PARES_2"

VAR

I, PAR, CONTADOR : INTEIRO INICIO

CONTADOR <- 0 PAR <- 0

REPITA

ESCREVA (PAR)

PAR <- PAR+2

CONTADOR <- CONTADOR+1

ATE (CONTADOR=50) FIMALGORITMO

A estrutura REPITA...ATÉ tem o seu funcionamento controlado por decisão. Porém, irá efetuar a execução de um conjunto de instruções pelo menos uma vez antes de verificar a validade da condição estabelecida. Diferente da estrutura ENQUANTO que executa somente um conjunto de instruções, enquanto a condição é verdadeira.

Desta forma REPITA tem seu funcionamento em sentido contrário a ENQUANTO, pois sempre irá processar um conjunto de instruções, no mínimo uma vez até que a condição se torne Falsa.

2.7.3 Repetição com variável de controle

Anteriormente, foram visto duas formas de elaborar um looping. Uma usando o conceito ENQUANTO e a outra usando o conceito REPITA. Foi visto também como estabelecer rotinas que efetuam a execução de um looping, um determinado número de vezes através da utilização de um contador (através de uma variável de controle).

(16)

A estrutura PARA..DE..ATÉ..PASSO..FAÇA..FIMPARA tem seu funcionamento controlado por uma variável denominada contador. Sendo assim, poderá executar um determinado conjunto de instruções um determinado número de vezes. Forma Geral:

PARA <variável> DE <valor inicial> ATE <valor final> PASSO <incremento> FACA

<comando1> FIMPARA

Quando queremos que o incremento seja de uma unidade por vez é possível omitir a opção PASSO: PARA <variável> DE <valor inicial> ATE <valor final> FACA

<comando1> FIMPARA

Exemplo 01 : Pedir a leitura de um valor para a variável X, multiplicar este valor por 3 e somá-lo à variável de resposta R. Repetir esta sequência por cinco vezes e apresentar o valor obtido.

ALGORITMO "Looping_Para"

VAR

X, R ,CONT: inteiro INICIO

PARA CONT DE 1 ATE 5 PASSO 1 FACA LEIA (X)

R <- X * 3 + R

ESCREVAL(R) FIMPARA

FIMALGORITMO

Será executado o conjunto de instruções entre a instrução PARA e a instrução FIM do para, sendo a variável CONT (variável de controle) inicializada com valor 1 e incrementada de mais 1 através da instrução passo até o valor 5. Este tipo de estrutura de repetição poderá ser utilizado todas as vezes que tiver a necessidade de repetir trechos finitos, onde se conhece a quantidade de repetições.

2.8 Estrutura de Dados Homogêneas

Durante os pontos estudados anteriormente, percebemos que o poder de programação se tornou maior. Porém, tendo domínio das técnicas anteriores, ainda corre-se o risco de não conseguir resolver alguns tipos de problemas, pois foram trabalhados até aqui apenas variáveis simples, variáveis que armazenam somente um valor por vez.

Neste e no próximo capítulo, serão apresentados técnicas de programação que permitirão trabalhar com o agrupamento de várias informações dentro de uma mesma variável. Vale salientar que este agrupamento ocorrerá obedecendo sempre ao mesmo tipo de dado, e por esta razão é chamado de estruturas de dados homogêneas. Agrupamentos de tipo de dados diferentes serão estudados mais adiante quando for abordado as estruturas de dados heterogêneas.

(17)

As matrizes (tabelas em memória) são tipos de dados que podem ser "constituídos" à medida que se fazem necessários, pois não é sempre que os tipos básicos (real, inteiro, caractere ou lógico) e /ou variáveis simples são suficientes para representar a estrutura de dados utilizada em um programa.

2.8.1 Matrizes de uma Dimensão ou Vetores

Este tipo de estrutura em particular é também denominado por alguns profissionais como matrizes unidimensionais. Sua utilização mais comum está vinculada à criação de tabelas. Caracteriza-se por ser definida uma única variável dimensionada com um determinado tamanho. A dimensão de uma matriz é constituída por constantes inteiras e positivas. Os nomes dados às matrizes seguem as mesmas regras de nomes utilizados para indicar as variáveis simples.

2.8.2 Operações Básicas com Matrizes do Tipo Vetor

Uma matriz de uma dimensão ou vetor será, neste trabalho, representada por seu nome e seu tamanho (dimensão) entre colchetes, desta forma MD [1..N] seria uma matriz, onde MD é o seu nome e possue um tamanho de 1 a N. Isto significa que poderão ser armazenados em MD até N valores definidos pelo programador. Perceba que na utilização de variáveis simples existe uma regra: uma variável pode conter apenas um valor por vez. As matrizes podem armazenar mais de um valor por vez. Desta forma poder-se-á manipular uma quantidade maior de informação com pouco trabalho de processamento. Deve-se apenas considerar que, com relação à manipulação dos elementos de uma matriz, eles ocorrerão de forma individualizada, pois não é possível efetuar a manipulação de todos os elementos do conjunto ao mesmo tempo. A instrução conjunto indicará em português estruturado a utilização de uma matriz, tendo como forma geral:

Variável: VETOR [<dimensão>] DE <tipo>.

Onde <dimensão> será a indicação dos valores inicial e final do tamanho do vetor e <tipo de dado> se o vetor em questão irá utilizar valores reais, inteiros, lógicos ou caracteres.

2.8.3 Leitura dos Dados de uma Matriz

A leitura de uma matriz é processada passo a passo, um elemento por vez. A instrução de leitura é leia seguida da variável mais o índice. Abaixo, é apresentado a codificação em portugol da leitura de 8 notas de 8 alunos, cálculo da média e a apresentação da mesma.

ALGORITMO "Media_Turma"

VAR

Md : vetor [1..8] de real

Soma, media : real

I : inteiro INICIO

Soma <- 0

PARA I DE 1 ATE 8 FACA Leia (Md[I])

Soma <- Soma + MD[I] FIMPARA

(18)

2.8.4 Escrita dos Dados de uma Matriz

O processo de escrita de uma matriz é bastante parecido com o processo de leitura de seus elementos. Para esta ocorrência deverá ser utilizada a instrução escreva seguida da indicação da variável e seu índice. Supondo que após a leitura das 8 notas, houvesse a necessidade de apresentá-las antes da apresentação do valor da média.

ALGORITMO "Media_Turma"

VAR Md : vetor [1..8] de real

Soma, media : real

I : inteiro INICIO

Soma <- 0

PARA I DE 1 ATE 8 FACA LEIA (Md[I])

Soma <- Soma + MD[I] FIMPARA

PARA I DE 1 ATE 8 FACA ESCREVA (Md[I]) FIMPARA

Media <- Soma / 8

ESCREVA (Media) FIMALGORITMO

2.8.5 Matrizes com mais de uma dimensão

Um importante aspecto a ser considerado é que na manipulação de uma matriz é utilizado uma única instrução de looping (enquanto, para ou repita). No caso de matrizes com mais dimensões, deverá ser utilizado o número de loopings relativos ao tamanho de sua dimensão. Desta forma, uma matriz de duas dimensões deverá ser controlada com dois loopings, sendo que de três dimensões deverá ser controlada por três loopings e assim por diante.

Em matrizes de mais uma dimensão os seus elementos serão também manipulados de forma individualizada, sendo a referência feita sempre através de dois índices: o primeiro para indicar a linha e o segundo para indicar a coluna. Desta forma, TABELA[2,3], indica que está sendo feita uma referência ao elemento armazenado na linha 2 coluna 3.

Uma matriz de duas dimensões está sempre fazendo menção a linhas e colunas e será representada por seu nome e seu tamanho (dimensão) entre colchetes, desta forma seria uma matriz de duas dimensões TABELA[1..8, 1..5], onde TABELA é o seu nome, possuindo um tamanho de 8 linhas (de 1 a 8) e 5 colunas (de 1 a 5), ou seja, é uma matriz de 8 por 5 (8X5). Isto significa que poderão ser armazenados em TABELA até 40 elementos.

Uma matriz de duas dimensões será atribuída pelas instruções já utilizadas para definir o uso de uma matriz de uma dimensão, sendo bastante parecidos em sua referência. A forma geral é :

variavel : VETOR [<dimensão1, dimensão2>] DE <tipo>

(19)

2.8.6 Leitura dos Dados de uma Matriz

A leitura de uma matriz de duas dimensões assim como as matrizes de uma dimensão é processada passo a passo, ou seja, um elemento por vez, sendo utilizado a instrução leia seguida da variável mais os seus índices. A seguir é apresentado a codificação em português estruturado da leitura das 4 notas bimestrais de 8 alunos.

ALGORITMO "Ler_Elementos"

VAR

Notas : VETOR [1..8, 1..4] DE real

I, J : inteiro INICIO

PARA I DE 1 ATE 8 FACA PARA J DE 1 ATE 4 FACA

LEIA(notas[I,J]) FIMPARA

FIMPARA FIMALGORITMO

2.8.7 Escrita dos Dados de uma Matriz

O processo de escrita será bastante parecido com o processo de leitura de seus elementos. Abaixo é apresentado a codificação em português estruturado da escrita das 4 notas dos 8 alunos.

ALGORITMO "Ler_Elementos"

VAR Notas : vetor [1..8, 1..4] de real

I, J, temp : inteiro INICIO

PARA I DE 1 ATE 8 FACA PARA J de 1 ATE 4 FACA

LEIA (temp)

notas[I,J] <- temp

FIMPARA FIMPARA

PARA I DE 1 ATE 8 FACA PARA J de 1 ATE 4 FACA

ESCREVA (temp) FIMPARA

FIMPARA FIMALGORITMO

2.9 Programação Modular

Será estudada a partir deste ponto, a aplicação de subrotinas em algoritmos, também conhecidas pela denominação módulo ou subalgoritmo. O importante é a forma como funcionam e como devem ser aplicadas em um programa, e é isto que você aprenderá.

(20)

2.9.1 Sub-Rotinas

No geral, problemas complexos exigem algoritmos complexos. Mas sempre é possível dividir um problema grande em problemas menores. Desta forma, cada parte menor tem um algoritmo mais simples, e é este trecho menor é chamado de sub-rotina. Uma sub-rotina é na verdade, um programa, e sendo um programa poderá efetuar diversas operações computacionais (entrada, processamento e saída) e deverá ser tratado como foram os programas projetados até este momento. As sub-rotinas são utilizadas na divisão de algoritmos complexos, permitindo assim, possuir a modularização de um determinado problema, considerado grande e de difícil solução.

Ao se trabalhar com esta técnica, pode-se deparar com a necessidade de se dividir uma sub-rotina em outras tantas quantas forem necessárias, buscando uma solução mais simples de uma parte do problema maior. O processo de dividir sub-rotinas em outras é denominado Método de Refinamento Sucessivo.

2.9.2 Procedimentos

Um procedimento é um bloco de programa, contendo início e fim e será identificado por um nome, através do qual será referenciado em qualquer parte do programa principal ou do programa que chama a rotina. Quando uma sub-rotina é chamada por um programa, ela é executada e ao seu término o controle de processamento retorna automaticamente para a primeira linha de instrução após a linha que efetuou a chamada da sub-rotina.

PROCEDIMENTO <identificador> (<parâmetros>) VAR

<declaração das variáveis locais> INICIO

<lista dos comandos> FIMPROCEDIMENTO

A melhor maneira de se entender como trabalhar com sub-rotinas é fazer a sua aplicação em um programa mais complexo. Para tanto, imagine o seguinte problema:

Exemplo:

(21)

ALGORITMO "calculadora"

VAR

Opcao : inteiro

PROCEDIMENTO ROTSOMA() VAR

R, A, B : real INICIO

ESCREVAL ("Rotina de Soma")

ESCREVAL ("Entre um valor para A: ") LEIA(A)

ESCREVAL ("Entre um valor para B:") LEIA(B)

R <- A + B

ESCREVA ("A soma de A com B é = ", R) FIMPROCEDIMENTO

PROCEDIMENTO ROTSSUBTRACAO() VAR

R, A, B : real INICIO

ESCREVAL ("Rotina de Subtração") ESCREVAL ("Entre um valor para A: ") LEIA(A)

ESCREVAL ("Entre um valor para B:") LEIA(B)

R <- A - B

ESCREVAL ("A subtração de A com B é = ", R) FIMPROCEDIMENTO

PROCEDIMENTO ROTMULTIPLICACAO() VAR

R, A, B : real INICIO

ESCREVAL ("Rotina de Multiplicação") ESCREVAL ("Entre um valor para A: ") LEIA(A)

ESCREVAL ("Entre um valor para B:") LEIA(B)

R <- A * B

ESCREVAL ("A multiplicação de A com B é = ", R) FIMPROCEDIMENTO

PROCEDIMENTO ROTDIVISAO() VAR

R, A, B : real INICIO

ESCREVAL ("Rotina de Divisão")

ESCREVAL ("Entre um valor para A: ") LEIA(A)

ESCREVAL ("Entre um valor para B:") LEIA(B)

R <- A / B

(22)

{Programa Principal}

INICIO

opcao <- 0

ENQUANTO (opcao <> 5) FACA ESCREVAL ("1 - Adição") ESCREVAL ("2 - Subtração") ESCREVAL ("3 - Multiplicação") ESCREVAL ("4 - Divisão")

ESCREVAL ("5 - Fim do Programa") ESCREVAL ("Escolha uma opção") leia (opcao)

SE opcao = 1 ENTAO

rotsoma

FIMSE

SE opcao = 2 ENTAO

rotsubtracao

FIMSE

SE opcao = 3 ENTAO

rotmultiplicacao

FIMSE

SE opcao = 4 ENTAO

rotdivisao

FIMSE FIMENQUANTO FIMALGORITMO

Obs: Observe que cada sub-rotina possui suas próprias variáveis, estas porém só podem ser acessadas dentro de cada procedimento, neste caso são chamadas de variáveis locais. A variável opcao é uma variável global que pode ser acessada em qualquer local do programa, tanto nos procedimentos quanto no programa principal.

2.9.3 Funções

Uma função também é um bloco de programa como são os procedimentos, contendo início e fim e sendo identificado por um nome através do qual também será referenciada em qualquer parte do programa principal. Uma sub-rotina de função é na verdade muito parecida com uma sub-rotina de procedimento. A sintaxe em português estruturado será também idêntica ao estudo anterior. Observe a seguir, o código em português estruturado de uma função.

FUNCAO <identificador> (<parâmetros>) <tipo> VAR

<declaração das variáveis locais> INICIO

<lista dos comandos>

RETORNE <variável p/ retorno> FIMFUNCAO

A sua principal diferença entre a função e a subrotina está no fato de que uma função retorna um determinado valor, que é retornado no próprio nome da função. Quando se diz valor, devem ser levados em consideração os valores numéricos, lógicos ou literais (caracteres).

Você deve ter observado a presença de um item na sintaxe da função, que são os parâmetros que podem ser referenciados nos procedimentos.

(23)

forma, é possível passar valores de uma sub-rotina ou rotina chamadora à outra sub-rotina e vice-versa, através do uso de parâmetros que poderão ser formais ou reais.

Serão considerados parâmetros formais quando forem declarados através de variáveis juntamente com a identificação do nome da sub-rotina, os quais serão tratados exatamente da mesma forma que são tratadas as variáveis globais ou locais.

Serão considerados parâmetros Reais quando estes substituírem os parâmetros formais, quando a utilização da sub-rotina por um programa principal ou por uma rotina chamadora.

2.9.4 Utilização de Funções

Criaremos uma função que eleva ao cubo um determinado número inserido pelo usuário. Observe o Programa:

ALGORITMO "cubo"

VAR

I : real

x : real

FUNCAO Cubo(N:Real) : Real VAR

resp : real INICIO

resp <- N * N * N

RETORNE resp

FIMFUNCAO INICIO

Leia(I)

x <- Cubo(I) FIMALGORITMO

Imagem

TABELA VERDADE A B A E B A OU B NÃO (A) V V V V F V F F V F F V F V V F F F F V
Tabela 3 - Funções Pré-Definidas

Referências

Documentos relacionados

Fica estabelecido que no caso de não ser efetuado pela empresa o pagamento dos salários até o quinto dia útil do mês subseqüente ao vencido, bem como do 13º salário e

a) velocidade da chuva em relação ao solo; b) velocidade da chuva em relação ao carro. A haste encontra-se ini- cialmente em repouso, com o seu comprimento ao longo da

Para isso em quatro experimentos foram avaliadas: as características fisiológicas de cultivares de mandioca após a aplicação do mesotrione; a interferência do

Na apresentação dos dados estatísticos, ficou demonstrada à todos os participantes a dimensão da pesquisa, abrangendo o setor produtivo como um todo, enfocando a produção

[r]

 Iguatemi São Paulo: As Receitas de Aluguéis cresceram 8,5% principalmente por um Aluguel Mínimo maior, devido a.. reajuste

Os valores de energia de ativação se apresentaram superiores para as amostras com incorporação da fibra de sisal, enquanto que a incorporação da fibra de vidro demonstrou

Tendo em vista que a funcionalidade do indivíduo com LM relaciona-se com seus níveis de atividade física, fator que interfere em suas atividades, participação e qualidade de