Advertisement
Aurox_

Untitled

Nov 16th, 2023
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.74 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. #define STRLEN 1024
  6. #define MAX_ROWS 64 //numero massimo di righe (se è 10, 10 sarà accettato come input)
  7. #define MAX_COLUMNS 64
  8.  
  9. void main(void)
  10.   {
  11.     char input[STRLEN];
  12.     int **ppmatrice;
  13.     int m,n,i_r,i_c,check,tot,a;
  14.     /********** INPUT **********/
  15.     printf("Ciao, dimmi il numero di righe m per creare una matrice m x n.");
  16.     check=0;
  17.     do
  18.       {
  19.         if(check<1)
  20.           {
  21.             printf("\nNumero di righe: m=");
  22.             scanf("%s",input);
  23.             m=atoi(input);
  24.             if((m<=MAX_ROWS)&&(m>0))
  25.               {
  26.                 printf("Ho ricevuto %d",m);
  27.                 check++;
  28.               }
  29.             else printf("Errore: inserisci un numero intero tra 1 e %d.",MAX_ROWS);
  30.           }
  31.         if(check>=1)
  32.           {
  33.             printf("\nNumero di colonne: n=");
  34.             scanf("%s",input);
  35.             n=atoi(input);
  36.             if((n<=MAX_COLUMNS)&&(n>0))
  37.               {
  38.                 printf("Ho ricevuto %d",n);
  39.                 check++;
  40.               }
  41.             else printf("Errore: inserisci un numero intero tra 1 e %d.",MAX_ROWS);
  42.           }
  43.       }
  44.     while(check<2);
  45.     tot=m*n;
  46.     printf("\nCreero' una matrice %d x %d\n",m,n);
  47.     /********** ALLOCAZIONE MEMORIA ***********/
  48.     ppmatrice=(int**)malloc(sizeof(int*)*m);  //salva in ppmatrice l'indirizzo di un posto dove c'è abbastanza spazio per m puntatori a m righe
  49.     //per creare le colonne, facciamo un for che divida ogni riga in n colonne.
  50.     for(i_c=0;i_c<=n;i_c++)
  51.       {
  52.         *(ppmatrice+i_c)=(int*)malloc(sizeof(int)*n);
  53.       }
  54.     /********** RIEMPIMENTO MATRICE ***********/
  55.     printf("Ora dammi i %d x %d = %d numeri per riempire la matrice\n",m,n,tot);
  56.    
  57.     for(i_r=0;i_r<m;i_r++)
  58.       {
  59.         for(i_c=0;i_c<n;i_c++)
  60.           {
  61.             printf("Elemento di posizione %d,%d: ",i_r+1,i_c+1);
  62.             scanf("%s",input);
  63.             *(*(ppmatrice+i_c)+i_r)=atoi(input);
  64.           }
  65.       }
  66.     /********** STAMPARE MATRICE A SCHERMO **********/
  67.     printf("Ecco la tua matrice:\n");
  68.     for(i_r=0;i_r<m;i_r++)
  69.       {
  70.         for(i_c=0;i_c<n;i_c++)
  71.           {
  72.             a=*(*(ppmatrice+i_c)+i_r);
  73.             if(a<0) printf("%d ",a); //questa distinzione con l'if è utile solo a livello grafico in modo che i numeri negativi siano allineati a quelli positivi
  74.             else printf(" %d ",a); //eventualmenteè possibile cancellare <--- QUESTA <--- riga e rimuove l'if dalla precedente, lasciando solo printf("%d ",a); . Analogamente, la vriabile a non è necessaria in tal caso ed è possibile inserire *(*(ppmatrice+i_c)+i_r) all'interno del printf.
  75.           }
  76.         printf("\n");
  77.       }
  78.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement