NeroReflex

Esercizio_1_13_4_2016

Apr 18th, 2016
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.48 KB | None | 0 0
  1. #include<iostream>
  2. #include<fstream>
  3. using namespace std;
  4. struct E{char T; int fetta, indice; const char* tipo;
  5. E(char a=0, int b=0, int c=0, const char* d=0){T=a; fetta=b; indice=c; tipo=d;}
  6. };
  7.  
  8. int& FH (int*X, int lim1, int lim2, int lim3, int n_el, int f, int i);
  9. int& FV (int*X, int lim1, int lim2, int lim3, int n_el, int f, int i);
  10.  
  11. main()
  12. {
  13.  int X[400], lim1, lim2, lim3, n_el, f,indice;
  14.  cin>>lim1>>lim2>>lim3>>n_el;
  15.  for(int i=0; i<n_el; i++)
  16.   cin>>X[i];
  17.  if(n_el > lim1*lim2*lim3)
  18.    n_el=lim1*lim2*lim3;
  19.  for(int i=0; i<4; i++)
  20.  {
  21.  try{
  22.   cin>> f>>indice;
  23.   int&a=FH(X,lim1,lim2,lim3,n_el, f, indice);// da fare
  24.   a=100+f;
  25.   int& b=FV(X,lim1,lim2,lim3,n_el, f, indice); //da fare
  26.   b=100+f;
  27. }    
  28.   catch(E e)
  29.    {cout<<e.T<<"-fetta "<<e.fetta<<" indice="<<e.indice<<' '<<e.tipo<<endl;}
  30.  
  31.  
  32.  }
  33.   for (int i=0; i<n_el; i++)
  34.   {
  35.     if(!(i%lim3))
  36.      cout<< endl;
  37.     cout<<X[i]<<' ';
  38.    
  39.   }
  40.    cout<<endl<<"end";
  41. }
  42.  
  43. int& FH (int*X, int lim1, int lim2, int lim3, int n_el, int f, int i) {
  44.     //una H-fetta contiene lim3 elementi moltiplicato il numero di strati,
  45.     //quindi i varia fra 0 <= i <= lim3*lim1
  46.     int indice = i % lim3, strato = i / lim3; //separo indice dell-elemento nella H-fetta dallo strato della H-fetta
  47.     //trovo in che strato si trova i, trovo la posizione dell,elemento richiesto nello strato e la chiamo indice (0 <= indice <= lim3)
  48.    
  49.     //puo' succedere che: sono fuori indice (caso 2), sono in un elemento non riempito (caso 3) o sono in un elemento valido (utilizzando un indice valido, caso 1)
  50.     if (((strato < lim1) && (f < lim2) && (indice < lim3)) && (((strato * lim2 * lim3) + (f * lim3) + indice) < n_el)) {
  51.         return *(X+((strato * lim2 * lim3) + (f * lim3) + indice));
  52.     } else if ((strato >= lim1) || (f >= lim2) || (indice >= lim3)) {
  53.         throw E('H', f, i, "elemento non esiste");
  54.     } else {
  55.         throw E('H', f, i, "elemento indefinito");
  56.     }
  57. }
  58.  
  59. //funziona con la stessa logica di FH
  60. int& FV (int*X, int lim1, int lim2, int lim3, int n_el, int f, int i) {
  61.     int strato = i / lim2, indice = i % lim2;
  62.    
  63.     if (((strato < lim1) && (indice < lim2) && (f < lim3)) && (((strato * lim2 * lim3) + (indice * lim3) + f) < n_el)) {
  64.         return *(X+((strato * lim2 * lim3) + (indice * lim3) + f));
  65.     } else if ((strato >= lim1) || (indice >= lim2) || (f >= lim3)) {
  66.         throw E('V', f, i, "elemento non esiste");
  67.     } else {
  68.         throw E('V', f, i, "elemento indefinito");
  69.     }
  70. }
Advertisement
Add Comment
Please, Sign In to add comment