Porównywanie danych z tablic

Odpowiedz Nowy wątek
2015-02-01 10:21
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ę :)

Pozostało 580 znaków

2015-02-01 10:45
0

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

Pozostało 580 znaków

2015-02-01 10:50
0

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

Pozostało 580 znaków

2015-02-01 11:02
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

edytowany 2x, ostatnio: luuuzik, 2015-02-01 11:04

Pozostało 580 znaków

2015-02-01 11:03
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

edytowany 1x, ostatnio: satirev, 2015-02-01 11:06

Pozostało 580 znaków

2015-02-01 11:15
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)

edytowany 3x, ostatnio: fasadin, 2015-02-01 11:25
wystarczy mapa <unsigned, unsigned>, gdzie kluczem będzie id przedszkola a wartością liczba dzieci w wieku 3 lat w rozpatrywanym przedszkolu. - satirev 2015-02-01 11:23

Pozostało 580 znaków

2015-02-01 11:17
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.

edytowany 1x, ostatnio: zadroozyn, 2015-02-01 11:17

Pozostało 580 znaków

2015-02-01 13:13
Pijany Kaczor
0

Przecież to zadanie na Accessa.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0