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

Matura próbna z informatyki 2020 - Zadanie 4.2

VPS Starter Arubacloud
0 głosów
763 wizyt
pytanie zadane 8 lutego 2021 w Offtop przez Olewojt Nowicjusz (150 p.)
Głowię się nad tym zadaniem od dwóch dni. Kod piszę w Pythonie, próbowałem różnorakich porównań elementów w tablicy, lecz to wszystko daje niepoprawny wynik. Jak upewnić się że dany element tablicy jest początkiem ciągu o danej różnicy?

Link do arkusza:
https://arkusze.pl/maturalne/informatyka-2020-kwiecien-probna-rozszerzona-2.pdf
komentarz 8 lutego 2021 przez manjaro Nałogowiec (37,390 p.)
Daj jeszcze link do pliku z danymi i pokaż kod do 4.1
komentarz 8 lutego 2021 przez Olewojt Nowicjusz (150 p.)

https://arkusze.pl/maturalne/informatyka-2020-czerwiec-matura-rozszerzona-zalaczniki.zip

Kod do 4.1

 

T = []

f = open("dane4.txt", "r")

for x in f:
    T.append(int(x))    

def roznica(T):
    maxR = 0
    minR = 9999999999999999999
    for x in range(len(T)):
        if(x == 0):
            continue
        roznica = T[x] - T[x-1]
        roznica = abs(roznica)
        if roznica > maxR:
            maxR = roznica
        if roznica < minR:
            minR = roznica
    print("Maksymalna roznica: ", maxR)
    print("Minimalna roznica: ", minR)


roznica(T)


 

2 odpowiedzi

+1 głos
odpowiedź 8 lutego 2021 przez manjaro Nałogowiec (37,390 p.)

Tak bym to zrobił

 

T=[]
f = open("dane4.txt", "r")
for x in f:
    T.append(int(x))
f.close()

def roznica(T):
    max = T[0]
    min = T[0]
    for i in range(1,len(T)):
        luka = abs(T[i]-T[i-1])
        if luka > max:
            max = luka
        elif luka < min:
            min = luka
    print("Najmniejsza: {}".format(min))
    print("Największa: {}".format(max))

def regularny(T):
    poczatek = T[0]
    koniec = T[1]
    dlugosc = 2
    max_dlugosc = 2
    luka_1 = abs(T[1]-T[0])
    wynik = [poczatek, koniec, dlugosc]

    for i in range(2,len(T)):
        luka_2 = abs(T[i] - T[i - 1])
        if luka_2 == luka_1:
            dlugosc +=1
            if dlugosc > max_dlugosc:
                koniec = T[i]
                max_dlugosc = dlugosc
                wynik = [poczatek, koniec, dlugosc]
        else:
            poczatek = T[i-1]
            dlugosc = 2
            luka_1 = luka_2
    print("Największa długość fragmentu regularnego: {}".format(wynik[2]))
    print("Początek: {}".format(wynik[0]))
    print("Koniec: {}".format(wynik[1]))


print("4.1")
roznica(T)
print("\n4.2")
regularny(T)

 

0 głosów
odpowiedź 8 lutego 2021 przez KopfSzmercen Bywalec (2,870 p.)

Ja zrobiłem to w taki sposób:

def second(numbers):
    my_max = {
        "start": -1,
        "end": -1,
        "length": 0
    }
    i = 1
    while i < len(numbers) - 1:
        diff = abs(numbers[i] - numbers[i - 1])

        start = i - 1
        end = i + 1

        while end < len(numbers):
            if abs(numbers[end] - numbers[end - 1]) == diff:
                end += 1
            else:
                break

        if end - start > my_max["length"]:
            my_max["start"] = numbers[start]
            my_max["end"] = numbers[end - 1]
            my_max["length"] = end - start
        i = end

    return my_max

Może nie jest to najlepsze rozwiązanie (tym bardziej Pythonowe) jakie może być, ale wynik się zgadza więc może znajdziesz w moim rozwiązaniu jakiś trop który przyniesie Ci jakiś pomysł jak to rozwiązać.

Podobne pytania

0 głosów
1 odpowiedź 1,065 wizyt
0 głosów
0 odpowiedzi 1,029 wizyt
pytanie zadane 26 kwietnia 2021 w C i C++ przez Pawolo122 Początkujący (330 p.)
–2 głosów
0 odpowiedzi 924 wizyt

93,079 zapytań

142,043 odpowiedzi

321,449 komentarzy

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

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...