Prévia do material em texto
UFG - Instituto de Informática Introdução à Programação 19/12/2023 Prof. Hebert Coelho Prova 2 � 2023/2 1 Descrição 1. O único sistema operacional permitido para prova é o da maratona. 2. A nota máxima considerada nesta prova é de 10 pontos, cada exercício tem seu valor descrito no início; 3. Para obter nota máxima na prova é necessário fazer 1 exercício sobre cada assunto (vetor, string, matriz) sendo que 2 destes precisam ter uso de função com passagem de parâmetro por referência (usando ponteiros); 4. Mesmo não havendo indicação de uso de função na questão, você poderá escolher o exercício e usar função; 5. Caso seja realizado 2 exercícios sobre um mesmo assunto a nota considerada para o assunto será a do exercício que obtiver maior pontuação; 6. O valor máximo da prova sem uso de função com passagem de parâmetro por referência é de 7 pontos. Assim, para cada um dos 2 exercícios a ser realizado com uso de função com passagem de parâmetro que não for resolvido com função haverá um decremento de 1,5 pontos; 7. Não será permitido o uso de celulares durante a prova; 8. Cópias de código ou de partes de código de soluções implicarão em nota ZERO na questão correspondente para todos os envolvidos; 9. Utilize o sharif como seu backup, não con�e na máquina pois a mesma pode travar, assim submeta quantas versões quiser para cada código. Vetores 1. Troca Opostos se Maior (3,0 pontos) Escreva um programa para ler vários vetores e para cada vetor, trocar dois elementos x e y entre si se o índice de x for menor que o índice de y e x e y são opostos entre si e x for maior que y. Dado um vetor com n elementos, o elemento de índice zero é o oposto ao elemento de índice n−1, o elemento de índice 1 é oposto ao elemento de índice n − 2, e assim, por diante. O programa deve ter uma função trocaOpostosSeMaior que recebe como entrada um vetor e o seu tamanho e executa a troca de elementos opostos no vetor recebido como parâmetro, se ela for necessária. O programa deve conter ainda, uma função troca que troca dois elementos de um vetor entre si. A função trocaOpostosSeMaior deve chamar a função troca sempre que dois elementos do vetor precisem ser trocados entre si. Entrada A primeira linha da entrada contém o número de casos de teste. Para cada caso de teste há duas linhas. A primeira linha contém um número inteiro N ≤ 500 que corresponde ao tamanho de um vetor. A segunda linha contém N inteiros separados entre si por um espaço. Saída Para cada caso de teste o programa deve imprimir o vetor processado pela função trocaOpostosSe Maior. Os elementos devem ser impressos separados entre si por um espaço e deve haver um caractere de quebra de linha ao �nal. Exemplo Entrada 3 7 7 6 5 4 3 2 1 1 2 6 1 2 3 4 5 6 Saída 1 2 3 4 5 6 7 2 1 2 3 4 5 6 2. Elementos Comuns (4,0 pontos) Escreva um programa que leia várias triplas de vetores de números inteiros e imprima os elementos que são comuns a cada, tripla se houver elementos comuns entre eles. Considere que em um mesmo vetor não haja elementos repetidos. Entrada A primeira linha na entrada contém um número inteiro C ≥ 1, que corresponde ao número de casos de teste. Cada caso é formado por seis linhas. A primeira linha contém o número n1 de elementos do primeiro vetor. A segunda linha contém os elementos inteiros que formam o primeiro vetor, separados entre si por um espaço. A terceira linha contém o número de elementos n2 do segundo vetor. A quarta linha contém os elementos do segundo vetor, separados entre si por um espaço. A quinta linha contém o número de elementos n3 do terceiro vetor. A sexta linha contém os elementos do terceiro vetor, separados entre si por um espaço. Saída Para cada caso de teste o programa deve emitir uma linha contendo os elementos comuns aos três vetores, ordenados em ordem crescente. Se não houver elementos em comum nos três vetores, uma linha em branco é impressa. Os três vetores têm tamanho máximo igual a 1000. Considere que os elementos dos vetores são do tipo int. Exemplo Entrada 2 1 5 10 1 2 3 4 5 6 7 8 9 10 3 90 5 70 5 50 47 33 10 4 3 4 9 10 8 10 3 8 2 5 4 7 8 Saída 5 4 10 Strings 3. mystrpbrk() (3,5 pontos) Dada uma string apontada por str1, encontre o primeiro caractere nessa string que seja igual a qualquer caractere que apareça na string apontada por str2. Os caracteres de terminação das duas strings não devem ser considerados nesta pesquisa. Deve ser retornado um ponteiro para char indicando o primeiro caractere da string apontada por str1 que coincide com algum caractere diferente do caracter de �m de string que ocorre na string apontada por str2. Se nenhuma coincidência, deve ser retornado o valor de endereço zero. Considere ainda que você não sabe ou não se lembre de uma função que faça essa operação e que o professor tenha desconectado o acesso dos alunos a rede externa ao INF!!! Escreva uma função do tipo char * que implemente a solução para o problema acima. Essa função deve ter o seguinte cabeçalho (header): char *mystrpbrk(char *str1, char *str2); Você deve escrever um programa para testar se sua função funciona. O programa deverá ler pares de cadeias de caracteres na entrada e para cada par, o programa deve chamar a função passando os endereços da primeira e da segunda strings do par e deve imprimir a parte da primeira string que inicia com o primeiro caractere da primeira string que coincide com pelo menos algum caractere da segunda string. Caso a função retorne zero, o programa deve apenas imprimir uma quebra de linha. Entrada A primeira linha da entrada contém um número inteiro n ≥ 0 correspondente ao número de casos de teste. Em seguida, há n pares de linhas. Cada linha contém uma string. Considere que cada linha tenha no máximo 1000 caracteres. Saída Para cada caso de teste, seu programa deve imprimir a parte da primeira string de um par que inicia com o primeiro caractere que ocorre em pelo menos um dos caracteres da segunda string. Exemplo Entrada 4 Esta frio hoje? BgkE Aprendi os numeros de 1 a 10 bckz Batatinha quando nasce zqtue Esparrama pelo chao asp Saída Esta frio hoje? tatinha quando nasce sparrama pelo chao 4. Mensagens Cifradas (3,5 pontos) Uma forma antiga de codi�car uma mensagem é substituir cada letra de uma palavra pela próxima segunda letra na ordem alfabética. Por exemplo, `A' é substituído por `C', `R' é substituído por `T', etc. As letras �nais do alfabeto são substituídas também pela segunda próxima do início do alfabeto (como se organizarmos as letras em ordem alfabética, mas em uma circunferência). Assim `Y' é substituído por `A' e `Z', por `B'. Podemos adaptar o sistema para deslocar não apenas por duas letras, mas por qualquer número de letras. Entrada A entrada contém vários casos de teste. A primeira linha da entrada contém um número inteiro n que indica o número de casos de teste. Cada caso de teste é composto por duas linhas. A primeira linha contém uma sequência de letras a ser codi�cada. Essa sequência contém entre 1 e 50 caracteres (inclusive). Cada caractere é uma letra maiúscula (`A' - `Z'). A segunda linha contém o número de posições à direita no alfabeto usado para gerar a sequência a ser codi�cada que aparece na primeira linha e é um valor no intervalo fechado [0,25]. Saída Dada a sequência original e o número de posições usadas para codi�cá-la, seu programa deve gerar a sentença cifrada, de acordo com a explicação acima e de acordo com os exemplos seguintes. Exemplo Entrada 6 TOPCODER 2 QRSTUVWXYZABCDEFGHIJKLMNOP 10 TOPCODER 0 AXCHMA 25 CAMOBAP 1 HELLOWORLD 4 Saída VQREQFGT ABCDEFGHIJKLMNOPQRSTUVWXYZ TOPCODER ZWBGLZ DBNPCBQ LIPPSASVPH Matrizes 5. Matriz: Linhas e colunas Nulas (3,5 pontos) Dada uma matriz Am×n veri�car quais linhas e colunas são nulas. A matriz A abaixo possui as linhas 3 e 4 nulas. A coluna 2 também é nula. A = 1 0 2 3 4 0 5 6 0 0 0 0 0 0 0 0 Entrada Na primeira linha há dois inteiros n e m, 1 < n ≤ 500 e 1 < m ≤ 500, representando a ordem da matriz. A seguir haverá n linhas com m inteirosem cada linha, separados entre si por um espaço em branco, representando os elementos da matriz. Saída O programa deverá imprimir as linhas e colunas nulas, nessa ordem. Também é necessário imprimir a soma de todos os elementos da matriz. As informações de linha(s) e coluna(s) nulas devem estar em linhas separadas. A soma deve ser impressa na última linha. Se não houver linhas e colunas nulas, apenas a soma deve ser impressa. Ver exemplos. Exemplo Entrada 1 4 4 1 0 2 3 4 0 5 6 0 0 0 0 0 0 0 0 Saída 1 LINHA 3 LINHA 4 COLUNA 2 SOMA: 21 Entrada 2 3 5 2 4 1 9 0 1 0 5 7 6 4 8 2 2 1 Saída 2 SOMA: 52 6. Colunas Ordenadas (4,0 pontos) Faça um programa que, dada uma matriz A de números inteiros, ordene os elementos de cada coluna de A em ordem decrescente. A matriz A é uma matriz m × n, onde 1 ≤ m ≤ 10 e 1 ≤ n ≤ 50. Entrada A entrada contém vários casos de teste. Para cada caso há inicialmente uma linha com dois números inteiros m e n separados entre si por um espaço. Os dois números obedecem aos intervalos mostrados acima e correspondem, respectivamente, ao número de linhas e ao número de colunas de uma matriz. Em seguida, há m linhas na entrada para o caso de teste, cada uma contendo n valores inteiros separados entre si por um espaço. A entrada termina quando for encontrada uma linha com m = 0 e n = 0. Nesse caso não há mais linhas na entrada e o programa deve terminar. Saída A saída para cada caso de teste consiste de m linhas, cada uma contendo n números inteiros separados entre si por um espaço. Os elementos de cada coluna estão ordenados em ordem decrescente. Após a saída de cada caso de teste deve haver uma linha em branco. Exemplo Entrada 3 5 1 2 11 0 13 5 10 6 -99 88 -9 -100 -200 -20 -1 4 2 90 8 -2 -90 -30 -4 3 100 0 0 Saída 5 10 11 0 88 1 2 6 -20 13 -9 -100 -200 -99 -1 90 100 3 8 -2 -4 -30 -90 Descrição