Witam :) Jestem samoukiem C++ i mam mały problem: Mam dwie tablice które wyglądają następująco: a[1031] ( wypełniona losowo liczbami od 1 do 30) oraz b[30] ( wypełniona liczbami od 1 do 30). Mam za zadanie sprawdzić, do którego elementu w tablicy b[30] jest przyporządkowana największa ilość liczb z tablicy a[1031]. Pisanie 30-tu zmiennych oraz pętel warunkowych IF jest trochę czasochłonne, więc wpadłem na pomysł napisania jej tylko jednej, która będzie zapisywała i zliczała wynik w tablicy c[30]. Problem w tym że pętle które napisałem działają niepoprawnie. Byłby ktoś tak miły i podsunął mi wskazówkę jak rozwiązać ten problem? Z góry bardzo dziękuję :)
chcesz znalezc podzbior czy co? Bo nie dokonca rozumiem. Rozpisz jakis przyklad.
Masz zliczyć ile razy występuje każda z liczb z przedziału 1..30 w tablicy a, dobrze rozumiem?
Jest to zadanie z zeszłorocznej matury z informatyki, poziom podstawowy:
Zadanie 6. Przedszkolaki (10 pkt)
W Bajtkowie zakończono rekrutację dzieci do przedszkoli prowadzoną za pośrednictwem
systemu komputerowego. W plikach DZIECI.TXT i PRZEDSZKOLA.TXT zebrano dane
o dzieciach przyjętych do poszczególnych przedszkoli oraz dane o przedszkolach.
W pliku DZIECI.TXT znajduje się 1 031 wierszy z informacjami o dzieciach przyjętych
do przedszkoli, poprzedzonych wierszem nagłówkowym. W każdym wierszu znajdują się
następujące dane rozdzielone średnikami: numer PESEL poprzedzony literą p (Pesel),
nazwisko (Nazwisko), imię (Imie), płeć (Plec), wiek (Wiek), identyfikator
przedszkola (Id_przedszkola).
Przykład:
[cpp]
Pesel; Nazwisko; Imie; Plec; Wiek; Id_przedszkola
p06262204017; Swistek; Damian; chlopiec; 6; 1
p06280601672; Kowalik; Mateusz; chlopiec; 6; 17[/cpp]
W pliku PRZEDSZKOLA.TXT znajduje się 30 wierszy z informacjami o przedszkolach,
poprzedzonych wierszem nagłówkowym. W każdym wierszu znajdują się następujące dane
rozdzielone średnikami: identyfikator przedszkola (Id_przedszkola), nazwa przedszkola
(Nazwa_przedszkola), liczba miejsc w przedszkolu (Liczba_miejsc).
Przykład:
Id_przedszkola; Nazwa_przedszkola; Liczba_miejsc
7; Niepubliczne Przedszkole Bursztynowy Kompas; 40
14; Przedszkole Niepubliczne Radosny Zakatek; 32
c) Podaj nazwę przedszkola, do którego przyjęto najwięcej dzieci w wieku 3 lat, oraz liczbę
tych dzieci. Jest tylko jedno takie przedszkole.
Oba pliki załadowałem do programu, oraz użyłem tablic jednowymiarowych. Dla pliku DZIECI.TXT utworzyłem tabele:
string pesel[1031];
string nazwisko[1031];
string imie[1031];
string plec[1031];
string wiek[1031];
string id_przedszkola[1031];
Natomiast dla pliku PRZEDSZKOLA.TXT utworzyłem tabele:
string id_przedszkola2[30];
string nazwa_przedszkola[30];
string liczba_miejsc[30];
Chcę teraz porównać tabelę "id_przedszkola" z tabelą "id_przedszkola2" oraz zliczyć do którego przedszkola przyjęto najwięcej dzieci w wieku 3-ech lat
O ile dobrze zrozumiałem treść zadania to masz znaleźć pozycję ostatniego elementu podzbioru tablicy a, który odpowiada podzbiorowi tablicy b. Przy czym podzbiory zawsze liczymy od pierwszego elementu.
std::array<unsigned, 30> a;
std::array<unsigned, 1031> b;
// tataj jakiś std::generate_n
auto mismatch = std::mismatch(a.begin(), a.end(), b.begin());
std::cout << std::distance(a.begin(), mismatch.first) << std::endl; // ewentualnie -1 jeśli chcemy liczyć od 0
</del>
Edit: wrzuciłem kod nie widząc treści całego zadania ;p
Wystarcza Ci dwie petle i mapa
Najpierw do jakies tablicy/vectora wpisujesz wszystkie dzieci co maja wiek 3 (petla numer 1)
Nastepnie sortujesz ich na podstawie ID przedszkola (std::sort)
Pozniej robisz sobie mape na zasadzie
map <unsigned, unsigned>
gdzie kluczem będzie id przedszkola a wartością liczba dzieci w wieku 3 lat w rozpatrywanym przedszkolu
robisz petle (petla numer 2) i zwiekszasz value (druga liczbe) o jeden jezeli jest wystapienie
pozniej szukasz MAX dla value (std::max)
utwórz sobie tablicę c[30] gdzie początkowymi wartościami wszędzie jest 0 (reprezentuje ona przedszkola, a jej wartości to liczba przyjętych trzylatków)
z pliku dzieci czytaj linię po linii.
jezeli wiek dziecka jest równy 3 to w tablicy c na pozycji id_przdszkola zwieksz wartość o 1;
wyznacz na jakiej pozycji w c jest najwyzsza wartośc i ile ona wynosi.
No teraz wystarczy z pliku przedszkola wyciagnąc nazwę przedszkola o ustalonym id i wyświetlić info.
Przecież to zadanie na Accessa.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.