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
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 namespace std;
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;
}
#include <map>
using namespace std;
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:
- 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.
- 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.
- 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.
- Ispis rezultata:
- Na kraju, program ispisuje maksimalan dnevni pazar i datum kada je taj pazar ostvaren.
- Efikasnost: Korišćenje mape omogućava brzo ažuriranje i pronalaženje podataka, što je korisno kada postoji mnogo različitih datuma.
- Jasnoća koda: Kod je jednostavan i lako razumljiv. Mapa se koristi na intuitivan način za praćenje pazara po datumima.
- Uvođenje provere ispravnosti unosa datuma i iznosa.
- Ukoliko se očekuje veliki broj računa, može se razmotriti optimizacija prostora, iako je trenutna implementacija dovoljno efikasna za tipične slučajeve.