Você está na página 1de 8

Faculdade Ideal

Curso Tecnológico de Redes de Computadores


Lógica de Programação I

Conjuntos Monodimensionais - Vetores


Prof. Iranildo

Vimos que uma variável pode ter somente um valor em um determinado instante.
Agora a noção de variável será estendida a uma coleção de variáveis denominada conjunto.
Quando se organiza um problema para ser resolvido usando um computador,
encontramos outros problemas agregados. Um dos problemas é entender o relacionamento
entre os itens dados.
Para entender o relacionamento é necessário entender os dados deste problema.
Normalmente os dados são formados por elementos simples, tais como: números inteiros,
dígitos binários, cadeia de caracteres, ou por um conjunto de itens simples. A escolha certa
dos itens de dados é um passo para a solução do problema. As diversas maneiras em que os
itens de dados são logicamente relacionados, definem diferentes estruturas de dados.
As estruturas de dados são classificadas como primitivas e não-primitivas.
Estruturas de dados primitivas já foram vistas: números inteiros, números reais, caracteres,
valores lógicos e ponteiros. O nome estruturas de dados primitivas é dado a estas estruturas
pelo fato de os computadores possuírem um conjunto de instruções para manipulá-los.
Uma estrutura de dados não-primitiva muito usual — um número complexo — é
descrita a seguir. Um número complexo é uma estrutura de dados não-primitiva porque alguns
computadores não possuem instruções para manipulá-lo, porém algumas linguagens de
programação permitem tais operações, exemplo: FORTRAN e PL/I.
Sejam u = x + yi e v = a + bi dois números complexos, onde i = − 1 e x, y, a, e b são
números reais. As operações aritméticas que podem ser executadas com estes números são:

u + v = (x + a) + (y + b)i
u - v = (x - a) + (y - b)i
u * v = (x * a - y * b) + (x * b + y * a)i
u / v = (x * a + y * b) + (y * a - x * b)i
(a * a + b * b)

onde +, -, *, / indicam as operações de adição, subtração, multiplicação e divisão


complexas, respectivamente. Com isto, pode-se observar que usando operadores aritméticos
ordinários é possível realizar operações aritméticas complexas. Note que para multiplicar dois
números reais é necessário uma simples instrução, e que na multiplicação de dois números
complexos foi utilizada uma seqüência de seis instruções (quatro multiplicações, uma
subtração e uma adição). O mesmo se aplica aos operadores aritméticos restantes. Um número
complexo consiste em um par ordenado de números reais, com cada par de real tratado de
forma diferente.

Agora trabalhamos com outra estrutura de dados não-primitiva, mais complicada,


porém comum. Suponha que exista uma relação de alunos com o nome de cada estudante e a
nota da primeira prova de LTPI. O que se quer fazer com esta relação é imprimir o nome de
cada estudante cuja nota é maior do que a nota média da classe.
Para desenvolver este algoritmo deve-se ler a relação duas vezes. Na primeira leitura
pode-se determinar a nota média da classe. Já na segunda leitura pode-se comparar a nota de
cada um com a nota média. Quando a nota do estudante é maior que a média da turma, o
nome dele é impresso. Como isso pode ser feito ?
O que pode ser feito é ler todos os dados e obter a média e depois ler os dados
novamente para executar a saída desejada. Esta solução é ineficiente, pois os mesmos dados
são lidos mais de uma vez. Uma solução melhor é armazenar a relação na memória do
computador usando diversas variáveis para nomes e notas.

Algoritmo Estatistica

1. Ler a relação
Leia (NOME1, NOTA1, NOME2, NOTA2, NOME3, NOTA3, NOME4, NOTA4, NOME5, NOTA5)
2. Obter a média
MEDIA  (NOTA1 + NOTA2 + NOTA3 + NOTA4 + NOTA5) / 5.0
3. Testar a nota do primeiro estudante
Se NOTA1 > MEDIA
Então escreva (NOME1)
4. Testar a nota do segundo estudante
Se NOTA2 > MEDIA
Então escreva (NOME2)
5. Testar a nota do terceiro estudante
Se NOTA3 > MEDIA
Então escreva (NOME3)
6. Testar a nota do quarto estudante
Se NOTA4 > MEDIA
Então escreva (NOME4)
7. Testar a nota do quinto estudante
Se NOTA5 > MEDIA
Então escreva (NOME5)
8. Terminar
Fim

Note que este algoritmo só funciona para 5 estudantes. E se o problema fosse para 200
estudantes? Se fosse utilizada esta lógica anterior seriam necessárias 200 variáveis para os
nomes e 200 variáveis para as notas.
Uma melhor solução para o problema é utilizar um conjunto para os nomes e um
conjunto para as notas dos estudantes. Para criar essa solução deve-se fazer as variáveis nota e
nome corresponderem aos conjuntos notas e nomes, respectivamente. Se a relação contém
cinco estudantes, a variável nome significa um conjunto ordenado de cinco elementos, com
cada elemento nesse conjunto representando uma cadeia de caracteres. Utilizando esta
notação é necessário um índice para selecionar um elemento particular no conjunto ordenado.
Por exemplo, para obter o nome do quarto estudante, utilizaremos a seguinte notação
NOME[4]. Assim, a variável NOME[1] indica o nome do primeiro estudante.
Quando um índice é associado ao nome dado a um conjunto, a variável resultante é
chamada de variável indexada. Tal índice pode ser também uma variável. No exemplo
anterior, NOME[i] refere-se ao quarto elemento da relação quando i for igual a 4. As variáveis
que são utilizadas com índice devem ser do tipo inteiro.
Com o conhecimento que possuímos, agora podemos definir um vetor como um
conjunto ordenado que contém um número fixo de elementos. O elemento de um vetor pode
ser um número inteiro, um número real ou uma cadeia de caracteres, porém todos os
elementos de um vetor devem ser do mesmo tipo.
Um vetor também é conhecido como um conjunto monodimensional.
Utilizando vetores, o Algoritmo Estatistica fica da seguinte forma:
1. Ler a relação
Para i = 1, 2, ..., 5 faça
Leia (NOME[i], NOTA[i])

2. Obter a nota média


SOMA  0.0
Para i = 1, 2, ..., 5 faça
SOMA  SOMA + NOTA[i]
MEDIA  SOMA / 5.0

3. Testar cada estudante da relação


Para i = 1, 2, ..., 5 faça
Se NOTA[i] > MEDIA
Então escreva (NOME[i])

4. Terminar
Fim

Quais alterações seriam necessárias para uma classe de 200 alunos ?

Operando Sobre Vetores

Um vetor X pode ser uma seqüência ordenada de elementos, tais como:

X[i], X[i+1], X[i+2], ..., X[h]


onde i e h são inteiros, com h >= i, e indicam os elementos de índices inferior e
superior, respectivamente. Por exemplo, um vetor cujos elementos são:

ALUNO[0], ALUNO[1], ALUNO[2], ALUNO[3]

tem o índice inferior igual a 0 e o índice superior igual a 3. Algumas linguagens de


programação permitem que o índice inferior seja um valor arbitrário, outras exigem que o
índice seja sempre o número 1.

Para atribuir um valor a uma variável indexada basta utilizar o mesmo procedimento
feito para variáveis simples, somente indicando qual posição desta variável receberá o valor
desejado. Assim, para atribuir o valor 100 à quinta posição do vetor X, usamos a notação X[5]
 100.

O processamento de conjuntos normalmente envolve o processamento individual de


cada elemento do conjunto. Se em uma aplicação for necessário inicializar cada elemento com
um mesmo valor, podemos utilizar a seguinte lógica:

Supondo um vetor valor de 15 posições inteiras:

Para i = 1, ..., 15 faça


VALOR[i]  0

Algumas linguagens de programação permitem que sejam feitas generalizações como


VALOR  0.
Outro aspecto que deve ser observado quando usamos vetores é a leitura de valores
através do teclado. Para isso utilizamos a seguinte lógica:
Para i = 1, ..., 15 faça
Leia (VALOR[i])

O primeiro valor é colocado no primeiro elemento do vetor, o segundo valor no


segundo elemento do vetor e assim sucessivamente, até que o vetor seja totalmente
preenchido.
Uma situação semelhante ocorre, quando se deseja imprimir todos os elementos de um
vetor, a lógica é mostrada a seguir:

Para i = 1, ..., 15 faça


Escreva (VALOR[i])

Exercícios

A) Para os problemas abaixo, desenvolva algoritmos e programas em Turbo Pascal.

1. Ler 10 elementos de um vetor e depois mostrar o conteúdo do vetor.

2. Ler um vetor A de 8 elementos. Construir outro vetor B, de mesma dimensão e tipo de A,


com os elementos do vetor A multiplicados por 3.

3. Ler um vetor A de 15 elementos quaisquer. Construir outro vetor B, do mesmo tipo de A,


sendo que cada elemento do vetor B seja o fatorial do elemento correspondente do vetor
A.

4. Um matemático deseja ter um programa que a partir da entrada de 25 números diferentes


em um vetor, com valores situados na faixa de 0 a 30, possa calcular, mostrar e armazenar
o resultado destes elevados a terceira potência. Resolva este problema para ele.

5. Um comerciante realiza periodicamente compras para o mercadinho dele. Na realização


das compras ele anota o nome do produto, a quantidade comprada e o valor unitário de
cada produto. Com estes dados ele deseja mostrar para seu sócio, através de um programa
de computador, uma listagem de todo o material comprado, a quantidade comprada, o
valor unitário de cada produto, o valor total de cada produto e o valor total da compra.
Resolva este problema para uma quantidade de 10 produtos.

6. Para um vetor A de n número reais, formular um algoritmo e um programa que


determinem o maior e o segundo maior elemento deste vetor. Assumir que estes valores
são distintos.

7. Preparar um algoritmo e um programa que leia um vetor A ordenado de n inteiros e


imprima um vetor de mesma seqüência, ignorando valores em duplicata encontrados no
vetor lido. O número de elementos restantes (m) é também solicitado. Por exemplo, dado
o vetor:

A1 A2 A3 A4 A5 A6 A7 A8 A9 A10
15 31 23 15 75 23 41 15 31 85

de 10 números inteiros, o vetor resultante seria:

A1 A2 A3 A4 A5 A6 A7 A8 A9 A10
15 31 23 75 41 85
com m = 6
8. Uma imobiliária tem 25 vendedores entre seus empregados. Cada venda feita por um
vendedor é registrada da seguinte maneira:

Número do vendedor, nome do vendedor e valor da venda


O número de entradas e desconhecido. O número de vendas pode variar de vendedor para
vendedor. Ou seja, um vendedor pode fazer 12 vendas e outro, 10. As entradas não estão em
seqüência. Formular um algoritmo e um programa em Pascal que gere o valor total de vendas
por vendedor. A saída deve ter a seguinte forma:

Número do Vendedor Nome do Vendedor Total


1 João 2540,00
2 Márcio 5002,10
* * *
* * *
25 Petroso 1582,22

Deve-se utilizar um método para detectar o final da leitura dos dados. Menções especiais
devem ser dadas aos vendedores com os dois totais mais altos. Projetar o algoritmo e o
programa para que o nome destas duas pessoas realçadas.

9. Ler um vetor A de 18 elementos. Construir outro vetor B, de mesma dimensão e tipo de


A, com os elementos do vetor A elevados a 4 potência, e depois disso seja retirada a raiz
cúbica dos elementos.

B) Desenvolva os exercícios a seguir

1) Leia, via teclado, 200 valores do tipo inteiro e os guarde na memória.

2) Amplie o exercício anterior emitindo um relatório com todos os números pares que você
leu.

3) Determine qual o menor e o maior valor existente no vetor do exercício número 10.

4) Faça um algoritmo que imprima quantos dos valores do exercício número 10 são maiores
que a média desses valores.

5) Faça um algoritmo que leia 10 nomes e os guarde na memória.

6) Amplie o exercício 6 imprimindo o menor Nome do vetor

7) Amplie o exercício 6 imprimindo o maior Nome do vetor

8) Faça um algoritmo que leia 20 palavras, e após a leitura, realiza um processo qualquer que
inverta os caracteres de cada uma das palavras.

9) Faça um algoritmo que leia, nome, idade e sexo de N pessoas. Após a leitura faça:
a) Escreva o nome, idade e sexo das pessoas cuja idade seja maior que a idade da
primeira pessoa.
b) Escreva o nome e idade de todas as mulheres.
c) Escreva o nome dos homens menores de 21 anos.

10) Faça um algoritmo para ler 20 valores e que imprima os que são maiores que a média dos
valores.

11) Faça um algoritmo que leia nome e notas (total de 12) de N alunos de um colégio. Após a
leitura faça:
a) Escreva o nome e a média dos alunos aprovados (Média >= 7.0).
b) Escreva o nome e a média dos alunos em Recuperação (5.0 >= Média < 7.0).
c) Escreva o nome e a média dos alunos reprovados (Média < 5.0).
d) Escreva o percentual de alunos aprovados.
e) Escreva o percentual de alunos reprovados.

12) Dado o nome e o salário de 10 funcionários um algoritmo que:


a) Escreva o nome e o salário dos funcionários que ganham mais de R$ 500,00
b) Para os funcionários que ganham menos de R$ 200,00 conceda um aumento de
20%. Escreva nome e o novo salário destes funcionários aumentados

13) Faça um algoritmo que crie uma tabela no vídeo do computador com todos os caracteres
ASCII, sendo que deverá ser impresso o caracter, bem como o seu valor decimal.

14) Um teste composto por 10 questões foi proposto numa classe de n alunos. Cada
questão admite as alternativas identificadas pelas letras A, B, C, D e E. Para cada aluno tem-
se o registro contendo o seu nome e as suas respostas. Sendo dado o gabarito das questões
faça um algoritmo que:
a) Escreva uma relação contendo o nome e o número de acertos de cada aluno;
b) Determine quantos alunos acertaram as questões 1 e 2 e tiveram 7 acertos;
c) Escreva o nome do aluno, que obteve a melhor nota e do que teve a pior nota;

15) Faça um algoritmo que leia 10 valores numéricos inteiros. Após a leitura emita um
relatório com cada valor diferente e o número de vezes que o mesmo apareceu no vetor.

16) Dado uma ralação de N nomes, faça um algoritmo que verifique se uma determinada
pessoa está neste vetor. O Nome da pessoa a ser pesquisada deverá ser lido, bem como os
nomes a serem colocados no vetor.

17) Dado uma frase, faça um algoritmo que determine qual a consoante mais utilizada.

18) Faça um algoritmo que leia N letras e armazene cada uma em uma posição de memória.
Coloque no vetor, após a última letra lida, o caracter “$”, indicando final dos caracteres

19) Faça um algoritmo que:


a) Leia um vetor A com N elementos e um vetor B com N elementos do tipo
CADEIA.
b) Intercale estes vetores A e B, formando um outro vetor C da seguinte forma.
C[1] ← A[1]
C[2] ← B[1]
C[3] ← A[2]
C[4] ← B[2]

c) Caso um vetor (A ou B) termine antes do outro, o vetor C deverá ser preenchido


com os elementos do vetor que ainda possui informações.
20) Faça um algoritmo que:
a) Leia um vetor com N elementos formado por valores do tipo inteiro.
b) Após a leitura, modifique o vetor de forma que o mesmo contenha na parte superior
somente valores pares, e na parte inferior os valores impares.

21) Dado que para cada aluno de uma turma de “N” alunos se tenha, o seu nome, e as notas
das 8 avaliações. Faça um algoritmo que:
a) Calcule a Percentagem de alunos cujo nome comece com a letra “A”;
b) Para cada aluno imprima uma mensagem dizendo se o aluno tem ou não notas
repetidas;
c) Determine quantos alunos tem pelo menos duas notas acima de 7;
d) Escreva o nome e a média de cada aluno;

22) Dado um vetor X de n elementos faça um algoritmo que:


a) Crie outro vetor Y contendo os elementos de x que estão na faixa entre 10 e 40;
b) Crie outro vetor W contendo os números que estão nas posições pares;
c) Pesquise a existência de um determinado elemento Y no vetor X;
d) Escreva o menor e maior elemento do vetor X;

23) Em uma cidade do interior, sabe-se que, de janeiro a abril de 1976 (121 dias), não
ocorreu temperatura inferior a 15o C nem superior a 40o C. As temperaturas verificadas em
cada dia estão disponíveis em um computador. Faça um algoritmo que calcule e escreva:
a) a menor temperatura ocorrida;
b) a maior temperatura ocorrida;
c) a temperatura média
d) o número de dias nos quais a temperatura foi inferior a média à temperatura média.

24) Um armazém trabalha com 100 mercadorias diferentes identificadas pelos números
inteiros de 1 a 100. O dono do armazém anota a quantidade de cada mercadoria vendida
durante o mês. Ele tem uma tabela que indica, para cada mercadoria, o preço de venda.
Escreva um algoritmo para calcular o faturamento mensal do armazém. A tabela de preços é
fornecida seguida pelos números das mercadorias e as quantidades vendidas. Quando uma
mercadoria não tiver nenhuma venda, é informado o valor zero no lugar da quantidade.

25) Uma grande firma deseja saber quais os três empregados mais recentes. Fazer um
algoritmo para ler um número indeterminado de informações (máximo de 300) contendo o
número do empregado e o número de meses de trabalho deste empregado e escrever os três
mais recentes.
Observações: A última informação contém os dois números iguais a zero. Não existem
dois empregados admitidos no mesmo mês.
Exemplo:
EMPREGADOS
224 1731 2210 4631 … 526
1 2 3 4 300

MESES
17 3 9 2 … 10
1 2 3 4 300

Empregado mais recente: 4631.


26) Fazer um algoritmo que:
a) leia uma variável indexada A com 30 valores reais;
b) leia uma outra variável indexada B com 30 valores reais;
c) leia o valor de uma variável X;
d) verifique qual o elemento de A é igual a X;
e) escreva o elemento de B de posição correspondente à do elemento A igual a X;

27) Fazer um programa que:


a) leia o valor de M (M<=30) e os valores de uma variável indexada A;
b) leia o valor de N (N<=20) e os valores de uma variável indexada B;
c) determine o conjunto C = A ∪ B (união de A com B), onde C não deverá conter
elementos repetidos (A e B não contém elementos repetidos);
d) escreva os elementos contidos em A, B e C;

28) Para cada nota de compra , tem-se o nome do produto comprado, o valor e o imposto
(ICMS = 17%). Faça um algoritmo que leia e escreva o nome, o valor e imposto de cada
produto. Bem como o valor total bruto, o imposto total cobrado e o valor total líquido de
todas as notas. Considere 500 notas.

29) Uma empresa deseja fazer um levantamento do seu estoque. Para isto possui para cada
tipo de produto, o seu nome, o valor unitário e a sua quantidade em estoque. A empresa deseja
emitir um relatório contendo, o nome, quantidade, valor, unitário e o saldo ( valor total ) em
estoque de cada tipo de produto. Ao final se deseja saber quantos tipos de produtos existem
em estoque e o saldo de todos os produtos.

30) Faça um algoritmo que leia 10 nomes e os guarde na memória. Após a leitura escreva
todos os nomes que são palíndromos. Uma palavra palíndromo é aquela que a sua leitura é a
mesma da esquerda para a direita e vice-versa. Exemplo: ARARA, ANA, etc.

Fontes
Exercícios 1,2,3.
Salvetti, D. D., Barbosa, L. M., Algoritmos, São Paulo, Makron Books, 1998
Internet

Você também pode gostar