Ładny brzuch
Witam wszystkich. Mam taka prosbe, czy moglby ktos przerobic ponizszy kod na obiektowy? Chodzi o to aby zmienne wier, kol i wkaznik **t byly prywatne w klasie Tab, natomiast wszystkie metody publiczne.
Oto kod:
// Przyklad scalania tablic dwuwymiarowych
#include <iostream.h>
struct Tab {
unsigned kol; // ilosc kolumn
unsigned wier; // ilosc wierszy
int **t;
};
Tab NewTab(unsigned, unsigned);
void wypelnij(Tab, int);
void drukuj(Tab, char*);
Tab scal(Tab, Tab);
void UsunTab(Tab);
int max(int a, int B) { return (a>B)?a:b; }
int main() {
system("cls");
Tab A = NewTab(3, 8); // 3 wiersze i 8 kolumn
wypelnij(A, 2);
drukuj(A, "Tablica A:");
Tab B = NewTab(10, 4); // 10 wierszy i 4 kolumny
wypelnij(B, 5);
drukuj(B, "Tablica B:");
Tab C = NewTab(max(A.wier, B.wier), max(A.kol, B.kol));
C = scal(A, B);
drukuj(C, "Tablica C:");
UsunTab(A);
UsunTab(B);
UsunTab©;
cin.get();
return 0;
}
Tab NewTab(unsigned wier, unsigned kol) {
Tab T;
T.kol=kol;
T.wier=wier;
T.t = new int*[wier];
for(unsigned i=0; i<wier; ++i)
T.t[i] = new int[kol];
wypelnij(T, 0);
return T;
}
void wypelnij(Tab A, int x) {
for(unsigned i=0; i<A.wier; ++i)
for(unsigned j=0; j<A.kol; ++j)
A.t[i][j] = x;
}
void drukuj(Tab T, char *com) {
cout << com << endl;
for(unsigned i=0; i<T.wier; ++i) {
for(unsigned j=0; j<T.kol; ++j)
cout << T.t[i][j];
cout << endl;
}
cout << endl;
}
void UsunTab(Tab T) {
for(unsigned i=0; i<T.wier; ++i)
delete[] T.t[i];
delete T.t;
}
Tab scal(Tab A, Tab B) {
Tab C = NewTab(max(A.wier, B.wier), max(A.kol, B.kol));
wypelnij(C, 0);
for(unsigned i=0; i<A.wier; ++i)
for(unsigned j=0; j<A.kol; ++j)
C.t[i][j] = A.t[i][j];
for(unsigned i=0; i<B.wier; ++i)
for(unsigned j=0; j<B.kol; ++j)
C.t[i][j] += B.t[i][j];
return C;
}
Z gry dziekuje.
Lipek
Naprawde mozna liczyc na pomoc na tym Forum.
Lipek
class Tab{ private: unsigned int kol; unsigned int wier; int **t; public: Tab(int, int); Drukuj(char *); //Inne :D } Tab::Tab(int kol, int wier){ this->kol=kol; this->wier=wier; } Tab::Drukuj(char *){ //cotam }
Gotowe, nie pene, ale reszt moesz zrobi sam;) No i moe by le bo dawno nie pisaem adnej klasy w c++:D
Kodie
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Oto kod:
// Przyklad scalania tablic dwuwymiarowych
#include <iostream.h>
struct Tab {
unsigned kol; // ilosc kolumn
unsigned wier; // ilosc wierszy
int **t;
};
Tab NewTab(unsigned, unsigned);
void wypelnij(Tab, int);
void drukuj(Tab, char*);
Tab scal(Tab, Tab);
void UsunTab(Tab);
int max(int a, int B) { return (a>B)?a:b; }
int main() {
system("cls");
Tab A = NewTab(3, 8); // 3 wiersze i 8 kolumn
wypelnij(A, 2);
drukuj(A, "Tablica A:");
Tab B = NewTab(10, 4); // 10 wierszy i 4 kolumny
wypelnij(B, 5);
drukuj(B, "Tablica B:");
Tab C = NewTab(max(A.wier, B.wier), max(A.kol, B.kol));
C = scal(A, B);
drukuj(C, "Tablica C:");
UsunTab(A);
UsunTab(B);
UsunTab©;
cin.get();
return 0;
}
Tab NewTab(unsigned wier, unsigned kol) {
Tab T;
T.kol=kol;
T.wier=wier;
T.t = new int*[wier];
for(unsigned i=0; i<wier; ++i)
T.t[i] = new int[kol];
wypelnij(T, 0);
return T;
}
void wypelnij(Tab A, int x) {
for(unsigned i=0; i<A.wier; ++i)
for(unsigned j=0; j<A.kol; ++j)
A.t[i][j] = x;
}
void drukuj(Tab T, char *com) {
cout << com << endl;
for(unsigned i=0; i<T.wier; ++i) {
for(unsigned j=0; j<T.kol; ++j)
cout << T.t[i][j];
cout << endl;
}
cout << endl;
}
void UsunTab(Tab T) {
for(unsigned i=0; i<T.wier; ++i)
delete[] T.t[i];
delete T.t;
}
Tab scal(Tab A, Tab B) {
Tab C = NewTab(max(A.wier, B.wier), max(A.kol, B.kol));
wypelnij(C, 0);
for(unsigned i=0; i<A.wier; ++i)
for(unsigned j=0; j<A.kol; ++j)
C.t[i][j] = A.t[i][j];
for(unsigned i=0; i<B.wier; ++i)
for(unsigned j=0; j<B.kol; ++j)
C.t[i][j] += B.t[i][j];
return C;
}
Z gry dziekuje.
Lipek
Naprawde mozna liczyc na pomoc na tym Forum.
Lipek
class Tab{ private: unsigned int kol; unsigned int wier; int **t; public: Tab(int, int); Drukuj(char *); //Inne :D } Tab::Tab(int kol, int wier){ this->kol=kol; this->wier=wier; } Tab::Drukuj(char *){ //cotam }
Gotowe, nie pene, ale reszt moesz zrobi sam;) No i moe by le bo dawno nie pisaem adnej klasy w c++:D
Kodie