Documente Academic
Documente Profesional
Documente Cultură
Efectuat de :
Tintaru Valeria, gr.I1801
Verificat de:
Opinca Carolina, lector universitar
1
Chişinău, 2020
Sarcina laboratorului:
Listing-ul programului:
#include<conio.h>
#include<stdlib.h>
#include<dos.h>
#include<iostream.h>
#include<stdio.h>
#include<assert.h>
class Masiv{
protected:
int l[4],h[4];
int *V;
public:
Masiv(int l1,int h1,int l2,int h2,int l3,int h3,int l4,int h4){
int i,j,k,g;
l[0]=l1; l[1]=l2; l[2]=l3; l[3]=l4;
h[0]=h1; h[1]=h2; h[2]=h3; h[3]=h4;
int NumElem=1;
for(i=0;i<4;i++) NumElem*(h[i]-l[i]+1);
V=new int [NumElem];
FILE *f;
if((f=fopen("d:\\borlandc\\bin\\asdc4.txt","r"))==NULL)
{ cout<<"Eroare de deschidere sau fisierul nu exista!!!";
getch();
exit(0);}
else { clrscr();
cout<<"\nElementele vectorului accesului direct:\n";
int d1,d2,d3,d4,N;
2
d1=1;
d2=(h[0]-l[0]+1)*d1;
d3=(h[1]-l[1]+1)*d2;
d4= (h[2]-l[2]+1)*d3;
int x=0, y=0;
for(int g=l[3], q=0; g<=h[3]; g++,q++){
x=6*(q+1)+7*q;
y=4;
for(int k=l[2];k<=h[2];k++){
for(int j=l[1];j<=h[1];j++){
for(int i=l[0],z=0;i<=h[0];i++,z++)
{gotoxy(x+(z+1)*3,y);
N=(i-l[0])*d1+(j-l[1])*d2+(k-l[2])*d3+(g-l[3])*d4;
fscanf(f,"%d",(V+N));
cout<<*(V+N);
}
y=y+1;
}
y=y+2;
} }
getch();
}
assert(V!=0);
fclose(f);
}
~Masiv(){
delete V;
}
int elem(int i,int j,int k,int g){
int d1,d2,d3,d4,N;
d1=1;
d2=(h[0]-l[0]+1)*d1;
d3=(h[1]-l[1]+1)*d2;
d4=(h[2]-l[2]+1)*d3;
N=(i-l[0])*d1+(j-l[1])*d2+(k-l[2])*d3+(g-l[3])*d4;
return(V[N]);
}
int elem1(int i,int j,int k,int g){
int d1,d2,d3,d4,N;
d1=1;
d2=(h[0]-l[0]+1)*d1;
d3=(h[1]-l[1]+1)*d2;
d4=(h[2]-l[2]+1)*d3;
N=(i-l[0])*d1+(j-l[1])*d2+(k-l[2])*d3+(g-l[3])*d4;
return(N);
}
};
class Vector{
protected:
3
int *V,N;
int *P;
public:
Vector(int l1,int h1,int l2,int h2,int l3,int h3,int l4,int h4){
int i,j,k,g,d1,d2,d3,d4;
P=new int[15];
d1=1;
d2=(h1-l1+1)*d1;
d3=(h2-l2+1)*d2;
d4=(h3-l3+1)*d3;
P[0]=4;
P[1]=l1; P[2]=h1;
P[3]=l2; P[4]=h2;
P[5]=l3; P[6]=h3;
P[7]=l4; P[8]=h4;
P[9]=(h1-l1+1)*(h2-l2+1)*(h3-l3+1)*(h4-l4+1);
P[10]=d1; P[11]=d2;
P[12]=d3; P[13]=d4;
P[14]=l1*d1+l2*d2+l3*d3+l4*d4;
V=new int[P[9]];
FILE *f;
if((f=fopen("d:\\borlandc\\bin\\asdc4.txt","r"))==NULL)
{ cout<<"Eroare la deschidere sau nu exista fisierul!!";
getch();
exit(0);}
else {
clrscr();
cout<<"\nElementele vectorului definitor:\n";
int x=0,y=0;
for(int g=P[7],q=0; g<=P[8];g++,q++){
x=6*(q+1)+7*q;
y=4;
for(int k=P[5];k<=P[6];k++){
for(int j=P[3];j<=P[4];j++){
for(int i=P[1],z=0;i<=P[2];i++,z++)
{ gotoxy(x+(z+1)*3,y);
fscanf(f,"%d",(V+i*P[10]+j*P[11]+k*P[12]+g*P[13]-P[14]));
cout<<*(V+i*P[10]+j*P[11]+k*P[12]+g*P[13]-P[14]);}
y=y+1;
}
y=y+2;
}}
getch();}
assert(V!=0);
fclose(f);
}
4
~Vector(){
delete V;
delete P;}
class Iliffe{
protected:
int ****A;
int ***B[3];
int **B1[4],**B2[4],**B3[4];
int
*B4[3],*B5[3],*B6[3],*B7[3],*B8[3],*B9[3],*B10[3],*B11[3],*B12[3],*B13[3],*B14[3],
*B15[3],*B16[3];
int C[108];
public:
Iliffe(int l1,int h1,int l2,int h2,int l3,int h3,int l4,int h4){
int i,j,k,g;
A=B-6;
B[0]=B1+4; B[1]=B2+4; B[2]=B3+4;
FILE *f;
if((f=fopen("d:\\borlandc\\bin\\asdc4.txt","r"))==NULL)
{ cout<<"Eroare de deschidere sau nu exista acest fisier!!!";
5
getch();
exit(0);}
else {
clrscr();
cout<<"\nElementele vectorului Iliffe:\n";
int x=0,y=0;
for(int g=l4,q=0;g<=h4;g++,q++){
x=6*(q+1)+7*q;
y=4;
for(int k=l3;k<=h3;k++){
for(int j=l2;j<=h2;j++){
for(int i=l1,z=0;i<=h1;i++,z++)
{gotoxy(x+(z+1)*3,y);
fscanf(f,"%2d",(*(*(*(A+g)+k)+j)+i));
cout<<*(*(*(*(A+g)+k)+j)+i);}
y=y+1;
}
y=y+2; }
}
getch();
}
assert(C!=0);
fclose(f);
}
~Iliffe(){
delete A;
delete B[3];
delete B1[4],B2[4],B3[4];
delete
B4[3],B5[3],B6[3],B7[3],B8[3],B9[3],B10[3],B11[3],B12[3],B13[3],B14[3],B15[3],B16[
3];
delete C;
}
void main(){
clrscr();
struct time t1,t2,t3,t4,t5,t6;
int l1=-1,h1=2,l2=0,h2=3,l3=-1,h3=2,l4=1,h4=3;
Masiv m1(l1,h1,l2,h2,l3,h3,l4,h4);
Vector m2(l1,h1,l2,h2,l3,h3,l4,h4);
Iliffe m3(l1,h1,l2,h2,l3,h3,l4,h4);
//getch();
int i,j,k,g,N,N1;
double v;
cout<<"\n\n Elementul V[i,j,k,g]\n";
6
do{ cout<<" Introduceti i [-1 .. 2] : ";
cin>>i;
}while((i>h1)||(i<l1));
do{ cout<<" Introduceti j [0 .. 3] : ";
cin>>j;
}while((j>h2)||(j<l2));
do{ cout<<" Introduceti k [-1 .. 2] : ";
cin>>k;
}while((k>h3)||(k<l3));
do{ cout<<" Introduceti g [1 .. 3] : ";
cin>>g;
}while((g>h4)||(g<l4));
//----metoda directa----
for(v=0;v<5000000;v++)
N=m1.elem(i,j,k,g);
N1=m1.elem1(i,j,k,g);
gettime(&t2);
printf("\n Start time %2d : %2d : %2d :
%2d",t1.ti_hour,t1.ti_min,t1.ti_sec,t1.ti_hund);
printf("\n End time %2d : %2d : %2d :
%2d",t2.ti_hour,t2.ti_min,t2.ti_sec,t2.ti_hund);
int h,s;
if((t2.ti_hund-t1.ti_hund)<0){ s=t2.ti_sec-t1.ti_sec-1; h=t2.ti_hund-
t1.ti_hund+100;}
else{s=t2.ti_sec-t1.ti_sec;
h=t2.ti_hund-t1.ti_hund;}
cout<<"\r\n Timpul de acces: "<<t2.ti_min-t1.ti_min<<":"<<s<<":"<<h;
cout<<"\n Elementul ["<<i<<","<<j<<","<<k<<","<<g<<"]="<<N;
cout<<"\n Pozitia este:"<<N1;
gettime(&t3);
for(v=0;v<5000000;v++)
N=m2.elem(i,j,k,g);
N1=m2.elem1(i,j,k,g);
gettime(&t4);
printf("\r\n Start time %2d : %2d : %2d :
%2d",t3.ti_hour,t3.ti_min,t3.ti_sec,t3.ti_hund);
printf("\n End time %2d : %2d : %2d :
%2d",t4.ti_hour,t4.ti_min,t4.ti_sec,t4.ti_hund);
if((t4.ti_hund-t3.ti_hund)<0){ s=t4.ti_sec-t3.ti_sec-1;
h=t4.ti_hund-t3.ti_hund+100;}
else{s=t4.ti_sec-t3.ti_sec; h4=t4.ti_hund-t3.ti_hund;}
cout<<"\n Timpul de acces: "<<t4.ti_min-t3.ti_min<<":"<<s<<":"<<h;
7
cout<<"\n Element ["<<i<<","<<j<<","<<k<<","<<g<<"]="<<N;
cout<<"\n Pozitia este:"<<N1;
//---metoda vectorului Iliffe---
gettime(&t6);
printf("\r\n Start time %2d : %2d : %2d :
%2d",t5.ti_hour,t5.ti_min,t5.ti_sec,t5.ti_hund);
printf("\n End time %2d : %2d : %2d :
%2d",t6.ti_hour,t6.ti_min,t6.ti_sec,t6.ti_hund);
if((t6.ti_hund-t5.ti_hund)<0){ s=t6.ti_sec-t5.ti_sec-1; h=t6.ti_hund-
t5.ti_hund+100;}
else{s=t6.ti_sec-t5.ti_sec; h=t6.ti_hund-t5.ti_hund;}
cout<<"\n Timpul de acces: "<<t6.ti_min-t5.ti_min<<":"<<s<<":"<<h;
cout<<"\n Element ["<<i<<","<<j<<","<<k<<","<<g<<"]="<<N<<"\n";
getch();
}
Rezultatul programului:
8
Concluzii:
Analizind metodele de acces a elementelor masivelor se poate de spus ca cea mai rapida metoda
de acces este metoda accesului cu vectorul Iliffe, mai putin rapida este metoda vectorului defenitor si
cel mai incet lucreaza metoda accesului direct, ceea ce era de asteptat. Am obtinut rezultatul dorit.
Dar din punct de vedere a economisirii spatiului cel mai efectiv este metoda accesului direct,
apoi merge metoda vectorului definitor si cel ce foloseste cel mai mult spatiu este metoda vectorului
Iliffe.
Cel mai comod de folosit este accesul cu metoda vectorului Iliffe, pentru ca lucreaza repede
ceia ce ne permite economisire de timp.