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.
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 AlgoritmoAlgoritmo:
para x1 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 x1 até 5 faça início
escreva(“Este é o “, x,”º número do vetor”); escreva(x[]);
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 x1 até 5 faça inicio
escreva(“Digite um número: ”); leia(num[x]);
fim para
para x1 até 5 faça inicio
multnum[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:
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
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
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 3m[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.
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
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
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
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 a1 até 2 faça início
para b1 até 3 faça início
escreva(“Digite uma nota: ”); leia(notas[a,b]);
fim para fim para
para a1 até 2 faça início
para b1 até 3 faça início
divnotas[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 i8 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.
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
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;
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.