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

Klasa, problem z treścią zadania

Object Storage Arubacloud
+1 głos
235 wizyt
pytanie zadane 21 listopada 2016 w C i C++ przez alchem Obywatel (1,210 p.)

Cześć, mam pewne zadanie:

Napisz klasę, która będzie umiała przechowywać pary złożone z daty i liczby zmiennoprzecinkowej. Klasa ta ma być modelować funkcję, której argumentem jest obiekt typu Data, a wartością liczba (tzn. klasa ma mieć stosowną metodę -jaką najlepiej?- która wywołana z argumentem typu Data zwróci liczbę). Po skonstruowaniu obiekt tej klasy ma być pusty - nie zawierać żadnych par, ma mieć jednak możliwość dodawania kolejnych par. W przypadku dodawania pary, dla klucza której (tzn. daty) jest już przypisana jakaś wartość, nowa wartość ma zastąpić starą. Jak sygnalizować użytkownikowi, że pyta o wartość dla klucza, dla którego jeszcze wartości nie podano? Napisz funkcję testującą aby zademonstrować działanie. Nie używaj bibliotecznej klasy std::map. 

Nie rozumiem  pogrubionego fragmentu, na jakiej zasadzie ma to działać?

Mój kod:

main.cpp

#include <iostream>
#include "Data.hpp"
#include "KlasaMapy.hpp"
using namespace std;

int main()
{
   Data a(12,11,2015);
   Data c(1,1,2016);
   KlasaMapy b;
   b.Dodaj({1,3,2015},2.23);
   b.Dodaj(c,3.23);
   b.Dodaj({12,11,2015},3.23);
   cout << "f("<<a<<") = " <<b.funkcja(a)<<endl;

   return 0;
}

Data.hpp

#ifndef Data_hpp
#define Data_hpp


#include <iostream>

void test_Data(void);

using namespace std;

class Data
{
   int dzien_;
   int miesiac_;
   int rok_;
   public:
   Data(int dzien , int miesiac , int rok);
   friend ostream& operator << (ostream &output, const Data &d);
   friend void test_Data(void);
   friend bool operator == (const Data & a,const  Data & b);
   friend bool operator != (const Data & a,const  Data & b);

   //~Data();

};



#endif

Data.cpp

#include <iostream>
#include "Data.hpp"
#include <cassert>
#include <sstream>


using namespace std;

void poprawna_data(int dzien, int miesiac, int rok);


Data::Data(int dzien, int miesiac, int rok)
:dzien_(dzien),miesiac_(miesiac),rok_(rok)
{

  poprawna_data(dzien_,miesiac_,rok_);

}



void poprawna_data(int dzien, int miesiac, int rok)
{
    
}


ostream& operator << (ostream &output, const Data &d)
{
  output << d.dzien_<<"-"<<d.miesiac_<<"-" <<d.rok_;

    return output;
}


bool operator == (const Data & a,const  Data & b)
{

return (a.dzien_==b.dzien_ && a.miesiac_ == b.miesiac_ && a.rok_ == b.rok_);

}

bool operator != (const Data & a,const  Data & b)
{

return (!(a==b));

}

Klasamapy.hpp

#ifndef KlasaMapy_hpp
#define KlasaMapy_hpp

#include <iostream>
#include "Data.hpp"
#include <vector>

class KlasaMapy
{

    std::vector <Data> argumenty_;
    std::vector <double> wyniki_;


public:
    void Dodaj(Data d, double liczba);
    double funkcja(Data d);


};


#endif

Klasamapy.cpp

#include <iostream>
#include <cassert>
#include <algorithm>
#include "KlasaMapy.hpp"



double KlasaMapy::funkcja(Data d)
{
  
    if(argumenty_.size()==0)
    {
        cerr << "brak argumentow!";
        exit(0);
    }

    int rozmiar;
    for(rozmiar = 0; rozmiar < argumenty_.size(); rozmiar++)
    {
        if(d == argumenty_[rozmiar])
            break;
    }

    if(rozmiar == argumenty_.size()  && argumenty_[argumenty_.size()-1] != d)
    {
        cerr <<"brak wyniku dla tego argumentu!\n";
        exit(0);
    }

    return wyniki_[rozmiar];

}

void KlasaMapy::Dodaj(Data d, double liczba)
{
    argumenty_.push_back(d);
    wyniki_.push_back(liczba);

}

 

1 odpowiedź

+1 głos
odpowiedź 21 listopada 2016 przez mbabane Szeryf (79,280 p.)
edycja 22 listopada 2016 przez mbabane

Mapa dziala na takiej zasadzie ze jest para (Klucz, Dana), cos jak tablica - kazda komorka ma indeks, a po podaniu indeksu dostaje sie wartosc/dana - klucz w wypadku mapy bedzie jednoznacznie identyfikowal dana (tak jak klucz glowny w tabeli bazy danych identyfikuje jeden rekord). Kluczem moze byc co chcesz: string, liczba calkowita (chyba najbardziej intuicyjna).

Pierwsze zdanie z pogrubionego - oczywistym jest ze jesli chce "dodac" cos do istniejacego elementu w tablicy/mapie to automatycznie stary element jest zastepowany przez nowy.

Jak sygnalizować użytkownikowi, że pyta o wartość dla klucza, dla którego jeszcze wartości nie podano?

 W tresci jest:

 Po skonstruowaniu obiekt tej klasy ma być pusty - nie zawierać żadnych par

Mapa ma byc pusta wiec przy dodawaniu nowych elementow musisz sprawdzic czy podawany klucz istnieje, jesli nie to wiadomo co. 

Podobne pytania

0 głosów
1 odpowiedź 339 wizyt
pytanie zadane 26 stycznia 2021 w C i C++ przez matios309 Początkujący (310 p.)
0 głosów
1 odpowiedź 228 wizyt
pytanie zadane 4 października 2016 w C i C++ przez Kasztan Dyskutant (8,080 p.)
0 głosów
1 odpowiedź 385 wizyt

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...