Advertisement
wagner-cipriano

Trabalhando com ponteiros para alocação dinâmica de matrizes - Método 1: Alocação única (Linear)

Jun 3rd, 2023
1,268
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.73 KB | Science | 0 0
  1. /*
  2. Trabalhando com ponteiros para alocação ou declaração dinâmica de matrizes
  3. Método 1: Alocação única (Linear)
  4. */
  5. #include <stdio.h>
  6.  
  7. void leMatriz(int *mat, int m, int n);
  8. void imprimeMatriz(int *mat, int m, int n);
  9. void imprimeMatriz_v2(int *mat, int m, int n);
  10.  
  11. int main() {
  12.   int m, n;
  13.   printf("Matriz com ponteiros:\n  Ler e imprimir Matriz\n\nInforme a qtde de linhas e colunas da Matriz: ");
  14.   scanf("%d %d", &m, &n);
  15.   //Declarar matriz
  16.   int mat[m][n];
  17.  
  18.   printf("\nPreencha os dados da matriz: \n");
  19.   leMatriz(mat, m, n);
  20.  
  21.   printf("\n\nDados da matriz usando funcao v1: \n");
  22.   imprimeMatriz(mat, m, n);
  23.  
  24.   printf("Dados da matriz usando funcao v2: \n");
  25.   imprimeMatriz_v2(mat, m, n);
  26.  
  27.   return 0;
  28. }
  29.  
  30. void leMatriz(int *mat, int m, int n) {
  31.   int idx = 0;
  32.   for(int i=0; i<m; i++) {
  33.     for(int j=0; j<n; j++) {
  34.       printf("  m[%d][%d]: ", i, j);
  35.       scanf("%d", &mat[idx]);
  36.       idx++;
  37.     }
  38.   }
  39. }
  40.  
  41. void imprimeMatriz(int *mat, int m, int n) {
  42.     for(int idx=0; idx<m*n; idx++) {
  43.         printf("  %d", mat[idx]);
  44.         //Sempre que acabar uma linha, fazemos o endl
  45.         if((idx+1) % n == 0)
  46.             printf("\n");
  47.     }
  48.     printf("\n");
  49. }
  50.  
  51. void imprimeMatriz_v2(int *mat, int m, int n) {
  52.     for(int i=0; i<m; i++) {
  53.       for(int j=0; j<n; j++) {
  54.         printf("  %d", mat[i*n + j]);
  55.         //Sempre que acabar uma linha, fazemos o endl
  56.         if((i*n + j+1) % n == 0)
  57.             printf("\n");
  58.       }
  59.     }
  60.     printf("\n");
  61. }
  62.  
  63.  
  64. /*
  65. Exemplos de entradas:
  66. 2 3  11 12 13  21 22 23
  67. 4 4  11 12 13 14   21 22 23 24  31 32 33 34    41 42 43 44
  68. 7 2  11 12  21 22  31 32  41 42  51 52  61 62  71 72
  69. 2 9  11 12 13 14 15 16 17 18 19  21 22 23 24 25 26 27 28 29
  70. */
  71.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement