E-gradiva > Računalništvo > Programiranje > Upravljanje s programirljivimi napravami > Polja > Primeri programov s polji > Izracun vsote elementov polja z rekurzivno funkcijo > 3-dimenzionalno sortiranje

Prijava

/*
Naloga: Napišite program, katerega vhod je tridimenzionalno
polje z dimenzijami M*N*L, izhod pa polje izpisano po
ploskvah in sortirano po prvi koordinati glede na vsoto elementov ploskve.
*/


#include <iostream>
#include <time.h>

using namespace
std;

void
nakljucnoNapolni(int tabela[][50][50], int visina, int dolzina, int sirina)
{


srand(time(NULL));
for
(int i=0;i<visina;i++)

for
(int j=0;j<dolzina;j++)
for
(int k=0;k<sirina;k++)

tabela[i][j][k]=(rand()%9)+1;
}


void
zamenjaj(int&a, int&b)
{

int
vmesnik = a;

a = b;
b = vmesnik;
}


// Zamenjaj ploskve po prvi koordinati v trodimenzionalnem polju
// VHOD: polje - trodimenzionalno polje
// dolzina - dolžina - druga koordinata
// sirina - sirina - tretja koordinata
// m, n ploskve po prvi kordinati, ki jih zelite zamenjati
// IZHOD: polje - trodimenzionalno polje
void Zamenjaj_polje(int polje[][50][50], int dolzina, int sirina, int m, int n)

{


for
(int d=0;d<dolzina;d++)
for
(int s=0;s<sirina;s++)

zamenjaj(polje[m] [d] [s], polje[m+1] [d] [s]);


}


// Izpiši polje in vsote po prvi koordinati
// VHOD: polje - trodimenzionalno polje
// visina - dolžina - prva koordinata
// dolzina - dolžina - druga koordinata
// sirina - sirina - tretja koordinata
// vsota_ploskve - vsota ploskve po prvi koordinati trodimenzionalnega polja

void
izpisi(int polje[][50][50], int visina, int dolzina, int sirina, int vsota_ploskve[])
{


cout<<"Izpis po ploskvah:"<<endl;

for
(int v=0;v<visina;v++)
{


cout<<endl<<"Ploskva stevilka "<<v << " ";
cout << "Vsota ploskve je: " << vsota_ploskve[v]<<endl;

for
(int d=0;d<dolzina;d++)
{

for
(int s=0;s<sirina;s++)

cout<<polje[v][d][s] << " ";
cout<<endl;
}


cout << endl << endl;

}
}

// Sortiraj polje po prvi koordinati lede na vsoto elementov ploskve.
// VHOD: polje - trodimenzionalno polje
// visina - dolžina - prva koordinata
// dolzina - dolžina - druga koordinata
// sirina - sirina - tretja koordinata
// IZHOD: polje - trodimenzionalno polje

void
sortiraj(int polje[][50][50], int visina, int dolzina, int sirina)
{


// Izraèun vsote polja
int tabelaVsot[50];
for
(int v=0;v<visina;v++)
{


int
vsota=0;
for
(int d=0;d<dolzina;d++)

for
(int s=0;s<sirina;s++)
vsota=vsota+polje[v][d][s];

tabelaVsot[v]=vsota;
}



//izpis polja in vsot pred sortiranjem
cout<<"Izpis po ploskvah pred sortiranjem polja:"<<endl;

izpisi(polje, visina, dolzina, sirina, tabelaVsot);

cout << endl;

//SORTIRAJ
for (int prehod=1;prehod<visina;prehod++)

for
(int m=0;m<visina-1;m++)

if
(tabelaVsot[m]>tabelaVsot[m+1])
{

zamenjaj(tabelaVsot[m],tabelaVsot[m+1]); //sortira tabelo vsot


Zamenjaj_polje(polje, dolzina, sirina, m, m+1);
}



cout<<"------------------------------";
//izpis polja in vsot po sortiranju
cout<<"Izpis po ploskvah po sortiranju polja:"<<endl;
izpisi(polje, visina, dolzina, sirina, tabelaVsot);

cout << endl;
}


void
main()
{

int
p[50][50][50];

int
visina, dolzina, sirina;

cout<<"Vpisi visino, dolzino, sirino(za vsako pritisni enter): "<<endl;

cin>>visina>>dolzina>>sirina;

nakljucnoNapolni(p, visina, dolzina, sirina);

cout<<endl<<"__________________________________________________"<<endl;
cout<<endl<<"1.) Pred urejanjem:"<<endl;
sortiraj(p, visina, dolzina, sirina);

system("pause");
}