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

Alternatywny kod i błędny wynik

+1 głos
665 wizyt
pytanie zadane 1 grudnia 2024 w Python przez ceiem Nowicjusz (210 p.)

Cześć, piszę program, w którym mam 3 pliki z temperaturami i mam wyznaczyć ilość rekordów w w co najmniej jednym z tych plików. Mam kod, który dziala i go rozumiem:

for i in range(1, n):
	check = False
	if s1[i][1]>max1:
		max1=s1[i][1]
		check = True
	if s2[i][1]>max2:
		max2=s2[i][1]
		check = True
	if s3[i][1]>max3:
		max3=s3[i][1]
		check = True
	if check == True:
		record += 1

Oraz swój kod, gdzie nie widzę błędów:

for i in range(1, n):
	if s1[i][1]>max1:
		max1=s1[i][1]
		record += 1
	elif s2[i][1]>max2:
		max2=s2[i][1]
		record += 1
	elif s3[i][1]>max3:
		max3=s3[i][1]
		record += 1

W pierwszym kodzie wynik jest 42 i jest poprawne rozwiązanie, a w moim rozwiązaniu wynik jest 55 i nie rozumiem co robie źle. Czy ktoś mógłby mi pomóc w przeanalizowaniu mojego kodu po kątem występującej rozbieżności w odpowiedzi?

komentarz 1 grudnia 2024 przez overcq Pasjonat (22,630 p.)
A reszty kodu i opisu trzeba się domyślać?
1
komentarz 1 grudnia 2024 przez overcq Pasjonat (22,630 p.)
Ponieważ umieściłeś “else”, to nie oblicza odrazu rekordu temperatury dla danej stacji pomiarowej, tylko z opóźnieniem. I w takim razie zalicza jako rekord dla danej stacji pomiarowej dzień późniejszy niż rzeczywisty pierwszy dzień rekordu.

Dlatego wynik jest większy od poprawnego. Trzeba rejestrować rekord dla każdej stacji pomiarowej odrazu, a nie zwłocznie, bo to nie jest już rekord, ale ta sama temperatura, która już była w tej stacji pomiarowej wcześniej.
komentarz 2 grudnia 2024 przez ceiem Nowicjusz (210 p.)
Tylko w zadaniu trzeba podać ilość rekordów w conajmniej jednej stacji. A instrukcja wilodecyzyjna przecież przerywa się jeśli np. warunek po IF jest spełniony. To dalej nie liczy, a rekord z pierwszej stacji się zlicza. Analogicznie jeśli po IF instrukcja się nie wykona to idzie do elif i jeśli instrukcja się wykona rekord się zlicza. Czegoś nie rozumiem, ale nie wiem czego.
1
komentarz 2 grudnia 2024 przez overcq Pasjonat (22,630 p.)
edycja 2 grudnia 2024 przez overcq

Zobacz na przykładzie.

Dla dwóch stacji pogodowych
listowanych w wierszach

Legenda:
^ rekord temperatury stacji pogodowej
- zgubiony rekord stacji pogodowej
+ nadmiarowy rekord stacji pogodowej
* dzień rekordowy


Dla Twojego kodu z “else”:

1   1   2   1   2   1
^       ^
0   1   2   0   1   2
^   ^   -           +
*   *   *           *


Dla oryginalnego kodu:
1   1   2   1   2   1
^       ^
0   1   2   0   1   2
^   ^   ^
*   *   *

W Twoim kodzie ignorujesz sytuację, gdy w tym samym dniu w innej stacji pogodowej był jej własny rekord temperatury, doprowadzając do zaliczenia tego rekordu stacji pogodowej w przyszłości. Gubisz rekordy własne innych stacji pogodowych, gdy zaistniał rekord jednej z nich.

komentarz 2 grudnia 2024 przez ceiem Nowicjusz (210 p.)
Już rozumiem. Bardzo Ci dziękuje.

2 odpowiedzi

0 głosów
odpowiedź 1 grudnia 2024 przez ceiem Nowicjusz (210 p.)

Załączam treść zadania

 

komentarz 1 grudnia 2024 przez reaktywny Nałogowiec (46,230 p.)
Skopiuj (przepisz) to i wklej sam tekst.
0 głosów
odpowiedź 1 grudnia 2024 przez ceiem Nowicjusz (210 p.)
Czyli mojego rozwiązania nie da się zmodyfikować, aby było poprawne?
komentarz 1 grudnia 2024 przez reaktywny Nałogowiec (46,230 p.)
Ni cholery ;) Uzyskasz pomoc jak poprawnie podasz treść zadania.

Podobne pytania

0 głosów
1 odpowiedź 264 wizyt
pytanie zadane 28 grudnia 2016 w Python przez redstar1 Bywalec (2,200 p.)
–1 głos
0 odpowiedzi 301 wizyt
pytanie zadane 19 listopada 2017 w C i C++ przez simonl0 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 909 wizyt
pytanie zadane 27 lipca 2020 w PHP przez Samek2222 Początkujący (440 p.)

93,729 zapytań

142,668 odpowiedzi

323,283 komentarzy

63,288 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...