Utworzenie tablicy dwuwymiarowej, klasy, konstruktor.

0

Witam, mam taki problem, który próbowałem rozwiązać wczoraj lecz niestety nie udało mi się i muszę się zwrócić o pomoc.

Problem polega w tej części zadania, czyli na samym początku:

[quote] Utwórz tablicę dwuwymiarową (2n-1) x (2n-1), gdzie n podawane jest przez użytkownika.[/quote]

Po tym jest dalsza część zadania ale akurat resztę wiem jak zrobić tylko utknąłem na samym początku zadania.

Oto co udało mi się napisać:

[code]
#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;

void stop( void);

int tab[2n-1][2n-1] = {};

class zadanie
{
private:
public:
int n;
};

int main()
{
zadanie z;

 cout<<"Podaj n: ";
 cin>>z.n;
 cin.ignore();   

stop();
}

void stop( void)
{
system( "Pause");
}
[/code]
Miało by być coś takiego, no i nie wiem jak to dokładnie zrobić, ponieważ powinna być klasa jak i konstruktor ale jak dodam konstruktora to mi jakieś błędy wyskakują, że nazwa błędna.

Mam nadzieje, że ktoś pomoże.

0

int tab[2n-1][2n-1] = {};

No nie, takie coś nie przejdzie. Pamięć trzeba alokować dynamicznie.

  int **tab;

  int m = 2*n-1;

  tab = new int*[m];
  for (int i=0; i<m; i++)
	  tab[i] = new int[m];
0

Teraz utworzyłem tą tablice ale czy jest jakaś szansa aby dodać klasę i funkcję aby to było poukładane. Próbowałem ale wtedy tablica traci n lub m i wyskakuje błąd. W tym przypadku tablica musi służyć jeszcze do innych zadań.

Oto co osiągnąłem i działa:

#include <iostream>
#include <string>
#include <cstdlib>
using namespace std;
  
void stop( void);

int main()
{
 int n;   
     cout<<"Podaj n: ";
     cin>>n;
     cin.ignore();  
     
    int m = 2*n-1; 

int **tab = new int * [m];
   for (int j=0; j<m; j++){
     tab[j] = new int[m];
   }

  for( int i = 0; i < m; i++){ 
      for( int j=0; j< m; j++ ){
          tab[i][j] = 0;
      }
}
     
stop();
}

// koniec
void stop( void)
{
system( "Pause");
} 
1
class tb
  {
   private:
   unsigned size;
   int *T;
   tb(const tb&) {}
   void operator=(const tb&) {}
   public:
   tb(unsigned n):size(2*n-1),T(new int[size*size]) {}
   ~tb() { if(size) delete[] T; }
   int *operator[](unsigned y) { return T+y*size; }
   int &operator()(unsigned y,unsigned x) { return T[y*size+x]; }
  };

//użycie
cin>>n;
tb t(n);
t(2*n-2,2*n-2)=3; // przez okrągłe
t[2*n-2][2*n-2]=4; // przez kwadratowe
0

To to jest mała przesada, nie można inaczej, bardziej w poziomie podstawowym z użyciem klasy?

0

Zdefiniuj słowo "poukładane", bo ja nie rozumiem w ogóle do czego dążysz w tym programie. O jakiej Ty klasie i funkcji mówisz, gdzie Ci ginie n i m.

0

Ginie jak dodam klasę, zresztą to nie zadanie na mój poziom. Dostałem od nauczyciela z racji tego, że mam 5 z programowania a nie wiem w ogóle jak je zacząć z użyciem klas i konstruktora, ale sobie już poradziłem zrobiłem bez tego i działa. Najprostszy sposób z możliwych, pełno pętelek for i ponad 200 linijek kodu. Beznadzieja. :), ale nie będzie się czepiał, że nie zrobiłem.
Jak ktoś by chciał zobaczyć zadanie to:
http://programowanie.edu.pl/tablice-dwuwymiarowe-zadania

Dzięki za pomoc.

0

5-ke, kiedy prymitywna podstawowa klasa dla ciebie jest nie do zrozumienia? Wg mnie powinna być trója max.
200 linijek kodu na to co da się zrobić w jakichś 60 :/

1 użytkowników online, w tym zalogowanych: 0, gości: 1