• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Programowanie C++ , pomoc w zadaniach

0 głosów
866 wizyt
pytanie zadane 23 maja 2018 w C i C++ przez MlodyJavaS Użytkownik (500 p.)

Witam, chcialbym prosic o pomoc w kilku zadaniach, zrobilem jedno ( prosze tez o sprawdzenie). POnizej moj kod 
Tresc zadan:

Moje zadanie: Zdefiniuj klase, ktora reprezentuje tablice dynamiczna( liczb calkowitych) z konstrukotrem, ktory przyjmuje rozmiar tablicy i  wypelnia ja podana w drugim argumencie wartoscia. Istnieje mozliwosc wywowalania tego konstrukotra z jedym argumentem, wtedy drugi argument przez domniemianie przyjmuje wartosc 0 tworzac w efekcie wyzerowana tablice dynamiczna

 

//============================================================================
// Name        : tryspr.cpp
// Author      : 
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
using namespace std;
class Tablica
{
	int rozmiar;
	int wartosc;
public:

	void wypelnij()
	{
		cout << "Tablica ma rozmiar: " << rozmiar;
		cout << "\nJest wypelniona: " << wartosc << endl;
		cout << "TABLICA: [";
		for (int i = 0; i < rozmiar; i++)
		{
			//opcjonalne, zeby nie bylo przecinka - estetyka
			if (i < rozmiar -1)
			{
				cout << wartosc;
				cout << ", ";
			} else
			{
				cout << wartosc;
			}

		}
		cout << " ]";
	}
	Tablica(int rozm, int war = 0)
	{
		rozmiar = rozm;
		wartosc = war;
		wypelnij();
	}

};
int main()
{
	Tablica t1(6);

	return 0;
}

 

Kolejne zadania, ktore nie wiem jak zaczac:

  1. Utworz obiekty tablicy podajac dwa argumenty i jeden argument dla konstrukora, stosuja operator NEW oraz wykorzsytaj konstruktor dla konwersji liczb typu INT do obiektu klasy nowo utoworzonej tablicy 
  2. Przeladuj operatory << (wyswietlanie wszystkich elementow tablicy), || ( zwrot elementu tablicy spod okreslonego indeksu - nalezy zabezpieczyc przed wyjsciem poza zakres tablicy
  3. Zdefiniuj publiczna fukncje skladowa dodajac nowa wartosc do tablicy. jezeli w tablicy nie ma juz miejsca to nazelzy utworzyc nowy obszar pamieci ( dwukrotnie wiekszy od obecnego) i przekopiowac do niego zawratosc tablicy ( koniecznie trzeba usunac stary obszar )
komentarz 23 maja 2018 przez Aisekai Nałogowiec (42,190 p.)
1. Polem w klasie ma być dynamiczna tablica a nie rozmiar i wartość, to co ty zrobiłeś nijak nie można nazwać tablicą.
komentarz 23 maja 2018 przez MlodyJavaS Użytkownik (500 p.)

Rozumiem, czyli cos takiego?

//============================================================================
// Name        : dynamikatabwClasach.cpp
// Author      : 
// Version     :
// Copyright   : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================

#include <iostream>
using namespace std;
class Tablica
{
private:
	int rozmiar;
	int wartosc;
	int *tabela;
public:
	void Zapelnij()
	{
		for (int i = 0; i < rozmiar; i++)
		{
			if (i < rozmiar - 1)
			{
				tabela[i] = wartosc;
				cout<<tabela[i];
				cout << ", ";
			} else
			{
				cout<<tabela[i];
			}

		}
	}
	Tablica(int size, int value = 0)
	{
		rozmiar = size;
		wartosc = value;
		tabela = new int[rozmiar];
		Zapelnij();
	}
	~Tablica()
	{
		delete[] tabela;
	}
};
int main()
{
	Tablica t1(4);
	return 0;
}

 

komentarz 23 maja 2018 przez Aisekai Nałogowiec (42,190 p.)
Taa, tylko rozmiar i wartość nie muszą być polami.

I tak btw, to popracuj nad tym, żeby nazywać zmienne/funkcje/klasy etc po angielsku.
komentarz 23 maja 2018 przez MlodyJavaS Użytkownik (500 p.)
edycja 24 maja 2018 przez MlodyJavaS
z angielskim nie bedzie problemu, ale jak mozna zrobic to w inny sposob? ;) "tylko rozmiar i wartość nie muszą być polami"

2 odpowiedzi

0 głosów
odpowiedź 24 maja 2018 przez mokrowski Mędrzec (158,960 p.)

Zapewne uczą was jeszcze C++98. No to nie ma wyjścia będzie trochę "na piechotę". To co napisałeś, raczej tak:

#include <iostream>
#include <cstddef>
#include <cassert>

class Table
{
public:
    Table(std::size_t size_, int value = 0): data(new int[size_]), size(size_)
    {
        assert(size > 0);
        --size_;
        while(size_--)
        {
            data[size_] = value;
        }
    }
    ~Table()
    {
        delete [] data;
    }
private:
    int * data;
    std::size_t size;
};

int main()
{
    Table t1(4);
    Table t2(7, 12);
}

Co do poleceń 1-3, to sprawdź czy poprawnie je wkleiłeś bo IMHO masz błędy. Nie widzę np. sensu implementacji operatora || bo to ostatni operator w którym rozważał bym pobranie danych z takiej tablicy.

komentarz 24 maja 2018 przez MlodyJavaS Użytkownik (500 p.)
edycja 24 maja 2018 przez MlodyJavaS

"Zapewne uczą was jeszcze C++98" 

 mokrowski Na pewno lepiej znasz sie niz ja, ale nigdy nie stosowaliśmy tego typu bibliotek oraz podkreślników  _   . Teraz ten kod wyglada (przynajmniej dla mnie) groźnie. ;)

Co do 2 części komentarza,  polecenia sa przepisane slowo w slowo. Wiec wciaz prosze o pomoc.

Utworz obiekty tablicy podajac dwa argumenty

  • (chyba chodzi tu o zwykle Table t1(4,2)

i jeden argument dla konstrukora  stosujac operator NEW

  • tabela = new int[rozmiar]; (w konstruktorze zastosowalem NEW)
  • Table t2(4) ( bo ten drugi jest domyslnie 0 )

oraz wykorzsytaj konstruktor dla konwersji liczb typu INT do obiektu klasy nowo utoworzonej tablicy 

  • tej czesci nie rozumiem

2 zadanie jest dla mnie bardzo niejasne (pomyslu nie mam wcale)
3 tez niezbyt ;/

 

komentarz 24 maja 2018 przez mokrowski Mędrzec (158,960 p.)
1. Podkreślnik to taki sam znak jak każdy inny. size_ jest tu dla wyróżnienia zmiennej przekazanej w argumencie jako kopia.

2. Linia 10 (assert(...) ) upewnia się że tworzona tablica będzie miała wielkość inną niż zerową. W takcie wykonania programu jeśli przekażesz 0 do konstruktora, dostaniesz na konsoli załamanie programu.

3. 12-15 pracowite wypełnianie liczbami tablicy.

4. 17-20 obowiązkowy destruktor. Jeśli dynamicznie alokowano tablicę, trzeba ją usunąć.
komentarz 24 maja 2018 przez MlodyJavaS Użytkownik (500 p.)
ok, ale czy jest opcja pomocy w zadaniach 1(koncowka) 2 i 3??
0 głosów
odpowiedź 24 maja 2018 przez mokrowski Mędrzec (158,960 p.)

Sygnatura klasy będzie wyglądała jakoś tak:

class Table
{
public:
    Table(std::size_t size_, int value = 0);
    ~Table();
    int operator[](std::size_t index) const;
    int& operator[](std::size_t index);
    std::size_t capacity() const;
    std::size_t size() const;
    void push_back(int value);
    std::ostream& to_os(std::ostream& os) const;
private:
    void reallocate();
    void copy_data(int * src_ptr, int * dst_ptr);
    int * data;
    std::size_t data_size;
    std::size_t capacity_size;
};

Operator wyprowadzenia na strumień będzie miał sygnaturę:

std::ostream& operator<<(std::ostream& os, const Table& tbl);

.. i wywoła to_os(...) z klasy Table.

Podobne pytania

–3 głosów
1 odpowiedź 556 wizyt
pytanie zadane 4 grudnia 2019 w Ogłoszenia, zlecenia przez SpiF Nowicjusz (120 p.)
0 głosów
1 odpowiedź 3,129 wizyt
0 głosów
0 odpowiedzi 303 wizyt
pytanie zadane 5 czerwca 2018 w Inne języki przez Eskey Nowicjusz (120 p.)

93,742 zapytań

142,678 odpowiedzi

323,297 komentarzy

63,328 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...