Advertisement
Matteo_Pillon

Esercizio-2 19/03/2019

Mar 19th, 2019
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.62 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3. //------------------------------------------------------------------------------
  4. void stampaS(int A[], int riga, int inizio, int fine){
  5.   cout<<"r"<<riga<<":";
  6.   for(int i=inizio;i<fine;i++){
  7.     cout<<A[i]<<" ";
  8.   }
  9.   cout<<endl;
  10. }
  11. //------------------------------------------------------------------------------
  12. int main()
  13. {
  14.    int n_ele, lim1,lim2, lim3, X[400];
  15.   cin>>n_ele;
  16.   for(int i=0; i<n_ele; i=i+1){
  17.     cin>>X[i];
  18.   }
  19.   cin>>lim1>>lim2>>lim3;
  20.   cout<<"start"<<endl;
  21.   //da fare
  22.   int numStratiPieni=n_ele/(lim2*lim3), numStrati, numElementiRimanenti=(n_ele%(lim2*lim3))%lim3; /*operazioni necessarie per ottenere il numero di strati
  23.                                                                                                     che non sono stati completamente riempiti, inoltre mi permette
  24.                                                                                                     di ottenere gli elementi che rimangono*/
  25.   int numRighePiene=(n_ele%(lim2*lim3))/lim3, inizio=0, fine=lim3, ultimoIndice;
  26.  
  27.   if(n_ele%(lim2*lim3)==0){ //test che mi permette di verificare se ogni strato è stato riempito per ogni elemento
  28.     numStrati=numStratiPieni;
  29.   }
  30.   else{//se non è verificata la prima condizione allora vuol dire che c'è un ulteriore strato che è stato riempito solo parzialmente
  31.     numStrati=numStratiPieni+1;
  32.   }
  33.  
  34.   if(n_ele>lim1*lim2*lim3){ //condizione necessaria nel caso in cui si inseriscono più elementi di quelli che sono i limiti inseriti successivamente
  35.       numStrati=lim1;
  36.   }
  37.  
  38.   for(int i=0;i<numStrati;i++){ //ciclo che separa l'array in strati richiamando la funzione stampaS
  39.     cout<<"strato"<<i<<endl;
  40.     if(i<numStratiPieni && inizio<fine){//considera tutti i casi in cui gli strati siano riempiti fino alla fine
  41.         for(int j=0; j<lim2;j++){ //delimita l'inizio e la fine di ogni riga da stampare
  42.             stampaS(X,j,inizio,fine);
  43.              inizio=fine;
  44.              fine=inizio+lim3;
  45.         }
  46.     }
  47.     else{//considera gli strati rimasti non completamente riempiti
  48.         for(int j=0; j<numRighePiene;j++){
  49.             stampaS(X,j,inizio,fine);
  50.              inizio=fine; //sposta l'inizio alla fine del segmento precedente
  51.              fine=inizio+lim3; //sposta la fine in base alla dimensione del limite3 che indica la lunghezza delle colonne
  52.              ultimoIndice=j+1; //prende l'indice dell'ultima riga stampata
  53.         }
  54.         stampaS(X,ultimoIndice,(n_ele-numElementiRimanenti),n_ele); //stampa l'ultima riga rimasta con gli elementi rimanenti
  55.     }
  56.   }
  57.   cout<<"end"<<endl;
  58.   return 0;
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement