Ładny brzuch
witam ponownie
poprzedni problem narazie odlozylem na rzecz bardziej aktualnego:
napisalem program "o macierzach", jedna z opcji jest zmiana rozmiaru macierzy i wszystko jest ok jesli macierz zmniejszam, natomiast jesli ja zwieksze to sie program, jak zwykle nie wiadomo czemu, sypie
zalaczam kod skrocony do niefortunnej metody i tak:
maciez tworzy sie wpisujac a[3,3]
zmienia sie wpisujac a[4,4]
sypie sie po probie odczytania zawartosci[sypie sie na tyle ze trzeba 2 razy wpisac a: i enter] (lub jakiejkolwiek innej metodzie)
kod gotowy do skompilowania w visualu:
#include <iostream> using namespace std; #define pause system("pause"); class macierz { private: char name; int i, j; float **tab; macierz(char nazwa, int dlg, int szer); public: static void wyswietl(char test); static void rozmiar(char test, int dlg, int szer); friend void stworz(char); ~macierz(); }; class macierz **wsk; int a=0; macierz::macierz(char nazwa, int dlg, int szer) { for(int tst=0;tst<a;tst++) { if(nazwa==(*wsk[tst]).name) { rozmiar(nazwa, dlg, szer); } } name = nazwa; i = dlg; j = szer; tab = new float*[i]; for (int x=0;x<i;x++) { tab[x] = new float[j]; } for(int q=0; q < i; q++) { for(int qq=0; qq <j; qq++) { tab[q][qq] = 0; cout << name << " " << tab[q][qq] << endl; } } cout << "Out: OK\n"; } void macierz::wyswietl(char test) { for(int tst=0;tst<a;tst++) { if(test==(*wsk[tst]).name) {cin >> (*wsk[tst]).tab[2][4];cout << (*wsk[tst]).i << endl << (*wsk[tst]).j << (*wsk[tst]).tab[2][4] << endl;pause for(int q=0; q < (*wsk[tst]).i; q++) { for(int qq=0;qq<(*wsk[tst]).j;qq++) { cout << (*wsk[tst]).tab[q][qq] << " "; } cout << endl; } } } } void macierz::rozmiar(char test, int dlg, int szer) { for(int tst=0;tst<a;tst++) { if(test==(*wsk[tst]).name) { (*wsk[tst]).i=dlg; (*wsk[tst]).j=szer; return; } } } macierz::~macierz() { delete []tab; delete []wsk; } void stworz(char); void main() { wsk = new macierz*[a]; while(1) { cout << "In: "; char obj, opcja; cin >> obj >> opcja; if(opcja=='[') stworz(obj); else if(opcja==':') macierz::wyswietl(obj); } (*wsk[0]).~macierz(); } void stworz(char obj) { wsk[a+1]=NULL; int dg, sz; cin >> dg; cin.ignore(1); cin >> sz; cin.ignore(1); wsk[a++] = new macierz(obj, dg, sz); wsk[a]=NULL; }
na wskaznikach sie nie do konca znam wiec moze cos pomieszale i nie wiem np dlaczego tu sie musze odwolywac przez (*wsk[tst]).name a w dynamicznej strukturze wystarczylo (nazwa[t]).imie
jesli nie wiecie czemu sie sypie, a macie pomysl jak to zrobic inaczej - tez sie uciesze
ps. wlasnie sobie uswiadomilem ze wykakuje "unhandld exception", ale niewiele mialem do tej pory do czynienia z wyjatkami iec niewiem czy sobie poradze sam
Uytkownik outsider edytowa ten post 24 luty 2007, 10:04
ktos moze mnie oswiecic chociaz jak to deletowac potem w destruktorze?
przepraszam za jeden pod drugim
Uytkownik outsider edytowa ten post 25 luty 2007, 00:15
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
poprzedni problem narazie odlozylem na rzecz bardziej aktualnego:
napisalem program "o macierzach", jedna z opcji jest zmiana rozmiaru macierzy i wszystko jest ok jesli macierz zmniejszam, natomiast jesli ja zwieksze to sie program, jak zwykle nie wiadomo czemu, sypie
zalaczam kod skrocony do niefortunnej metody i tak:
maciez tworzy sie wpisujac a[3,3]
zmienia sie wpisujac a[4,4]
sypie sie po probie odczytania zawartosci[sypie sie na tyle ze trzeba 2 razy wpisac a: i enter] (lub jakiejkolwiek innej metodzie)
kod gotowy do skompilowania w visualu:
#include <iostream> using namespace std; #define pause system("pause"); class macierz { private: char name; int i, j; float **tab; macierz(char nazwa, int dlg, int szer); public: static void wyswietl(char test); static void rozmiar(char test, int dlg, int szer); friend void stworz(char); ~macierz(); }; class macierz **wsk; int a=0; macierz::macierz(char nazwa, int dlg, int szer) { for(int tst=0;tst<a;tst++) { if(nazwa==(*wsk[tst]).name) { rozmiar(nazwa, dlg, szer); } } name = nazwa; i = dlg; j = szer; tab = new float*[i]; for (int x=0;x<i;x++) { tab[x] = new float[j]; } for(int q=0; q < i; q++) { for(int qq=0; qq <j; qq++) { tab[q][qq] = 0; cout << name << " " << tab[q][qq] << endl; } } cout << "Out: OK\n"; } void macierz::wyswietl(char test) { for(int tst=0;tst<a;tst++) { if(test==(*wsk[tst]).name) {cin >> (*wsk[tst]).tab[2][4];cout << (*wsk[tst]).i << endl << (*wsk[tst]).j << (*wsk[tst]).tab[2][4] << endl;pause for(int q=0; q < (*wsk[tst]).i; q++) { for(int qq=0;qq<(*wsk[tst]).j;qq++) { cout << (*wsk[tst]).tab[q][qq] << " "; } cout << endl; } } } } void macierz::rozmiar(char test, int dlg, int szer) { for(int tst=0;tst<a;tst++) { if(test==(*wsk[tst]).name) { (*wsk[tst]).i=dlg; (*wsk[tst]).j=szer; return; } } } macierz::~macierz() { delete []tab; delete []wsk; } void stworz(char); void main() { wsk = new macierz*[a]; while(1) { cout << "In: "; char obj, opcja; cin >> obj >> opcja; if(opcja=='[') stworz(obj); else if(opcja==':') macierz::wyswietl(obj); } (*wsk[0]).~macierz(); } void stworz(char obj) { wsk[a+1]=NULL; int dg, sz; cin >> dg; cin.ignore(1); cin >> sz; cin.ignore(1); wsk[a++] = new macierz(obj, dg, sz); wsk[a]=NULL; }
na wskaznikach sie nie do konca znam wiec moze cos pomieszale i nie wiem np dlaczego tu sie musze odwolywac przez (*wsk[tst]).name a w dynamicznej strukturze wystarczylo (nazwa[t]).imie
jesli nie wiecie czemu sie sypie, a macie pomysl jak to zrobic inaczej - tez sie uciesze
ps. wlasnie sobie uswiadomilem ze wykakuje "unhandld exception", ale niewiele mialem do tej pory do czynienia z wyjatkami iec niewiem czy sobie poradze sam
Uytkownik outsider edytowa ten post 24 luty 2007, 10:04
ktos moze mnie oswiecic chociaz jak to deletowac potem w destruktorze?
przepraszam za jeden pod drugim
Uytkownik outsider edytowa ten post 25 luty 2007, 00:15