Alg Mat Completo

29
Algoritmos Metodologia de desenvolvimento Versão: Fevereiro de 2008 (Primeira Versão: Fevereiro de 2004) Prof. Camilo de Lélis M. Pereira * * Prof. Camilo de Lélis M. Pereira Trabalha com Informática e Educação desde o início dos anos 90. Tendo atuado como Desenvolvedor, Consultor, Professor e Coordenador em diversas Instituições e Universidades da região. Atualmente é Professor Titular do IFET SE MG. Mestre em Engenharia de Produção pela UFSC; Especialista em Docência Superior; Graduado em Informática e Licenciado em Matemática. Material disponível no site do autor: www.clmp.web44.net

Transcript of Alg Mat Completo

Page 1: Alg Mat Completo

Algoritmos

Metodologia de desenvolvimento

Versão: Fevereiro de 2008(Primeira Versão: Fevereiro de 2004)

Prof. Camilo de Lélis M. Pereira *

* Prof. Camilo de Lélis M. PereiraTrabalha com Informática e Educação desde o início dos anos 90. Tendo atuado como Desenvolvedor, Consultor, Professor e Coordenador em diversas Instituições e Universidades da região. Atualmente é Professor Titular do IFET SE MG.Mestre em Engenharia de Produção pela UFSC; Especialista em Docência Superior; Graduado em Informática e Licenciado em Matemática.Material disponível no site do autor: www.clmp.web44.net

Page 2: Alg Mat Completo

ALGORITMOS

Metodologia de desenvolvimento

1. Metodologia de desenvolvimento de algoritmos1.1. Introdução à Ciência da Computação1.2. O conceito de algoritmos1.3. Programação Estruturada1.4. Linguagens de programação1.5. Portugol

1.5.1. Constantes e Variáveis1.5.2. Cálculos1.5.3. Entrada e saída1.5.4. Estruturas básicas de controle: seqüencial, condicional e repetição

1.6. Metodologia de desenvolvimento de algoritmos1.7. Regras práticas para a construção de algoritmos legíveis1.8. Exercícios1.9. Máximas de programação

2. Programação em uma linguagem de alto nível2.1. Introdução à linguagem de programação Pascal2.2. O ambiente de desenvolvimento2.3. Tabela de conversão de comandos2.4. Exercícios

3. Tipos estruturados3.1. Agregados homogêneos: vetores e matrizes3.2. Agregados heterogêneos: registros3.3. Aplicações e exercícios

4. Noções de modularização4.1. Introdução aos módulos4.2. Procedimentos4.3. Funções4.4. Passagem de parâmetros4.5. Recursividade4.6. Exercícios

5. Noções de arquivo5.1. Organização e armazenamento de dados em memória secundária5.2. Instruções utilizadas5.3. Aplicação exemplo

6. Bibliografia

2

Page 3: Alg Mat Completo

1. Metodologia de Desenvolvimento de Algoritmos

Introdução à Ciência da ComputaçãoEvolução tecnológica dos computadoresO ComputadorA estrutura de um computador digital / Memória / UCP / Periféricos

Conceituação de algoritmoO conceito central da programação e da ciência da computação é o algoritmo.

Programar é basicamente construir algoritmos. Wirth apresenta a programação estruturada como “a arte ou técnica de construir e formular algoritmos de uma forma sistemática”. Programas são – segundo Wirth – “formulações concretas de algoritmos abstratos, baseados em representações e estruturas específicas de dados”.

Nesta definição aparece o outro aspecto fundamental da construção de programa: as estruturas de dados usadas no algoritmo para representar as informações do problema a ser resolvido. De fato, no processo de construção de programas, a formulação do algoritmo e a definição das estruturas de dados a serem usadas estão intimamente ligadas.

Um algoritmo é a descrição de um padrão de comportamento, expressado em termos de um repertório bem definido e finito de ações “primitivas”, das quais damos por certo que elas podem ser executadas

Programação EstruturadaBasicamente, a Programação Estruturada consiste numa metodologia de projeto

de programas visando:− Facilitar a escrita dos programas;− Facilitar a leitura (o entendimento) dos programas;− Permitir a verificação a priori dos programas;− Facilitar a manutenção e modificação dos programas.

Para Dijkstra, o indiscutível iniciador da programação estruturada, “a arte de programar consiste na arte de organizar e dominar a complexidade”.

A idéia básica da Programação Estruturada, que vai ao encontro da mencionada tarefa do programador, é reduzir a complexidade, em três níveis:

a) Desenvolvimento do programa em diferentes fases por refinamento sucessivo (desenvolvimento top-down);

b) Decomposição do programa total em módulos funcionais, organizados de preferência num sistema hierárquico;

c) Usando dentro de cada módulo só um número muito limitado de estruturas básicas de fluxo de controle.

Linguagens de programaçãoConceito / Exemplos / Compilador / Linguagem de máquina

3

Page 4: Alg Mat Completo

Portugol

O Portugol é uma pseudolinguagem de programação (simbiose do Português com o ALGOL e PASCAL). A idéia é permitir que com um conjunto básico de primitivas seja possível ao projetista pensar no problema e não na máquina que vai executar o algoritmo e, por outro lado, não fique muito distante da mesma máquina. Em outra perspectiva, que o projetista possa pensar na solução do problema e que esta solução seja facilmente implementada no computador.

ConstantesUma constante é um determinado valor fixo que não se modifica ao longo do

tempo, durante a execução de um programa.Uma constante pode ser numérica, lógica ou literal.

VariáveisSabe-se da Matemática que uma variável é a representação simbólica dos

elementos de um certo conjunto.Nos algoritmos, destinados a resolver um problema no computador, a cada

variável corresponde uma posição de memória, cujo conteúdo pode variar ao longo do tempo durante a execução de um programa. Embora uma variável possa assumir diferentes valores, ela só pode armazenar um valor a cada instante.

Toda Variável é identificada por um nome ou identificador.

• Declaração de variáveis – Tipos Básicos− Inteiro− Real− Caracter− Lógico

• Operadores Lógicos e (conjunção)ou (disjunção não exclusiva)não (negação)

• Operadores relacionais=, <>, >, >=, <, <=

4

Page 5: Alg Mat Completo

Exercícios – Variáveis e expressões lógicas

1. Variáveis - Assinale os tipos de dados abaixo, da seguinte maneira: (I) inteiro, (R) real, (C) caracter e (L) lógico.

( ) -678( ) ‘0,87’( ) ‘-9,12’( ) Verdadeiro( ) –456( ) –99,8( ) ‘Cinco’( ) 45,8976( ) Falso( ) –1.56

2. Nome de variávelO 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:

1. Nomes de variáveis poderão ser atribuídos com um ou mais caracteres;2. O primeiro caracter do nome de uma variável não poderá ser em hipótese alguma, um número,

sempre deverá ser uma letra;3. O nome de uma variável não poderá possuir espaços em branco;4. Não poderá ser nome de uma variável, uma palavra reservada a uma instrução de programa

constante da linguagem em uso;5. Não podem ser utilizados outros caracteres a não ser letras (sem acento) e números, com exceção

do símbolo underline.

Assinale com um X os nomes válidos para uma variável.( ) ENDEREÇO( ) 21BRASIL( ) FONE$COM( ) NOMEUSUÁRIO( ) NOME_USUARIO( ) NOME*USUÁRIO( ) END*A-6( ) CIDADE3( ) #CABEC

3. Expressões lógicas – Determine o resultado lógico das expressões abaixo, assinalando se são verdadeiras ou falsas. Considere para as respostas os seguintes valores: X=1, A=3, B=5, C=8 e D=7.

Verdadeiro Falsoa) não (X>3)b) (X<1) e não (B>D)c) não (D<0) e (C>5)d) não (X>3) ou (C<7)e) (A>B) ou (C>B)f) (X>=2)g) (X<1) e (B>=D)h) (D<0) ou (C>5)i) não (D>3) ou não (B<7)j) (A>B) ou não (C>B)

5

Page 6: Alg Mat Completo

Entrada e Saída

Entrada / Saída

leia (v1, v2, v3, .., vn);

imprima (v1, v2, .., vn);

imprima (“O valor é :”, valor);

Exemplos:1. Elaborar um algoritmo que leia um nome e o imprima na tela.2. Leia nome e sobrenome e os imprima juntos.3. Leia dois números inteiros.4. Leia três números reais e os imprima na tela

Cálculos

• Comando de atribuição ( )Soma a + b;

• Operadores Aritméticos+ adição- subtração* multiplicação/ divisãoraiz(x) raiz

• Funções Matemáticas: sen(x), cos(x), tg(x), arctg(x), abs(x), int(x), ...

A m mod i (A recebe o resto da divisão inteira de m por i )A m div i ( A recebe o quociente da divisão inteira de m por i)

Exemplos:1. Elaborar um algoritmo que leia dois nºs e imprima a sua soma.2. Leia três números, calcule e imprima a sua média aritmética.3. Leia dois nºs e imprima a sua soma, diferença, produto e quociente.4. Calcule a área de um triângulo.

6

Page 7: Alg Mat Completo

Estruturas de Controle

Deve-se usar, tanto quanto possível, somente algumas estruturas básicas de fluxo de controle: a seqüência simples, a alternativa e a repetição, que correspondem a formas de raciocínio intuitivamente óbvias.

Seqüência simples

C1;C2;...Cn;

Alternativa (simples) Alternativa (composta)

se (<condição>)então

C1;C2;...Cn;

fim-se;

se (<condição>)então

C1;C2;...Cn;

senão C1; C2; ... Cn; fim-se;

Repetição

enquanto (<condição>) façaC1;C2;...Cn;

fim-enquanto;

Exemplos:1. Elaborar um algoritmo que leia dois nºs e informe o maior.2. Leia três nºs e informe o maior.3. Leia a nota de um aluno e informe aprovado (nota>=60) ou reprovado

(nota<60).4. Leia um número inteiro de 1 a 12 e informe o mês correspondente.5. Leia um número e informe se é par ou ímpar.6. Imprima na tela os números de 1 a 100.7. Leia a nota de diversos alunos (até nota = -1) e informe aprovado ou reprovado.

7

Page 8: Alg Mat Completo

Metodologia de desenvolvimento de algoritmos

Passo 1: Leia cuidadosamente a especificação do problema até o final.(fazer anotações)

Passo 2: Repetir o passo 1 até entender completamente a especificação.

Passo 3: Levantar e analisar todas as saídas.

Passo 4: Levantar e analisar todas as entradas.

Passo 5: Verificar se é preciso gerar valores internamente ao algoritmo e levantar as variáveis necessárias e os valores iniciais de cada uma.

Passo 6: Levantar e analisar todas as transformações necessárias para, dadas as entradas e valores gerados internamente, produzir as saídas especificadas.

Passo 7: Testar cada passo do algoritmo, verificando se as transformações intermediárias executadas estão conduzindo aos objetivos desejados. Utilizar, sempre que possível, valores de teste que permitam prever os resultados a priori.

Passo 8: Fazer uma reavaliação geral, elaborando o algoritmo através da integração das partes.

Regras práticas para a construção de algoritmos legíveis

1. Procure incorporar comentários no algoritmo. Em Portugol comentários podem ocorrer em qualquer parte do algoritmo, encerrados entre {...} ou entre (*...*).Mínimo: objetivo, autor, data e local.

2. Escolha nomes de variáveis que sejam significativos, isto é, que traduzam o tipo de informação a ser armazenada na variável.

3. Grife todas as palavras-chave (escritas com letras minúsculas) do algoritmo, destacando as estruturas de controle.

4. Procure alinhar os comandos de acordo com o nível a que pertençam, isto é, destaque a estrutura na qual estão contidos.

8

Page 9: Alg Mat Completo

Exercícios – Diversos

1. Elaborar um algoritmo que calcule a área de um trapézio, suas dimensões são fornecidas pelo teclado.

2. Construir um algoritmo para calcular e imprimir a média aritmética de diversos valores naturais fornecidos pelo teclado, o flag é -1.

3. Elaborar um algoritmo para contar quantas vezes é possível subtrair 3 de 1000 (considere os números naturais).

4. Um determinado material radioativo perde metade de sua massa a cada 50 segundos. Dada a massa inicial em gramas (através do teclado), pede-se elaborar um algoritmo que determine o tempo necessário para que essa massa se torne menor que 0,5 gramas. Deverão ser impressas a massa inicial, a massa final e o tempo calculado em horas, minutos e segundos.

5. Elaborar um algoritmo que determine o maior e o menor número de uma série de números inteiros positivos fornecidos pelo teclado. Considere que existe pelo menos um número e -1 o flag.

6. Construir um algoritmo para calcular as raízes de uma equação do 2º grau, sendo que os coeficientes a,b e c são fornecidos pelo teclado.

7. Escrever um algoritmo para calcular o fatorial de um número N, cujo valor é fornecido pelo teclado.

8. Supondo que a população de um país A seja da ordem de 90 milhões de habitantes com uma taxa anual de crescimento de 3% e que a população de um país B seja aproximadamente de 200 milhões de habitantes com uma taxa anual de crescimento de 1,5%, elaborar um algoritmo que calcule e imprima o número de anos necessários para que a população do país A ultrapasse ou se iguale a população do país B. (mantidas essas taxas de crescimento)

9. Elaborar um algoritmo que leia o nome e o sexo de uma pessoa, informando o nome seguido da palavra homem (sexo = ‘masculino’) ou mulher (sexo = ‘feminino’).

9

Page 10: Alg Mat Completo

Exercícios – Alternativas e decisão

1. Dia da semana - Elaborar um algoritmo que lê um número de 1 a 7 e informa o dia da semana correspondente, sendo domingo o dia de número 1. Se o número não corresponder a um dia da semana, é mostrada uma mensagem de erro.

2. Triângulo - Em um triângulo, cada lado é menor do que a soma dos outros dois. Escreva um programa que lê três valores e informa se estes não podem constituir um triângulo ou, caso contrário, se o triângulo formado é equilátero (três lados iguais), isósceles (dois lados iguais) ou escaleno (lados diferentes).

3. Faixa etária - Fazer um algoritmo que leia nome e idade de uma pessoa e determine se esta pessoa é criança (até 12 anos), adolescente (de 12 até 21 anos), adulto (de 21 até 60 anos) e idoso (acima de 60 anos).

4. Menu Principal - Faça um programa de menu que mostra na tela, sob o título de "Menu Principal", três opções: "1 - Fim", "2 - Cadastro" e "3 - Consulta", lê do teclado a opção desejada pelo usuário e mostra uma mensagem confirmando a opção escolhida ou uma mensagem de erro, se a opção for inválida.

5. Múltipla Escolha - Elaborar uma questão de múltipla escolha, de uma disciplina que esteja cursando ou um tema de interesse, com um enunciado e cinco alternativas, sendo uma correta ou incorreta. Escrever um programa que mostra a questão na tela, pede a resposta correta e informa ao usuário se este acertou ou errou.

6. Senha - Elabore um programa que lê uma senha de até 8 caracteres, verifica se a senha está correta ou não, comparando-a com uma senha predefinida, e informa "Acesso autorizado" ou "Acesso negado", conforme o caso.

7. Desconto - Uma loja de departamentos possui a seguinte política de descontos para com seus clientes:5 % de desconto no preço total para compras com valores inferiores ou iguais a R$ 50,0010 % de desconto no preço total para compras com valores entre R$ 50,00 e R$ 100,0015 % de desconto no preço total para compras com valores superiores ou iguais a R$ 100,00

Elaborar um algoritmo para automatizar a situação.

8. Geometria - Para facilitar a tarefa dos alunos de uma escola, um professor de matemática necessita de um programa para calcular a área de certas figuras planas. O usuário deve escolher qual figura que se deseja calcular a área (quadrado, retângulo, triângulo e circunferência). Devem ser fornecidos os valores para cálculo da área. Ao final o programa deve imprimir o nome da figura escolhida, bem como sua área.

9. Salário - Elaborar um algoritmo que efetue o cálculo do reajuste de salário de um funcionário. Considere que o funcionário deverá receber um reajuste de salário de 15% caso seu salário seja menor que 500. Se o salário for maior ou igual a 500 e menor ou igual a 1000, seu reajuste será de 10%; e caso maior que 1000, o reajuste deverá ser de 5%.

1

Page 11: Alg Mat Completo

Exercícios – Repetição

1. Egocentrismo – Elaborar um algoritmo que mostra seu nome na tela dez vezes.

2. Ímpares - Apresentar todos os números ímpares situados na faixa de 0 a 50.

3. Pares - Apresentar todos os números pares situados na faixa de 0 a 50.

4. Soma dos cem – Calcular e apresentar a soma dos números inteiros de 1 a 100 (1+2+3+...+98+99+100).

5. Divisibilidade por 5 – Elaborar um algoritmo que forneça como saída os números divisíveis por 5, situados na faixa de 1 a 100.

6. Temperatura - A conversão de graus Farenheit para Celsius é obtida por C = 5/9*(F – 32). Faça um algoritmo que calcule e escreva uma tabela de centígrados em função de graus Farenheit, cujos graus variam de 50 a 150 de 1 em 1.

7. Aplicação - Faça um programa que receba o salário de um funcionário chamado José. Sabe-se que o funcionário Manoel tem um salário equivalente a um terço do salário de José. José aplicará seu salário integralmente na caderneta de poupança, que está rendendo 1% ao mês e Manoel aplicará seu salário integralmente no fundo de renda fixa, que está rendendo 3% ao mês. Calcule e mostre a quantidade de meses necessários para que o valor pertencente a Manoel iguale ou ultrapasse o valor pertencente a José.

8. Valores - Faça um programa que leia um conjunto não determinado de valores, um de cada vez, e escreva uma tabela com cabeçalho, que deve ser repetido a cada 20 linhas. A tabela deverá conter o valor lido, seu quadrado, seu cubo e sua raiz quadrada. Finalizar a entrada de dados com um valor negativo ou zero.

9. Fibonacci - Construir um algoritmo para escrever os termos da seqüência de Fibonacci (1, 1, 2, 3, 5, 8, 13, 21, ...) inferiores a um valor L.

10. Tabuada - Elaborar um algoritmo que leia um número inteiro de 1 a 9, e forneça como saída a sua tabuada de multiplicação.

11. Asteriscos - Elaborar um algoritmo que receba a nota de 10 alunos e a cada nota recebida imprima um gráfico da seguinte maneira:

nota = 4, Aluno 1 ****nota = 7, Aluno 2 *******...

12. Cidades - Uma turma de Sistemas de Informação, possui alunos oriundos de diversas cidades. Sendo as principais: Juiz de Fora, Leopoldina, Rio Pomba e Cataguases. Elaborar um algoritmo que leia o nome e a respectiva cidade de origem de seus 50 alunos. Ao final imprima o total de alunos por cidade.

1

Page 12: Alg Mat Completo

Máximas de programação

1. Algoritmos devem ser feitos para serem lidos por seres humanos.2. Escreva comentários no momento em que estiver escrevendo o algoritmo.3. Os comentários devem, acrescentar alguma coisa.4. Use comentários no prólogo (cabeçalho: o que algoritmo faz e instruções para o

seu uso).5. Utilize espaços em branco para melhorar a legibilidade.6. Escolha nomes representativos para suas variáveis.7. Um comando por linha é sufuciente.8. Em expressões matemáticas utilize parênteses para aumentar a legibilidade e

prevenir-se contra erros.9. Utilize “identação” para mostrar a estrutura lógica do algoritmo.10. Lembre-se: toda vez que for feita uma modificação no algoritmo, os comentários

associados devem ser alterados, e não apenas os comandos. Antes não comentar do que deixar algum comentário errado.

Exercício: A telemar está interessada em saber qual foi o maior nº de impulsos no mês e quantos assinantes atingiram este valor. Sabe-se que os valores dos pulsos serão fornecidos pelo teclado, sendo uma entrada por assinante. A última entrada contém o valor –1 e não deve ser considerada. Os resultados devem fornecer o maior nº de impulsos do mês e o nº de assinantes que atingiram este valor.

1

Page 13: Alg Mat Completo

2. Programação em uma linguagem de alto nível

Linguagem Pascal

A primeira implementação da linguagem foi desenvolvida por Niklaus Wirth no Instituto de Informática da ETH em Zurique na Suíça, onde era professor.

O professor Wirth, especificou e sistematizou a linguagem como uma evolução do Algol (Algoritmic Language) e o nome Pascal foi uma homenagem ao matemático e filósofo francês Blaise Pascal (1623-1662), criador da primeira calculadora mecânica.

A primeira especificação foi definida em 1968 e sofreu modificações no início da década de 70.

A linguagem Pascal é uma linguagem com características voltadas à programação estruturada.

É uma linguagem extremamente simples e poderosa e, não sendo voltada para nenhuma aplicação específica, permite a sua implementação em atividades comerciais, científicas, domésticas e principalmente em atividades educacionais, pois vários educadores defendem a linguagem para promover o primeiro contato entre alunos que tenham interesse na programação.

O ambiente de desenvolvimento

Para trabalhar com a linguagem Pascal você vai precisar de um compilador, um linkeditor e um editor de textos.

Para facilitar o processo de programação foram criados os ambientes de desenvolvimento, que unem estas características, além de oferecer outros recursos.

Em nossas aulas utilizaremos o ambiente de desenvolvimento Pascal Zim, disponível para download em http://pascalzim.tripod.com/index.html. Que une algumas vantagens, entre elas: possuir interface gráfica e não apresentar custo.

ExemplosRealizar a conversão utilizando a tabela e o ambiente de desenvolvimento.

ExercíciosPraticar a conversão dos algoritmos construídos anteriormente.

1

Page 14: Alg Mat Completo

Tabela de conversãoPortugol Pascal Java

Estruturainício

fim.

program nome;var …begin

end.

public class Ex1 { public static void main(String[ ] args) {

}}

Variáveisinteiro: x,y,z;

var x, y, z : integer;

inteiro = integerreal = reallógico = Boolean (true, false) caracter = stringchar = string de apenas uma posiçãobyte = nº inteiros de 0 até 255

inteiro = int ou shortreal = double ou floatlógico = booleancaracter = Stringcharbyte

Operadores Aritméticos + , - , * , /, div, mod +, -, *, (double) /, /, %Operadores Lógicos >, <, >=, <=, = , <> (diferente)

e andou ornão not

>, <, >=, <=, ==, != (diferente)e &&ou ||não !

Expressões de AtribuiçãoA5; A:= 5; A = 5;Comentários{teste} {teste}

(*teste*)// .../* ... */

Entrada e Saídaleia (x);

imprima ("nome:”, nome);

read (x);readln (x);{ln – mudança de linha}

write ('nome:' , nome);writeln ('nome:' , nome);

import javax.swing.JOptionPane;String e = JOptionPane.showInputDialog(“entrada = “);int x = Integer.parseInt(e);JOoptionPane.showMessageDialog(null, “Saída ”+x);System.exit(0);ou System.out.println(“Saída “+x);

Repetição (1)enquanto (X > 0) faça

fim-enquanto;

while (X > 0) do begin end;

while (x>0){ ...

}Condição (1)se (valor >10) então XX+1; MaiorValor; senão XX-1; MenorValor;fim-se;

if (Valor >0) then begin X : = X+1; Maior := Valor; end else begin X : = X-1; Menor := Valor; end;

if (Valor>0) { X=X+1; Maior=Valor; } else { X=X-1; Menor=Valor; }

Condição (2)Escolha (valor) caso 1 : mes’Jan’; caso 2 : mes’Fev’; caso 3 : mes’Mar’;; senão mês’inválido’;fim-escolha;

case (valor) of 1 : mes:=’Jan’; 2 : mes:=’Fev’; 3 : mes:=’Mar’; else mes:=’Inválido’;end;

swicth (valor) { case 1 : mes=”Jan”; break; case 2 : mes=”Fev”; break; case 3 : mes=”Mar”; break; default mes=”Inválido”; }

Repetição (2)para X de 1 até 5 faça

fim-para;

for X : =1 to 5 do begin end;

for (int I=0; I<=10; I++){ …

}Repetição (3)repita

até (X > 0);

repeat

until (X > 0);

do{ …

} while (x<=0);

1

Page 15: Alg Mat Completo

3. Tipos estruturados3.1. Agregados homogêneos: vetores e matrizes3.2. Agregados heterogêneos: registros3.3. Aplicações e exercícios

Agregados homogêneos: vetores e matrizes (Arrays)Vetores (uma dimensão)Matrizes (duas ou mais dimensões)

Comandos Extrasrepita C1; C2; ...até (Condição);

para v de i até f faça (passo p) C1; C2; ...fim-para;

Definição de novos tipostipo V = array [Li1..Lsl, Li2 .. Ls2, ... ] tipo básico;V: VETOR;

Exemplo (Vetor)tipo V = array [1..80] real;V : NOTAS;

1 2 3 ... 805.0 3.0 6.5 ... 9.8

Número de elementosO número de elementos de um vetor será dado por: Ls - Li + 1.

Percorrendo o vetortipo V = array [1 .. 80] real;V: NOTAS;inteiro: I;

para I de 1 até 80 faça leia(NOTAS[I]);fim-para;

1

Page 16: Alg Mat Completo

Exercícios - Vetores e Matrizes

***VETORES

1. Um professor tem uma turma de 80 alunos e deseja calcular e imprimir a nota de cada aluno seguida da média da turma. As notas serão fornecidas pelo teclado. Elaborar um algoritmo para automatizar a situação.

2. Elaborar um algoritmo que defina e leia dois vetores A e B com 20 elementos inteiros cada, calcule e imprima o vetor SOMA.

3. Fornecer o número de elementos de cada uma das estruturas abaixo:a) VET [-5 .. +5] b) NOME [0 .. 10] c) OC [1..10] d) ARR [O .. N]

4. Dado o vetor VET, definido por:tipo V = array [1 .. 100] inteiro; V: VET;

a) preenchê-lo com o valor inteiro 30; b) preenchê-lo com o números inteiros 1, 2, 3, ..., 100;c) preencher VET[i] com 1, se i é quadrado perfeito, e com O, nos demais casos.

5. Escreva um algoritmo que: a) Leia um conjunto A de 100 elementos reais;b) construa e imprima um outro conjunto B formado da seguinte maneira:

i) os elementos de ordem par são os correspondentes de A divididos por 2. ii) os elementos de ordem ímpar são os correspondentes de A multiplicados por

3.

6. Elaborar um algoritmo para calcular e imprimir o número de alunos que tiraram nota acima da nota média da turma. Preencher o vetor com valores aleatórios (função RANDOM), a turma tem 40 alunos.

***MATRIZES

7. (EXEMPLO) Escreva um algoritmo que leia duas matrizes reais de dimensão 3x5, calcule e imprima a soma das matrizes.

8. Dada uma matriz M de 5x3 elementos literais (fornecida pelo teclado), faça um algoritmo para:a) Percorrer a matriz linha por linha (fixe a linha, varie a coluna).b) Percorrer a matriz coluna por coluna (fixe a coluna, varie a linha).

9. Dada uma matriz MAT de 4x5 elementos (fornecida pelo teclado), faça um algoritmo para somar os elementos de cada linha gerando o vetor SOMALINHA. Em seguida, somar os elementos do vetor SOMALINHA na variável TOTAL que deve ser impressa ao final.

1

Page 17: Alg Mat Completo

***EXTRAS

10. (MÉTODO DA BOLHA) Elaborar um algoritmo que leia um vetor A de 20 elementos inteiros e o classifique em ordem crescente.

11. (BUSCA SEQÜENCIAL E BUSCA BINÁRIA) Dado um vetor A de 128 elementos inteiros, verificar se existe um elemento igual K (chave) no vetor. Se existir, imprimir a posição onde foi encontrada a chave; se não, imprimir: 'chave K não encontrada'. O vetor A e a chave K são fornecidos pelo teclado.

*PESQUISA: Exercícios 10 e 11Referência: GUIMARÃES, Lajes. Algoritmos e Estruturas de Dados. LTC Editora.

12. (PROJETO) Codificar um programa capaz de verificar em um vetor de 1000 elementos inteiros qual é o maior e menor número, a média aritmética dos números e a quantidade de números pares e impares. O programa deverá inicialmente preencher o vetor com números aleatórios entre 0 e 1000, para isso sugiro a utilização da função random.

13. (MEGASENA) Elaborar um aplicativo capaz de sortear palpites para a Megasena. O programa deve receber como entrada o número de cartões e o número de palpites por cartão, fornecendo como saída os palpites sorteados.

1

Page 18: Alg Mat Completo

Agregados heterogêneos: registrosO registro é uma estrutura de dados agregada, assim com o vetor, mas difere no fato de cada componente poder ser de um tipo diferente.O registro é a abstração de uma estrutura real muito conhecida, a ficha de cadastro.

Observe:Ficha cadastral

Nome (caracter)Salário (real)Idade (inteiro)Sexo (lógico)

Assim definimos um registro como um conjunto de campos, que podem ser de tipos diferentes.

Definição do computador:

tipo R = registro caracter[30]: NOME; real: SALARIO; inteiro: IDADE; lógico: SEXO;fim-registro;R: REG;

Memória:REGNOMESALARIOIDADESEXO

Acesso e atribuição de valoresA atribuição de valores às variáveis que compõem um registro pode ser qualificada da seguinte maneira:

REG.NOME’Fulano de Tal’;REG.SALARIO800,00;REG.IDADE30;REG.SEXOverdadeiro;

Arquivo

1

Nome ______(1)Salário________Idade__ Sexo__

Page 19: Alg Mat Completo

Um registro sozinho não faz muito sentido, daí surge o conceito de arquivo. Um arquivo é um conjunto de registros. O que também é uma abstração da realidade.

Exemplo:Elaborar um algoritmo que receba: nome, nota e situação(aprov. ou reprov.) dos 15 alunos de uma turma. Armazene os dados em um arquivo(vetor de registros). Ao final imprima a lista completa.

inicio{Definições}

tipo reg=registrocaracter: nome;real: nota;lógico: situacao;

fim-registro;tipo vet=vetor[1..15] reg;vet: turma;inteiro: i;

{Entrada}para i de 1 até 15 faça

leia(turma[i].nome);leia(turma[i].nota);se (turma[i].nota>=60)

então turma[i].situacaoverdadeirosenão turma[i].situacaofalso

fim-se;fim-para;

{Saída}para i de 1 até 15 faça

imprima(turma[i].nome);imprima(turma[i].nota);se (turma[i].situação=verdadeiro)

então imprima(‘Aprovado’)senão imprima(‘Reprovado’)

fim-se;fim-para;

fim.

Exercícios – Registros

1. Defina o registro para cada uma das situações abaixo:a) Coleção de livros.b) Coleção de CD’s.c) Clientes de uma empresa.d) Setores de uma empresa.

2. Elaborar um algoritmo que permita o cadastro do nome, idade, sexo e cidade dos alunos de sua turma. Ao final imprima a lista completa dos alunos cuja cidade é Juiz de Fora.

3. (PROJETO) Elaborar um algoritmo que permita o controle dos dados de seus amigos(máximo 100), através de um arquivo (vetor de registros). Implemente as operações de cadastro, consulta e alteração.

1

12...

15

...

Turma

Nome

Nota

Situacao

Reg

Page 20: Alg Mat Completo

4. Noções de modularização4.1. Introdução aos módulos4.2. Procedimentos4.3. Funções4.4. Passagem de parâmetros4.5. Recursividade4.6. Exercícios

Introdução aos módulosModularizar um programa é dividi-lo em pequenos módulos (sub-rotinas, rotinas,

blocos) cuja característica principal é a de que cada módulo deve possuir uma função específica.

Vantagens: eliminação de trechos de um ou mais programas com funções redundantes, facilita a codificação e a manutenção.

Os módulos são representados pelos PROCEDIMENTOS (PROCEDURES) ou FUNÇÕES (FUNCTION).

ProcedimentosProcedure <nome> (parâmetros);var <variáveis locais>;begin

<comandos>;End;

FunçõesA única diferença real entre funções e procedures é que as funções tem um valor

de retorno, enquanto os procedimentos não retornam um valor, por isso no cabeçalho da função temos que definir o tipo do resultado da função. Isto é feito ao se adicionar dois pontos e um tipo ao cabeçalho.

function <nome> (parâmetros) : <valor de retorno>;var <variáveis locais>;begin

<comandos>;End;

2

Page 21: Alg Mat Completo

ExemploProgram SubP1;// Variáveis Globaisvar N: Integer;

// Módulosprocedure Fatorial(X: Integer);// Variáveis Locaisvar I, F: Integer;begin F := 1; for I := 1 to X do begin F := F * I; end; writeln(F);end;

// Programa Principalbegin readln(N); Fatorial(N);End.

Program SubP2;// Variáveis Globaisvar N: Integer;

// Módulosfunction Fatorial(X: Integer) : integer;// Variáveis Locaisvar I, F: Integer;begin F := 1; for I := 1 to X do begin F := F * I; end; Fatorial:=F;end;

// Programa Principalbegin readln(N); writeln(Fatorial(N));end.

Escopo de variáveis de um programaO escopo de uma variável define a parte do programa em que a variável é

acessível. O importante é saber que uma variável é significativa somente dentro de seu escopo, ou seja, somente dentro do bloco em que ela é declarada. Você não pode usar uma variável fora do seu escopo.

Diz-se que um bloco é externo a outro, quando o segundo faz parte do primeiro. Nesse sentido, uma variável declarada em um bloco é global para todos os blocos internos e local para o próprio bloco.

• Variáveis Globais: São declaradas no âmbito (escopo) do programa principal, valendo, portanto, para todo o programa.

• Variáveis locais: Existem somente enquanto a sub-rotina está sendo executada. Ao terminar a sub-rotina, a mesma é retirada da memória, levando consigo suas variáveis locais, deixando seus valores perdidos.

Passagem de ParâmetrosTanto os procedimentos (procedures) como as funções (functions) podem receber

valores ou variáveis quando da ativação das mesmas. Estes elementos são chamados de parâmetros.

Os parâmetros são declarados no cabeçalho da procedure através de uma lista de parâmetros. Os parâmetros usados na codificação da procedure devem coincidir em número, ordem e tipo com os descritos na chamada da procedure. Podemos ter passagem de parâmetros por valor ou por referência.

Passagem de Parâmetros por Valor: Quando a passagem é feita por valor, o procedimento ou função trabalha com uma cópia local dos parâmetros passados, qualquer alteração do seu valor no interior do procedimento ou função não pode ser devolvido à referida fonte.

* Resolver exercício no. 1

2

Page 22: Alg Mat Completo

Passagem de Parâmetros por Referência: A passagem de parâmetros por referência indica ao procedimento ou função o endereço da variável e, por consequência, todas as alterações efetuadas no interior do procedimento ou função serão devolvidadas à referida fonte. Os parâmetros a serem passados por referência deverão ter na definição da sub-rotina na frente do nome do parâmetro a palavra “VAR”.

Exemplo//Passagem de parâmetros por valor

Program SubP3;var N: Integer;

procedure Fatorial(X: Integer);var I, F: Integer;begin F := 1; for I := 1 to X do begin F := F * I; end; writeln(F);end;

begin readln(N); Fatorial(N);end.

//Passagem de parâmetros por referência

Program SubP4;var N, FAT: Integer;

procedure Fatorial2(X: Integer; var F: integer);var I: Integer;begin F := 1; for I := 1 to X do begin F := F * I; end;end;

begin readln(N); Fatorial2(N, FAT); writeln(FAT);end.

2

Page 23: Alg Mat Completo

RecursividadeDiz-se que uma FUNCTION ou uma PROCEDURE é recursiva, quando ela

chama a si própria. Esta característica pode, a princípio parecer estranha, ou até mesmo desnecessária devido ao nível de programas o qual estamos trabalhando, mas o uso da recursividade muitas vezes, é a única forma de resolver problemas complexos. No nível que será dado este curso, bastará saber o conceito e o funcionamento de uma sub-rotina recursiva.

Exemplo// Recursividade

Program SubP5;var N: Integer;

function Fatorial(X : integer) : integer;beginif (X<=1) then Fatorial:=1else Fatorial:=X*Fatorial(X-1);end;

begin readln(N); writeln(Fatorial(N));end.

Exercícios1. Criar um módulo para cada uma das atividades abaixo:

a. Imprimir a palavra “sorte” cem vezes;b. Imprimir a palavra “SI” n vezes;c. Efetue o cálculo do quadrado de um número;d. Efetue o cálculo do cubo de um número;e. Informe se um número é par ou ímpar;f. Imprimir a frase “FLAMENGÃO campeão dos campeões” dez mil

vezes.2. (EXEMPLO) Elaborar um aplicativo que gerencie os módulos desenvolvidos na

questão anterior através do uso de um menu.3. Elaborar um aplicativo que implemente o cálculo da distância entre dois pontos

do plano, através do uso de funções.4. (PROJETO) Elaborar um aplicativo chamado Análise Combinatória, que

implemente através de funções o cálculo de permutação, arranjo e combinação.5. Elaborar um aplicativo chamado Calculadora, que leia dois números, a operação

a ser realizada e ao final apresente o resultado. Contemplar as operações: +, -, * e /.

6. Implementar o exercício anterior através de funções.7. Elaborar um aplicativo chamado Números Complexos, que implemente através

de módulos as operações de Adição, subtração, multiplicação e divisão de complexos.

8. Progressões (PA, PG).9. (PROJETO) Fibonacci (Usando recursividade).10. Implementar o exercício 5, usando passagem de parâmetros por referência.

2

Page 24: Alg Mat Completo

5. Noções de arquivo5.1. Organização e armazenamento de dados em memória secundária5.2. Instruções utilizadas5.3. Aplicação exemplo

ARQUIVOS

Um arquivo é de suma importância nos programas computacionais, desde o tempo em que o primeiro computador surgiu, pois, para que um programa faça algum tipo de operação, o mesmo precisa ser alimentado com informações fornecidas pelo teclado, o que em muitos casos torna-se inviável, ou são fornecidos através de um arquivo.

O PASCAL, possui dois tipos de arquivos, os quais são:

⇒ Arquivos FILE⇒ Arquivos TEXTFILE

ARQUIVO FILE

Um arquivo do tipo FILE, também conhecido por arquivo randômico, ou de acesso aleatório, é caracterizado pelo fato de ser possível buscar uma determinada informação em qualquer posição que a mesma se encontre, sem haver a necessidade de se percorrer todo o arquivo até se alcançar a informação desejada. O acesso a informação é direto.

A sintaxe geral para definir uma variável com esse tipo de estrutura é:

Type Arquivo = File of <Tipo>;

Var a : Arquivo;

Para tanto, existem diversos comandos para executar tais operações e que passaremos a examinar agora.

⇒ AssignFile: Este comando tem a finalidade de atribuir um nome lógico ao arquivo físico, ou seja, ao nome do arquivo em disco.

Sintaxe: Assign( Variável_tipo_file, Nome_arquivo);

Type Arquivo = File Of Integer;

Var Arq : Arquivo;Begin Assign(Arq,'A:EXEMPLO.DTA');

2

Page 25: Alg Mat Completo

A partir desse instante, todas as operaçöes de escrita ou leitura que forem realizadas com a variável Arq, será automaticamente feitas no arquivo EXEMPLO.DTA no drive A.

⇒ Rewrite: Cria e abre para Entrada\Saída um arquivo. Caso o arquivo não exista, o mesmo será criado. Caso o arquivo já exista, todos os dados existentes nele serão apagados.

Type Arquivo = File Of Integer;Var Arq : Arquivo;Begin Assign(Arq,'A:EXEMPLO.DTA'); Rewrite(Arq);

⇒ Reset: Este comando abre o arquivo em disco associado à variável Arq para leitura ou escrita. Esta procedure parte do princípio que o arquivo exista em disco, caso ele nåo exista, haverá erro.

Type Arquivo = File Of Integer;Var Arq : Arquivo;Begin Assign(Arq,'A:EXEMPLO.DTA'); Reset(Arq);

⇒ Write: Este comando é utilizado para escrever dados em um arquivo. Os dados säo gravados sequencialmente no arquivo, ou seja, um após o outro. Para tanto a linguagem Pascal mantém um apontador de registro de arquivo que aponta sempre para o número do registro, onde será gravado ou lido um dado.

Type Arquivo = File Of Integer; Var Arq : Arquivo; I: Integer; Begin Assign(Arq,'A:EXEMPLO.DTA'); Rewrite(Arq); For I:=1 to 100 do Write(Arq,I);

⇒ Seek: Como já dissemos anteriormente, a linguagem Pascal mantém um apontador de registro que indica o próximo registro que será lido ou escrito, e toda vez que fazemos uma leitura ou escrita num registro, o apontador é incrementado de um, isto é

2

Após estas declaraçöes, teremos um novo arquivo no drive A com o nome EXEMPLO.DTA, aberto e pronto para as operações de entrada e saída.

Após estas declaraçöes, o arquivo no drive A com o nome 'EXEMPLO.DTA' está aberto e pronto para as operações de entrada e saída.

Grava no arquivo A:EXEMPLO.DTA os números de 1 a 100.

Page 26: Alg Mat Completo

automático. No entanto, dispomos de um comando que nos permite alterar o valor desse apontador e portanto, nos permite acessar qualquer registro que quisermos. Esse comando chama-se Seek. A proprósito, o número do primeiro registro é zero. A sintaxe deste comando é:

Seek(Arq,número_do_registro);

⇒ Read: Comando para ler dados do arquivo, cuja sintaxe é Read(Arq,variável).

Type Arquivo = File Of Integer; Var Arq: Arquivo; I: Integer; Begin Assign(Arq,'A:EXEMPLO.DTA'); Rewrite(Arq); For I:=1 to 100 do Write(Arq,I); Seek(Arq,0); (posiciona o apontador de registro no registro número 0)

Read(Arq,I); (a variável I fica igual ao conteúdo do registro número 0 que no presente exemplo valeria 1,a proprósito, o apontador de registro já está valendo 1)

Read(Arq,I); (I agora está valendo 2)

⇒ Observação: Após cada operação READ/WRITE no arquivo, o endereço do registro corrente no arquivo é incrementado em uma unidade. Assim por Exemplo, se o endereço do registro corrente é igual a 10, após uma operação de READ/WRITE, o registro corrente passará a ser o número 11.

⇒ Close: Fecha um arquivo que tenha sido aberto com RESET\REWRITE, cuja sintaxe é Close(Arq).

⇒ Eof: Função que retorna o valor TRUE quando for encontrado o fim do arquivo.

While not eof(arquivo) do begin x:=x+1; Seek (arquivo,x); end;

⇒ FilePos: Função que retorna o número do registro corrente. Lembramos novamente, que o primeiro registro recebe o número zero. Sintaxe: FilePos(Arquivo).

⇒ FileSize: Função que retorna o número de registros de um determinado arquivo. Retorna zero se o arquivo estiver vazio. Esta funçäo em conjunto com o comando Seek,

2

Page 27: Alg Mat Completo

nos permite colocar o apontador de registros para o final do arquivo. Isto é muito útil quando desejamos adicionar mais registros num arquivo. Para tanto, basta declarar a seguinte instruçäo: Seek(Arquivo,FileSize(Arquivo));

⇒ Erase: Elimina o arquivo do disco. É importante notar que o arquivo a ser eliminado não pode estar aberto.

⇒ Rename: Renomeia um arquivo. Sintaxe: Rename( Arq : File , Novo_Nome)

ExercícioCodificar um programa para manipular informações de um arquivo de registros, onde cada registro possui dois campos: nome e nota. O programa permitirá somente duas operações: Inclusão e Consulta. A Consulta deverá mostrar todos os registros.

ARQUIVO TEXTFILE

Um arquivo do tipo TEXTFILE, também conhecido por arquivo seqüencial, é um tipo especial de arquivo que, ao contrário do arquivo FILE, pode ser editado normalmente através de um editor de textos qualquer. Ele é dito seqüencial porque a leitura tem que ser feita seqüencialmente do início ao fim do arquivo, não podendo desta forma, como é feito no arquivo FILE através do comando SEEK, posicionar de forma direta, o ponteiro de arquivo em um registro em particular.

Nos arquivos do tipo TEXTFILE, todas as informações lá armazenadas são texto (String's), mesmo assim, é possível escrever no arquivo informações de qualquer tipo de dado simples (INTEGER, REAL, STRING, BYTE, etc) as quais , ao serem fisicamente armazenadas no arquivo, serão automaticamente convertidas do seu tipo original para o tipo STRING. A leitura se processa de forma inversa, ou seja, quando é lida uma informação em um arquivo TEXT, a mesma será automaticamente convertida para o tipo da variável que irá armazenar a informação, isto é , do tipo STRING para o tipo da variável receptora da informação lida.

Existem uma grande quantidades de comandos especialmente para manipular arquivos TEXTFILE, alguns dos quais já foram vistos (Assign, Rewrite, Reset, Close, Write, Writeln, Read, Readln, etc). Portanto veremos a seguir outros comandos:

⇒ Append: Abre um arquivo para inclusão de novas informações do tipo Write-Only ( somente para escrita). Caso o arquivo não exista ocorrerá um erro de execução e o programa será abortado. É importante notar que as inclusões se processam sempre no final do arquivo.

⇒ Write ou Writeln: Ao ser usado o comando WRITE, todas as informações serão escritas no arquivo na mesma linha. Ao ser usado o comando WRITELN, todas as informações serão colocadas uma em cada linha

⇒ Read ou ReadLn: Ao ser usado o comando READ, a leitura será feita sempre na mesma linha , como acontece quando se usa este comando para ler informações pelo

2

Page 28: Alg Mat Completo

teclado. Por outro lado, ao ser usado o comando READLN, as leituras serão feitas linha a linha, como acontece quando se usa este comando para leitura pelo teclado.

Exercícios

1. Codificar um programa capaz de solicitar ao usuário a digitação de uma frase. Cada frase digitada pelo usuário deverá ser gravada em uma linha de um arquivo.

2. Codificar um programa capaz fazer o inverso do projeto anterior. Cada linha do arquivo deverá ser lida e mostrada para o usuário.

2

Page 29: Alg Mat Completo

6. BibliografiaGUIMARÃES, Lajes. Algoritmos e Estruturas de Dados. LTC Editora.FARRER, Harry et al. Algoritmos Estruturados. Ed. Guanabara.AVILLANO, I. C. Algoritmos e Pascal. Ciência Moderna.MANZANO, José Augusto N. G.; MENDES, Sandro S. Vicca. Estudo Dirigido, Delphi. São Paulo: Ed. Érica, 2001.

2