• Nenhum resultado encontrado

1. VARIÁVEIS COMPOSTAS HOMOGÊNEAS (VETORES E MATRIZES)

N/A
N/A
Protected

Academic year: 2021

Share "1. VARIÁVEIS COMPOSTAS HOMOGÊNEAS (VETORES E MATRIZES)"

Copied!
15
0
0

Texto

(1)

1. VARIÁVEIS COMPOSTAS HOMOGÊNEAS (VETORES E MATRIZES)

As variáveis compostas homogêneas são estruturas de dados que se caracterizam por um

conjunto de variáveis do mesmo tipo de dado. Elas podem ser unidimensionais ou multidimensionais.

Para explicar de maneira simples, vamos fazer uma analogia: imaginemos um quadradinho de

um tabuleiro de damas. Este quadradinho é uma variável simples, isto é, armazena apenas um valor de

cada vez. A variável composta homogênea é um conjunto desses quadradinhos, isto é, mais de um valor

(de um mesmo tipo de dado) numa mesma variável. Sendo assim, a nossa variável composta homogênea

chama-se tabuleiro e sabemos que dentro dela existem diversos quadradinhos iguais, ou seja, cada

quadradinho é um elemento do tabuleiro e todos são do mesmo tipo.

Em suma, os vetores e matrizes definem uma coleção de variáveis do mesmo tipo de dado e são

referenciados por um único nome; isto define uma estrutura homogênea.

(a)

(b)

(c)

1.1. VETOR

Variável composta homogênea unidimensional caracteriza-se por dados agrupados linearmente

numa única direção, como uma linha reta (b).

Definição

 São varáveis que recebem um nome e podem assumir vários valores.

 Unidimensionais.

Portanto, vetor também é conhecido como variável composta unidimensional. Isto quer dizer

que se trata de um conjunto de variáveis de mesmo tipo, que possuem o mesmo identificador (nome) e

são alocadas sequencialmente na memória. Como as variáveis têm o mesmo nome, o que as distingue é

um índice que referencia sua localização dentro da estrutura. Veja dois modelos de abstração:

a)

x

1

2

3

4

5

x[1]

Note que em a) o vetor é de tamanho 5.

Neste caso os índices variam desde 1 (primeiro

elemento) até 5 (último elemento).

b)

Note que em b) o vetor é de tamanho 6.

Os índices variam desde 0 (primeiro elemento)

até 5 (último elemento).

Tanto a) quanto b) podem ser pensadas como forma de abstração de um vetor, no entanto

recomenda-se utilizar o modelo de a) quando estiver elaborando um algoritmo e b) na implementação.

Na dúvida, e para facilitar, a forma de b) é a mais usual.

(2)

1.1.1. Declaração de vetor

declaração de variáveis

tipo nome[tamanho]

onde tipo é o tipo dos dados que serão armazenados no vetor; nome é o nome da variável do tipo vetor;

tamanho é a quantidade de variáveis que vão compor o vetor.

Veja que a declaração de vetores é semelhante à de uma variável simples com o acréscimo da

quantidade máxima de elementos entre um par de colchetes logo após seu identificador. Por exemplo,

para declarar o vetor V do modelo b) de abstração (subseção 1.1.) em C:

int V[6]; //apenas declaração

int V[6] = {2,4,5,8,1,3} //declaração e inicialização dimensionado

int V[] = {2,4,5,8,1,3} //declaração e inicialização sem dimensionar

Observe que em C é possível declarar e inicializar imediatamente um vetor. O número 6 entre

colchetes significa que esse vetor terá no máximo seis elementos, todos do tipo inteiro.

1.1.2. Atribuindo valores ao vetor

As atribuições em vetor exigem que seja informada em qual de suas posições o valor ficará

armazenado.

x[1]  45;

No exemplo, o número 45 será armazenado na posição de índice 1 do vetor x.

Veja:

real notas[6];

 Vetor notas de 6 posições do tipo real. (sintaxe: tipo nome[posições])

notas

6.0

7.0

4.0

8.0

8.0

9.0

1 2 3 4 5 6

Para acessar cada valor correspondente às notas, no exemplo acima, deve-se utilizar um índice,

cujo valor varia de 1 (ou 0, em C) até o tamanho do vetor.

Observe as atribuições:

notas[1]  6.0;

notas[2]  7.0;

. . .

1.1.3. Preenchendo um vetor

Preencher um vetor significa atribuir valores a todas as suas posições. Assim, deve-se

implementar um mecanismo que controle o valor do índice.

Exemplo:

Em Algoritmo

(3)

Algoritmo:

para x1 até 5 faça

início

escreva(“Digite o “, x,”º número:”);

leia(vet[x]);

fim para

Em C:

for (x=0;x<5;x++)

{

printf(“\nDigite o %d%c n%cmero: ”,(x+1),167,163);

scanf(“%d”,&vet[x]);

}

Observe no código acima em C que a variável x (que controla os índices dos elementos do vetor)

varia desde 0 (primeiro elemento) até 4 (último elemento); por isso a expressão x<5, o que poderia ser

escrito também como x<=4. Entretanto, para fins de melhor entendimento do tamanho do vetor x<5

fica mais “explícito”, indicando que o vetor tem cinco elementos. Outro detalhe também é mensagem

para o usuário: (x+1) é a correta, pois dá perfeitamente a ordem numérica do elemento a ser digitado,

isto é, na memória os índices iniciam em 0, mas para o usuário iniciam em 1, dando a noção exta dos

cinco elementos.

Nesse exemplo, a estrutura de repetição para foi utilizada para garantir que a variável x assuma

todos os valores possíveis para o índice do vetor. Assim, para cada execução da repetição, será utilizada

uma posição diferente do vetor.

Simulação (com os índices iniciando em 1):

MEMÓRIA

TELA

x = 1; vet 26

1 2 3 4 5

Digite o primeiro número: 26

x = 2; vet 26 15

1 2 3 4 5

Digite o segundo número: 15

x = 3; vet 26 15 -21

1 2 3 4 5

Digite o terceiro número: -21

x = 4; vet 26 15 -21 46

1 2 3 4 5

Digite o quarto número: 46

x = 5; vet 26 15 -21 46 0

1 2 3 4 5

Digite o primeiro número: 0

1.1.5. Mostrando os elementos do vetor

Mostrar os valores contidos em um vetor também implica a utilização.

Exemplo:

para x1 até 5 faça início

escreva(“Este é o “, x,”º número do vetor”); escreva(x[]);

(4)

Exercício resolvido:

Criar um algoritmo que leia um vetor de números inteiros e 5 posições. Mostre cada elemento do vetor

multiplicado por 3.

algoritmo numeros

declaração de variáveis inteiro num[5],x,mult; inicio

para x1 até 5 faça inicio

escreva(“Digite um número: ”); leia(num[x]);

fim para

para x1 até 5 faça inicio

multnum[x]*3; escreva(mult); fim para

fim_algoritmo

1.1.6. Algumas Aplicações Práticas

Em vários momentos do dia a dia, o homem depara-se com a necessidade de pesquisar e

consultar dados ordenados, sendo estas dois exemplos de aplicações práticas muito utilizadas na

computação.

 Existem diversos algoritmos para ordenação, tais como: BubbleSort, InsertSort, SelectSort,

ShellSort, QuickSort, HeapSort e MergeSort. Neste curso podem ser utilizados, por exemplo, o

estudo dos três primeiros.

 Outra aplicação é quando se deseja pesquisar determinado valor nos elementos de um vetor,

isto é, dado um valor, deseja-se verificar se esse valor coincide com algum elemento de uma

lista de valores. Existem vários algoritmos para resolver um problema desse tipo, e podem ser

utilizados dois deles. O mais trivial é o da “pesquisa Sequencial”, onde a pesquisa começa no

primeiro elemento do vetor comparando cada elemento com o valor dado. Outro algoritmo é o

da “Pesquisa Binária”, em que se utiliza de partições recursivas do vetor pesquisado em dois

segmentos em torno de um valor central da lista de valores; e para isso o vetor deve estar

previamente ordenado.

 Também há a inversão de vetores, que é a possibilidade de se inverter a ordem dos elementos de

uma lista. Neste caso o que se deseja é fazer com que o primeiro elemento da lista original seja o

último da lista invertida, o segundo da lista original seja o penúltimo da lista invertida, e assim

sucessivamente até que o último da lista original seja o último da lista invertida.

 Veja uma aplicação do cotidiano (uma “curiosidade”):

Uma interessante utilização do uso de vetores está na determinação dos dígitos verificadores de

importantes documentos, como no CPF (Cadastro de Pessoa Física) da Receita Federal. Temos

também o dígito verificador no CNPJ (Cadastro Nacional de Pessoa Jurídica), Título Eleitoral e

em outros inúmeros documentos.

No CPF, o DV módulo 11 corresponde ao resto da divisão por 11 do somatório da

multiplicação de cada algarismo da base respectivamente por 9, 8, 7, 6, 5, 4, 3, 2, 1 e 0, a partir

da unidade. O resto 10 é considerado 0. Veja, abaixo, exemplo de cálculo de DV módulo 11 para

o CPF nº 280012389:

(5)

A Região Fiscal onde emitido o CPF (definida pelo nono dígito) tem a seguinte abrangência: 1

(DF-GO-MS-MT-TO), 2 (AC-AM-AP-PA-RO-RR), 3 (CE-MA-PI), 4 (AL-PB-PE-RN), 5 (BASE), 6

(MG), 7 (ES-RJ), 8 (SP),9 (PR-SC) e 0 (RS). Mas, inexplicavelmente, já vi CPF válido, emitido no DF

(Região 1) com o nono dígito = 5 (Região BA-SE).

Tente criar o algoritmo e implementa, veja uma sugestão para a saída:

 Tratamento de strings

Como já explicado, o C não prevê o tipo string tradicional tal como é tratado pelo Pascal ou

Java. Assim, para trabalhar com esse tipo de dado a linguagem C considera uma variável “string”

como uma sequência (vetor) de caracteres. Isso resolve satisfatoriamente o problema, uma vez que o

próprio Pascal ou Java fazem uso desse artifício internamente.

Desse modo, para declarar uma variável “Nome” que armazenará o nome de uma pessoa, deve ser

feito assim: literal Nome[46] ou char Nome[46].

char

tipo de dado

Nome

identificador da variável (nome da variável – nome do vetor)

46

número máximo de caracteres + 1

O “número de caracteres + 1” se deve ao fato de o C ter a necessidade de um indicador final da

string; esse indicador é o caractere nulo “\0”. Suponha que se deseja trabalhar com a frase “Hoje vai

chover” mostrada no esquema a seguir.

Ao declarar um vetor de caracteres (string) ele deve ser definido com uma posição adicional;

esta posição é para conter o caractere “\0”, chamado de “finalizador de string”.

A leitura, em C, é feita com a função gets() e não mais com scanf(). A razão disso é que o

scanf() lê uma sequência até o ponto que encontrar um espaço em branco ou um [Enter]. Usando

(6)

scanf() a leitura da frase “Hoje vai chover” só resultaria em “Hoje”; a leitura seria interrompida

logo após a primeira letra “e”.

Inicialização:

As três formas corretas de fazer isso são:

char frase[11] = “Boa tarde!”;

ou então,

char frase[11];

printf(“\nDigite a frase: ”);

gets(frase);

Ou ainda, cada caractere da string separada por vírgula e entre apóstrofos, contidas entre chaves,

isto é, { e }.

char frase[11] = {‘B’, ‘o’, ‘a’, ‘ ’, ‘t’,‘a’,‘r’,‘d’,‘e’,‘!’};

As funções de tratamento de string estão definidas, basicamente, em duas bibliotecas (arquivos

de cabeçalho): <string.h> e <ctype.h>. Pesquise algumas delas!

1.2. MATRIZ

A variável composta multidimensional caracteriza-se por dados agrupados em diferentes

direções, como num plano ou num cubo. De um modo geral uma matriz pode ser considerada como um

arranjo de elementos todos de um mesmo tipo de dado, definindo uma estrutura homogênea como no

caso dos vetores.

1.2.1. Definição

Uma matriz é uma variável composta homogênea multidimensional. Ela é formada por uma

sequencia de variáveis, todas do mesmo tipo, com o mesmo identificador (mesmo nome), e alocadas

sequencialmente na memória. Uma vez que as variáveis têm o mesmo nome, o que as distingue são

índices que referenciam sua localização dentro da estrutura. Uma variável do tipo matriz precisa de um

índice para cada uma de suas dimensões. No caso mais simples, bidimensionais:

1 2 3 4 5 1 2 3 4 5

1.2.2. Declaração de Matriz

Um algoritmo pode declarar uma matriz, conforme descrito a seguir:

Linhas

(7)

declaração de variáveis

tipo nome[dimensão1,dimensão2,dimensão3, . . . ,dimensãoN ];

 onde tipo é o tipo de dados dos elementos da matriz;

 nome é o nome da variável do tipo matriz;

 dimensão1 é a quantidade de elementos da 1ª dimensão (muitas vezes chamada de linha);

 dimensão2 é a quantidade de elementos da 2ª dimensão (muitas vezes chamada de coluna);

 dimensão3 é a quantidade de elementos da 3ª dimensão (muitas vezes chamada de

profundidade);

 dimensãoN é a quantidade de elementos da n-ésima dimensão;

Veja:

A declaração é semelhante à de vetores; a diferença é que para uma matriz têm que ser

colocados os tamanhos de cada dimensão entre colchetes separados. Por exemplo:

//apenas a declaração

int M[4][6];

//declaração e inicialização dimensionado

int M[4][6] = {{2,4,5,8,1,3}, {0,6,9,5,3,7}, {5,8,9,0,3,4}, {4,3,4,1,6,5}};

Observe que em C pode-se declarar e inicializar imediatamente uma matriz; basta colocar

corretamente seus elementos dentro das dimensões estabelecidas e indicadas por um par interno de

chaves { } que corresponderá a cada linha. O número 4 dentro do primeiro par de colchetes significa

que a matriz terá no máximo quatro linhas, e o número 6 dentro do segundo par de colchetes indica que

serão no máximo seis colunas.

1.2.3 - Exemplo de Matriz

O exemplo a seguir define uma matriz bidimensional, onde o tamanho da 1ª dimensão (linha) é 3

e o da 2ª dimensão (coluna) é 5.

declaração de variáveis

inteiro m[3,5];

1 2 3 4 5 1 m 2 3

m[1,1]

m[3,4]

O exemplo que se segue define uma matriz tridimensional, onde o tamanho da 1ª dimensão

(linha) é 4, o tamanho da 2ª dimensão (coluna é 6 e o tamanho da 3ª dimensão (profundidade) é 3.

(8)

Outro exemplo de uma matriz tridimensional:

Atribuindo valores a uma matriz

x[2,4]  45;

x[3,1]  13;

x[4,2,1]  0;

x[3,5,3]  -4;

1.2.4. Preenchendo uma matriz

Para preencher uma matriz, é necessário identificar todas as suas posições. Isto exige a utilização

de um índice para cada dimensão da matriz.

No exemplo a seguir, uma matriz bidimensional com três linhas e cinco colunas é mostrada.

Observe que a variável i varia dentro do intervalo de 1 a 3, ou seja, exatamente nas linhas. Para cada

valor de i, a variável j varia de 1 a 5, ou seja, as cinco colunas que cada linha possui.

para i

1 até 3 faça

início

para j

1 até 5 faça

início

escreva(“Digite o número da linha ”, i, “e coluna” , j, “:”);

leia(x[i,j]);

fim para

fim para

(9)

Simulação:

MEMÓRIA

TELA

i

j

1

1

Digite o número da linha 1 e coluna 1: 12

2

Digite o número da linha 1 e coluna 2: 9

3

Digite o número da linha 1 e coluna 3: 3

4

Digite o número da linha 1 e coluna 4: 7

5

Digite o número da linha 1 e coluna 5: -23

2

1

Digite o número da linha 2 e coluna 1: 15

2

Digite o número da linha 2 e coluna 2: 4

3

Digite o número da linha 2 e coluna 3: 2

4

Digite o número da linha 2 e coluna 4: 34

5

Digite o número da linha 2 e coluna 5: -4

3

1

Digite o número da linha 3 e coluna 1: 3

2

Digite o número da linha 3 e coluna 2: 45

3

Digite o número da linha 3 e coluna 3: 3

4

Digite o número da linha 3 e coluna 4: 0

5

Digite o número da linha 3 e coluna 5: -3

Assim pode-se imaginar os elementos dispostos em uma estrutura bidimensional, como uma

tabela:

1 2 3 4 5

1

12

9

3

7

-23

x 2

15

4

2

34

-4

3

3

45

3

0

-3

Já no exemplo que se segue, uma matriz tridimensional com quatro linhas, três colunas e

profundidade dois é preenchida. Observe que a variável i oscila dentro do intervalo de 1 a 4, ou seja,

exatamente nas linhas. Para cada valor de i, a variável j se movimenta de 1 a 3, ou seja, as três colunas

que cada linha possui, e, por fim, a variável k se alterna entre 1 e 2, que é a profundidade.

para i

1 até 4 faça

início

para j

1 até 3 faça

início

para k

1 até 2 faça

início

escreva(“Digite o número da linha ”, i, “ coluna ”, j, “e profundidade ”, k,“:”);

leia(x[i,j]);

fim para

fim para

fim para

MEMÓRIA

TELA

i

j

k

1

1

1

Digite o número da linha 1 coluna 1 e profundidade 1: 2

2

Digite o número da linha 1 coluna 1 e profundidade 2: 5

2

1

Digite o número da linha 1 coluna 2 e profundidade 1: -1

2

Digite o número da linha 1 coluna 2 e profundidade 2: 0

3

1

Digite o número da linha 1 coluna 3 e profundidade 1: 15

2

Digite o número da linha 1 coluna 3 e profundidade 2: 8

2

1

1

Digite o número da linha 2 coluna 1 e profundidade 1: -25

2

Digite o número da linha 2 coluna 1 e profundidade 2: 3

2

1

Digite o número da linha 2 coluna 2 e profundidade 1: 6

(10)

2

Digite o número da linha 2 coluna 2 e profundidade 2: 9

3

1

Digite o número da linha 2 coluna 3 e profundidade 1: 7

2

Digite o número da linha 2 coluna 3 e profundidade 2: 11

3

1

1

Digite o número da linha 3 coluna 1 e profundidade 1: 23

2

Digite o número da linha 3 coluna 1 e profundidade 2: -2

2

1

Digite o número da linha 3 coluna 2 e profundidade 1: -5

2

Digite o número da linha 3 coluna 2 e profundidade 2: 46

3

1

Digite o número da linha 3 coluna 3 e profundidade 1: 19

2

Digite o número da linha 3 coluna 3 e profundidade 2: 1

4

1

1

Digite o número da linha 4 coluna 1 e profundidade 1: 14

2

Digite o número da linha 4 coluna 1 e profundidade 2: 27

2

1

Digite o número da linha 4 coluna 2 e profundidade 1: 5

2

Digite o número da linha 4 coluna 2 e profundidade 2: 4

3

1

Digite o número da linha 4 coluna 3 e profundidade 1: 10

2

Digite o número da linha 4 coluna 3 e profundidade 2: 65

Assim pode-se imaginar os elementos dispostos em uma estrutura tridimensional, como um

cubo:

1.2.5 - Mostrando os elementos de uma matriz

Para mostrar os elementos de uma matriz, é necessário identificar as suas posições. Isto exige a

utilização de um índice para cada dimensão da matriz.

No exemplo a seguir, uma matriz bidimensional com três linhas e cinco colunas é mostrada.

Observe que a variável i assume valores seqüenciais no intervalo de 1 a 3, ou seja, exatamente nas

linhas da matriz. Para cada valor assumido por i, a variável j assume valores sequenciais de 1 a 5, ou

seja, as cinco colunas que cada linha possui.

para i

1 até 3 faça

início

para j

1 até 5 faça

início

escreva(x[i,j]);

fim para

(11)

Exercício resolvido:

Criar um algoritmo que leia as três notas de 2 alunos do 1º ano de Licenciatura em Computação.

Depois mostre estas notas divididas por 2, uma vez que, constatou-se que estes alunos colaram nas

provas.

algoritmo notas

declaração de variáveis real notas[2,3], div; inteiro a,b;

início

para a1 até 2 faça início

para b1 até 3 faça início

escreva(“Digite uma nota: ”); leia(notas[a,b]);

fim para fim para

para a1 até 2 faça início

para b1 até 3 faça início

divnotas[a,b]/2;

escreva(“Nota dividida: ”,div); fim para fim para fim_algoritmo

EXERCÍCIOS

(Lista 4)

Vetores

1 – Dado o seguinte vetor:

Qual será o conteúdo do vetor V depois de executado o algoritmo abaixo? para i8 até 5 passo -1 faça

inicio aux  v[i]; v[i]  v[8 - i + 1]; v[8 - i + 1]  aux; fim_para v[3]  v[1]; v[v [3]]  v[v[2]];

2 - Escreva um algoritmo que permita a leitura de 10 números e armazene os números lidos em um vetor. Após isto, o algoritmo deve permitir a leitura de mais um número qualquer para pesquisar no vetor. Depois escrever a mensagem ACHEI na posição X, se o número estiver no vetor, ou NÃO ACHEI caso contrário. 3 – Preencher um vetor A de 5 elementos não repetidos, ou seja, não permitir o preenchimento de um elemento que já esteja inserido no vetor.

(12)

4 - Ler um vetor Q de 6 posições (aceitar somente números positivos e não repetidos). Escrever a seguir o valor do maior e do menor elemento de Q e as respectivas posições que eles ocupam no vetor.

5 - Faça um algoritmo para ler um valor N qualquer (que será o tamanho dos vetores), dois vetores “A” e “B” (de tamanho N cada um) e depois armazenar em um terceiro vetor “Soma”, a soma dos elementos do vetor A com os do vetor B (respeitando as mesmas posições) e escrever o vetor Soma.

6 - Faça um algoritmo para ler um vetor de 8 números quaisquer. Após isto, ler mais um número qualquer, calcular e escrever quantas vezes esse número aparece no vetor.

7 - Criar um algoritmo que preencha um vetor com nove números inteiros, calcule e mostre os números primos e suas respectivas posições.

8 - Criar um algoritmo que leia um vetor A com cinco números inteiros e outro vetor B com 4 números inteiros. Mostrar os elementos que estão em A e não estão em B.

A 1 5 10 8 7 B 2 1 10 5

9 - Criar um algoritmo que leia um vetor de três caracteres e outro de cinco caracteres. Depois, mostrar os caracteres que são comuns aos dois.

A a b c B a x 2 4 7

10 - Criar um algoritmo que leia dois vetores com 10 números inteiros cada. Depois, deve-se subtrair o 1º elemento do vetor A do último elemento do vetor B, o segundo elemento de A do penúltimo de B e assim por diante. Os resultados das subtrações devem ser armazenados em um 3º vetor.

11 - Criar um algoritmo que preencha dois vetores de dez elementos numéricos cada um e mostre o vetor resultante da intercalação deles.

vetor1 3 5 4 2 2 5 3 2 5 9 1 2 3 4 5 6 7 8 9 10 vetor2 7 15 20 0 18 4 55 23 8 6 1 2 3 4 5 6 7 8 9 10 Intercalação 3 7 5 15 4 20 2 0 2 18 5 4 3 55 2 23 5 8 9 6 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

12 - Faça um algoritmo que preencha um vetor com dez números inteiros, calcule e mostre o vetor resultante de uma ordenação decrescente.

vet 3 5 4 2 1 6 8 7 11 9

1 2 3 4 5 6 7 8 9 10

ordenado 11 9 8 7 6 5 4 3 2 1

1 2 3 4 5 6 7 8 9 10

13 - Faça um algoritmo que receba seis números inteiros e mostre:  Os números pares digitados e a posição de cada um;  A soma dos números pares digitados;

 Os números ímpares digitados e a posição de cada um;  A quantidade de números ímpares digitados.

vetor 2 4 5 6 3 7

(13)

14 - Faça um algoritmo que preencha dois vetores, A e B, com vinte caracteres cada um. A seguir, troque o 1º elemento de A com o 20º de B, o 2º de A com o 19º de B, e assim por diante, até trocar 20º de A com o 1º de B. Mostre os vetores antes e depois da troca.

Vetores antes da troca:

A A G Y W 5 V S 8 6 J G A W 2 M C H Q 6 L

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

B S D 4 5 H G R U 8 9 K S A 1 2 V 4 D 5 M

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

Vetores depois da troca:

A M 5 D 4 V 2 1 A S K 9 8 U R G H 5 4 D S

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

B L 6 Q H C M 2 W A G J 6 8 S V 5 W Y G A

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

15 – Faça um programa que receba o código de seis estudantes e armazene-os em um vetor. Em um segundo vetor, nas posições correspondentes, armazene a quantidade de livros emprestados da biblioteca por cada um em 2017. Sabe-se que, para cada dez livros emprestados, o estudante tem direito a um “Parabéns!”. Mostre o código de todos os estudantes com a quantidade de “Parabéns!” a que cada um tem direito.

16 – Uma universidade deseja saber se existem estudantes cursando, simultaneamente, as disciplinas de APC1 e APC2. Sabe-se que em APC1 são 5 estudantes e que em APC2 são 6 estudantes. Coloque os números dos RGMs dos estudantes que cursam APC1 em um vetor. Coloque os RGMs dos estudantes que cursam APC2 em outro vetor. Mostre os RGMs que aparecem nos dois vetores.

17 – Faça um algoritmo que simule um controle bancário. Para tanto, devem ser lidos os códigos de dez contas e seus respectivos saldos. Os códigos devem ser armazenados em um vetor de números inteiros (não pode haver mais de uma conta com o mesmo código) e os saldos devem ser armazenados em um vetor de números reais. O saldo deverá ser cadastrado na mesma posição do código. Por exemplo, se a conta 504 foi armazenada na quinta posição do vetor de códigos, seu saldo deverá ficar na quinta posição do vetor de saldos. Depois de fazer a leitura dos valores, deverá aparecer o seguinte menu na tela:

1 – Efetuar depósito 2 – Efetuar saque

3 – Consultar o ativo bancário ( somatório dos saldos de todos os clientes) 4 – Finalizar o programa

 Para efetuar depósito, deve-se solicitar o código da conta e o valor a ser depositado. Se a conta não estiver cadastrada, deverá aparecer a

mensagem Conta não encontrada e voltar ao menu. Se a conta existir, atualizar o seu saldo.

 Para efetuar saque, deve-se solicitar o código da conta e o valor a ser sacado. Se a conta não estiver cadastrada, deverá aparecer a mensagem Conta não encontrada e voltar ao menu. Se a conta existir, verificar se seu saldo é suficiente, realizar o saque. (Estou supondo que a conta não pode ficar com saldo negativo.) Se o saldo for suficiente, realizar o saque e voltar ao menu. Caso contrário, mostrar a mensagem Saldo insuficiente e voltar ao menu;

 Para consultar o ativo bancário, deve-se somar o saldo e todas as contas do banco. Depois de mostrar esse valor, voltar ao menu;

(14)

18 – Uma empresa possui ônibus com 48 lugares (24 nas janelas e 24 no corredor). Faça um algoritmo que utilize dois vetores para controlar as poltronas ocupadas no corredor e na janela. Considere que 0 representa poltrona desocupada e 1, poltrona ocupada.

janela 0 1 0 0 . . . 1 0 0

1 2 3 4 ... 22 23 24

corredor 0 0 0 1 . . . 1 0 0

1 2 3 4 ... 22 23 24

Inicialmente, todas as poltronas estarão livres. Depois disso, o algoritmo deverá apresentar as seguintes opções:

 Vender passagem.

 Mostrar mapa de ocupação do ônibus.  Encerrar.

Quando a opção escolhida for Vender passagem, deverá ser perguntado se o usuário deseja janela ou corredor e o número da poltrona. O algoritmo deverá, então, dar uma das seguintes mensagens:

 Venda efetivada – se a poltrona solicitada estiver livre, marcando-a como ocupada.  Poltrona ocupada – se a poltrona solicitada não estiver disponível para venda.  Ônibus lotado – quando todas as poltronas já estiverem ocupadas.

Quando a opção escolhida for Mostrar mapa de ocupação do ônibus, deverá ser mostrada uma listagem conforme a seguir:

JANELA CORREDOR 1 – Ocupada 1 – Ocupada 2 – Ocupada 2 – Livre 3 – Livre 3 – Livre 4 – Livre 4 - Ocupada 5 – Ocupada 5 - Livre ...

Quando for escolhida a opção Encerrar, a execução do programa deverá ser finalizada.

19 – Elaborar um algoritmo com opções para busca sequencial e busca binária para pesquisar um

elemento em um vetor A com n números inteiros.

20 – Elaborar um algoritmo para ordenar um vetor A com n posições. Opções para ordenações:

insertion-sort, selection-sort, e buble-sort.

Matrizes

21 – Criar um algoritmo que leia uma matriz 3 x 2 de números inteiros e um elemento inteiro qualquer,

multiplique todos os elementos da matriz por este elemento inteiro qualquer. Mostrar a matriz alterada.

22 – Criar um algoritmo que leia uma matriz 3 x 3 de números reais. Calcular e mostrar o somatório dos

elementos da 3ª linha.

23 – Criar um algoritmo que some duas matrizes A e B, m x n (3 linhas e 4 colunas), em uma matriz

resultante C (a operação de adição é feita elemento a elemento, isto é A(mxn) + B(mxn) = C(mxn)).

24 – Criar um algoritmo que leia uma matriz 3 x 3 de números inteiros e mostre apenas os elementos da

diagonal principal.

(15)

25 – Na teoria dos sistemas, define-se o elemento MINMAX de uma matriz como o maior elemtno da

linha em que se encontra o menor elemtno da matriz. Elabore um programa que carregue uma matriz

4x7 com números reais, calcule e mostre seu MINMAX e sua posição m

x

n.

26 – Crie um programa que preencha uma matriz 5x10 com números inteiros e some cada uma das

linhas, armazenando o resultado das somas em um vetor. A seguir, o programa deverá multiplicar cada

elemento da matriz pela soma da linha correspondente e mostrar a matriz resultante.

27 – Criar um algoritmo que receba:

 um vetor com o código de cinco cidades diferentes;

 uma matriz 5 x 5 com a distância entre as cidades, sendo que na diagonal principal deve ser

colocada automaticamente distância zero, ou seja, não deve ser permitida a digitação;

 o consumo de combustível de um veículo, ou seja, quantos quilômetros este veículo percorre

com um litro de combustível.

O programa deverá calcular e mostrar:

 os percursos que não ultrapassem 250 quilômetros (os percursos são compostos pelos nomes das

cidades de origem e pelos nomes das cidades de destino);

 todos os percursos (nome da cidade de origem e nome da cidade de destino), juntamente com a

quantidade de combustível necessária para o veículo percorrê-lo.

28 – Considere n cidades numeradas de 0 a n-1 que estão interligadas por uma série de estradas de

mão única. As ligações entre as cidades são representadas pelos elementos de uma matriz quadrada

L

nxn, cujos elementos lij assumem o valor 1 ou 0, conforme exista ou não estrada direta que saia da

cidade i e chegue à cidade j. Assim, os elementos da linha i indicam as estradas que saem da cidade

i, e os elementos da coluna j indicam as estradas que chegam à cidade j.

Por convenção lii = 1. A figura mostra um exemplo para n = 4.

(a) Dado k, determinar quantas estradas saem e quantas chegam à cidade k.

(b) A qual das cidades chega o maior número de estradas?

(c) Dado k, verificar se todas as ligações diretas entre a cidade k e outras são de mão dupla.

(d) Relacionar as cidades que possuem saídas diretas para a cidade k.

(e) Relacionar, se existirem:

i) As cidades isoladas, isto é, as que não têm ligação com nenhuma outra;

ii) As cidades das quais não há saída, apesar de haver entrada;

Referências

Documentos relacionados

Por outra vanda o valor da área real dun terreo é prácticamente imposible de determinar con exactitud, dado cá súa superficie non ten unha definición xeométrica exacta, e aínda

A questão aqui é: não podemos ter, me parece, um critério bem determinado para mostrar que uma atividade em relação à outra é menos ou mais dotada de valor, e isso