Odpowiedź w załącznikach. Jak dla mnie to co napisałaś było zbyt przekombinowane abym z tego coś wycisnąć. Za to rozwiązałam wszystkie trzy zadania. :) Zwróć przy okazji uwagę na wymagania zadania. Na przykład proszono o napisanie, które zadanie...
Natomiast wzięłam z Twojego programu pomysł na czytanie w pętli do końca wiersza. Jest to inaczej niż zrobiłam w tym samym zadaniu
tak więc możesz zechcieć popatrzeć i porównać. Tam zamiast pętli while użyłam w tym przypadku naturalniejszej pętli for, ponieważ wiadomo iż jest dokładnie 12 miesięcy... :) Pisanie polskich liter też jest inaczej rozwiązane.
Trudno mi było pisać w ciemno. Jeśli mogłabyś, to poproszę wykonaj program w C++ (ostatni załącznik), który powie jaki kompilator i który standard języka. Dziękuję!
W każdym przypadku użyłam struktury danych, która była najbardziej odpowiednia do zadania.
Najlepiej pisanie byłoby zacząć od zadania 5.2. Widać, że prosta tablica asocjacyjna = słownik (ang. dictionary) jest najlepszym rozwiązaniem. W C++ taką strukturę danych inicjalizuje się przez map. Kluczem jest kod dzielnicy, a wartość jest wyliczana według warunków zadania. Nie musimy wiedzieć ile jest dzielnic...
Nieco trudniejsze jest zadanie 5.3, bo wartością musi być tablica zawierająca 12 elementów. W C++ można wstawić ją tylko pośrednio używając struct. Tak już po prostu jest. Potem jest praktycznie tak samo jak w zadaniu 5.2, tylko że nie sumuje się wartości miesięcznych. Znalezienie wartości największej najlepiej pozostawić na moment drukowania (wypisywania) wyniku.
Zarówno w przypadku 5.2 oraz 5.3 wprawdzie nie ma wymogu aby wynik wydrukować w jakimś porządku, jednak ładnie :) wygląda alfabetycznie kodami dzielnic, co jest efektem ubocznym tego, że map sortuje listę po każdym wstawieniu. Dodatkowo map ma jeszcze taką miłą właściwość, że jeśli jakiś klucz nie istnieje, to zostanie po prostu automagicznie wstawiony.
Doszłam teraz do zadania 5.1. Byłoby miło znowu użyć map, ponieważ lista byłaby automatycznie posortowana według kluczy, ale niestety klucze nie mogą się powtarzać... Na szczęście jest multimap w którym klucze mogą się powtarzać! Algorytmy zadań 5.2 oraz 5.3 to zwykła arytmetyka. Natomiast w 5.1 inicjalizuję listę 10 klientów używając zużycia wody zero (0). Mogłabym zapewne bardziej elegancko przypisać zużycie ujemne, ale to już następnym razem... Czytając kolejne wiersze pliku z danymi dodaję nowo wczytanego klienta jako jedenastą pozycję. Po dodaniu multimap sortuje listę. A ja następnie usuwam z listy element o najmniejszym kluczu.
Wyjaśnienie
Używając bieżących wersji GCC (g++), clang oraz Visual Studio program zadziała bez żadnych zmian. W przypadku GCC oraz clang można usunąć pierwszą linię ( #define ) ponieważ jest ona w przypadku GCC oraz clang zbędna. Bieżąca wersja GCC oznacza GCC 10.1 wydany 7 maja 2020 r. lub nowszy. Najnowszą wersją jest GCC 11.2 z 28 lipca 2021 r.
Ale! Program zadziała bez żadnych zmian tylko dla następujących wersji języka (dla następujących standardów) C++11, C++14 oraz C++17. W przypadku użycia wersji C++20 należy wszędzie w funkcji fprintf() usunąć u8. Niestety wtedy – ale tylko wtedy gdyby używać wersji C++20 – używając kompilatora MSVC (Visual Studio) należy we wszystkich wywołaniach fprintf() zamienić polskie znaki na odpowiadające im litery ASCII, inaczej w pliku wynikowym będą w miejscach polskich liter znaki zapytania.
Używając starszych wersji GCC – np. Code::Blocks używa starszych wersji GCC ! – należy w nazwach zmiennych zamienić polskie znaki na odpowiadające im litery ASCII, inaczej nie będzie można tak napisanego programu skompilować. Można usunąć pierwszą linię ( #define ) ponieważ jest ona w przypadku GCC zbędna.
0 votes Thanks 0
kasiaskteka
nie da się tego zrobić prościej? na prostych tablicach?
0AB
Zadanie 5.3 zrobiłam na tablicy typu "vector" w https://brainly.pl/zadanie/21208966
Ale to nie jest prościej. Objaśniłam dlaczego nie jest. Dlatego w C++ są różne kontenery, że w zależności od problemu potrzebne są różne struktury danych.
Odpowiedź
Odpowiedź w załącznikach. Jak dla mnie to co napisałaś było zbyt przekombinowane abym z tego coś wycisnąć. Za to rozwiązałam wszystkie trzy zadania. :) Zwróć przy okazji uwagę na wymagania zadania. Na przykład proszono o napisanie, które zadanie...
Natomiast wzięłam z Twojego programu pomysł na czytanie w pętli do końca wiersza. Jest to inaczej niż zrobiłam w tym samym zadaniu
tak więc możesz zechcieć popatrzeć i porównać. Tam zamiast pętli while użyłam w tym przypadku naturalniejszej pętli for, ponieważ wiadomo iż jest dokładnie 12 miesięcy... :) Pisanie polskich liter też jest inaczej rozwiązane.
Trudno mi było pisać w ciemno. Jeśli mogłabyś, to poproszę wykonaj program w C++ (ostatni załącznik), który powie jaki kompilator i który standard języka. Dziękuję!
W każdym przypadku użyłam struktury danych, która była najbardziej odpowiednia do zadania.
Najlepiej pisanie byłoby zacząć od zadania 5.2. Widać, że prosta tablica asocjacyjna = słownik (ang. dictionary) jest najlepszym rozwiązaniem. W C++ taką strukturę danych inicjalizuje się przez map. Kluczem jest kod dzielnicy, a wartość jest wyliczana według warunków zadania. Nie musimy wiedzieć ile jest dzielnic...
Nieco trudniejsze jest zadanie 5.3, bo wartością musi być tablica zawierająca 12 elementów. W C++ można wstawić ją tylko pośrednio używając struct. Tak już po prostu jest. Potem jest praktycznie tak samo jak w zadaniu 5.2, tylko że nie sumuje się wartości miesięcznych. Znalezienie wartości największej najlepiej pozostawić na moment drukowania (wypisywania) wyniku.
Zarówno w przypadku 5.2 oraz 5.3 wprawdzie nie ma wymogu aby wynik wydrukować w jakimś porządku, jednak ładnie :) wygląda alfabetycznie kodami dzielnic, co jest efektem ubocznym tego, że map sortuje listę po każdym wstawieniu. Dodatkowo map ma jeszcze taką miłą właściwość, że jeśli jakiś klucz nie istnieje, to zostanie po prostu automagicznie wstawiony.
Doszłam teraz do zadania 5.1. Byłoby miło znowu użyć map, ponieważ lista byłaby automatycznie posortowana według kluczy, ale niestety klucze nie mogą się powtarzać... Na szczęście jest multimap w którym klucze mogą się powtarzać! Algorytmy zadań 5.2 oraz 5.3 to zwykła arytmetyka. Natomiast w 5.1 inicjalizuję listę 10 klientów używając zużycia wody zero (0). Mogłabym zapewne bardziej elegancko przypisać zużycie ujemne, ale to już następnym razem... Czytając kolejne wiersze pliku z danymi dodaję nowo wczytanego klienta jako jedenastą pozycję. Po dodaniu multimap sortuje listę. A ja następnie usuwam z listy element o najmniejszym kluczu.
Wyjaśnienie
Ale to nie jest prościej. Objaśniłam dlaczego nie jest. Dlatego w C++ są różne kontenery, że w zależności od problemu potrzebne są różne struktury danych.