Buscar

SimulacaoP3-Solucao

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 4 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

Programação de Computadores 
Prof. Eduardo Chaves Faria 
Simulação da 3a Prova 
 
1ª Questão 
O programa troca valores entre diferentes posições de um vetor, havendo sobreposição de valores. 
EXEMPLO: 
Para o número de matrícula 2012456789 o vetor A será preenchido conforme mostrado abaixo: 
4 5 6 7 8 9 
O valor da variável i varia de 6 até 2 (interrompe quando i = 1), e calcula A[i] ← A[7−i] 
Então, para cada valor de i é feita uma atribuição de valor entre diferentes posições, a saber: 
i A[i] ���� A[7-i] 
6 A[6] ← A[1] 
5 A[5] ← A[2] 
4 A[4] ← A[3] 
3 A[3] ← A[4] 
2 A[2] ← A[5] 
A partir deste ponto as seguintes operações são realizadas: 
4 5 6 7 8 9 
 
4 5 6 7 8 4 
 
4 5 6 7 5 4 
 
4 5 6 6 5 4 
 
4 5 6 6 5 4 
 
 
4 5 6 6 5 4 
 
Resultado final � 
A partir desta operação 
os valores não se alteram 
porque são os mesmos. 
SOLUÇÃO 
2a Questão 
{ Intercala dois conjuntos ordenados de 20 números } 
subrotina Intercala( A, B, C ) 
 declare A, B[1:20] { entrada: conjuntos ordenados para intercalação } 
C[1:40] { saída: conjunto ordenado resultante da intercalação de A e B } 
numérico 
 declare i { índice para o vetor A } 
 j { índice para o vetor B } 
 k { índice para o vetor C} 
numérico 
i ← 1 
 j ← 1 
 k ← 0 
 repita 
 se i > 20 ou j > 20 então 
 interrompa 
 fim se 
 k ← k + 1 
 se A[i] < B[j] então 
 C[k] ← A[i] 
 i ← i + 1 
 senão 
 C[k] ← B[j] 
 j ← j + 1 
fim se 
fim repita 
se i ≤ 20 então 
Descarrega( i, A, k, C ) { copia resto dos elementos de A para C } 
senão 
Descarrega( j, B, k, C ) { copia resto dos elementos de B para C } 
fim se 
escreva C[1], C[2] ... C[40] 
fim subrotina 
{ Copia o restante dos elementos de um dos conjuntos } 
subrotina Descarrega( p, X, k, C ) 
declare p { entrada: apontador para o próximo elemento de X a ser copiado } 
 k { entrada/saída: apontador para o último elemento intercalado em C } 
 i { apontador para percorrer elementos em X } 
 numérico 
declare X[1:20] { entrada: conjunto com resto de elementos a serem copiados p/ C } 
 C [1:40] { entrada/saída: conjunto ordenado resultante da intercalação} 
 numérico 
 i ← p 
 repita 
 se i > 20 então 
interrompa 
 fim se 
 k ← k + 1 
 C[k] ← X[i] 
 i ← i + 1 
 fim repita 
fim subrotina 
3ª Questão 
 
{ Determina os pontos de sela de uma matriz quadrada fornecida pelo usuário } 
Algoritmo 
 Defina o tipo das variáveis 
 leia n 
 leia A[1,1] ... A[n,n] 
 i ← 1 
 repita 
 se i > n então 
 interrompa 
 fim se 
Descubra qual a coluna da linha i que possui o maior valor 
 Verifique se este valor é também o maior dentre todos da coluna { é um ponto de sela } 
se PontoSela então 
 escreva i, k, Valor { escreve a posição na matriz e valor do ponto de sela } 
 fim se 
 i ← i + 1 
 fim repita 
fim algoritmo 
 
 
ref : Descubra qual a coluna da linha i que possui o maior valor 
j ← 1 
Valor ← 0 
repita { a linha i estará fixa, e j percorre as colunas } 
 se j > n então 
 interrompa 
 fim se 
se A[i,j]  > Valor então 
 Valor ← A[i,j]  
 k ← j { salva o índice da coluna onde está o maior valor } 
 fim se 
 j ← j + 1 
fim repita 
fim ref 
 
 
ref: Verifique se este valor é também o maior dentre todos da coluna 
j ← 1 { Atenção: j agora é linha } 
PontoSela ← verdadeiro 
Repita { a coluna k estará fixa, e j percorre as linhas } 
 se j > n então 
 interrompa 
 fim se 
se A[ j, k]  > Valor então 
 PontoSela ← falso { o maior valor da linha i NÃO é ponto de sela } 
 fim se 
 j ← j + 1 
 fim repita 
fim ref 
 
 
 
ref: Defina o tipo das variáveis 
 declare n, { ordem da matriz } 
 i, j, k, { contadores } 
 Valor { usada para salvar maior elemento da linha } 
 numérico 
 declare A[1:50,1:50] { matriz de valores fornecida pelo usuário } 
 numérico 
 declare PontoSela { sinaliza se encontrou um Ponto de Sela } 
 lógico 
fim ref

Outros materiais