kamus Opublikowano 25 Stycznia 2006 Zgłoś Opublikowano 25 Stycznia 2006 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");} Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Ragnor Opublikowano 25 Stycznia 2006 Zgłoś Opublikowano 25 Stycznia 2006 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. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
anli Opublikowano 25 Stycznia 2006 Zgłoś Opublikowano 25 Stycznia 2006 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 Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
BartasX Opublikowano 30 Stycznia 2006 Zgłoś Opublikowano 30 Stycznia 2006 Ł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;} Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...