• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Matura informatyka 2017 - zadanie 1.2 odpowiedź

Object Storage Arubacloud
0 głosów
1,181 wizyt
pytanie zadane 25 lipca 2017 w C i C++ przez niezalogowany

Witam, rozwiązując maturę z 2017 natknąłem się na prawdopodobny błąd w odpowiedziach. Chodzi o zadanie 1.2.

https://www.cke.edu.pl/images/_EGZAMIN_MATURALNY_OD_2015/Arkusze_egzaminacyjne/2017/formula_od_2015/informatyka/MIN-R1_1P-172.pdf

Odpowiedź CKE

        int max1, max2;
	max1 = max2 = 0;
	for (int i = 1; i <= n; i++)
	{
		if (A[i] % p != 0)
		{
			if (A[i] > max1)
			{
				max2 = max1;
				max1 = A[i];
			}
			else if (A[i] > max2)
				max2 = A[i];
		}
	}

	cout << max1 * max2;

Gdzie w tym algorytmie jest inicjalizacja zmiennych takich jak n, p czy tablica A[i]? Dlaczego operacje na tablicy zaczynają się od 1 a nie od 0?

3 odpowiedzi

0 głosów
odpowiedź 25 lipca 2017 przez ziemjok Gaduła (4,160 p.)
nigdy nie rozwiązywałem zadań maturalnych z informatyki, ale kierując się przeczuciem to powiedziałbym, że skoro w treści są podane "Dane", to nie trzeba ich w algorytmie podawać. Cięzko by było zainicjalizować tablice z punktami :)

Operacje  na tablicy zaczynają się od 1 bo w "Danych" mamy napisane "A[1..n] – tablica zawierająca n różnych, dodatnich liczb całkowitych", czyli zakresem tablicy jest 1:n.

Zastanawia mnie jedno: czemu w tym podanym algorytmie rozwiązanie podane jest jako "max1 * max2" skoro w treści chcą, żeby wynik był przypisany do zmiennej S. Ale to chyba nic ważnego.
komentarz 25 lipca 2017 przez niezalogowany
Jak operacje będą się zaczynać od 1 to odpowiedzi będą błędne bo pomijamy pierwszy element czyli A[0], a to jest podstawowym błędem.
komentarz 25 lipca 2017 przez ziemjok Gaduła (4,160 p.)
no własnie nie, bo przyjmujemy że pierwszy element tablicy ma indeks 1, czyli A[1] jest pierwszym elementem

A[1..n] oznacza tablice o indeksach od 1 do n
komentarz 25 lipca 2017 przez niezalogowany
Czyli mam napisać zły algorytm, bo tak jest w poprawnie?
komentarz 25 lipca 2017 przez ziemjok Gaduła (4,160 p.)
musisz dostosować swój algorytm do danych wejściowych.

poprawność algorytmu nie ma nic do tego. Normalnie miałbyś tablice z elementami [0]...[n-1] a w tym przypadku masz [1]...[n].

Jak ciężko Ci to zrozumieć to wyobraź sobie, że mamy tablice A o długości n+1, ale pierwszy element tj z indeksem 0 nie ma znaczenia i nie uwzględniamy go w obliczeniach
komentarz 25 lipca 2017 przez niezalogowany
Póki co ciężko mi jest zrozumieć jak pisać te algorytmy, wiem jak piszę się poprawnie programy co niekoniecznie jest adekwatne do zadań maturalnych. Teraz już mniej więcej wiem o co chodzi, więc dziękuję za pomoc.
0 głosów
odpowiedź 26 lipca 2017 przez Jedras Maniak (54,860 p.)
Podpowiem, że najlepiej pisać algorytmy w części teoretycznej za pomocą pseudokodu. Na praktycznej będziesz sobie kodował.
komentarz 26 lipca 2017 przez niezalogowany
Domyślam się, że tak by było lepiej, ale niestety nie umiem pisać inaczej niż za pomocą kodu.
0 głosów
odpowiedź 26 lipca 2017 przez Sebastian Fojcik Nałogowiec (43,020 p.)
edycja 26 lipca 2017 przez Sebastian Fojcik

Ja w maturze, którą wysłałeś pisałem algorytmy w C++. Jest kilka szkół, które mówią jak się powinno algorytmy. Na pewno pseudokod nie będzie budził wątpliwości. Niestety jeśli ktoś ma już jakieś doświadczenie w pisaniu "normalnego" kodu, to przy pseudokodzie będzie się męczył. Ja tak miałem.

Pisząc swój algorytm w C++ muszę się stosować do specyfikacji. Ale nie definiowałem tablicy, którą oni podali, czyli nie pisałem:

int A[ n + 1 ];

Ani nic takiego. Jeśli jest to w specyfikacji, to uznałem, że to już istnieje. Zresztą piszą w specyfikacji, że tablica zawiera różne liczby. Jakbym sobie sam stworzył tablicę A, to mam tam sam włożyć własne liczby? No nie :-)
Więc uznajemy, że to co jest w specyfikacji ktoś już za nas zdefiniował, zainicjalizował zerami, uzupełnił itd.

No i teraz jak przełknąć tę nieszczęsną tablicę A[ 1, ... n ]. Bardzo prosto. Piszesz tak jak jest podane w specyfikacji, posługując się językiem C++. Czyli pętla wypisująca wszystkie elementy od 1 do n będzie wyglądała tak:

for( int i = 1; i <= n; i++ )
    cout << A[ i ] << endl;

Zmiennej n też nigdzie nie możesz sam zdefiniować. Ona jest, ma jakąś wartość i już :-)
Oczywiście mamy w podświadomości, że tablica w C++ ma jeszcze element A[ 0 ], ale trudno, kazali nam od 1.

Jeżeli masz wątpliwości, że pisząc algorytm coś nie jest zgodne w 100% z językiem, to napisz komentarz dla sprawdzającego. I nie mam tu na myśli komentarza w języku programowania // komentrz lub /* komentarz */. Zwyczajnie strzałeczką zaznacz miejsce wątpliwości i wyjaśnij na marginesie. Egzaminator też człowiek.

Pamiętaj również, że za brak średników czy inne drobne błędy składniowe nie zabierają punktów. W tym zadaniu oceniają Twój algorytm. Zapis algorytmu powinien być jednoznaczny, a nie się kompilować.

Wynik algorytmu możesz też również zapisać: cout << S; albo return S;. Naprawdę to zadanie nie jest aż tak sztywne. Egzaminator ocenia tylko realizację algorytmu.

Sam miałem kiedyś te wszystkie wątpliwości co Ty. Pytaj, nie błądź. Powodzenia ;-)

Podobne pytania

+5 głosów
1 odpowiedź 5,666 wizyt
0 głosów
3 odpowiedzi 543 wizyt
pytanie zadane 13 października 2020 w C i C++ przez Niepokonana7999 Bywalec (2,270 p.)
0 głosów
1 odpowiedź 594 wizyt
pytanie zadane 29 kwietnia 2018 w C i C++ przez Seyn Początkujący (300 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...