3.Fiskalni računi rešenje

TEKST ZADATKA:
Poznati su svi fiskalni računi koje je izdala jedna prodavnica. Sa svakog računa se može pročitati datum kada je taj račun izdat i iznos koji je naplaćen.
Napiši program koji određuje maksimalan dnevni pazar za tu prodavnicu.

Primer 1:
Ulaz:
Unesite broj fiskalnih racuna: 3
Unesite datum i iznos racuna 1 (format: DD.MM.GGGG): 01.05.2024 1500
Unesite datum i iznos racuna 2 (format: DD.MM.GGGG): 01.05.2024 2000
Unesite datum i iznos racuna 3 (format: DD.MM.GGGG): 02.05.2024 1800

Izlaz
Maksimalan dnevni pazar: 3500 dinara, datum: 01.05.2024

Primer 2:
Ulaz:
Unesite broj fiskalnih racuna: 4
Unesite datum i iznos racuna 1 (format: DD.MM.GGGG): 03.05.2024 1200
Unesite datum i iznos racuna 2 (format: DD.MM.GGGG): 03.05.2024 1700
Unesite datum i iznos racuna 3 (format: DD.MM.GGGG): 04.05.2024 2200
Unesite datum i iznos racuna 4 (format: DD.MM.GGGG): 05.05.2024 2500

Izlaz:
Maksimalan dnevni pazar: 2500 dinara, datum: 05.05.2024

Rešenje

#include <iostream>
#include <map>

using namespacestd;

int main() {
// Mapa za čuvanje dnevnog pazara (datum -> ukupan iznos)
map<string, int> dnevni_pazar;

// Unos fiskalnih računa
int n;
cout << "Unesite broj fiskalnih racuna: ";
cin >> n;

for (int i = 0; i < n; ++i) {
string datum;
int iznos;
cout << "Unesite datum i iznos racuna " << i+1 << " (format: DD.MM.GGGG): ";
cin >> datum >> iznos;

// Ažuriranje dnevnog pazara za taj datum
        dnevni_pazar[datum] += iznos;
    }

// Pronalaženje maksimalnog dnevnog pazara
int maksimalan_pazar = 0;
string datum_maksimalnog_pazara;

for (const auto& par : dnevni_pazar) {
if (par.second > maksimalan_pazar) {
            maksimalan_pazar = par.second;
            datum_maksimalnog_pazara = par.first;
        }
    }

// Ispis rezultata
cout << "Maksimalan dnevni pazar: " << maksimalan_pazar << " dinara, ";
cout << "datum: " << datum_maksimalnog_pazara << endl;

return 0;
}


Analiza koda:

Ovo rešenje zadatka je tačno i efikasno koristi map strukturu da bi pratilo ukupan dnevni pazar za svaki datum. Evo komentara po koracima:
  1. Mapa dnevni_pazar:
    • Koristi se map<string, int>, gde string predstavlja datum, a int predstavlja ukupan iznos pazara za taj datum. Mapa omogućava efikasno pronalaženje i ažuriranje iznosa pazara za svaki datum.
  2. Unos fiskalnih računa:
    • Program prvo traži od korisnika da unese broj fiskalnih računa (n). Zatim, za svaki račun, traži datum i iznos, a zatim taj iznos dodaje na već postojeći pazar za dati datum u mapi dnevni_pazar. Ako datum već postoji u mapi, novi iznos se dodaje na postojeći iznos.
  3. Pronalaženje maksimalnog dnevnog pazara:
    • Nakon unosa svih računa, program prolazi kroz sve parove u mapi dnevni_pazar i pronalazi datum sa maksimalnim pazarom.
    • maksimalan_pazar se inicijalno postavlja na 0, a svaki put kada nađe veći pazar od trenutnog maksimalnog, ažurira maksimalan_pazar i datum_maksimalnog_pazara.
  4. Ispis rezultata:
    • Na kraju, program ispisuje maksimalan dnevni pazar i datum kada je taj pazar ostvaren.
Analiza i prednosti:
Moguća poboljšanja: