UFES - CEUNES - Engenharia de Petróleo Programação I - 1º período – 2012/1 Lista de exercícios 05 Assuntos novos: matriz e array n-dimensional Para cada questão a seguir, construa um programa em Linguagem C que faça o que foi solicitado. 1. Em um prédio de 8 andares com 4 apartamentos por andar há uma necessidade de se registrar o consumo de energia elétrica de um determinado mês. Faça um programa para realizar este registro (em todos os apartamentos). Entre os muitos levantamentos que se pode fazer com estes dados, no momento, se quer saber as seguintes informações: - consumo total dos apartamentos da 2ª coluna. - consumo total de cada andar deste do prédio. 2. Faça as modificações necessárias, na questão anterior, para que o programa possa ser usado para outros prédios, por exemplo, com 10 andares e 6 apartamentos por andar. 3. Exiba na console cada um dos nomes que compõe a matriz ‘nomes’. char nomes[][30] = { "Jose Oliveira", "Joao Silverio", "Joana da Silva", "Mario da Silva Oliveira", "Pedro Oliveira de Souza"}; 4. A partir da lista de nomes fornecida a seguir, exiba a quantidade de caracteres e de vogais de cada um deles e também do total. char nomes[][30] = { "Jose Oliveira", "Joao Silverio", "Joana da Silva", "Mario da Silva Oliveira", "Pedro Oliveira de Souza"}; 5. Leia e armazene numa matriz de 'char' uma lista de 10 nomes de pessoas. Em seguida exiba eles na ordem inversa do que foram digitados. Considere que os nomes são de no máximo 40 caracteres. 6. Declare uma matriz de nome ‘m’ e que seja capaz de armazenar 100 números inteiros, distribuídos em 10 linhas e 10 colunas. Em seguida faça o seu preenchimento completo com números aleatórios de 1 a 9. Faça também a exibição de todos os seus valores no seguinte formato: m[1,1] = 3 m[1,2] = 9 m[1,3] = 2 … m[10,10] = 8 Faça outra exibição dos valores, agora com o formato: 392…1 265…1 … 957…8 Para finalizar, exiba a soma dos valores contidos na 5ª linha. Lista de exercícios 05 – Programação I – Engenharia de Petróleo – 2012/1 – página 1 / 4 7. Dê continuidade ao problema anterior completando o código para exibir a soma e os elementos de cada um dos grupos indicados: a. 10ª coluna. b. Primeira coluna. c. Primeira linha. d. 5ª linha. e. Todos os elementos da matriz. f. 5 primeiras linhas. g. 3 primeiras colunas. h. Diagonal principal. i. Triângulo superior da diagonal principal. j. Triângulo inferior da diagonal principal. k. Diagonal secundária l. Triângulo superior da diagonal secundária. m. Triângulo inferior da diagonal secundária. 8. Preencha uma matriz de 10 linhas por 15 colunas com números aleatórios de 1000 a 2000. Em seguida exiba todo o seu conteúdo. 9. Preencha uma matriz com números aleatórios (inteiros). Para isto solicite ao usuário quantas linhas e colunas a matriz possui, e a faixa de números que devem ser sorteados. Exiba todo o conteúdo da matriz de forma organizada, por exemplo, uma matriz de 3 linhas e 6 colunas com números sorteados entre 1000 e 3000, seria exibida desta forma: 1003 1569 1789 1110 2000 1212 1103 1662 1989 1200 2406 1819 1045 1749 1980 1310 2507 1815 10. Crie duas matrizes com 5 linhas e 5 colunas cada uma. Preencha com valores sorteados de 1 a 10. Em seguida crie uma terceira matriz para armazenar a soma das duas anteriores. Exiba as três matrizes. 11. Crie a seguinte matriz quadrada. O tamanho da matriz é informado pelo usuário. 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 2 3 4 5 6 7 12. Crie a seguinte matriz quadrada. O tamanho da matriz é informado pelo usuário. 1 1 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3 3 3 3 4 4 4 4 4 4 4 5 5 5 5 5 5 5 6 6 6 6 6 6 6 7 7 7 7 7 7 7 13. Leia um conjunto de nomes de pessoas com as suas respectivas idades. Em seguida exiba o nome de todos aqueles que possuem a idade maior do que a média das idades do grupo. Antes da leitura dos nomes, pergunte ao usuário a quantidade. Lista de exercícios 05 – Programação I – Engenharia de Petróleo – 2012/1 – página 2 / 4 14. Aceite a digitação de nomes de pessoas até o usuário digitar “fim” para terminar. Em seguida exiba todos os que são iniciados por vogal. Aceite um máximo de 500 nomes. Dica: para comparar se o nome digitado é igual a “fim”, use a função ‘strcmp’ da biblioteca ‘string.h’. A função strcmp recebe dois argumentos string e retorna zero se os dois forem iguais. 15. Faça a validação de um jogo da velha, ou seja, se houve vencedor ou não e, se for o caso, quem foi o vencedor X ou O. Para isto leia do usuário uma matriz 3x3 de Strings que representa as marcações realizadas com ‘X’, ‘O’ ou vazio. 16. Para facilitar, suponha que a entrada de dados é feita nas próprias linhas de código, por exemplo, o jogo: X | X | O --+---+--X | O | X --+---+--O | | O poderia ser registrado da seguinte forma: char velha[3][3]; velha[0][0] = '0'; velha[0][1] = 'X'; velha[0][2] = '0'; velha[1][0] = 'X'; velha[1][1] = '0'; velha[1][2] = 'X'; velha[2][0] = 'X'; velha[2][1] = ' '; velha[2][2] = '0'; ou ainda desta outra forma: char velha[3][3] = {{'0','X','0'}, {'X','0','X'}, {'X',' ','0'}}; Neste caso a resposta seria: “O jogador ‘O’ foi o vencedor!” 17. Preencha, com números randômicos, uma matriz de 8 linhas por 20 colunas. A faixa dos números aleatórios deverá ser solicitada ao usuário. Calcule a quantidade de números pares e impares em cada linha da matriz. Calcule também o percentual destes em relação a quantidade total de números da matriz. Exiba a matriz num formato tabular indicando as quantidades e percentuais calculados. 18. Armazene numa matriz 12x2 de inteiros o número do mês com a quantidade de dias que o mês possui. Para fevereiro considere 29 dias. Armazena também, em outro vetor, o nome dos meses do ano. Em seguida, pergunte ao usuário qual o número do mês que ele quer consultar. Após a sua resposta exiba o nome do mês e a quantidade de dias que ele possui. 19. Receba do usuário duas matrizes de mesmo tamanho. Crie uma terceira matriz que será o resultado da soma da primeira pela segunda. Em seguida exiba esta matriz da soma. 20. Altere o problema do consumo de energia dos apartamentos de um prédio (primeiro exercício) para que o registro de consumo possa ser mensal ao longo de um ano. Dica: organize as informações numa matriz tridimensional. Lista de exercícios 05 – Programação I – Engenharia de Petróleo – 2012/1 – página 3 / 4 21. Crie a seguinte matriz quadrada. O tamanho da matriz é informado pelo usuário. 1 1 1 1 1 1 1 1 2 2 2 2 2 1 1 2 3 3 3 2 1 1 2 3 4 3 2 1 1 2 3 3 3 2 1 1 2 2 2 2 2 1 1 1 1 1 1 1 1 22. Receba uma lista de nomes e coloque-os em ordem alfabética. Dica: use a função ‘strcmp’ da biblioteca ‘string.h’ para comparar alfabeticamente os nomes. A função strcmp recebe dois argumentos string e retorna zero se os dois forem iguais, um numero negativo se o primeiro é menor que o segundo e número positivo se o primeiro é maior do que o segundo. Use também a função ‘strcpy’ para copiar (duplica) uma string (vetor de caracteres) de um lugar para outro. O primeiro argumento é o vetor que irá receber os caracteres e o segundo argumento é o vetor que irá fornecer os caracteres. Obs.: o operador de atribuição ‘=’ não tem capacidade de copiar strings (vetor de caracteres), ele só copia um elemento por vez, tal como um número ou um caractere. 23. Valide uma matriz que representa um Sudoku de 9x9 (se você ainda não conhece este jogo, experimente em: http://sudoku.hex.com.br/). Para isto, indique ao usuário se existem os erros descritos: ERRO LINHA – quando houver repetição de números em uma das 9 linhas. ERRO COLUNA – quando houver repetição de números em uma das 9 colunas. ERRO SUB-MATRIZ – quando houver repetição de números em uma das 9 sub-matrizes 3x3. Sugestão para facilitar a entrada de dados dos 81 números quando for testar o programa: faça uma inicialização da matriz com zeros, para indicar que a posição ainda não está preenchida, e depois coloque os outros números usando diretamente código de programa, por exemplo: Exemplo: m[0][0] m[0][1] m[2][1] m[3][1] m[3][4] ... = = = = = 5; 7; 8; 7; // neste caso há um erro na coluna 1 (repetição do número 7) 9; Outra opção é você entrar com todo o quadro de números. Veja um exemplo de entrada completa para um sudoku válido: m[9][9] = { {9,6,3,1,7,4,2,5,8}, {1,7,8,3,2,5,6,4,9}, {2,5,4,6,8,9,7,3,1}, {8,2,1,4,3,7,5,9,6}, {4,9,6,8,5,2,3,1,7}, {7,3,5,9,6,1,8,2,4}, {5,8,9,7,1,3,4,2,4}, {5,8,9,7,1,3,4,6,2}, {3,1,7,2,4,6,9,8,5}, {6,4,2,5,9,8,1,7,3}}; Lista de exercícios 05 – Programação I – Engenharia de Petróleo – 2012/1 – página 4 / 4