Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 Exemplos 2) Armazenar três nomes em uma matriz. Construir trecho de proteção para evitar problemas durante a execução, impedindo que nomes com mais de 30 caracteres sejam armazenados. Retirar o caracter \n, caso exista. Observe os trechos coloridos: o primeiro evita o armazenamento de nomes com mais de 30 caracteres. Foi usada uma variável de nome lixo com tamanho suficiente para o que propõe. A função strcpy(...) foi usada para copiar o conteúdo de um vetor em outro vetor. O segundo trecho retira o \n que é armazenado na variável, se tiver espaço, devido a função fgets(). 2 3) Armazenar nome de três produtos e os valores de compra e venda. Exibir todos os dados. Relembrando O formato %-30s exibe o nome em 30 colunas, alinhando à esquerda, mesmo que o nome tenha poucos caracteres, possibilitando exibir sob a forma de tabela. 3 4) Construa um programa que armazene números reais em uma matriz de ordem 4 e exiba toda a matriz e os elementos que se encontram na diagonal principal. Vamos analisar o enunciado. a) Matriz de ordem 4 significa dizer que é uma matriz quadrada que tem 4 linhas e 4 colunas. b) Números que se encontram na diagonal principal são aqueles que estão em posições cuja linha é igual à coluna. c) Precisaremos de 2 estruturas de repetição: uma para entrada e outra para saída. d) No trecho de saída, tem um teste para verificar se o valor de L é igual ao valor de c, significando que o elemento se encontra na DP. Saiba mais sobre o assunto lendo o texto abaixo. No estudo da Álgebra das Matrizes, aprendemos alguns conceitos e, um deles, diz respeito à Matriz Quadrada e o que podemos "extrair" dela. Nesse texto, disponibilizamos todas as relações existentes entre os elementos e suas posições dentro da matriz, tendo em vista às diagonais Principais e Secundárias. Foi definida uma constante TAM para que você possa alterar para o tamanho que desejar e declarada uma matriz de nome mat e do tipo int, mas você poderá alterar para o tipo float, mas não se esqueça do especificador de formato %f. Além disso, coloque o Título de acordo com sua escolha assim como a condição. #include <stdio.h> #include <stdlib.h> #define TAM 4 int main() { int L, c, mat[TAM][TAM]; Condição Em relação à Diagonal Principal (DP) (L == c) só diagonal 4 /* Entrada */ for(L=0; L<TAM; L++) { for(c=0; c<TAM; c++) { printf("Linha %d coluna %d: ",L+1,c+1); scanf("%d", &mat[L][c]); } } /* Saida */ printf("\n\nTodos Elementos\n\n"); for(L=0; L<TAM; L++) { for(c=0; c<TAM; c++) printf("%3d\t", mat[L][c]); printf("\n\n"); } printf("\nTITULO\n\n"); for(L=0; L<TAM; L++) { for(c=0; c<TAM; c++) if(condição) printf("%3d\t", mat[L][c]); else printf("\t"); printf("\n\n"); } printf("\n"); system("pause"); } (L != c) todos menos a diagonal (L < c) elementos acima da diagonal (L > c) elementos abaixo da diagonal Em relação à Diagonal Secundária (DS) (L + c == TAM -1) só diagonal (L + c != TAM -1) todos menos a diagonal (L + c < TAM -1) elementos acima da diagonal (L + c > TAM -1) elementos abaixo da diagonal 5 6 5) Construa um programa que armazene números reais em uma matriz de dimensões 2 x 3. Gere a matriz transposta e exiba as duas matrizes. Analisando o enunciado: a) Matriz transposta é a matriz que se obtém trocando a linha por coluna. b) Uma estrutura do for para entrada e, nessa estrutura, um comando de atribuição para gerar a transposta. c) Dois trechos de saída. 7 6) Construa um programa que armazene números reais em uma matriz de dimensões 2 x 3. Gere a matriz tripla e exiba as duas matrizes. Matriz tripla é a matriz resultante do produto do escalar 3 por cada elemento da matriz. A matriz gerada tem as mesmas dimensões da matriz original. 8 7) Sr. João gostaria de fazer um programa que simulasse uma planilha do Excel. Ele sabe que só nas aulas 9 e 10 aprenderá a armazenar mês a mês e salvar os dados. Ele resolveu criar 2 matrizes de char para armazenar os meses (controle semestral) e os nomes das despesas, uma vez que ele incluiu todas. São 6 tipos de despesas. Seu principal objetivo é saber quanto gasta por mês e quando gasta por semestre com cada despesa. Só para concretizar o que Sr. João deseja fazer, observe as figuras a seguir e leia o texto Soma Linha Soma Coluna para que possa entender cada trecho do código. É um exemplo importante no que diz respeito à aplicação de matrizes bidimensionais. 9 10 Matrizes somaLinha e somaColuna Matriz somaLinha É uma matriz unidimensional(vetor ou matriz coluna) que terá tantas linhas quantas forem as linhas da matriz original e cada elemento será a soma de todos os elementos da linha correspondente na matriz original. Em outras palavras, cada elemento é soma de todos os elementos das colunas de uma linha. 1 Inicializando a matriz somaLinha Como é uma matriz de acumuladores precisa ser inicializada. for(L=0; L<tamanhoLinha; L++) somaLinha[L]=0; 2 Gerando a matriz somaLinha for(L=0; L< tamanhoLinha; L++) for(c=0; c< tamanhoColuna; c++) somaLinha[L]+= matrizOriginal [L][c]; 3 Exibindo a matriz somaLinha sozinha for(L=0; L< tamanhoLinha;L++) printf("%...\n",somaLinha[L]) ; Observação: Não se esqueça do especificador de formato. 11 4 Exibindo a matriz somaLinha com a matriz original system("cls"); /*system("clear"); no Linux */ printf("\nMatriz Original com matriz SomaLinha\n\n"); for(L=0; L< tamanhoLinha; L++) { for(c =0; c < tamanhoColuna; c++) printf("%...\t",matrizOriginal[L][c]); printf("%...\n",somaLinha[L]); } Observação: Não se esqueça do especificador de formato. Matriz somaColuna É uma matriz unidimensional(vetor ou matriz linha) que terá tantas colunas quantas forem as colunas da matriz original e cada elemento será a soma de todos os elementos da coluna correspondente na matriz original. Em outras palavras, cada elemento é a soma de todos os elementos das linhas de uma coluna. 1 Inicializando a matriz somaColuna Como é uma matriz de acumuladores precisa ser inicializada. for(c=0; c<tamanhoColuna; c++) somaColuna[c]=0; 2 Gerando a matriz somaColuna for(L=0; L< tamanhoLinha;L++) for(c=0; c< tamanhoColuna;c++) somaColuna[c]+= matrizOriginal [L][c]; 12 3 Exibindo a matriz somaColuna sozinha for(c=0; c < tamanhoColuna; c++) printf("%...\t",somaColuna[c]); printf("\n"); Observação: Não se esqueça do especificador de formato. 4 Exibindo a matriz somaColuna com a matriz original system("cls"); /*system("clear"); no Linux */ printf("\nMatriz Original com matriz SomaColuna\n\n"); for(L=0; L< tamanhoLinha; L++) { for(c =0; c < tamanhoColuna; c++) printf("%...\t",matrizOriginal[L][c]); printf("\n");} for(c=0; c < tamanhoColuna; c++) printf("%...\t",somaColuna[c]); printf("\n"); Observação: Não se esqueça do especificador de formato. No exemplo da aula 7 on-line, o tamanho linha e o tamanho coluna eram idênticos e, por essa razão, algumas simplificações foram possíveis. Refaço simplificando o exemplo e usando alguns dos trechos apresentados nesse texto. #include <stdio.h> #include <stdlib.h> int main() { int L,c; float valores[3][2], somaMes[2], somaSem[3]; char despesasNomes[][15]={"faculdade", "telefone", "gasolina"},mes[][8]={"jan", "fev"}; /*Inicialização*/ for(L=0; L < 3 ; L++) 13 somaSem[L]=0; /*Inicialização*/ for(c=0; c < 2 ; c++) somaMes[0]=0; /*Entrada*/ for(L=0; L < 3 ; L++) { printf("\n%s\n", despesasNomes[L]); for(c=0; c < 2 ; c++) { printf("%s: ",mes[c]); scanf("%f", &valores[L][c]); somaMes[c] += valores[L][c]; /*acumula para o mes*/ somaSem[L] += valores[L][c]; /*acumula para o semestre*/ } } /*Saida*/ printf("\n\n\t\tjan\tfev\tTotalS"); for(L=0; L<3; L++) { printf("\n%-15s", despesasNomes[L]); for(c=0; c < 2 ; c++) printf("\t%7.2f",valores[L][c]); printf("\t%7.2f",somaSem[L]); } printf("\n\t"); for(c=0; c<2; c++) printf("\t%7.2f",somaMes[c]); printf("\n\n"); system("pause"); } 14 Apresento mais um exemplo que considero básico em termos didáticos porque uso os nomes dos trechos desse texto. #include <stdio.h> #include <stdlib.h> #define TL 4 #define TC 3 int main() { int L,c; float valores[TL][TC], somaColuna[TC], somaLinha[TL]; /*Inicialização da SomaColuna*/ for(c=0; c < TC ; c++) somaColuna[c]=0; /*Inicialização da SomaLinha*/ for(L=0; L < TL ; L++) somaLinha[L]=0; 15 /*Entrada e geração de somaLinha e somaColuna*/ for(L=0; L < TL ; L++) { for(c=0; c < TC ; c++) { printf("Linha %d - Coluna %d: ",L+1, c+1); scanf("%f", &valores[L][c]); somaColuna[c] += valores[L][c]; somaLinha[L] += valores[L][c]; } } /*Saida - matriz e somaLinha juntas */ printf("\n\nCol 1\tCol22\tCol3 3\tTotalS\n"); for(L=0; L<TL; L++) { for(c=0; c < TC ; c++) printf("%7.2f\t",valores[L][c]); printf("%7.2f\n",somaLinha[L]); } printf("\n\n"); /*Saida - matriz somaColuna */ for(c=0; c<TC; c++) printf("%7.2f\t",somaColuna[c]); printf("\n\n"); system("pause"); } 16 17 a07_t13 matrizQuadrada.unlocked Condição matrizQuadrada.unlocked.pdf Condição soma.unlocked.pdf Matriz somaLinha 3 Exibindo a matriz somaLinha sozinha
Compartilhar