tablice dwuwymiarowe i funkcje

0

Witam, w ponizszym zadaniu chodzi o zamiane ze sobą dwoch wierszy w tablicy z uzyciem funkcji. Ponizej przedstawiam dwa kody gdzie w jednym z nich jest uzyta tablica dynamiczna. W jednym i drugim przypadku kod generuje sie i dziala zatem jaka jest roznica miedzy oboma kodami?

kod 1 z uzyciem tablicy dynaicznej

#include <iostream>
using namespace std;

void test( int*a,int*b ){
	int tmp=*b;
	*b=*a;
	*a=tmp;
}


int main(){
	
	
	int wys,szer,i,j;
	int **tab;
	cout<<"podaj liczbe wierszy: ";
	cin>>wys;
	cout<<"podaj liczbe kolumn: ";
	cin>>szer;
	
	tab=new int*[wys];
	

	
//tworzenie tablicy

for(i=0;i<wys;i++)
	tab[i]=new int[szer];


/// wypelnienie i odczyt tablicy
for(i=0;i<wys;i++)
	for(j=0;j<szer;j++)
		tab[i][j]=i;	

	
for(i=0;i<wys;i++){	
	for(j=0;j<szer;j++)
		cout<<tab[i][j];
			
	cout<<endl;
}

cout<<endl;		
//  wybor wierszy do zmiany
int k,l;
bool zmiana=false;

do{
cout<<"podaj nr wiersza ktory chesz zamienic ";
cin>>k;

	if(k<=wys){
		do{
		cout<<"podaj nr drugiego wiersza ktory chesz zamienic ";
		cin>>l;
			if(l<=wys)
			zmiana=true;
		}while(zmiana==false);
	}

	
}	while(zmiana==false);

	
k--;
l--;
//zmiana wierszy

	for(j=0;j<szer;j++)
	test(&tab[k][j],&tab[l][j]);

//odczyt tablicy
cout<<endl;
for(i=0;i<wys;i++){

	for(j=0;j<szer;j++){
		cout<<tab[i][j];	
	}
	cout<<endl;
}		


	
	
	return 0;
}

kod 2:

#include <iostream>
using namespace std;

void test( int*a,int*b ){
	int tmp=*b;
	*b=*a;
	*a=tmp;
}


int main(){
	
	
	int wys,szer,i,j;
	
	cout<<"podaj liczbe wierszy: ";
	cin>>wys;
	cout<<"podaj liczbe kolumn: ";
	cin>>szer;
	
	int tab[wys][szer];

/// wypelnienie i odczyt tablicy
for(i=0;i<wys;i++)
	for(j=0;j<szer;j++)
		tab[i][j]=i;	

	
for(i=0;i<wys;i++){	
	for(j=0;j<szer;j++)
		cout<<tab[i][j];
			
	cout<<endl;
}

cout<<endl;		
//  wybor wierszy do zmiany
int k,l;
bool zmiana=false;

do{
cout<<"podaj nr wiersza ktory chesz zamienic ";
cin>>k;

	if(k<=wys){
		do{
		cout<<"podaj nr drugiego wiersza ktory chesz zamienic ";
		cin>>l;
			if(l<=wys)
			zmiana=true;
		}while(zmiana==false);
	}

	
}	while(zmiana==false);

	
k--;
l--;
//zmiana wierszy

	for(j=0;j<szer;j++)
	test(&tab[k][j],&tab[l][j]);

//odczyt tablicy
cout<<endl;
for(i=0;i<wys;i++){

	for(j=0;j<szer;j++){
		cout<<tab[i][j];	
	}
	cout<<endl;
}		


	
	
	return 0;
}
0

Różnica dość subtelna. W drugim przypadku tablica jest alokowana na stosie a nie na stercie. Stos jest mocno ograniczony i lepiej się wstrzymywać z alokowaniem tam dużej ilości danych. Poza tym tworzenie tablic o dynamicznym rozmiarze na stosie jest w standardzie tylko dla C a nie dla C++. W C++ jest to jedynie rozszerzenie wspierane przez niektóre kompilatory.

1 użytkowników online, w tym zalogowanych: 0, gości: 1