Bacharelado em Ciência e Tecnologia
BC0505 – Processamento da Informação - Prof. Edson Pinheiro
PimentelEXERCÍCIOS
Lista de Exercícios – Vetor e Matriz
PARTE 1 – Vetor
[1]. Sendo o vetor V igual a:
5 10 7 6 16 3 9 2 2 1
1 2 3 4 5 6 7 8 9 10 e as variáveis X = 1 e Y = 3, escreva o valor correspondente à solicitação, conforme exemplos: a) V[X+1] valor corresponde a V[2] = 7
b) V[Y+2] valor corresponde a V[5] = 3 c) V[X+3] valor corresponde a V[4] = 16 d) V[X*4] valor corresponde a V[4] = 16 e) V[Y*2] valor corresponde a V[6] = 9 f) V[X+Y] valor corresponde a V[4] = 16
g) V[X+(Y*4)] valor corresponde a V[13] = *** erro ***
Neste exercício, basta utilizar os valores de X e Y dados no enunciado para realizarmos as operações dentro dos [ ] que definem o índice do elemento do vetor. Em seguida, verificamos no vetor V quais são os valores dos elementos.O elemento de índice 13 não existe, então há erro. OBS: na representação acima, os números de baixo são os índices e os de cima os valores do vetor.
[2]. Escreva um algoritmo que Leia 10 valores inteiros e armazene-os em um Vetor. Após a digitação do último valor, imprima os elementos com conteúdo par.
SAÍDA: Quais os resultados que o algoritmo dever fornecer? Números pares do vetor de entrada.
ENTRADA: Quais os insumos necessários para se obter a saída? 10 valores inteiros em um vetor
PROCESSAMENTO: Como transformar os insumos na saída?
Percorrer o vetor de 10 elementos e para cada elemento x que é par, isto é, quando x % 2 = 0, imprimir x PROGRAMA - PORTUGOL programa { funcao inicio() { // DECLARAÇÃO DE VARIÁVEIS inteiro vetor[10] inteiro indice = 0 // ENTRADA enquanto(indice < 10){
escreva( "\n Digite um número inteiro " ) leia( vetor[indice] )
indice++ }
// PROCESSAMENTO & SAÍDA
para (indice = 0; indice < 10; indice++){ se(vetor[indice] % 2 == 0){ escreva( " " , vetor[indice] ) } } } }
[3]. Escreva um algoritmo que Leia 15 nomes de pessoas e armazene-os em um Vetor. Após a digitação do último nome, imprima-os na sequência contrária (ou seja, o último nome digitado deve ser o primeiro a ser impresso, etc)
SAÍDA: Quais os resultados que o algoritmo dever fornecer?
15 nomes de pessoas digitados, porém, na sequência inversa à digitada. ENTRADA: Quais os insumos necessários para se obter a saída?
15 nomes de pessoas.
PROCESSAMENTO: Como transformar os insumos na saída?
Após armazenar os nomes em um vetor (nomes[15]), outro vetor deve ser alocado com os novos nomes. Para isso, em um laço “para”, utilizar:
nomes_inverso[i]=nomes[14-i] PROGRAMA - PORTUGOL programa { funcao inicio() { // DECLARAÇÃO DE VARIÁVEIS cadeia nomes[15],nomes_inverso[15] inteiro i // ENTRADAS para(i=0;i<15;i++){
escreva("Digite o nome nº",i+1," : ") leia(nomes[i])
}
// PROCESSAMENTO E SAÍDA
escreva("\nNomes na ordem inversa: \n") para(i=0;i<15;i++){ nomes_inverso[i]=nomes[14-i] escreva(nomes_inverso[i],"\n") } } }
[4]. Escreva um programa que leia 20 números e após o fim da entrada de dados, exiba na tela, primeiro os elementos com conteúdo ímpar e depois os elementos das posições pares.
SAÍDA: Quais os resultados que o algoritmo dever fornecer?
Vetor que contenha no começo todos os elementos ímpares e depois os elementos das posições pares.
ENTRADA: Quais os insumos necessários para se obter a saída? 20 números inteiros.
PROCESSAMENTO: Como transformar os insumos na saída? Armanezar os 20 valores em um vetor.
Imprimir primeiro apenas os valores ímpares, depois apenas os elementos das posições pares.
PROGRAMA - PORTUGOL programa { funcao inicio() { // DECLARAÇÃO DE VARIÁVEIS const inteiro n = 20 inteiro vetor [n], i // ENTRADAS para(i=0;i<n;i++) leia(vetor[i]) // PROCESSAMENTO E SAÍDA escreva("O vetor resultante é: ")
para(i=0;i<n;i++){
se (vetor[i] % 2 != 0) //os elementos ímpares escreva(vetor [i] + " ")
}
para(i=0;i<n;i++){
se (i % 2 == 0) //se a posição (ou índice) é par escreva(vetor[i] + " ")
} } }
[5]. Escreva um algoritmo que leia 8 elementos em um vetor inteiro A. Construa outro vetor B, de mesma dimensão de A, com seus elementos sendo a multiplicação do elemento correspondente de A por 3. Mostre os elementos de B.
SAÍDA: Quais os resultados que o algoritmo dever fornecer? Vetor B com elementos de A multiplicados por 3
ENTRADA: Quais os insumos necessários para se obter a saída? 8 números inteiros que formarão o vetor A
Para cada elemento x de A, multiplica-lo por 3 e atribuir o resultado para os elementos de B B[indice] = 3 * A[indice] PROGRAMA - PORTUGOL programa { funcao inicio() { // DECLARAÇÃO DE VARIÁVEIS inteiro A[8], B[8] inteiro indice = 0
// ENTRADA & PROCESSAMENTO enquanto(indice < 8){
escreva( indice+1, " - Digite um número inteiro: " ) leia( A[indice] ) B[indice] = 3 * A[indice] indice++ } // SAÍDA
para(indice = 0; indice < 8; indice++){ escreva( " " ,B[indice])
} } }
[6]. Leia 20 elementos em um vetor A e construa o vetor B com elementos de A, porém invertidos, ou seja, o primeiro elemento de A passa a ser o último elemento de B, e assim por diante. Mostre os 2 vetores, o maior elemento do vetor A e o menor elemento do vetor B.
SAÍDA: Quais os resultados que o algoritmo dever fornecer?
Elementos dos vetores A e B, sendo B os elementos de A na ordem inversa; E os maiores elementos destes mesmos vetores.
ENTRADA: Quais os insumos necessários para se obter a saída? Elementos do vetor A.
PROCESSAMENTO: Como transformar os insumos na saída?
Após armazenar elementos de A, o vetor B deve ser alocado com os elementos de A na ordem inversa. Para isso, em um laço “para” de forma crescente no índice i, utilizar:
vetorB[19-i]=vetorA[i]
Para determinar o maior elemento, pode ser utilizada a seguinte condição: se(vetorA[i]>maiorA ou i==0){
maiorA=vetorA[i] }
Esta condição está presente no laço das entradas, para o caso do vetor A, e no processamento, no caso do vetor B é análogo o menor.
PROGRAMA - PORTUGOL
{
funcao inicio() {
// DECLARAÇÃO DE VARIÁVEIS
inteiro vetorA[20], vetorB[20], maiorA, menor, i
// ENTRADAS para(i=0;i<20;i++){
escreva("Digite o elemento de A nº",i+1," : ") leia(vetorA[i])
vetorB[19-i]=vetorA[i] //preenche B de trás para frente }
maiorA = vetorA[0] //inicializa variáveis de maior/menor menorB = vetorB[0]
// PROCESSAMENTO para(i=0;i<20;i++){
se(vetorA[i] > maiorA){ //Atualiza a variável maiorA enquanto percorre A maiorA = vetorA[i]
}
se(vetorB[i] < menorB){ //Análogo ao condicional do maiorA menorB = vetorB[i] } } // SAÍDA escreva("\nElementos de A: \n") para(i=0;i<20;i++){
escreva("\nElemento de A nº",i+1," : ",vetorA[i]) }
escreva("\n\nMaior elemento de A: ",maiorA,"\n") escreva("\nElementos de B:")
para(i=0;i<20;i++){
escreva("\nElemento de B nº",i+1," : ",vetorB[i]) }
escreva("\n\nMenor elemento de B: ",menorB,"\n") }
}
[7]. Escreva um algoritmo que Leia um vetor de N elementos. Após a digitação do último valor, encontre e mostre o maior elemento.
SAÍDA: Quais os resultados que o algoritmo dever fornecer? O maior elemento do vetor.
ENTRADA: Quais os insumos necessários para se obter a saída? N números inteiros.
PROCESSAMENTO: Como transformar os insumos na saída?
Após armazenar os valores em um vetor, fazer comparações com o elemento seguinte do vetor para verificar qual o maior.
PROGRAMA - PORTUGOL programa { funcao inicio() { // DECLARAÇÃO DE VARIÁVEIS const inteiro n = 0 inteiro maior = 0, i // ENTRADAS
escreva ("Favor inserir o tamanho do vetor: ") leia (n)
inteiro vetor [n] para (i=0; i<n; i++){
escreva ("Digite o elemento " +i+ " do vetor: ") leia (vetor [i])}
// PROCESSAMENTO E SAÍDA para (i=0; i<n-1; i++){
se (vetor [i] >= vetor [i+1]) maior = vetor [i]
senao
maior = vetor [i+1]} se (n == 1)
maior = vetor [0]
escreva ("O maior elemento do vetor é: " + maior) }
}
[8]. Escreva um programa que leia o nome e a idade de 20 pessoas e exiba, após o fim da entrada de dados, a idade média do grupo e o nome das pessoas com idade acima da média.
SAÍDA: Quais os resultados que o algoritmo dever fornecer?
Idade média do grupo e os nomes das pessoas com idade acima da média. ENTRADA: Quais os insumos necessários para se obter a saída?
20 nomes de pessoas e suas respectivas idades colocados em 2 vetores. PROCESSAMENTO: Como transformar os insumos na saída?
Precisaremos calcular a média das idades acumulando em uma variável soma_idades, média = soma_idades/20
Se a idade de cada indivíduo for maior que a idade média, imprimir o nome do indivíduo.
programa { funcao inicio() { // DECLARAÇÃO DE VARIÁVEIS inteiro idades[20] cadeia nomes[20]
inteiro indice = 0, soma_idades = 0 real mediaIdades
// ENTRADA
enquanto(indice < 20){
escreva( indice+1, " - Digite o nome: " ) leia( nomes[indice] )
escreva( indice+1, " - Digite a idade dessa pessoa: " ) leia( idades[indice] )
// PROCESSAMENTO & SAÍDA
soma_idades = soma_idades + idades[indice] indice++
}
mediaIdades = soma_idades/20.0
escreva( " A idade média do grupo é de " , mediaIdades, " anos \n" ) para(indice = 0; indice < 20; indice++){
se(idades[indice] > mediaIdades){ escreva(nomes[indice], " " ) } } } }
[9]. Escreva um programa que leia 100 números e exiba na tela a média, o maior, o menor, o percentual de números ímpares e o percentual de múltiplos de 3.
SAÍDA: Quais os resultados que o algoritmo dever fornecer?
Média (media), maior dos nºs (maior), menor dos nºs (menor), percentual de nºs ímpares (impares), percentual de múltiplos de 3 (mult_3).
ENTRADA: Quais os insumos necessários para se obter a saída? Todos os 100 números, armazenados em um vetor de 100 posições. PROCESSAMENTO: Como transformar os insumos na saída?
Média:
soma=soma+numeros[i] (dentro do laço “para) media=soma/100
Maior:
se(i==0 ou numeros[i]>maior){ maior=numeros[i] }
(dentro do laço “para) Menor:
se(i==0 ou numeros[i]<menor){ menor=numeros[i] }
(dentro do laço “para) Percentual de ímpares: se(nao(numeros[i]%2==0)){
impares++
}
(dentro do laço “para)
Percentual de múltiplos de 3:
se(numeros[i]%3==0){ // Procurando o percentual de nºs múltiplos de 3
mult_3++
}
(dentro do laço “para)
PROGRAMA - PORTUGOL programa { funcao inicio() { // DECLARAÇÃO DE VARIÁVEIS inteiro numeros[100],maior=0,menor=0, i real impares=0.0,mult_3=0.0,soma=0.0,media // ENTRADAS E PROCESSAMENTO para(i=0;i<100;i++){
escreva("Digite o elemento nº",i+1," : ") leia(numeros[i])
se(i==0 ou numeros[i]>maior){ // Procurando o maior dos nºs maior=numeros[i]
}
se(i==0 ou numeros[i]<menor){ // Procurando o menor dos nºs menor=numeros[i]
}
se(nao(numeros[i]%2==0)){ // Procurando o percentual de nºs ímpares
impares++
}
se(numeros[i]%3==0){ // Procurando o percentual de nºs múltiplos de 3
mult_3++ } soma=soma+numeros[i] } media=soma/100 // SAÍDA escreva("\nMédia: ", media) escreva("\nMaior nº: ", maior) escreva("\nMenor nº: ", menor)
escreva("\nPercentual de nºs ímpares: ", impares, "%") escreva("\nPercentual de múltiplos de 3: ", mult_3, "%") }
}
[10]. Escreva um programa que dados dois vetores de 20 números cada, gere um terceiro vetor para intercalar os elementos dos dois.
SAÍDA: Quais os resultados que o algoritmo dever fornecer?
Um vetor C de 40 números com os valores de dois vetores A e B intercalados. ENTRADA: Quais os insumos necessários para se obter a saída?
Dois vetores A e B de 20 números cada.
PROCESSAMENTO: Como transformar os insumos na saída?
Armazenar os valores dos dois vetores iniciais no terceiro vetor de forma intercalada, usando 2 variáveis de índice, k e j, k começa no zero e vai incrementando de 2 em 2, enquanto j começa em 1 e incrementa de 2 em 2:
C[k] = A[i] C[j] = B[i]
onde i é o índice do laço de repetição que vai de 0 a 19, percorrendo os elementos de A e B
PROGRAMA - PORTUGOL programa { funcao inicio() { // DECLARAÇÃO DE VARIÁVEIS inteiro A[20], B[20], C[40] inteiro k = 0, j = 1, i // ENTRADAS para(i=0;i<20;i++){
escreva("Digite o elemento " + i + " do vetor A: ") leia(A[i])
}
para(i=0;i<20;i++){
escreva("Digite o elemento " + i + " do vetor B: ") leia(B[i])
}
// PROCESSAMENTO E SAÍDA
para(i=0; i<20; i++){ //preenche C intercalando A e B ex:(a0 b0 a1 b1 a2 b2...) C[k] = A[i]
C[j] = B[i]
k = k + 2 //k varia assim: 0, 2, 4, 6,..., 38
j = j + 2 //j varia assim: 1, 3, 5, 7,..., 39, lembre que C tem posições de 0 a 39 }
para (i = 0; i < 40; i++) escreva (C[i] + " ") }
}
GOL, VECTRA, etc). Leia outro vetor com o consumo desses carros, isto é, quantos quilômetros cada um desses carros faz com 1 litro de combustível. Calcule e mostre:
a) O modelo do carro mais econômico.
b) Quantos litros de combustível cada um dos carros cadastrados consome para percorrer uma distância de 1000 quilômetros.
SAÍDA: Quais os resultados que o algoritmo dever fornecer? a) o modelo mais econômico
b) quantidade de litros de combustível necessária para andar 1000 km ENTRADA: Quais os insumos necessários para se obter a saída?
5 Modelos de carros e seus respectivos rendimentos em km/L PROCESSAMENTO: Como transformar os insumos na saída?
a) Percorrer o vetor de rendimentos e a partir de um condicional guardar o melhor rendimento. b) Considere R = distancia/litros, logo, litros = distancia/R = 1000/R
PROGRAMA - PORTUGOL programa { funcao inicio() { // DECLARAÇÃO DE VARIÁVEIS
real rendimentos[5], max_rendimento = 0.0, qtd_litros cadeia modelos[5]
inteiro indice = 0, ind_modelo // ENTRADA
enquanto(indice < 5){
escreva( indice+1, " - Digite o modelo do carro: " ) leia( modelos[indice] )
escreva( indice+1, " - Digite o rendimento em km/L desse modelo: " ) leia( rendimentos[indice] )
// PROCESSAMENTO & SAÍDAS
se(max_rendimento < rendimentos[indice] ){ max_rendimento = rendimentos[indice] ind_modelo = indice } indice++ }
escreva( " O modelo mais econômico é " , modelos[ind_modelo] , "\n" ) para(indice = 0; indice < 5; indice++){
qtd_litros = 1000.0/rendimentos[indice]
escreva( modelos[indice], " utiliza para percorrer 1000 km " , qtd_litros, " litros \n") } } }
PARTE 2 –MATRIZ
[12]. Sendo a matriz “M” igual a : 0 1 2 3 4 0 5 2 1 1 3 1 7 4 7 3 2 2 4 5 2 2 1 3 3 3 1 4 1 4 8 4 2 9 3
e as variáveis X = 0 e Y = 2 escreva o valor correspondente à solicitação, conforme exemplo:
a) M[X][Y] valor corresponde a M[0] [2] que é 1 b) M[Y][X]: M[2][0] = 4
c) M[X+1][Y-1]: M[1][1] = 4 d) M[X+2][Y-1*2]: M[2][0] = 4 e) M[Y-X][Y+X]: M[2][2] = 2
f) M[M[X][Y]][M[Y][X]] valor corresponde a M[M[0][2]][M[2][0]] M[1][4] que é 2 g) M[M[Y-X][Y+X] ][M[Y+X][Y-X]]: M[ M[2][2] ][ M[2][2] ] = M[2][2] = 2
[13]. Desenhe uma representação para as seguintes matrizes e coloque os valores determinados nos devidos lugares: a) caracter MA[5][5][5] MA[1][3][1] = ’x’ MA[3][3][2] = ‘y’ MA[2][1][4] = ‘k’ MA[4][4][1] = ‘w’ MA[2][3][4] = ‘z’ b) inteiro MB[3][3][3] MB[2][1][1] = 2 MB[1][2][1] = 4 MB[2][1][2] = 6 MB[2][2][1] = 8 MB[0][1][2] = 0
Matrizes impressas (todos os elementos das matrizes que não possuem valores estão preenchidos com um ponto (.)): a) . . . . . . . . . . . . . . . . . . . . . . . . . x . . .
. . . . . . . . . . k . . . . . . . z . . . . . . . . . . . . . . y . . . . . . . . . . . . . . . . . . w . . . . . . . . 0 . . . . . . . . . . 4 . . . . . 2 6 . 8 .
[14]. Dada a matriz do exercício 12, gere um vetor com a média ponderada de cada linha, considerando como peso o valor da última coluna.
SAÍDA: Quais os resultados que o algoritmo dever fornecer?
Vetor de médias ponderadas das linhas da matriz usando como pesos a última coluna da matriz
ENTRADA: Quais os insumos necessários para se obter a saída? A matriz 5x5 do exercício 12
Percorrer com laço de repetição a matriz tomando cada célula m[i][j] e usar a fórmula de média ponderada:
Ex.: media ponderada linha 0 = (m[0][0]*m[0][4] + m[0][1]*m[1][4] + ... + m[0][4]*m[4][4]) /10. Pois 10 é a soma dos pesos (valores da última coluna), considere que o segundo fator de cada produto desse somatório é um dos pesos encontrados na última coluna.
PROGRAMA - PORTUGOL
programa {
funcao inicio() {
// DECLARAÇÃO DE VARIÁVEIS & ENTRADA inteiro matriz[][] = {{5,2,1,1,3},
{7,4,7,3,2}, {4,5,2,2,1}, {3,3,1,4,1}, {8,4,2,9,3}}
real mediasL[] = {0.0, 0.0, 0.0, 0.0, 0.0} //vetor de médias ponderadas das linhas inteiro lin, col, peso
// PROCESSAMENTO
para(lin = 0; lin < 5; lin++){ para(col = 0; col < 5; col++){
peso = matriz[col][4] // o peso vem da última coluna <4> mediasL[lin] += matriz[lin][col] * peso
}
mediasL[lin] = mediasL[lin]/10 //10 é a soma dos pesos que vêm da última coluna }
// SAÍDA
para(col = 0; col < 5; col++){
escreva( "Média ponderada Linha ", col, ": ", mediasL[col], "\n") }
} }
[15]. Preencha uma matriz 5x5 de números inteiros e mostre na tela apenas os elementos de cuja soma da linha e coluna resultem num número ímpar.
SAÍDA: Quais os resultados que o algoritmo dever fornecer?
Elementos da matriz inserida cuja soma dos elementos tanto de sua linha como de sua coluna resultem em um valor ímpar.
ENTRADA: Quais os insumos necessários para se obter a saída? Elementos da matriz.
PROCESSAMENTO: Como transformar os insumos na saída?
Primeiramente, os vetores que armazenam a soma das linhas e das colunas devem ser anulados;
Depois, somar cada elemento inserido na matriz à posição dos vetores de soma de linha e de coluna;
Finalmente, mostrar os elementos que seguem ao critério desejado (soma dos elementos de sua linha deve ser ímpar, assim como a soma dos elementos de sua coluna).
PROGRAMA - PORTUGOL programa { funcao inicio() { // DECLARAÇÃO DE VARIÁVEIS const inteiro tam = 5
inteiro matriz[tam][tam],soma_lin[tam],soma_col[tam], i, j // ENTRADA E PROCESSAMENTO para(i=0;i<tam;i++){ soma_lin[i]=0 soma_col[i]=0 } para(i=0;i<tam;i++){ para(j=0;j<tam;j++){
escreva("Entre com a posição [",i,"][",j,"] :") leia(matriz[i][j]) soma_lin[i]=soma_lin[i]+matriz[i][j] soma_col[j]=soma_col[j]+matriz[i][j] } } escreva("\n---\n") // SAÍDA para(i=0;i<tam;i++){ para(j=0;j<tam;j++){ se(nao(soma_lin[i]%2==0) e nao(soma_col[j]%2==0)){ escreva(matriz[i][j]) }senao{ escreva(" ") } } } } }
[16]. Preencha uma matriz 5x5 de números inteiros e calcule o determinante. SAÍDA: Quais os resultados que o algoritmo dever fornecer?
O determinante da matriz 5x5.
ENTRADA: Quais os insumos necessários para se obter a saída? Os 25 valores da matriz 5x5.
PROCESSAMENTO: Como transformar os insumos na saída? Método de Laplace.
PROGRAMA - PORTUGOL programa { funcao inicio() { //DECLARAÇÃO DE VARIÁVEIS
inteiro matriz [5][5], detA, detA1, detA2, detA3, detA4, detA5, i, j
//ENTRADA
para (i = 0; i < 5; i++){ para (j = 0; j < 5; j++){
escreva ("Digite aqui o valor da linha " + i + " e da coluna " + j + " : ") leia (matriz [i][j])
} }
//PROCESSAMENTO
detA3 = (matriz[3][3] * matriz[4][4]) - (matriz [3][4] * matriz [4][3]) detA4 = (matriz [1][3] * matriz [4][4]) - (matriz [3][4] * matriz [4][1]) detA5 = (matriz [3][1] * matriz [4][3]) - (matriz [3][3] * matriz [4][1]) detA2 = 2*detA3 - detA4 + 2*detA5
detA1 = -2*detA2 detA = 3*detA1
//SAÍDA
escreva ("O determinante da matriz é " + detA) }
}
[17]. Preencha uma matriz 5x5 de números inteiros e mostre na tela os dados contidos em uma coluna a ser informada pelo usuário.
SAÍDA: Quais os resultados que o algoritmo dever fornecer?
Exibir os dados de uma coluna da matriz, sendo a coluna algo escolhido. ENTRADA: Quais os insumos necessários para se obter a saída?
As 25 células da matriz e o número da coluna a ser exibida. PROCESSAMENTO: Como transformar os insumos na saída?
Além de preencher a matriz com as entradas, usar um laço de repetição para iterar sobre a matriz M de entrada, para cada linha da matriz tomar apenas o dado da coluna informada.
PROGRAMA - PORTUGOL programa { funcao inicio() { // DECLARAÇÃO DE VARIÁVEIS const inteiro LIN = 5, COL = 5 inteiro M[LIN][COL]
inteiro l, c, col_escolhida // ENTRADA
para(l = 0; l< LIN; l++){
para(c = 0; c < COL; c++){
leia(M[l][c]) }
}
escreva( "Informe a coluna da matriz que será exibida (de 0 a 4): " ) leia(col_escolhida)
// PROCESSAMENTO & SAÍDA para(l = 0; l < LIN; l++){ escreva( M[l][col_escolhida], " " ) } } }
[18]. Escreva um programa que leia uma matriz A de 3 x 5 em seguida uma matriz B de 3 x 5. Gere uma matriz C contendo a soma de A e B. Imprima a matriz C.
SAÍDA: Quais os resultados que o algoritmo dever fornecer? Matriz C, ou seja, soma da matriz A com a matriz B.
ENTRADA: Quais os insumos necessários para se obter a saída? Elementos da matriz A e da matriz B.
PROCESSAMENTO: Como transformar os insumos na saída? Para cada posição da matriz C [i,j]:
Elemento da matriz C = Elemento da matriz A + Elemento da matriz B C[i][j]=A[i][j]+B[i][j] PROGRAMA - PORTUGOL programa { funcao inicio() { // DECLARAÇÃO DE VARIÁVEIS const inteiro lin=3,col=5
inteiro A[lin][col], B[lin][col], C[lin][col], i, j // ENTRADA
escreva("Entre com os valores da matriz A: \n") para(i=0;i<lin;i++){ para(j=0;j<col;j++){ escreva("A[",i,"][",j,"]: ") leia(A[i][j]) } }
escreva("Entre com os valores da matriz B: \n") para(i=0;i<lin;i++){
para(j=0;j<col;j++){
leia(B[i][j]) } } escreva("\nMatrizC: \n") // PROCESSAMENTO E SAÍDA para(i=0;i<lin;i++){ para(j=0;j<col;j++){ C[i][j]=A[i][j]+B[i][j] escreva(C[i][j]," ") } escreva("\n") } } }
[19]. Em uma classe há n alunos, cada um dos quais realizou k provas com pesos distintos. Dados n, k, os pesos das k provas e as notas de cada aluno, calcular a média ponderada das provas para cada aluno e a média aritmética da classe em cada uma das provas.
SAÍDA: Quais os resultados que o algoritmo dever fornecer?
A média ponderada das provas para cada aluno e a média aritmética da classe em cada uma das provas.
ENTRADA: Quais os insumos necessários para se obter a saída? O número de alunos, os pesos e as notas de cada prova.
PROCESSAMENTO: Como transformar os insumos na saída?
Armazenamento dos dados em uma matriz e, posteriormente, cálculo das médias ponderas e aritmética. PROGRAMA - PORTUGOL programa { funcao inicio() { /*Criação de variáveis*/ const inteiro k=0, n=0 inteiro i, j
/*Solicitação e leitura do número de alunos na turma*/ escreva("Digite quantos alunos há na turma:")
leia(n)
/*Solicitação e leitura do numero de provas aplicadas*/ escreva ("Digite quantas provas serão aplicadas:")
leia (k)
/*Declaração e atribuição de tamanho das matrizes*/ real notas[n][k],pesos[k], mediaaluno[n], mediaprova[k]
para (j=0;j<k;j++){
escreva ("Digite o peso da P"+(j+1)+":") leia (pesos[j])
}
/*Solicitação e leitura das notas dos alunos*/ para(i=0;i<n;i++){
para(j=0; j<k; j++){
escreva ("Digite a nota "+(j+1)+" do aluno "+(i+1)+":") leia (notas[i][j])
} }
/*Zera o vetor "mediaaluno" para uso posterior em uma somatória*/ para (i=0;i<n;i++){
mediaaluno[i]=0.0 }
/*Zera o vetor "mediaprova" para uso posterior em uma somatória*/ para (j=0;j<k;j++){
mediaprova[j]=0.0 }
/*Cálculo da média de cada aluno (média ponderada das provas)*/ para (i=0; i < n; i++){
para (j=0; j < k; j++){
/*Somatório da nota previamente digitada, multiplicada pelo peso da prova*/
mediaaluno[i]=mediaaluno[i]+(notas[i][j]*pesos[j]) }
}
/*Cálculo da média aritmética (da sala toda) em cada prova*/ para (j=0; j < k; j++){
para (i=0; i < n; i++){
/*Somatório das notas de todos os alunos numa mesma prova*/ mediaprova[j]=mediaprova[j]+notas[i][j]
}
/*Divide a somatória das notas na prova pelo número de alunos para saber a média dos alunos naquela prova*/
mediaprova[j]=mediaprova[j]/n }
/*Exibe a nota média dos alunos em cada prova*/ para(j=0; j < k; j++){
escreva ("\n >> A média da prova "+(j+1)+ " é: "+mediaprova[j]) }
escreva("\n")
/*Exibe a média de cada aluno (média ponderada de todas as provas)*/ para(i=0; i < n; i++){
escreva ("\n A média do aluno "+(i+1)+ " é: "+mediaaluno[i]) }
} }
[20]. Construa um algoritmo para gerenciar a venda de ingressos (ocupação) das poltronas numeradas de um teatro, que tem 200 lugares, organizados em 20 fileiras com 10 cadeiras cada fila. Inicialize a matriz com todas as posições valendo -1 indicando que elas estão vazias. Para cada nova venda de ingresso, deve se solicitar ao usuário o número da fila e o número da poltrona. Se a poltrona estiver “vazia”, deve-se alterar seu conteúdo para o valor 1, indicando que o ingresso foi vendido. Se não estiver vazia, deve-se emitir uma mensagem: “Poltrona já foi vendida”. O programa deve funcionar por meio de um menu, com duas opções, sendo: A) Vender Ingresso B) exibir o total de ingressos vendidos e C) Encerrar o Programa. SAÍDA: Quais os resultados que o algoritmo dever fornecer?
(A)Conseguir vender um ingresso,
(B)Exibir quantos ingressos já foram vendidos (C)Finalizar o programa.
ENTRADA: Quais os insumos necessários para se obter a saída?
Opções do usuário (A, B ou C), e para (A) informar o lugar no teatro: fileira e cadeira PROCESSAMENTO: Como transformar os insumos na saída?
Preencher a matriz M com -1, usar desvios condicionais de acordo com a entrada do usuário, se ele digitar: (A) e o lugar pretendido, checar se a poltrona está livre (isto é, se M[fileira][cadeira] != -1), caso esteja livre efetuar a venda, incrementando uma variável contadora de vendas
(B) exibe a variável contadora de vendas
(C) Sai do laço de repetição que sempre aguardava uma entrada de dados pelo usuário
PROGRAMA - PORTUGOL programa { funcao inicio() { // DECLARAÇÃO DE VARIÁVEIS const inteiro LIN = 20, COL = 10 inteiro M[LIN][COL]
inteiro l, c, fileira, poltrona, vendidas = 0 //vendidas é o contador de vendas caracter entrada = 'Z' // Inicializa com um caracter qualquer diferente de C // ENTRADA, PROCESSAMENTO e SAÍDA são alternados.
para(l = 0; l< LIN; l++){ para(c = 0; c < COL; c++){
M[l][c] = -1 //Inicializa a matriz de lugares no teatro }
}
enquanto(entrada != 'C' ){
escreva( "Digite uma letra para cada opção: A) Comprar Ingresso; B) Mostra quantos ingressos foram vendidos; C) Sair : \n" )
leia(entrada) se(entrada == 'A' ){
escreva( "Informe uma fileira do teatro (0-19) : " ) leia(fileira)
escreva( "Informe uma poltrona dessa fileira (0-9) : " ) leia(poltrona)
se(M[fileira][poltrona] != -1){
escreva( "Essa poltrona já foi vendida \n" )
}
senao{
escreva( ">> Venda efetuada com sucesso! \n" )
vendidas++
}
}
senao se(entrada == 'B' ){
escreva( "Foram vendidos ", vendidas, " ingressos \n" ) }
senao se(entrada != 'C' ){
escreva( "ERRO: Dígito inválido, tente A, B ou C apenas \n" ) }
}
escreva( ">> Programa Encerrado com sucesso!" ) }