310 likes | 416 Views
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013. Capítulo VII Variáveis Indexadas Numéricas. Classificação das variáveis:. Escalares. Homogêneas – Variáveis Indexadas (arrays – em inglês). Variáveis. Estruturadas. Heterogêneas – Estruturas (structs – em inglês).
E N D
CES-10 INTRODUÇÃO À COMPUTAÇÃOAulas Práticas – 2013 Capítulo VII Variáveis Indexadas Numéricas
Classificação das variáveis: Escalares Homogêneas – Variáveis Indexadas (arrays – em inglês) Variáveis Estruturadas Heterogêneas – Estruturas (structs – em inglês)
A declaração em C int A[9]; reserva na memória espaço contíguo de 9 inteiros para os 9 elementos da variável A: • Então, A é uma variável indexada de 9 elementos do tipo int • Em C, os índices de toda variável indexada são numerados a partir de 0 (zero) A[0], A[1],A[2], A[3], A[4], A[5], A[6], A[7], A[8]
A variável A da declaração anterior tem apenas um índice • Por essa razão ela é denominada variável indexada unidimensional ou matriz unidimensional ou simplesmente vetor • Supondo que o conteúdo dos elementos da variável A seja: A[0] = 35 A[1] = 14 A[2] = 7 A[3] = 87 A[4] = 2 A[5] = 21 A[6] = 14 A[7] = 63 A[8] = 16 • Então, esta variável pode ter a seguinte representação gráfica: A
Variáveis indexadas podem ser multidimensionais • Por exemplo, pelas declarações em C int M[7][10]; float X[4][8][5]; M é uma variável indexada bidimensional ou matriz bidimensional ou simplesmente matriz de 7 linhas por 10 colunas de elementos do tipo int X é uma matriz tridimensional de 4 x 8 x 5 elementos do tipo float
M • Seja a seguinte representação gráfica da matriz M(7x10) de elementos do tipo int: • Nesta representação, por exemplo, M[0][9] = 81; M[3][5] = -108; M[1][8] = -83;
Programa 7.1: Vetor de 10 elementos nulos #include <stdio.h> #include <conio.h> void main () { int i, V[10] = {0}; printf ("Vetor de 10 elementos nulos: "); printf ("\n\nDigite algo: "); getch (); printf ("\n\n"); for (i = 0; i <= 9; i++) printf ("%4d", V[i]); printf ("\n\nDigite algo para encerrar: "); getch (); } i varia de 0 a 9, escrevendo na mesma linha os valores de: V[0], V[1], ... , V[9] 0 0 0 0 0 1 2 9 Copiar, salvar e executar V
Programa 7.2: Vetor de n elementos nulos #include <stdio.h> #include <conio.h> void main () { int i, n, V[10]; printf ("Vetor de n elementos nulos:\n"); do { printf ("\nDigite n (<= 10): "); scanf ("%d", &n); } while (n < 1 || n > 10); for (i = 0; i <= n-1; i++) V[i] = 0; printf ("\n"); for (i = 0; i <= n-1; i++) printf ("%4d", V[i]); printf ("\n\nDigite algo para encerrar: "); getch (); } 0 0 0 0 1 n-1 9 V Copiar, salvar e executar
Programa 7.3: Vetor de n elementos 5 #include <stdio.h> #include <conio.h> void main () { int i, n, V[10]; printf ("Vetor de n elementos nulos:\n"); do { printf ("\nDigite n (<= 10): "); scanf ("%d", &n); } while (n < 1 || n > 10); for (i = 0; i <= n-1; i++) V[i] = 5; printf ("\n"); for (i = 0; i <= n-1; i++) printf ("%4d", V[i]); printf ("\n\nDigite algo para encerrar: "); getch (); } 5 5 5 0 1 n-1 9 V Copiar, salvar e executar
Programa 7.4: Leitura e escrita de vetor #include <stdio.h> #include <conio.h> void main () { int i, n, V[10]; printf ("Leitura e escrita de vetor\n\n"); do { printf ("\nDigite o n.o de elementos (<= 10): "); scanf ("%d", &n); } while (n < 1 || n > 10); printf ("\n\n"); for (i = 0; i <= n-1; i++) { printf ("Elemento %d: ", i); scanf ("%d", &V[i]); } printf ("\n\nVetor V:\n\n"); for (i = 0; i <= n-1; i++) printf ("%4d", V[i]); printf ("\n\nDigite algo para encerrar: "); getch (); } 0 1 n-1 9 V Copiar, salvar e executar
Para i = 0 j varia de 0 a 9, escrevendo na mesma linha os valores de: A[0][0], A[0][1], ... , A[0][9] Depois o cursor do vídeo vai para a linha seguinte Para i = 1 j varia de 0 a 9, escrevendo na mesma linha os valores de: A[1][0], A[1][1], ... , A[1][9] Depois o cursor do vídeo vai para a linha seguinte Para i = 2 j varia de 0 a 9, escrevendo na mesma linha os valores de: A[2][0], A[2][1], ... , A[2][9] Depois o cursor do vídeo vai para a linha seguinte E assim por diante, para i = 9 j varia de 0 a 9, escrevendo na mesma linha os valores de: A[9][0], A[9][1], ... , A[9][9] Programa 7.5: Matriz 10 x 10 nula #include <stdio.h> #include <conio.h> void main () { int A[10][10] = {0}, i, j; printf ("Matriz quadrada 10x10 nula: "); printf ("\n\nDigite algo: "); getch (); printf ("\n\n"); for (i = 0; i <= 9; i++) { for (j = 0; j <= 9; j++) printf ("%4d", A[i][j]); printf ("\n"); } printf ("\n\nDigite algo para encerrar: "); getch (); } 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2 9 0 1 2 Copiar, salvar e executar 9 A
Programa 7.6: Matriz m x n nula #include <stdio.h> #include <conio.h> void main () { int A[10][10], i, j, m, n; printf ("Matriz m x n nula:\n"); do { printf ("\nDigite m e n (<= 10): "); scanf ("%d%d", &m, &n); } while (m < 1 || m > 10 || n < 1 || n > 10); for (i = 0; i <= m-1; i++) for (j = 0; j <= n-1; j++) A[i][j] = 0; printf ("\n"); for (i = 0; i <= m-1; i++) { for (j = 0; j <= n-1; j++) printf ("%4d", A[i][j]); printf ("\n"); } printf ("\n\nDigite algo para encerrar: "); getch (); } Copiar, salvar e executar 0 0 0 0 0 0 0 1 n-1 9 0 1 0 0 0 A m-1 9
Copiar, salvar e executar Programa 7.7: Matriz n x n diagonal #include <stdio.h> #include <conio.h> void main () { int A[10][10], i, j, n; printf ("Matriz n x n diagonal:\n"); do { printf ("\nDigite n (<= 10): "); scanf ("%d", &n); } while (n < 1 || n > 10); for (i = 0; i <= n-1; i++) for (j = 0; j <= n-1; j++) A[i][j] = 0; for (i = 0; i <= n-1; i++) A[i][i] = 7; printf ("\n"); for (i = 0; i <= n-1; i++) { for (j = 0; j <= n-1; j++) printf ("%4d", A[i][j]); printf ("\n\n"); } printf ("\n\nDigite algo para encerrar: "); getch (); } 7 0 0 7 0 0 0 1 n-1 9 0 1 0 0 7 A m-1 9
Exercício 7.1: Colocar o número 27 na diagonal, na primeira e última linha e na primeira e última coluna • Exemplo: Matriz n x n moldura: Digite n (<= 10): 7 27 27 27 27 27 27 27 27 27 0 0 0 0 27 27 0 27 0 0 0 27 27 0 0 27 0 0 27 27 0 0 0 27 0 27 27 0 0 0 0 27 27 27 27 27 27 27 27 27
Exercício 7.2: Colocar o número 82 da diagonal principal para baixo, obtendo uma matriz triangular inferior • Exemplo: Matriz n x n triangular inferior: Digite n (<= 10): 6 82 0 0 0 0 0 82 82 0 0 0 0 82 82 82 0 0 0 82 82 82 82 0 0 82 82 82 82 82 0 82 82 82 82 82 82
Triangulo de Pascal: Dimensao (<= 10): 8 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 Triangulo de Pascal: Dimensao (<= 10): 7 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 Exercício 7.3: Obter um triangulo de Pascal • Exemplos: Os elementos acima da diagonal principal não são inicializados nem escritos Os elementos abaixo da diagonal principal, exceto os da 1ª coluna, são dados por: A[i][j] = A[i-1][j-1] + A[i-1][j] Os elementos da 1ª coluna e da diagonal principal são iguais a 1
Programa 7.8: Leitura e escrita de matriz #include <stdio.h> #include <conio.h> void main () { int A[10][10], m, n, i, j; printf ("Leitura e escrita de matriz\n\n"); do { printf ("\nDimensoes m e n (<= 10): "); scanf ("%d%d", &m, &n); } while (m < 1 || m > 10 || n < 1 || n > 10); printf ("\n\n"); for (i = 0; i <= m-1; i++) { printf ("%d elementos da linha %d: ", n, i); for (j = 0; j <= n-1; j++) scanf ("%d", &A[i][j]); } printf ("\n\nMatriz A:\n\n"); for (i = 0; i <= m-1; i++) { for (j = 0; j <= n-1; j++) printf ("%4d", A[i][j]); printf ("\n\n"); } printf ("\n\nDigite algo para encerrar: "); getch (); } Copiar, salvar e executar
Programa 7.9: Leitura e escrita de matriz quadrada #include <stdio.h> #include <conio.h> void main () { int A[10][10], n, i, j; printf ("Leitura e escrita de matriz quadrada\n\n"); do { printf ("\nDimensao n (<= 10): "); scanf ("%d", &n); } while (n < 1 || n > 10); printf ("\n\n"); for (i = 0; i <= n-1; i++) { printf ("%d elementos da linha %d: ", n, i); for (j = 0; j <= n-1; j++) scanf ("%d", &A[i][j]); } printf ("\n\nMatriz A:\n\n"); for (i = 0; i <= n-1; i++) { for (j = 0; j <= n-1; j++) printf ("%4d", A[i][j]); printf ("\n\n"); } printf ("\n\nDigite algo para encerrar: "); getch (); } Copiar, salvar e executar
Exercício 7.4: Aumentar o Programa 7.9 para montar e escrever um vetor de números inteiros contendo o valor absoluto do maior elemento em valor absoluto de cada linha da matriz A • Exemplo: seja a seguinte matriz 5x5 de entrada: -17 21 2 -8 -57 -1 64 -272 791 7 -100 14 17 33 -10 0 2 55 87 0 81 21 2 0 27
Saída para a matriz quadrada anterior de entrada: Matriz A: Elementos Maior -------------------------------------------------------- Lin 0: -17 21 2 -8 -57 57 Lin 1: -1 64 -272 791 7 791 Lin 2: -100 14 17 33 -10 100 Lin 3: 0 2 55 87 0 87 Lin 4: 81 21 2 0 27 81 --------------------------------------------------------
Exercício 7.5: Aumentar o programa do Exercício 7.4 para montar e escrever um vetor de números reais contendo a raiz quadrada dos módulos dos elementos da diagonal principal da matriz A • Exemplo: Saída para a matriz quadrada anterior de entrada: Matriz A: Elementos Maior -------------------------------------------------------- Lin 0: -17 21 2 -8 -57 57 Lin 1: -1 64 -272 791 7 791 Lin 2: -100 14 17 33 -10 100 Lin 3: 0 2 55 87 0 87 Lin 4: 81 21 2 0 27 81 -------------------------------------------------------- RaizQ: 4.12 8.00 4.12 9.33 5.20
Exercício 7.6: Aumentar o programa do Exercício 7.5 para montar e escrever um vetor de números reais contendo a média aritmética dos elementos de cada coluna da matriz A • Exemplo: Saída para a matriz quadrada anterior de entrada: Matriz A: Elementos Maior -------------------------------------------------------- Lin 0: -17 21 2 -8 -57 57 Lin 1: -1 64 -272 791 7 791 Lin 2: -100 14 17 33 -10 100 Lin 3: 0 2 55 87 0 87 Lin 4: 81 21 2 0 27 81 -------------------------------------------------------- RaizQ: 4.12 8.00 4.12 9.33 5.20 Media: -7.40 24.40 -39.20 180.60 -6.60
Exercício 7.7: Aumentar o programa do Exercício 7.6 para montar e escrever um vetor de números reais contendo o desvio padrão dos elementos de cada linha da matriz A • Exemplo: Saída para a matriz quadrada anterior de entrada: Matriz A: Elementos Maior Desvio ------------------------------------------------------------------ Lin 0: -17 21 2 -8 -57 57 25.89 Lin 1: -1 64 -272 791 7 791 356.21 Lin 2: -100 14 17 33 -10 100 47.44 Lin 3: 0 2 55 87 0 87 35.92 Lin 4: 81 21 2 0 27 81 29.34 ------------------------------------------------------------------ RaizQ: 4.12 8.00 4.12 9.33 5.20 Media: -7.40 24.40 -39.20 180.60 -6.60
Exercício 7.7: Aumentar o programa do Exercício 7.6 para montar um vetor de números reais contendo o desvio padrão dos elementos de cada linha da matriz A • Fórmula do desvio padrão S dos elementos de um vetor V de n elementos: • Vmediaé a média aritmética dos n elementos de V
Exercício 7.8: Aumentar o programa do Exercício 7.7 para montar e escrever outra matriz B de inteiros e de dimensões iguais às da matriz A, contendo os elementos de destaque da matriz A • Um elemento de destaque numa matriz é um elemento tal que seu valor absoluto é maior que os valores absolutos de todos os seus vizinhos • Os elementos da matriz que não pertencem nem à sua primeira nem à sua última linha ou coluna têm 8 vizinhos • Os elementos da primeira e última linha e coluna têm menos de 8 vizinhos
Exemplo: seja a matriz quadrada anterior • Os vizinhos de A[1][3] são: A[0][2], A[0][3], A[0][4], A[1][2], A[1][4], A[2][2], A[2][3], A[2][4] • A[1][3] = 791 é um elemento de destaque
Exemplo: seja a matriz quadrada anterior • Os vizinhos de A[2][0] são A[1][0], A[1][1], A[2][1], A[3][0], A[3][1] • A[2][0] = -100 é um elemento de destaque
Exemplo: seja a matriz quadrada anterior • Os vizinhos de A[4][4]) são = A[3][3], A[3][4], A[4][3] • A[4][4] = 27 não é um elemento de destaque
Exemplo: seja a matriz quadrada anterior • Seus elementos de destaque Se A[i][j] for elemento de destaque B[i][j] = A[i][j] Senão B[i][j] = 0 Para montar a matriz B
Exercício 7.9: Alterar o programa do Exercício 7.8 para fazer a leitura da matriz e sua escrita usando arquivos em disco • Isto será visto em aulas teóricas • No Lab 7, o programa deverá fazer a leitura da matriz e sua escrita usando arquivos em disco • Neste caso, como não haverá interação com o operador, a leitura de dados não precisa ser amigável, mas a tela de execução deve • Exibir um título e • Indicar os arquivos onde se encontram a matriz de entrada e os resultados (ver próximo slide)