Baixe o app para aproveitar ainda mais
Prévia do material em texto
ECT1203 – 2014.2 6a Lista de Exercícios – Matrizes Prof. Caroline Rocha Importante: considere sempre produzir um programa completo para que o usuário possa testar o código elaborado. Seu programa sempre deverá exibir mensagens para que a utili- zação do mesmo seja simplificada, assim como seu código-fonte deverá estar completamente indentado. Questão 1 Em uma excursão de uma agência de viagem existem quatro ônibus (1, 2 ,3 e 4) e cada ônibus tem 16 cadeiras para passageiros. Faça um programa que realize as reservas dos passageiros baseados no número do ônibus e no número da cadeira (Considere que apenas números válidos serão inseridos). Caso o local esteja vazio, deve ser reservado; caso esteja ocupado, exibir uma mensagem de "Cadeira Ocupada". A cada inserção (bem sucedida ou não), o programa perguntará se usuário quer realizar uma nova reserva ou se deseja finalizar o programa. Questão 2 Dada uma matriz bidimensional de dimensãoM×N , calcular e imprimir a matriz transposta. O usuário deve fornecer os tamanhos da matriz e, em seguida, os elementos da matriz. Observação: M,N ≤ 30; M e N devem ser lidos. Questão 3 Dadas duas matrizes AM×N e BN×K reais, encontrar e escrever uma matriz CM×K obtida pelo produto de A por B. Observação: M ≤ 30, N ≤ 40, K ≤ 50; M,N,K devem ser lidos. Exemplo: [ 1 0 2 −1 3 1 ] × 3 12 1 1 0 = [ (1× 3 + 0× 2 + 2× 1) (1× 1 + 0× 1 + 2× 0) (−1× 3 + 3× 2 + 1× 1) (−1× 1 + 3× 1 + 1× 0) ] = [ 5 1 4 2 ] Questão 4 Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos de cada coluna e a soma dos elementos das diagonais principal e secundária são todas iguais. Dada uma matriz quadrada An×n, verificar se A é um quadrado mágico. Por exemplo, a matriz abaixo é um quadrado mágico.8 0 74 5 6 3 10 2 Questão 5 (a) Escreva uma função que troca o conteúdo de duas variáveis. (b) Escreva uma função que recebe dois inteiros, i e j, uma matriz real Am×n e troca a linha i pela linha j. Utilize a função do item anterior. Questão 6 Faça uma função que preencha todo um vetor recebido como parâmetro com um valor tam- bém passado por parâmetro. Faça o mesmo para uma matriz. Questão 7 Faça uma função somamat() que receba uma matriz como parâmetro e retorne a soma de seus elementos. Questão 8 (a) Faça uma função maximoMatriz() que recebe como entrada um inteiro n, uma matriz inteira An×n e devolve dois inteiros lin e col, tais que o maior elemento de A é dado por A[lin, col]. Exemplo: Se A = 3 7 11 2 8 5 3 4 , então lin = 1 e col = 2. Se o elemento máximo ocorrer mais de uma vez, indique em lin e col qualquer uma das possíveis posições. (b) Faça um programa que, dado um inteiro n e uma matriz quadrada de ordem n, cu- jos elementos são todos inteiros positivos, imprime uma tabela onde os elementos são listados em ordem decrescente, acompanhados da indicação de linha e coluna a que pertencem. Havendo repetições de elementos na matriz, a ordem é irrelevante. Utilize obrigatoriamente a função da parte (a). Questão 9 (POLI 94) Os elementos aij de uma matriz inteira An×n representam os custos de transporte da cidade i para a cidade j. Dados uma matriz de custos An×n e m ≤ 100 itinerários, cada um com k ≤ 30 cidades, calcular o custo total para cada itinerário. Considere n ≤ 100. Por exemplo, dada a matriz abaixo, o custo do itinerário 0 − 3 − 1 − 3 − 3 − 2 − 1 − 0 é a03 + a31 + a13 + a33 + a32 + a21 + a10 = 3 + 1 + 400 + 5 + 2 + 1 + 5 = 417. 4 1 2 3 5 2 1 400 2 1 3 8 7 1 2 5 Questão 10 Escreva um programa que irá indicar o itinerário que um navio deve seguir durante uma viagem. Assuma que o itinerário passa por n portos e cada porto recebe um número entre 0 e n− 1. O valor de n será fornecido pelo usuário do programa, que também deverá fornecer um número entre 0 e n − 1, indicando qual o primeiro porto da viagem. O itinerário deve ser armazenado em uma matriz quadrada n× n, lida do teclado. Cada linha da matriz tem todas as colunas, exceto uma, preenchida com zeros. A coluna que não tem valor zero indica qual é o próximo porto da viagem. Abaixo, mostramos um exemplo de formato para entrada e saída: Entre com o tamanho do itinerário: 4 Entre com o porto inicial da viagem: 3 Entre com a matriz de itinerário 0 0 1 0 0 0 0 1 0 1 0 0 1 0 0 0 O itinerário passa pelos seguintes portos: 3, 0, 2, 1, 3 Considere que os dados fornecidos serão confiáveis. Isto é, somente 0s e 1s; somente um valor 1 por linha; o itinerário é de ida e volta e faz sentido. O itinerário passa por todos os portos e volta ao inicial. Questão 11 Considere o seguinte programa: int main(){ int matriz[5][5]; int i, j; for(i = 0; i < 5; i++) for(j = 0; j < 5; j++) cin >> matriz[i][j]; for(i = 0; i < 5; i++) cout << matriz[i][i] << " "; cout << endl; for(i = 0; i < 5; i++) cout << matriz[i][4-i] << " "; cout << endl; for(i = 0; i < 5; i++) cout << matriz[i][i/2] << " "; cout << endl; return 0; } O que será impresso pelo programa se ele receber os seguintes valores de entrada? 1 2 3 4 5 10 20 30 40 50 100 200 300 400 500 1000 2000 3000 4000 5000 10000 20000 30000 40000 50000 Questão 12 Considere n cidades numeradas de 0 a n−1 que estão interligadas por uma série de estradas de mão única. As ligações entre as cidades são representadas pelos elementos de uma matriz quadrada Ln×n, cujos elementos lij assumem o valor 1 ou 0, conforme exista ou não estrada direta que saia da cidade i e chegue à cidade j. Assim, os elementos da linha i indicam as estradas que saem da cidade i, e os elementos da coluna j indicam as estradas que chegam à cidade j. Por convenção, lii = 1. A matriz abaixo mostra um exemplo para n = 4. L = 1 1 1 0 0 1 1 0 1 0 1 1 0 0 1 1 Dados o valor de n ≤ 100, a matriz Ln×n e um número inteiro k, 0 ≤ k ≤ n − 1, faça um programa para: (a) Determinar quantas estradas saem e quantas chegam à cidade k; (b) Verificar se todas as ligações diretas entre a cidade k e as demais são de mão dupla; (c) Dada uma seqüência de m ≤ 20 inteiros cujos valores estão entre 0 e n− 1, verificar se é possível realizar o roteiro correspondente. No exemplo dado, o roteiro representado pela seqüência 2− 3− 2− 1− 0 (m = 5) é impossível. Questão 13 Uma matriz quadrada A com zeros acima da diagonal principal e elementos não-nulos na diagonal é chamada de matriz triangular inferior (veja exemplo abaixo). Escreva um pro- grama que, dados uma matriz triangular inferior An×n e um vetor b de tamanho n, resolva o sistema de equações lineares Ax = b. L = 1 0 0 0 4 5 0 0 0 3 −2 0 1 1 2 1 Questão 14 Uma imagem pode ser representada por um conjunto de dados bidimensional, ou seja, uma tabela retangular de números, armazenada em uma matriz de valores do tipo double. No entanto, uma imagem pode conter ruídos. Um filtro simples para reduzir o efeito de um ruído destes é baseado na substituição de um elemento da matriz pela média entre ele e os seus elementos vizinhos. Os vizinhos de algumas células típicas de dados são mostrados na figura abaixo: Observe que o número de vizinhos de um elemento da matriz depende da sua localização: muitos elementos possuem oito vizinhos, os elementos nas laterais possuem cinco vizinhos e os elementos nos cantos possuem apenas três. Escreva um programa que realize uma operação de filtragem deste tipo. Você pode realizar uma operação de filtragem da matriz em seu lugar de origem usando apenas o espaço de memória que contém os dados originais ou tem que criar uma segunda matriz para armazenar os dados filtrados? Entrada: O usuário fornecerá o número de linhas m (2 ≤ m ≤ 50) e o número de colunas n (2 ≤ n ≤ 50) da matriz. Em seguida, fornecerá os m × n valores reais da matriz, linha a linha, com precisão de duas casas decimais. Saída: Os dados filtradosda matriz. Questão 15 Crie um programa no qual o usuário digitará uma matriz com dimensões M × N . Para a matriz digitada, imprima na tela os números pares contidos nesta matriz, considerando separá-los por linha. Veja o exemplo para uma matriz 4× 4: 1 2 3 4 5 6 7 8 10 11 23 21 1 2 3 1 A saída correspondente a esta matriz deve ser: 2 4 6 8 10 2 Questão 16 Crie um programa no qual o usuário digitará uma matriz com dimensões M × N . Para a matriz digitada, imprima na tela os números primos de Sophie Germain contidos nesta matriz. Lembre-se, um número primo p é um número primo de Sophie Germain se, e somente se, 2p+ 1 é também um número primo. Para resolver esta questão, considere implementar: (a) Uma função que verifica se um número qualquer dado como parâmetro é um número primo; (b) Uma função que verifica se um número qualquer dado como parâmetro é um número primo de Sophie Germain. Nenhuma das funções descritas acima deverá utilizar o comando cout. Questão 17 Uma matriz qualquer é dita matriz de permutação se atender a todos estes requisitos simul- taneamente: 1. Só contiver elementos de valor 0 e 1; 2. A soma dos elementos de cada uma de suas linhas for igual a 1; 3. A soma dos elementos de cada uma de suas colunas for igual a 1; Veja um exemplo de matriz de permutação: A4×4 = 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 Sua tarefa é cria um programa que solicite ao usuário os valores de uma matriz M × N e verifique se esta é uma matriz de permutação. Questão 18 Melhore o programa desenvolvido na questão anterior de forma que nele haja: (a) Uma função que receba como parâmetros uma matriz e um valor inteiro representando o índice de uma de suas linhas. Esta função deverá retornar a soma dos elementos desta linha; (b) Uma função que receba como parâmetros uma matriz e um valor inteiro representando o índice de uma de suas colunas. Esta função deverá retornar a soma dos elementos desta coluna; (c) Uma função que receba como parâmetro uma matriz. Sua função deverá retornar verdadeiro caso a matriz só contenha elementos de valor 0 e 1, e falso caso con- trário; (d) Uma função que receba como parâmetro uma matriz e retorna verdadeiro caso a matriz seja uma matriz de permutação e falso caso contrário. Questão 19 Escreva um programa que receba como entrada uma lista de nomes de N pessoas, incluindo o sobrenome. Seu programa deverá ordenar esta lista em ordem alfabética e exibí-la na tela. Exiba também o nome mais extenso e o mais curto presente nesta lista. Questão 20 O ponto de sela de uma matriz é um elemento pertencente a esta matriz que atende simul- taneamente aos seguintes critérios: 1. É o maior elemento da linha em que está inserido; 2. É o menor elemento da coluna em que está inserido. Escreva um programa que recebe como entrada uma matriz e mostra ao usuário em qual linha e coluna desta matriz está o ponto de sela, se este existir. Exiba também o valor deste elemento. Questão 21 Melhore o programa anterior de modo que nele exista uma função que recebe como parâmetro uma matriz e retorna em qual linha e coluna está seu ponto de sela, assim como seu valor. Caso não exista um ponto de sela, os valores retornados deverão ser iguais a −1. Questão 22 Dada uma matriz AN×N = [aij]N×N , seu traço pode ser calculado como: tr(A) = N∑ i=1 aii Escreva uma função que calcula o traço de uma matriz qualquer. Questão 23 Escreva um programa que verifica se um vetor x é a solução de um sistema de equações lineares Ax = b. A, x e b deverão ser informados pelo usuário, assim como suas respectivas dimensões. Questão 24 Uma matriz é dita esparsa quando a maioria de seus elementos é igual a 0. Sua tarefa é criar uma função que verifica se uma matriz dada como parâmetro é uma matriz esparsa. Considere no seu programa que no mínimo 70% dos elementos desta matriz precisam ser nulos para que a matriz seja considerada esparsa. Questão 25 Escreva um programa que gera uma matriz com valores aleatórios entre 0 e 100 de forma que não existam números repetidos. Questão 26 Escreva uma função que ordena cada uma das linhas de uma matriz dada como parâmetro de forma independente. Considere criar uma função que ordena um vetor como função auxiliar para resolver este problema.
Compartilhar