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

ocenianie na maturze z informatyki

Cloud VPS
+1 głos
136 wizyt
pytanie zadane 5 maja w Rozwój zawodowy, nauka, praca przez skalmarklarnet0291 Nowicjusz (160 p.)

Dobry wieczór,

mam pytanie odnośnie maturalnego zadania 2.2 z kwietnia 2020 roku z informatyki. Polegało ono na tym żeby napisać w pseudokodzie lub wybranym języku programowania (z niczego nowymi restrykcjami) algorytm, który odszukiwałby modę (wartość w tablicy, która występuję najczęściej) z danymi wejściowymi:

n - liczba całkowita większa od 2;

T[1, 2, ..., n] - tablica z n liczb całkowitych i dokładnie jedną modą.

Napisałem kod ale nie jestem pewien, czy otrzymałbym 5 punktów, czy 3 punkty.

def moda(T, n):
    l = 1
    while l < n:
        for i in range(n):
            m = 0
            for j in range(n):
                if T[i] == T[j]:
                    m+=1
                    if m == l:
                        moda = T[i]
                        break
            
        l += 1
    return moda

Przyznaję, kod jest dość prymitywny. Nie myślałem o złożoności czasowej (tu tj. sześcienna), bo nie była ona narzucona przez zadanie, jednak w schemacie punktowania 5 punktów otrzymało się w sposób następujący:

2p. - za zliczenie liczby wystąpień każdej liczby,

2p. - za znalezienie największej liczby wystąpień,

1p. - za znalezienie mody

Jak widać w załączonym kodzie, mój zlicza wszystkie możliwe (+1, co zrozumiałem po chwili namysłu nad moim kodem) liczby wystąpień, ale nie znajduje największej, tylko liczbę z największą liczbą wystąpień, czyli modę.

Chcę się dowiedzieć, czy dostałbym maks. liczbę punktów czy ucięliby mi te dwa punkty za to, że nie mój kod nie znajduje czegoś, o czym nie było mowy w zadaniu. Bardzo tego potrzebuję, ponieważ chcę wiedzieć, czy mam zwracać na to uwagę. Jeżeli mój kod w jakimś stopniu odbiega nawet od pozostałych kryteriów, proszę o tym powiedzieć, jeśli zajdzie Was ochota.

Pozdrawiam,

skalmarklarnet0291

1 odpowiedź

0 głosów
odpowiedź 6 maja przez SzkolnyAdmin Szeryf (90,110 p.)
wybrane 6 maja przez skalmarklarnet0291
 
Najlepsza
A może spróbuj tak:

1. Utwórz tablicę asocjacyjną (w Pythonie to słownik, dictionary), w której przeglądając tablicę danych będziesz umieszczał liczbę z tablicy danych jako klucz oraz liczbę jej wystąpień jako wartość. W przypadku znalezienia po raz pierwszy danej liczby, wartość w słowniku wynosi 1, w przypadku powtórzenia liczby danej inkrementujesz odpowiednią wartość ze słownika.

2. Szukasz największej liczby wystąpień, czyli iterujesz słownik w poszukiwaniu maksymalnej wartości.

3. Dla znalezionej wartości w punkcie 2 odczytujesz klucz, czyli szukaną modę.
komentarz 6 maja przez skalmarklarnet0291 Nowicjusz (160 p.)
edycja 6 maja przez skalmarklarnet0291

Dzień dobry,

będąc szczerym to zrobiłbym tak już wcześniej, ale myślałem z jakiegoś powodu, że wykracza to poza kryteria zadania:

Uwaga: w zapisie możesz wykorzystać tylko operacje arytmetyczne (dodawanie, odejmowanie, mnożenie, dzielenie, dzielenie całkowite, reszta z dzielenia), odwoływanie się do pojedynczych elementów tablicy, porównywanie liczb, instrukcje sterujące i przypisania do zmiennych lub samodzielnie napisane funkcje zawierające wyżej wymienione operacje.

Tablic asocjacyjnych już używałem nieraz i wiem, jak bardzo one mogą ułatwić życie. Ale teraz czy to nie wykracza poza schemat tego zadania?  Jeśli tak, to rozumiem, że dodawanie do tablicy asocjacyjnej nowych wpisów wchodzi w zakres przypisywania do zmiennych?

 

def moda(T,n):
    D = {
    }
    maks = 0
    moda = 0
    for i in range(n):
        D[T[i]] = 0      
    for i in range(n):
        D[T[i]] += 1
        if D[T[i]] > maks:
            maks = D[T[i]]
            moda = T[i]        
    return moda

 

Wygląda o wiele bardziej przejrzyście niż tamten i ma złożoność dwuliniową. Teraz tylko czy ten kod spełnia podane kryteria i za niego otrzymałbym maks. punktów?

Pozdrawiam,

skalmarklarnet0291

komentarz 6 maja przez SzkolnyAdmin Szeryf (90,110 p.)
Tablice są standardowym elementem języka i są wymagane na maturze, więc trzeba z nich korzystać. Powinieneś otrzymać wszystkie punkty, ponieważ spełniłeś oceniane kryteria: druga pętla to zliczenie wystąpień każdej liczby, a zawarta w niej instrukcja warunkowa to znalezienie maksymalnej liczby wystąpień i odpowiadającej im mody.
komentarz 6 maja przez skalmarklarnet0291 Nowicjusz (160 p.)
Dzień dobry,

bardzo dziękuję za dogłębne wyjaśnienie. Teraz rozumiem, jak ocenić optymalność mojej metody w zadaniach tego typu.

Pozdrawiam,

skalmarklarnet0291

Podobne pytania

0 głosów
1 odpowiedź 436 wizyt
0 głosów
1 odpowiedź 1,369 wizyt
0 głosów
1 odpowiedź 2,036 wizyt

93,455 zapytań

142,450 odpowiedzi

322,719 komentarzy

62,837 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

Kursy INF.02 i INF.03
...