Robię to już 3 godziny i nie mogę znaleźć błędu... Stanąłem w funkcji cofnij_wskazniki. Po dodaniu wartości do elementów tablicy wszystkie wskaźniki są ustawione na ostatnich miejscach. Funkcja cofnij_wskazniki miała przelecieć się po tych wskażnikach i poustawiać je na pierwszych miejscach. Myślę, że kod jest ok, ale daję go tu może ktoś znajdzie błąd. Zapewne zagmatwałem się gdzieś bo mam tu wskaźnik na wskaźniki new do elementów new.
No w sumie to głównym problemem jest chyba to, że nie umiem poruszać się skaźnikiem do tablicy wskaźników to tablic intów - czyli wskaźnikami podwójnymi --> czyli czy to ++wsk_n przechodzi po kolejnych elementach tablicy czy po wskaźnikach tej tablicy
Poszperałem, pogmerałem aż znalazłem na http://darkcult.gamedev.pl/kursy/kurs03a.html kod o dynamicznych tablicach dwuwymiarowych, gdzie kod jest prawie taki sam jak mój - z deczka lepszy jedynie autor nie gmerał się tak jak ja z inwersją wskaźników ale jechał prosto z mostu wsk[j] - i wiersze j kolumny.
To rozwiązuje problem, ale dalej nie wiem jaki jest błąd w moim kodzie...
Kod:
g++
#include <iostream>
using namespace std;
int usuwacz (int nn, int moze, int** paker = 0, int* ziomek = 0);
void cofnij_wskazniki (int** master, int h);
int main()
{
cout<<"Podaj liczbe zmiennych: ";
int n;
cin>>n;
cin.ignore();
int **wsk_n = new int* [n + 1]; //wskaznik do n + 1 wskaznikow new int (orientacja pionowa)
//*****Tworzy wskazniki na elementy*****
for(int i = 0; i < n + 1; ++i) //n + 1 bo n + 1 to wyniki( --> orientacja pionowa)
{
wsk_n[i] = new int [n];
}
//*****Pobiera i dopisuje wartosci*****
for(int i = 0; i < n; ++i)
{
for(int j = 0; j < n + 1; ++j)
{
if(j == n)
{
cout<<"\npodaj wynik dla funkcji "<<i + 1<<": ";
if(i < (n - 1))
{
(++wsk_n[j]);
}
}
else
{
cout<<"\npodaj x["<<j + 1<<"\\"<<i + 1<<"]: ";
if(i < (n - 1))
{
(++wsk_n[j]);
}
}
int tymczasowa;
cin>>tymczasowa;
*wsk_n[j] = tymczasowa;
}
}
//*****Cofamy wskazniki*****
cofnij_wskazniki (wsk_n, n);
//*****Usuwamy wszystkie new*****
usuwacz (n, 1, wsk_n);
//*****Koniec programu*****
cout<<"\n\n------------------------------------\n";
cout<<"\nAby zakonczyc nacisnij Enter";
cin.ignore();
getchar();
return 0;
}
//********************COFNIJ WSKAZNIKI********************
void cofnij_wskazniki (int** master, int h)
{
for(int i = 0; i < h + 1; ++i)
{
cout<<'\n'<<*master[i];
(master[i] - (h - 1)); // TO TU SIĘ COFAM
cout<<"-";
cout<<'\n'<<*master[i]; //a może ten element już cofnięty, jest ze stosu ?
}
}
//********************USUWACZ********************
int usuwacz (int nn, int moze, int** paker, int* ziomek)
{
cout<<"\nUsuwam...\n";
if(moze = 1)
{
for(int i = 0; i < nn + 1; ++i) //nn + 1 bo nn + 1 to wyniki( --> orientacja pionowa)
{
cout<<*paker[i]<<" ";
delete [] paker[i];
cout<<".";
cout<<*paker[i]<<" ";
paker[i] = 0; //zeruje wskaznik na wszelki wypadek
cout<<paker[i]<<" ";
}
delete [] paker;
paker = 0;
cout<<paker;
}
return 0;
}
No w sumie to głównym problemem jest chyba to, że nie umiem poruszać się skaźnikiem do tablicy wskaźników to tablic intów - czyli wskaźnikami podwójnymi --> czyli czy to ++wsk_n przechodzi po kolejnych elementach tablicy czy po wskaźnikach tej tablicy
Poszperałem, pogmerałem aż znalazłem na http://darkcult.gamedev.pl/kursy/kurs03a.html kod o dynamicznych tablicach dwuwymiarowych, gdzie kod jest prawie taki sam jak mój - z deczka lepszy jedynie autor nie gmerał się tak jak ja z inwersją wskaźników ale jechał prosto z mostu wsk[j] - i wiersze j kolumny.
To rozwiązuje problem, ale dalej nie wiem jaki jest błąd w moim kodzie...