tambo2199

Matrici e array dinamici

Oct 3rd, 2018 (edited)
154
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ConsoleApplication9.cpp : Questo file contiene la funzione 'main', in cui inizia e termina l'esecuzione del programma.
  2. //
  3.  
  4. #include "pch.h"
  5. #include <iostream>
  6. #include<time.h>
  7. using namespace std;
  8.  
  9. void menu();
  10. int **alloc(int *r, int *c);
  11. int *allocarrayp(int **matrix, int r, int c);
  12. int *allocarrays(int **matrix, int r, int c);
  13. void visualizza(int **matrix, int r, int c, int *arrayp, int *arrays);
  14. int **alloc2(int *r, int *c);
  15. void trasporto(int *arrayp, int *r, int *c, int **matrix2);
  16. void visualizza(int **matrix2, int *r, int *c);
  17. int main()
  18. {
  19.     menu();
  20.     system("pause");
  21.     return 0;
  22. }
  23.  
  24. void menu()
  25. {
  26.     int **matrix = 0;
  27.     int **matrix2 = 0;
  28.     int *arrayp = 0;
  29.     int *arrays = 0;
  30.     int r;
  31.     int c;
  32.     int scelta;
  33.  
  34.     srand(time(NULL));
  35.     do
  36.     {
  37.         system("cls");
  38.         printf("1.carica random una matrice di interi\n2.crea un array con gli elementi della diagonale principale\n3.crea un array con la diagonale secondaria\n4.visualizza matrice e array\n5.creazione matrice grande la meta' rispetto quella iniziale\n6.inserimento elementi diagonale principale nella nuova matrice\n0.esci dal programma\nfai una scelta ");
  39.         scanf_s("%d", &scelta, sizeof(int));
  40.  
  41.         switch (scelta)
  42.         {
  43.         case 1:
  44.             matrix=alloc(&r, &c);
  45.             break;
  46.         case 2:
  47.             arrayp = allocarrayp(matrix, r, c);
  48.             break;
  49.         case 3:
  50.             arrays = allocarrays(matrix, r, c);
  51.             break;
  52.         case 4:
  53.             visualizza(matrix, r, c, arrayp, arrays);
  54.             system("pause");
  55.             break;
  56.         case 5:
  57.             matrix2 = alloc2(&r, &c);
  58.             break;
  59.         case 6:
  60.             trasporto(arrayp, &r, &c, matrix2);
  61.             visualizza(matrix2, &r , &c);
  62.             system("pause");
  63.             break;
  64.         case 0:
  65.             printf("alla prossima\n");
  66.             system("pause");
  67.             break;
  68.         }
  69.     } while (scelta != 0);
  70.  
  71. }
  72.  
  73. int **alloc(int *r, int *c)
  74. {
  75.     int **matrix = 0;
  76.  
  77.     printf("inserisci le righe e le colonne della matrice\n");
  78.     scanf_s("%d", r, sizeof(int));
  79.     *c = *r;
  80.  
  81.     matrix = (int**)malloc(*r * sizeof(int));
  82.  
  83.     for (int i = 0; i < *r; i++)
  84.         matrix[i] = (int*)malloc(*c * sizeof(int));
  85.  
  86.     if (matrix == NULL)
  87.         printf("errore di allocazione\n");
  88.  
  89.     for (int i = 0; i < *r; i++)
  90.     {
  91.         for (int j = 0; j < *c; j++)
  92.         {
  93.             matrix[i][j] = 10 + rand()%50;
  94.         }
  95.     }
  96.  
  97.     return matrix;
  98. }
  99.  
  100. int *allocarrayp(int **matrix, int r, int c)
  101. {
  102.     int *arrayp = 0;
  103.     int cont = 0;
  104.  
  105.     arrayp = (int*)malloc(r * sizeof(int));
  106.  
  107.     if (arrayp == NULL)
  108.         printf("errore di allocazione\n");
  109.  
  110.     for (int i = 0; i < r; i++)
  111.     {
  112.         for (int j = 0; j < c; j++)
  113.         {
  114.             if (i == j)
  115.             {
  116.                 cont++;
  117.                 arrayp[cont - 1] = matrix[i][j];
  118.             }
  119.         }
  120.     }
  121.  
  122.     return arrayp;
  123. }
  124.  
  125. int *allocarrays(int **matrix, int r, int c)
  126. {
  127.     int *arrays = 0;
  128.     int cont = 0;
  129.  
  130.     arrays = (int*)malloc(r * sizeof(int));
  131.  
  132.     for (int i = 0; i < r; i++)
  133.     {
  134.         for (int j = 0; j < c; j++)
  135.         {
  136.             if ((i+j)==(r-1))
  137.             {
  138.                 cont++;
  139.                 arrays[cont - 1] = matrix[i][j];
  140.             }
  141.         }
  142.     }
  143.  
  144.     return arrays;
  145. }
  146.  
  147. void visualizza(int **matrix, int r, int c, int *arrayp, int *arrays)
  148. {
  149.     printf("la matrice e'\n\n");
  150.     for (int i = 0; i < r; i++)
  151.     {
  152.         for (int j = 0; j < c; j++)
  153.         {
  154.             printf("%d ", matrix[i][j]);
  155.         }
  156.         printf("\n");
  157.     }
  158.     printf("\n");
  159.  
  160.     printf("l'array principale e'\n");
  161.     for (int i = 0; i < r; i++)
  162.     {
  163.         printf("%d ", arrayp[i]);
  164.     }
  165.     printf("\n\n");
  166.  
  167.     printf("l'array secondario e'\n");
  168.     for (int i = 0; i < r; i++)
  169.     {
  170.         printf("%d ", arrays[i]);
  171.     }
  172.     printf("\n");
  173. }
  174.  
  175. int **alloc2(int *r, int *c)
  176. {
  177.     int **matrix2 = 0;
  178.  
  179.     int righe = 0;
  180.     int colonne = 0;
  181.  
  182.     righe = *r / 2;
  183.     colonne = righe;
  184.  
  185.     matrix2 = (int**)malloc(righe * sizeof(int));
  186.  
  187.     for(int i = 0; i < *r; i++)
  188.     {
  189.         matrix2[i] = (int*)malloc(colonne * sizeof(int));
  190.     }
  191.  
  192.     if (matrix2 == NULL)
  193.     {
  194.         printf("errore di allocazione\n");
  195.     }
  196.  
  197.     return matrix2;
  198. }
  199.  
  200. void trasporto(int *arrayp, int *r, int *c, int **matrix2)
  201. {
  202.     int cont = 0;
  203.  
  204.     for (int i = 0; i < *r/2; i++)
  205.     {
  206.         for (int j = 0; j < *c/2; j++)
  207.         {
  208.             matrix2[i][j] = arrayp[cont];
  209.             cont++;
  210.         }
  211.     }
  212. }
  213.  
  214. void visualizza(int **matrix2, int *r, int *c)
  215. {
  216.     printf("la seconda matrice e'\n");
  217.     for (int i = 0; i < *r/2; i++)
  218.     {
  219.         for (int j = 0; j < *c/2; j++)
  220.         {
  221.             printf("%d ", matrix2[i][j]);
  222.         }
  223.         printf("\n");
  224.     }
  225. }
RAW Paste Data