Hej, właśnie przechodze przez początki początków mojego programowania z C++, szczególnie, że zdalne nauczanie utrudnia wszelkie kontakty więc przychodzę z pomocą tutaj.
Wykonałam czesciowo polecenie ale siedze nad tym dzis tak długo, że zmieniałam wszystko pare razy i juz sama sie pogubiłam we własnym kodzie. Dosięgło mnie zwątpienie i potrzebuje naprowadzenia na prawidłową ścieżkę.
Wiem, że kod to totalny chaos a poziom jest absurdalny, ale za każdą pomoc bede wdzieczna!
Tutaj treść polecenia:
Zdefiniuj klasę opisującą macierz liczb rzeczywistych - tablica dwuwymiarowa M x N - przechowywana (alokowana dynamicznie) wewnetrznie pod podwójnym wskaźnikiem. Dla klasy należy zdefiniować nastepujące funkcje:
- konstruktor domyslny
- konstruktor tworzacy macierz o zadanych rozmiarach
- konstruktor tworzący macierz na podstawie tablicy przekazanej jako argument konstruktora
- konstruktor kopiujacy
- destruktor
- funkcje zmieniajaca rozmiar przechowywanej macierzy
- funkcje zwracajaca ilość kolumn
- funkcje zwracajaca ilość wierszy
- funkcje generujaca macierz losowa z zakresu od 0.0 do 1.0
- funkcje wypisujaca przechowywana macierz na ekranie
Napisac przykladowy program wykorzystujacy napisana klase.
#ifndef _HEADER_
#define _HEADER_
using namespace std;
class Macierz
{
public:
Macierz(); //Domyslny konstruktor A
Macierz(int m, int n); //Konstruktor tworzacy o zadanych rozmiarach n i m B
Macierz(const Macierz& wzor); //Kontruktor kopiujący
~Macierz(); //Destruktor
private:
int m, n;
int** p;
//alokacja pamieci tablicy
void allocTab()
{
p = new int* [m];
for (int i = 0; i < m; i++)
{
p[i] = new int[n];
}
}
};
#endif
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cstdio>
#include "header.h"
using namespace std;
int main()
{
int r;
int c;
cout << "podaj pierwszy wymiar" << endl;
cin >> r;
cout << "podaj drugi wymiar" << endl;
cin >> c;
Macierz object;
//tworzenie tablicy dynamicznej
int** macierz = new int* [r];
for (int j = 0; j < r; j++)
{
macierz[j] = new int[c];
}
while (1) {
clcscr();
wypiszMacierz(int m, int n);
cout << "\n Polecenia \n";
cout << "\n 1) Zmien rozmiar macierzy";
cout << "\n 2) Wyswietl liczbe kolumn";
cout << "\n 3) Wyswietl liczbe wierszy";
cout << "\n 4) Wyswietl macierz";
cout << "\n 5) Exit.";
cin >> w;
switch (w) {
case 1:
Zmienrozmiar();
break;
case 2:
lkolumn();
break;
case 3:
lwierszy();
break;
case 4:
Macierz::wypiszMacierz()
break;
case 5:
exit(1);
default:
cout << "\n Nieprrawidlowy wybor";
} // koniec switcha
getch();
} // koniec while
void wypelnijMacierz(int m_, int n_);
object.wypiszMacierz();
return 0;
}
#include "header.h"
#include <iostream>
using namespace std;
//Domyslny konstruktor A
Macierz::Macierz() : Macierz(0, 0) {}
//Konstruktor tworzacy B
Macierz::Macierz(int m, int n)
{
if (n<0 || m<0)
{
cout << "blad" << endl;
}
allocTab();
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
p[i][j] = 0;
}
}
}
Macierz::Macierz(const Macierz& wzor) {
m = wzor.m;
n = wzor.n;
cout << "Konstruktor kopiujacy dziala" << endl;
}
//Destruktor
Macierz::~Macierz()
{
for (int i = 0; i < m; i++)
{
delete[] p[i];
}
delete[] p;
}
void wypelnijMacierz(int m, int n)
{
int r, c;
r=m;
c=n;
for (int i = 0; i < c; i++)
for (int j = 0; j < r; j++) object.setv(i, j, 0.1 + rand() % 2);
}
int lkolumn(int m)
{
if (m < 0 )
{
return -1;
}
return m;// zwraca liczbe kolumn
}
int lwierszy(int n)
{
if (n < 0)
{
return -1;
}
return n ;// zwraca liczbe wierszy
}
//funkcja wyswietlajaca J
void wypiszMacierz(int m, int n)
{
for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
cout << p[m][n] << " " << endl;
}
}
}
Zmien rozmiar(){
...}