Skocz do zawartości
kamus

[c++] Potrzebna Mala Modyfikacja..

Rekomendowane odpowiedzi

witam..mam problem..program ten generuje tablice o wymiarach n/n a nastepnie zeruje wszytskie elementy znajdujace sie ponizej glownej przekatnej.. czy moglby ktos napisac funkcje zeruj2, ktora bedzie zerowala elementy znajdujace sie powyzej glownej przekatnej? bylbym bardzo wdzieczny. z gory dziekuje :)

 

 

 

include <iostream>#include <fstream>#include <stdlib.h>//#include <string.h>using namespace std;// Zadanie 7// Tablica n x nvoid wydruk_tab (int **t, int *n){	for (int i=0;i<*n;i++)	{		for (int j=0;j<*n;j++)		{			if (*(*(t+i)+j)<10) cout<<" "<<*(*(t+i)+j)<<" ";			else cout<<*(*(t+i)+j)<<" ";		// *(a+i) - adres pocz. i-tego wiersza		}		cout<<endl;								// *(a+i)+j - adres j-tego elementu i-tego wiersza	}}void zeruj (int **t, int *n){	for (int i=0;i<*n;i++)						//pierwszy (t[0]) wiersz zostawiam w spokoju	{		for (int k=0;k<i;k++)		{			*(*(t+i)+k)=0;						//w kolejnych zeruje tyle el. co t[x]		}	}	wydruk_tab(t,n);	cout<<endl;}void zeruj2(int **t, int *n){	 }void tablica(int **t, int *n){	int **tab;	tab= new int *[*n];							//tablica pomocnicza n x n	for (int i=0;i<*n;i++)	{		tab[i]= new int [*n];	}	int wart=0;	for (int i=0;i<*n;i++)						//kolejno wpisuj liczby do tablicy n x n	{		for (int k=0;k<*n;k++)		{			*(*(t+i)+k)=++wart;		}	}	wydruk_tab(t,n);							//tablica po zapełnieniu	cout<<endl;//ustawiam ciągi liczb wg.klucza	for (int i=1;i<*n;i+=2)						//zaczynam od drugiego wiersza	{		for (int k=0;k<*n;k++)		{			*(*(tab+k))=*(*(t+i)+k);			//do tabl. pomocniczej zapisuję zawartość		}										//drugiego wiersza		for	(int l=0;l<*n;l++)		{			*(*(t+i)+l)=*(*(tab+(*n-l-1)));		//do drugiego wiersza zapisuję		}										//liczby z tablicy pom. czytanej od końca	}	wydruk_tab(t,n);							//tablica po uporządkowaniu wg. klucza	cout<<endl;}int main(){	int **tabl;									//tablica wskaźników	int n;	cout<<"Jaki wymiar tablicy (n x n)? ";	cin>>n;	tabl= new int *[n];	for(int i=0;i<n;i++)	{		tabl[i]= new int [n];   //rezerwuj pamięć na tabl.max.20xn	}	tablica(tabl,&n);	zeruj(tabl,&n);	zeruj2(tabl,&n);	system("PAUSE");}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Pierwsza uwaga nie mam pojęcia w jaki sposób działa Ci ta pętla:

for (int i=*n;i<*n;i++)						//pierwszy (t[0]) wiersz zostawiam w spokoju	{		for (int k=0;k<i;k++)		{			*(*(t+i)+k)=0;						//w kolejnych zeruje tyle el. co t[x]		}	}
według mnie nie jest on ani razu wykonywana.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ja bym to zrobił tak:

Jako rozmiar tablicy lepiej nie podawac wskaznika

//powyzejvoid zeruj2(int **t, int n){	for (int i=1; i<n; i++)		 for (int j=0; j<i; j++)			  *(*(t+i)+j)=0;}//ponizejvoid zeruj(int **t, int n){	for (int i=0; i<n-1; i++)		 for (int j=i+1; j<n; j++)			  *(*(t+i)+j)=0;}
Pozdrawiam

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Łap gotowe rozwiązanie. I nie baw się w operacje arytmetyczne na wskaźnikach, jeśli niezbyt dobrze się w nich czujesz. :-P

#include <cstdlib>#include <iostream>using std::cout;using std::cin;using std::endl;using std::system;int** nowa(int);void wyswietl(int**, int);void zeruj_powyzej_glownej_przek(int**, int);void zeruj_ponizej_glownej_przek(int**, int);void zainicjuj(int, int**, int);int main(){  int n;  cout<<"Podaj n: ";  cin>>n;  int** tab = nowa(n);  if(!tab) return 0;  zainicjuj(1, tab, n);  zeruj_powyzej_glownej_przek(tab, n);  zeruj_ponizej_glownej_przek(tab, n);  wyswietl(tab, n);  system("PAUSE");  return 0;}int** nowa(int n){  int** tab = 0;  if(!(tab = new int*[n]))	return 0;  for(int i=0; i<n; i++)	tab[i] = new int[n];  return tab;}void wyswietl(int** tab, int n){  for(int i=0; i<n; i++)  {	for(int j=0; j<n; j++)	  cout<<tab[i][j]<<' ';	cout<<endl;  }}void zeruj_powyzej_glownej_przek(int** tab, int n){  for(int i=0; i<n; i++)	for(int j=i+1; j<n; j++)	  tab[i][j] = 0;}void zeruj_ponizej_glownej_przek(int** tab, int n){  for(int j=0; j<n; j++)	for(int i=j+1; i<n; i++)	  tab[i][j] = 0;}void zainicjuj(int liczba, int** tab, int n){  for(int i=0; i<n; i++)	for(int j=0; j<n; j++)	  tab[i][j] = liczba;}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...