Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- //------------------------------------------------------------------------------
- void stampaS(int A[], int riga, int inizio, int fine){
- cout<<"r"<<riga<<":";
- for(int i=inizio;i<fine;i++){
- cout<<A[i]<<" ";
- }
- cout<<endl;
- }
- //------------------------------------------------------------------------------
- int main()
- {
- int n_ele, lim1,lim2, lim3, X[400];
- cin>>n_ele;
- for(int i=0; i<n_ele; i=i+1){
- cin>>X[i];
- }
- cin>>lim1>>lim2>>lim3;
- cout<<"start"<<endl;
- //da fare
- int numStratiPieni=n_ele/(lim2*lim3), numStrati, numElementiRimanenti=(n_ele%(lim2*lim3))%lim3; /*operazioni necessarie per ottenere il numero di strati
- che non sono stati completamente riempiti, inoltre mi permette
- di ottenere gli elementi che rimangono*/
- int numRighePiene=(n_ele%(lim2*lim3))/lim3, inizio=0, fine=lim3, ultimoIndice;
- if(n_ele%(lim2*lim3)==0){ //test che mi permette di verificare se ogni strato è stato riempito per ogni elemento
- numStrati=numStratiPieni;
- }
- else{//se non è verificata la prima condizione allora vuol dire che c'è un ulteriore strato che è stato riempito solo parzialmente
- numStrati=numStratiPieni+1;
- }
- if(n_ele>lim1*lim2*lim3){ //condizione necessaria nel caso in cui si inseriscono più elementi di quelli che sono i limiti inseriti successivamente
- numStrati=lim1;
- }
- for(int i=0;i<numStrati;i++){ //ciclo che separa l'array in strati richiamando la funzione stampaS
- cout<<"strato"<<i<<endl;
- if(i<numStratiPieni && inizio<fine){//considera tutti i casi in cui gli strati siano riempiti fino alla fine
- for(int j=0; j<lim2;j++){ //delimita l'inizio e la fine di ogni riga da stampare
- stampaS(X,j,inizio,fine);
- inizio=fine;
- fine=inizio+lim3;
- }
- }
- else{//considera gli strati rimasti non completamente riempiti
- for(int j=0; j<numRighePiene;j++){
- stampaS(X,j,inizio,fine);
- inizio=fine; //sposta l'inizio alla fine del segmento precedente
- fine=inizio+lim3; //sposta la fine in base alla dimensione del limite3 che indica la lunghezza delle colonne
- ultimoIndice=j+1; //prende l'indice dell'ultima riga stampata
- }
- stampaS(X,ultimoIndice,(n_ele-numElementiRimanenti),n_ele); //stampa l'ultima riga rimasta con gli elementi rimanenti
- }
- }
- cout<<"end"<<endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement