Porównywanie danych z tablic

0

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ę :)

0

chcesz znalezc podzbior czy co? Bo nie dokonca rozumiem. Rozpisz jakis przyklad.

0

Masz zliczyć ile razy występuje każda z liczb z przedziału 1..30 w tablicy a, dobrze rozumiem?

0

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

0

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

3

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)

2

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.

0

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.