Bacharelado em Ciência e Tecnologia BC0505 – Processamento da Informação - Prof. Edson Pinheiro Pimentel
GABARITO
Lista de Exercícios – Modularização + Vetor + Matriz
PARTE 1 – Modularização
[1]. Dado o módulo a seguir, determinar o valor retornado para cada uma das chamadas:
funcao inteiro Equação1 (inteiro A) {
inteiro X
X = (A * A)+(5*A)/ 2
retorne (X)
}
a) Equação1(10)
b) Equação1((3 * 4) – 14 + (8 / 4))
Resposta: a) 125 b) 0
[2]. Construa uma função que retorne o somatório dos primeiros n elementos de qualquer PA, dados o
primeiro termo e a razão.
SAÍDA: Quais os resultados que o algoritmo dever fornecer ?
O somatório dos primeiros n elementos de qualquer PA.
ENTRADA: Quais os insumos necessários para se obter a saída?
Primeiro termo e razão da PA.
PROCESSAMENTO: Como transformar os insumos na saída?
an = a1 + (n-1)*razao
soma = ((a1+an)*n)/2
PROGRAMA - PORTUGOL funcao real somaPA(real razao, real a1) { //DECLARAÇÃO DE VARIÁVEIS inteiro n // ENTRADA DE DADOS escreva("Informe o número de elementos N a ser somado:") leia(n) // PROCESSAMENTO E SAÍDA DE DADOS real an = a1 + (n-1)*razao retorne ((a1+an)*n)/2 }
[3]. Construa uma função que retorne se dada letra (minúscula ou maiúscula) é vogal (V) ou não (F).
SAÍDA: Quais os resultados que o algoritmo dever fornecer ?
V se a letra for vogal e F se não for vogal.
ENTRADA: Quais os insumos necessários para se obter a saída?
A letra a ser analisada (maiúscula ou minúscula).
PROCESSAMENTO: Como transformar os insumos na saída?
se(letra=='a'ou letra=='e' ou letra=='i' ou letra=='o' ou letra=='u' ou letra=='A' ou letra=='E' ou
letra=='I' ou letra=='O' ou letra=='U') {
retorne 'V'
}
retorne 'F'
PROGRAMA - PORTUGOL funcao caracter verificaVogal(caracter letra){ // PROCESSAMENTO E SAÍDA DE DADOS se(letra=='a'ou letra=='e' ou letra=='i' ou letra=='o' ou letra=='u' ou letra=='A' ou letra=='E' ou letra=='I' ou letra=='O' ou letra=='U') { retorne 'V' } retorne 'F' }
OBS: Poderia ser usado uma função que retorna uma variável tipo LÓGICO (verdadeiro ou
falso).
[4]. Construa uma função que retorne V (true) se o sexo passado por parâmetro for uma letra válida (M
ou F)
SAÍDA: Quais os resultados que o algoritmo dever fornecer ?
V (verdadeiro) se a letra for M ou F.
ENTRADA: Quais os insumos necessários para se obter a saída?
A letra a ser analisada.
PROCESSAMENTO: Como transformar os insumos na saída?
se (letra == 'M' ou letra == 'F')
{
retorne verdadeiro
}
PROGRAMA - PORTUGOL funcao logico Sexo(caracter letra) { // PROCESSAMENTO E SAÍDA DE DADOS se (letra == 'M' ou letra == 'F') { retorne verdadeiro } }
OBS: Poderia ser usado uma função que retorna um tipo CARACTER (V).
[5]. Um número é capicua quando pode ser lido da esquerda para a direita ou da direita para a esquerda.
Construa uma função que retorne se dado número é capicua (V) ou não (F)
SAÍDA: Quais os resultados que o algoritmo dever fornecer ?
V se o número for capicua ou F caso contrário.
ENTRADA: Quais os insumos necessários para se obter a saída?
O número a ser analisado.
PROCESSAMENTO: Como transformar os insumos na saída?
inteiro temp = a
inteiro capicuia = 0
enquanto (temp != 0){
inteiro t = temp %10
temp = temp/10
capicuia = (capicuia *10) +t
retorne capicuia
PROGRAMA - PORTUGOL funcao inteiro validacao (inteiro a) { //DECLARAÇÃO DE VARIÁVEIS inteiro temp = a inteiro capicuia = 0 // PROCESSAMENTO E SAÍDA DE DADOS enquanto (temp != 0){ inteiro t = temp %10 temp = temp/10 capicuia = (capicuia *10) +t } retorne capicuia }
[6]. Construa uma função que retorne o valor em binário de um dado número inteiro decimal.
SAÍDA: Quais os resultados que o algoritmo dever fornecer ?
Valor em binário de um dado número inteiro decimal.
ENTRADA: Quais os insumos necessários para se obter a saída?
Um número inteiro decimal.
PROCESSAMENTO: Como transformar os insumos na saída?
enquanto (temp != 0) {
bin = bin + (temp%2)*i
i = i * 10
temp = temp /2
}
PROGRAMA - PORTUGOL funcao inteiro binario(inteiro a){ //DECLARAÇÃO DE VARIÁVEIS inteiro temp = a inteiro bin = 0 inteiro i = 1 // PROCESSAMENTO E SAÍDA DE DADOS enquanto (temp != 0) { bin = bin + (temp%2)*i i = i * 10 temp = temp /2 } retorne bin }
[7]. COMPLETE O PROGRAMA A SEGUIR SEGUINDO AS ORIENTAÇÕES:
a) Note a existência da função LerValorSuperior que faz a entrada de dados de um valor e
obriga o usuário a digitar um valor maior ou igual a um limite inferior (Esta função está
pronta).
b) Note que a função VerificaMaior está começada e você deverá completá-la conforme
orientações mais adiante.
PEDE-SE:
i. Complete a função VerificaMaior que deverá ter o seguinte comportamento: Ela está
recebendo por parâmetro DOIS VALORES e deverá retornar o valor 1 se o primeiro valor for
maior que o segundo, retornar 2 se o segundo valor for maior que o primeiro, ou retornar zero
se os dois valores forem iguais.
ii. Complete a função inicio:
Faça a chamada da função LerValorSuperior para ler o valor de N2, tendo como limite
inferior o valor de N1. Note que a chamada para a leitura de N1 já está feita e o usuário não
conseguirá digitar um valor menor que zero. No caso de N2, o limite inferior deverá ser o
valor de N1. Siga o modelo da chamada.
Faça a chamada da função VerificaMaior, na função início.
Logo a após a chamada verifique o valor retornado e imprima uma das seguintes mensagens:
“os valores são iguais” ou “os valores são diferentes”
programa {
funcao inicio () {
inteiro n1, n2, resultado
n1 = LerValorSuperior ("Digite o valor de N1: ", 0)
// completar ...
}
// ------------------------------------------------------------------------------------------------------
funcao inteiro LerValorSuperior (cadeia msg, inteiro inferior) {
inteiro valor
escreva(msg)
leia(valor)
enquanto (valor < inferior) {
escreva("Erro: Valor deve ser maior ou igual a ", inferior, "\n")
escreva(msg)
leia (valor)
}
retorne valor
}
// ---------------------------------------------------------------------------------------------------------
funcao inteiro Verifica_maior(inteiro valor1, inteiro valor2)
{
inteiro resposta = 0
// escreva abaixo o codigo da sua função
_____________
____________
retorne resposta
}
}
RESPOSTA
programa { funcao inicio () { inteiro n1, n2, resultado n1 = LerValorSuperior ("Digite o valor de N1: ", 0) n2 = LerValorSuperior ("Digite o valor de N2: ", n1) resultado = Verifica_maior(n1,n2) se(resultado == 0){ escreva("Os valores são iguais") } senao{ escreva("Os valores são diferentes") } } // --------------------------------------------------------------------- funcao inteiro LerValorSuperior (cadeia msg, inteiro inferior) { inteiro valor escreva(msg) leia(valor) enquanto (valor < inferior) { escreva("Erro: Valor deve ser maior ou igual a ", inferior, "\n") escreva(msg) leia (valor) } retorne valor } // -------------------------------------------------------------------------- funcao inteiro Verifica_maior(inteiro valor1, inteiro valor2) { inteiro resposta = 0 // escreva abaixo o codigo da sua função se (valor1 > valor2){ resposta = 1 } senao se (valor2 > valor1){ resposta = 2 } retorne resposta } }
[8]. Escreva um programa para ler dois números inteiros positivos e mostrar a soma e o produto dos
mesmos. Seu programa deve ter três sub-rotinas (ou módulos):
a) A primeira, chamada Valida_Positivo, deve ler e validar um número (número deve ser positivo).
A função deve ser chamada DUAS vezes no programa principal. Uma para cada número.
b) A segunda, chamada SomaDois_Inteiros, deve receber dois números por parâmetro e retornar a
soma
c) A terceira, chamada ProdutoDois_Inteiros, deve receber dois números por parâmetro e retornar o
produto.
A função principal (inicio) deve chamar as funções, na sequência correta e imprimir os
resultados.
funcao inicio() { inteiro x, y escreva("Digite dois números inteiros positivos:") leia(x) leia(y) se (Valida_Positivo(x) e Valida_Positivo(y) ){ escreva ("A soma é ", SomaDois_Inteiros(x,y)) escreva ("\nO produto é ",ProdutoDois_Inteiros(x,y)) }senao{ escreva("Os valores não são positivos") } } funcao logico Valida_Positivo (inteiro x){ se(x>=0){ retorne verdadeiro }senao{ retorne falso } } funcao inteiro SomaDois_Inteiros (inteiro x, inteiro y){ retorne x+y } funcao inteiro ProdutoDois_Inteiros (inteiro x, inteiro y){ retorne x*y }
PARTE 2 – Modularização + Vetor
[9]. Construa uma função que receba por parâmetro, um vetor e seu tamanho retorne a posição do maior
valor (elemento).
SAÍDA: Quais os resultados que o algoritmo dever fornecer ?
A posição do maior valor (elemento).
ENTRADA: Quais os insumos necessários para se obter a saída?
Um vetor e seu tamanho.
PROCESSAMENTO: Como transformar os insumos na saída?
para (i=1; i<x; i++)
{
se (temp < A[i])
{
temp = A[i]
j=i
}
}
PROGRAMA - PORTUGOL funcao inteiro Retorna_indice(inteiro A[], inteiro x) { //DECLARAÇÃO DE VARIÁVEIS inteiro temp = A[0] inteiro j=0, i=1 //PROCESSAMENTO E SAÍDA DE DADOS para (i=1; i<x; i++) { se (temp < A[i]) { temp = A[i] j=i } } retorne j }
[10]. Construa uma função que receba por parâmetro, um vetor e seu tamanho retorne a media dos seus
elementos.
SAÍDA: Quais os resultados que o algoritmo dever fornecer ?
Média dos elementos de um vetor.
ENTRADA: Quais os insumos necessários para se obter a saída?
Um vetor e seu tamanho.
PROCESSAMENTO: Como transformar os insumos na saída?
A função deverá percorrer o vetor, somar os elementos e dividir pelo número de elementos do
vetor. Dessa forma:
para (inteiro i=0; i<x; i++){
Media = Media +A[i]
escreva("\n",Media)
}
Media = Media/x
PROGRAMA - PORTUGOL funcao real media(real A[], inteiro x){ real Media = 0.0 escreva("A soma das nota é:\n") para (inteiro i=0; i<x; i++){ Media = Media +A[i] escreva("\n",Media) } Media = Media/x retorne Media }
[11]. Escreva um programa para ler um VETOR de 10 números inteiros positivos e imprimir o vetor e
também a soma dos elementos do vetor e a media dos elementos. Seu programa deve ter quatro sub-
rotinas (ou módulos):
a) A primeira, chamada Valida_Positivo, deve ler e validar um número (número deve ser positivo).
b) A segunda, chamada Leitura_Vetor, deve ler os elementos do vetor. Para validar os números
deve fazer uso da função Valida_Positivo.
c) A terceira, chamada SomaVetor, deve receber o vetor por parâmetro e retornar a soma dos seu
elementos
d) A quarta, chamada Imprime_Vetor, deve receber o vetor por parâmetro e imprimir os elementos.
A função principal (inicio) deve chamar as funções, na sequência correta e imprimir a média.
RESPOSTA: funcao inicio(){ inteiro A[10] LeituraVetor(A) real soma = SomaVetor(A) real media = soma/10 ImprimeVetor(A) escreva("\nA média dos valores do vetor é: " + media) } funcao inteiro validacao(inteiro a){ inteiro valor = a enquanto(valor <= 0){ escreva("Erro: Valor deve ser maior que 0") escreva("Digite outro valor inteiro positivo") leia(valor) } retorne valor } funcao LeituraVetor(inteiro &A[]){ escreva("Digite os valores da matriz") para(inteiro i=0; i<10; i++){ inteiro x leia(x) x = validacao(x) A[i] = x } escreva("") } funcao real SomaVetor(inteiro A[]){ real soma = 0 para(inteiro i=0; i<10; i++){ soma = soma + A[i]
} retorne soma } funcao ImprimeVetor(inteiro A[]){ escreva("VETOR") para(inteiro i=0; i<10; i++){ escreva(A[i]) } escreva("") }
[12]. Construa uma função que receba por parâmetro, um vetor e seu tamanho retorne V (true) se o vetor
estiver em ordem crescente e (F) caso contrário.
SAÍDA: Quais os resultados que o algoritmo dever fornecer ?
Retornar V se o vetor estiver em ordem crescente e F caso contrário.
ENTRADA: Quais os insumos necessários para se obter a saída?
Um vetor e seu tamanho.
PROCESSAMENTO: Como transformar os insumos na saída?
Percorrer o vetor e verificar se o elemento anterior é maior ou menor que o próximo elemento.
Se for maior, então o vetor não está em ordem crescente.
PROGRAMA - PORTUGOL funcao logico eh_crescente(inteiro vetor[], inteiro size){ para(inteiro i=0; i<size-1; i++){ se(vetor[i]>vetor[i+1]){ retorne falso } } retorne verdadeiro }
[13]. Construa uma função que receba por parâmetro, um vetor e seu tamanho e devolva o vetor
ordenado (em ordem crescente)
SAÍDA: Quais os resultados que o algoritmo dever fornecer ?
O vetor ordenado em ordem crescente.
ENTRADA: Quais os insumos necessários para se obter a saída?
Um vetor e seu tamanho.
PROCESSAMENTO: Como transformar os insumos na saída?
A função deverá percorrer o vetor e deixá-lo em ordem crescente.
PROGRAMA - PORTUGOL funcao vazio Ordena (inteiro V[], inteiro tam){ inteiro temp para( inteiro i = 0; i<tam; i++){ para( inteiro j = 1; j < tam; j++ ){ se(V[j]<V[j-1]){ temp = V[j] V[j] = V[j-1] V[j-1] = temp }
} } para( inteiro i = 0; i<tam; i++){ escreva(V[i]," ") } }
[14]. Construa uma função que receba por parâmetro, um vetor A e seu tamanho e devolva outros dois
vetores APAR e AIMPAR. O vetor APAR deve conter os elementos pares de A e o vetor AIMPAR,
os elementos ímpares de A.
SAÍDA: Quais os resultados que o algoritmo dever fornecer ?
Vetores APAR contendo os elementos pares do vetor A e AIMPAR contendo os elementos
ímpares do vetor A.
ENTRADA: Quais os insumos necessários para se obter a saída?
Vetor A e seu tamanho.
PROCESSAMENTO: Como transformar os insumos na saída?
A função deverá percorrer o vetor A e armazenar os elementos pares no vetor APAR e os
elementos ímpares no vetor AIMPAR.
PROGRAMA - PORTUGOL funcao inicio() { inteiro x, A[], i escreva("Digite o tamanho do vetor: ") leia (x) escreva("Digite os valores do vetor: ") para (i=0; i<x; i++){ leia(A[i]) } inteiro APAR[], AIMPAR[], M[][] M [1][x] = Par_Impar(A, x) para (i=0; i<x; i++){ APAR[i] = M[0][i] } para (i=0; i<x; i++){ AIMPAR[i] = M[1][i] } } funcao inteiro[][] Par_Impar (inteiro A[], inteiro a){ inteiro APAR[a], AIMPAR[a], M[2][a] inteiro l=0, k=0 para (inteiro i=0; i<a; i++){ se (A[i]%2 == 0){ APAR[l] = A[i] l++ } senao{ AIMPAR[k] = A[i] k++
} } para (inteiro j=0; j<l; j++){ M[0][j] = APAR[j] } para (inteiro j=0; j<k; j++){ M[1][j] = AIMPAR[j] } retorne M[1][a] }
[15]. Construa uma função que receba por parâmetro, um vetor A e seu tamanho, e retorne a quantidade
de valores pares em X.
SAÍDA: Quais os resultados que o algoritmo dever fornecer ?
Quantidade de valores pares em X.
ENTRADA: Quais os insumos necessários para se obter a saída?
Vetor A e seu tamanho.
PROCESSAMENTO: Como transformar os insumos na saída?
A função deverá percorrer o vetor e se o elemento do vetor for par, deve ser contado em um
contador. No final, a função retorna o valor do contador, que é o número de elementos pares do
vetor.
PROGRAMA - PORTUGOL funcao inteiro quantidade (inteiro A[], inteiro a){ inteiro cont = 0 para (inteiro i =0; i< a; i++){ se (A[i] %2 == 0) { cont ++ } } retorne cont }
[16]. Construa uma função chamada Sucessor que receba por parâmetro, um vetor A, seu tamanho e
uma posição “i”, e retorne o elemento sucessor do elemento “i”. Caso não seja possível retornar o
sucessor, retorne o valor -1 e imprima uma mensagem de erro na tela. Lembre-se de que não é
possível retornar o sucessor do último elemento.
SAÍDA: Quais os resultados que o algoritmo dever fornecer ?
Elemento sucessor do elemento “i”. Caso não seja possível, retornar o valor -1 e imprimir uma
mensagem.
ENTRADA: Quais os insumos necessários para se obter a saída?
Vetor A, seu tamanho e uma posição “i”.
PROCESSAMENTO: Como transformar os insumos na saída?
A função deverá verificar se houver sucessor do elemento na posição informada “i”. Se sim,
retornar o valor do sucessor, caso contrário, deve retornar o valor -1.
se(i+1 == tam){
escreva("Erro! Índice indicado maior ou igual ao tamanho da matriz")
retorne -1
}
senao{
Suc = A[i+1]
retorne Suc
PROGRAMA - PORTUGOL funcao inteiro Sucessor (inteiro A[], inteiro tam, inteiro i){ inteiro Suc se(i+1 == tam){ escreva("Erro! Índice indicado maior ou igual ao tamanho da matriz") retorne -1 } senao{ Suc = A[i+1] retorne Suc } }
[17]. Considere a existência de um vetor (de String) contendo o nome de 80 alunos, uma matriz (de
double) de 80x2 contendo 2 notas (a nota de cada prova numa coluna ) e um vetor (de int) contendo
as respectivas faltas desses alunos. Escreva funções específicas para:
a. Exibir na tela a média final de cada aluno
b. Imprimir o nome e o total de faltas dos alunos com média acima de 7
//item (A) funcao media_final(cadeia nomes[], real notas[][], inteiro faltas[]){ real nota_final = 0.0 para(inteiro i=0; i<80; i++){ nota_final = (notas[i][0]+notas[i][1])/2 escreva("Media final de ", nomes[i], ": ", nota_final ) } } //item (B) funcao media_maior7(cadeia nomes[], real notas[][], inteiro faltas[]){ real nota_final = 0.0 para(inteiro i=0; i<80; i++){ nota_final = (notas[i][0]+notas[i][1])/2 se(nota_final > 7.0){ escreva("Aluno(a) ", nomes[i], " teve ", faltas[i], " falta(s)" ) } } }
[18]. Dada uma sequência de N números entre 0 e 100. Determine qual o valor de maior frequência.
Caso haja mais de um valor tenha a maior frequência, mostre o maior deles.
Entrada
Na primeira linha ha um inteiro N, 1 ≤ N ≤ 1000000, representando a quantidade números.
Nas N linhas seguintes haverá um numero natural entre 0 e 100 inclusive por linha.
Saída
O programa gera apenas duas linhas. Na primeira dela mostre qual foi o valor com maior frequência. E na
segunda linha, mostre a quantidade de vezes que esse número apareceu na sequencia de valores. Apos a
impressão deste ultimo valor quebre uma linha. Caso haja mais de um valor tenha a maior frequência,
mostre o maior deles.
Exemplos
ENTRADA SAÍDA
10 1 7 4 29 7 4 7 8 7 29 7
4
18 1 7 7 7 7 7 1 8 8 8 8 8 1 7 8 7 8 1 8
7
15 100 100 1 1 100 100 100 2 5 6 7 11 2 2 100 100
6
15 0 0 1 1 0 0 100 2 5 6 7 11 2 0 100 0
5
15 101 100 1 1 10 10 10 2 5 10 6 7 11 2 2 10
Obs. Note que aqui foram “digitados” 16 números (ao
invés dos 15 sugeridos no primeiro dado) pois o 101 é
uma entrada inválida e deve ser rejeitado
10
5
funcao inicio(){ inteiro N inteiro x[101] escreva("Digite o valor de N\n") leia(N) escreva("Digite os valores\n") para( inteiro i = 0; i<101; i++){ x[i]=0 } para( inteiro i = 0; i<N; i++){ inteiro aux leia(aux) se(aux>=0 ou aux <=100){ x[aux] = x[aux]+1 } } escreva(ValorMaisFrequente(x)) escreva("\n",MaiorFrequencia(x)) } funcao inteiro MaiorFrequencia (inteiro V[]){ inteiro temp = 0 para( inteiro i = 0; i<101; i++){ se(V[i]>=temp){ temp = V[i] } } retorne temp } funcao inteiro ValorMaisFrequente (inteiro V[]){ inteiro temp = 0 para( inteiro i = 0; i<101; i++){ se(V[i]>=V[temp]){ temp = i } }
retorne(temp) }
PARTE 3 – Modularização + MATRIZ
[19]. Construa uma função que receba por parâmetro, uma matriz A e suas dimensões e retorne V (true)
se existir alguma linha com todos os elementos zerados e F (false) caso contrário.
SAÍDA: Quais os resultados que o algoritmo dever fornecer ?
V se existir alguma linha com todos elementos zerados e F caso contrário.
ENTRADA: Quais os insumos necessários para se obter a saída?
Matriz A e suas dimensões.
PROCESSAMENTO: Como transformar os insumos na saída?
A função deverá verificar se há alguma linha com todos os elementos zerados. Dessa forma:
para (i=0; i<c; i++)
{
inteiro cont=0
para (j=0; j<l; j++)
{
se (A[i][j] != 0){
pare
}
senao{
cont++
se (cont==1){
retorne verdadeiro
}
}
}
}
retorne falso
PROGRAMA - PORTUGOL funcao logico zero (inteiro A[][], inteiro l, inteiro c) { inteiro i,j para (i=0; i<c; i++) { inteiro cont=0 para (j=0; j<l; j++) { se (A[i][j] != 0){ pare } senao{ cont++
se (cont==1){ retorne verdadeiro } } } } retorne falso }
[20]. Construa uma função que receba por parâmetro, uma matriz A e suas dimensões e retorne V (true)
se existir alguma coluna com todos os elementos zerados e F (false) caso contrário.
SAÍDA: Quais os resultados que o algoritmo dever fornecer ?
V se existir alguma coluna com todos elementos zerados e F caso contrário.
ENTRADA: Quais os insumos necessários para se obter a saída?
Matriz A e suas dimensões.
PROCESSAMENTO: Como transformar os insumos na saída?
A função deverá verificar se há alguma linha com todos os elementos zerados. Dessa forma:
para (inteiro i = 0; i<l; i++){
inteiro cont = 0
para (inteiro j = 0; j<c; j++){
se (A[i][j] != 0) {
pare
} senao {
cont ++
se (cont == c) {
retorne verdadeiro
}
}
}
}
retorne falso
PROGRAMA - PORTUGOL funcao logico zero(inteiro A[][], inteiro l, inteiro c) { para (inteiro i = 0; i<l; i++){ inteiro cont = 0 para (inteiro j = 0; j<c; j++){ se (A[i][j] != 0) { pare } senao { cont ++ se (cont == c) { retorne verdadeiro } } } } retorne falso }
[21]. Construa uma função que receba por parâmetro, uma matriz A, suas dimensões e um número K.
Retorne a soma dos elementos da coluna K.
SAÍDA: Quais os resultados que o algoritmo dever fornecer ?
Soma dos elementos da coluna K.
ENTRADA: Quais os insumos necessários para se obter a saída?
Matriz A, suas dimensões e um número K.
PROCESSAMENTO: Como transformar os insumos na saída?
Acumular os elementos da coluna K em um contador e retornar o contador para função início.
inteiro soma =0
para(inteiro i = 0; i<linha; i++){
soma = soma + A[i][K]
}
retorne soma
PROGRAMA - PORTUGOL funcao inteiro SomaColunaK (inteiro A[][], inteiro linha, inteiro coluna, inteiro K){ inteiro soma =0 para(inteiro i = 0; i<linha; i++){ soma = soma + A[i][K] } retorne soma }
[22]. Os elementos Aij de uma matriz inteira Anxn representam os custos de transporte da cidade i para
a cidade j.
Exemplo: Sendo K= 0, L = 1, M = 3 e F = 0 o custo do
itinerário é:
A[K][L] + A[L][M] + A[M][F] =
A[0][1] + A[1][3] + A[3][0] =
1 + 400 + 7 = 408
Construa uma função que receba por parâmetro, uma matriz A, suas dimensões e 4 valores indicando
origens e destinos (K, L, M, F). A função deve retornar o custo para ir de K a F, passando por L e M
conforme exemplo.
SAÍDA: Quais os resultados que o algoritmo dever fornecer ?
Custo para ir de K a F, passando por L e M.
ENTRADA: Quais os insumos necessários para se obter a saída?
Matriz A, suas dimensões e 4 valores indicando origens e destinos (K, L, M, F).
PROCESSAMENTO: Como transformar os insumos na saída?
Matriz [K][L] + Matriz[L][M] + Matriz[M][F]
PROGRAMA - PORTUGOL funcao inteiro custoTransporte(inteiro matriz[][], inteiro linhas, inteiro col, inteiro K, inteiro L, inteiro M, inteiro F){ retorne matriz[K][L]+matriz[L][M]+matriz[M][F] }
[23]. Uma matriz de duas colunas pode ser utilizada para representar o resultado de jogos de
campeonatos. Na primeira coluna o número de gols do time1 (mandante do jogo) e na segunda
coluna o número de gols do time2 (visitante). Construa uma função que receba por parâmetro, uma
matriz Anx2 e o valor de N e retorne a quantidade de empates.
SAÍDA: Quais os resultados que o algoritmo dever fornecer ?
Quantidade de empates.
ENTRADA: Quais os insumos necessários para se obter a saída?
Matriz A e o valor de N.
PROCESSAMENTO: Como transformar os insumos na saída?
para( inteiro i = 0; i<n; i++){
se(V[i][0]==V[i][1]){
temp = temp+1
}
}
PROGRAMA - PORTUGOL funcao inteiro Empates (inteiro V[][], inteiro n){ inteiro temp = 0 para( inteiro i = 0; i<n; i++){ se(V[i][0]==V[i][1]){ temp = temp+1 } } retorne temp }
[24]. Um teatro deseja informatizar o sistema de venda de ingressos. Suponha que o teatro tenha 560
poltronas, ou seja 40 cadeiras em cada uma das 14 filas. Para comprar ou reservar um lugar o
usuário deve informar o número da fila (de 1 a 14) e o número da poltrona na fila (de 1 a 40).
Na reserva ou venda de um ingresso deverá ficar registrado o nome da pessoa que comprou o bilhete para
a poltrona. Inicialmente todas as poltronas estarão preenchidas como “LIVRE”
Construa funções específicas para :
a) Inicializar todas as poltronas do teatro no sistema, com a situação "LIVRE"
b) Vender um determinado ingresso. Aqui o usuário irá informar o número da fila e cadeira. Se estiver
livre, solicitar também o nome da pessoa. Se a poltrona NÃO estiver LIVRE avisar ao usuário
c) Pesquisar quantas poltronas "consecutivas" livres existem numa determinada FILA. Essa rotina deve
informar qual o número da primeira poltrona livre, e quantas livres "consecutivas" tem ao lado dela.
RESPOSTA:
funcao cadeia[][] Inicio (cadeia A[][]) { inteiro i, j para (i=0; i<14; i++){ para (j=0; j<40; j++){ A[i][j] = "LIVRE" } } retorne A[i][j] } funcao cadeia[][] Compra (cadeia A[][], inteiro fileira, inteiro poltrona) { cadeia nome
enquanto (A[fileira][poltrona] != "LIVRE") { escreva ("Poltrona ocupada! Escolha outra: ") escreva ("Digite a fila: ") leia (fileira) escreva ("Digite a poltrona: ") leia (poltrona) } escreva ("Escreva seu nome: ") leia (nome) A[fileira][poltrona] = nome escreva ("Obrigado pela preferência!") retorne A[fileira][poltrona] } funcao Pesquisa (cadeia A[][], inteiro fileira) { inteiro B[20][2] inteiro i=0, cont=0, j=-1, k enquanto (i!=40) { se (A[fileira][i] == "LIVRE") { j++ B[j][0] = i+1 enquanto (A[fileira][i+1] == "LIVRE") { cont++ i++ } B[j][1] = cont } i++ } para (k=0; k<j; k++) { escreva ("A poltrona ", B[k][0], "está livre e existem ", B[k][1], " poltronas vazias ao seu lado.") } }
PARTE 4 – TESTE DE MESA
[25]. Simule a execução do algoritmo SEGREDO através de “teste de mesa”:
a) Na linha 5 da função inicio preencha os espaços da matriz A com a sequência dos 6 primeiros
dígitos da sua Matrícula
b) Transcreva esses valores para a Matriz Original (na tabela teste de mesa);
c) Simule a execução da chamada da função FSegredo (linha 6) e no ESCOPO FSEGREDO,
anote os novos valores de cada variável e as linhas que as modificam. É obrigatório anotar
todas as linhas que modifiquem um dos valores contidos nas variáveis i, j, aux até que a
função seja encerrada.
d) Indique na “Matriz após FSegredo” os valores da Matriz A após a execução de FSegredo.
e) Que valor será impresso na linha 7 da função início? ___________
“SEGREDO” TESTE DE MESA
Matriz A Original
0 1 2
0
1 ESCOPO FSEGREDO
LINHA i j aux
Matriz Após FSegredo
0 1 2
0
1
OBS: Este exercício terá uma solução diferente para cada um dos alunos, pois na entrada
de dados espera-se o número de matrícula de cada aluno.