Zapisz jednym zdaniem, co jest wymagane do znalezienia
Treść zadania często zawiera opis sytuacji, ale program ma zwrócić konkretną wartość. Wynik zadania może być liczbą, wskaźnikiem wystąpień, sumą elementów spełniających warunek lub wartością logiczną określającą cechę danych. Zapisz wynik zadania przed wyborem pętli i zmiennych.
Reguła
Najpierw nazwij wynik
Jeśli polecenie dotyczy temperatur z kilku dni, nie zaczynaj od pytania o wczytanie listy. Trzeba znaleźć największą temperaturę i liczbę dni z temperaturą ujemną. Dopiero po określeniu, co trzeba znaleźć, należy dobrać odpowiednie operacje.
Oddziel dane wejściowe od wyniku
Dane wejściowe to wartości zapisane w pliku lub podane w poleceniu. Wynik jest generowany dopiero w trakcie działania programu. Program nie otrzymuje gotowej sumy ani informacji o najmniejszym elemencie, musi je obliczyć samodzielnie na podstawie danych wejściowych. Program musi obliczyć sumę i znaleźć najmniejszy element, a następnie przechować te wartości w zmiennych.
| Fragment zadania | Znaczenie w programie |
|---|---|
| W pierwszym wierszu znajduje się n | Liczba danych do odczytania. |
| W kolejnych wierszach podano liczby | Wartości, po których trzeba przejść. |
| Wypisz liczbę spełniających warunek | Wynik, który trzeba zliczyć. |
Warto zapamiętać
Mały przykład pomaga zrozumieć strukturę zadania
Dla danych 4, 7, 7, 2 liczba różnych wartości wynosi 3. Taki przykład pokazuje, że samo przejście po elementach nie wystarczy: trzeba jeszcze pamiętać, które wartości już wystąpiły.
Słowa, które cicho zmieniają całe zadanie
W treści zadania kilka słów może znacząco wpłynąć na warunek w programie. Różnią się jedną literą, a dają inny wynik na tych samych danych. Podczas czytania zadania warto podkreślać słowa różniące się jedną literą, ponieważ mogą one decydować o poprawności technicznej rozwiązania, ale niekoniecznie o jego zgodności z poleceniem.
| Sformułowanie | Co znaczy w kodzie |
|---|---|
| co najmniej trzy | warunek większy lub równy trzy |
| więcej niż trzy | warunek ostry, sama trójka nie wchodzi |
| dokładnie trzy | równość, ani mniej, ani więcej |
| kolejne elementy | elementy sąsiadujące w danych, nie dowolne |
| różne wartości | powtórzenia liczone raz |
| pierwszy taki element | przerwij po znalezieniu, nie przeglądaj dalej |
| wszystkie takie elementy | zbieraj do listy, nie zatrzymuj się |
Ostatnie dwa wiersze zadania często są mylone przez programistów. Różnica między programem szukającym pierwszego pasującego elementu a programem zbierającym wszystkie elementy sprowadza się do jednej instrukcji, ale dla danych z powtórzeniami może to prowadzić do zupełnie różnych wyników.
Pułapka
Kolejne nie równa się dowolnemu
Zadanie dotyczy analizy sąsiedztwa wartości w danych, gdzie wymagane są trzy kolejne rosnące wartości. Program sprawdzający dowolne trzy rosnące wartości prawie zawsze je znajdzie i zwróci wynik, którego nikt nie zamawiał.
Sprawdź skrajne przypadki i powtarzające się wartości
Program może poprawnie obsługiwać podany przykład, ale zawierać błędny warunek w innych przypadkach. Przed napisaniem rozwiązania przygotuj dane testowe z jednym elementem, z samymi powtórzeniami oraz z wartościami skrajnymi. Takie testy sprawdzają, czy pętla poprawnie inicjuje i kończy działanie.
Pułapka
Nie ograniczaj się do testowania łatwych danych
Jeśli program szuka największej liczby, zaczynając od zera, dla danych ujemnych wynik będzie błędny. Zmienna początkowa powinna być inicjalizowana wartością z danych lub wartością mniejszą od najmniejszego możliwego elementu.
Czytaj całe zadanie przed pisaniem kodu
Zadanie programistyczne w arkuszu często składa się z kilku podpunktów, które odnoszą się do tego samego pliku z danymi. Pierwszy podpunkt często dotyczy prostego przetwarzania danych, a kolejne wprowadzają dodatkowe warunki lub porównania. Przeczytanie wszystkich podpunktów przed napisaniem kodu pozwala zidentyfikować wspólne elementy danych wejściowych, które można przetworzyć jednorazowo.
Typowa strata czasu polega na tym, że rozwiązując pierwszy podpunkt zadania, wczytujesz dane w wygodnej dla niego strukturze, a przy kolejnych podpunktach okazuje się, że trzeba je wczytać ponownie w innej formie. Jedno przejrzenie całego zadania na początku kosztuje dwie minuty.
- Przeczytaj wszystkie podpunkty zadania przed rozpoczęciem kodowania.
- Sprawdź, czy któryś z podpunktów wymaga danych w innej postaci niż pozostałe.
- Wczytaj dane raz do struktury, która obsłuży wszystkie podpunkty.
- Rozwiązuj podpunkty zadania po kolei i zapisuj wynik każdego od razu.
Reguła
Zapisz każdy podpunkt przed kontynuacją
Podpunkty należy czytać osobno. Wynik obliczony bez zapisania nie jest uznawany za poprawny, a próba jego odtworzenia po dłuższym czasie jest niemożliwa bez pełnego kontekstu.
Sprawdź, co dokładnie ma być w pliku
Ostatnie zdanie polecenia wskazuje zazwyczaj na wymaganą formę odpowiedzi, np. liczba, kilka liczb w jednym wierszu, wartości rozdzielone spacją lub wynik zaokrąglony do dwóch miejsc. Program, który poprawnie oblicza wynik, ale zapisuje go w niewłaściwym formacie, może zostać uznany za niepoprawny.
- Sprawdź nazwę pliku wynikowego, znak po znaku.
- Sprawdź, czy każdy podpunkt ma osobny wiersz w pliku.
- Sprawdź sposób zapisu liczb, uwzględniając zaokrąglenie, separator dziesiętny i jednostki.
- Po zapisaniu pliku otwórz go i przeczytaj w całości.
Ostatni punkt jest najtańszym sprawdzeniem w całym zadaniu i najczęściej pomijanym. Plik wynikowy jest jedyną rzeczą, którą zobaczy osoba sprawdzająca, więc warto go wcześniej przejrzeć.
Sprawdź
Sprawdź poprawność danych przed wykonaniem
Przeczytaj swój opis rozwiązania, nie patrząc na kod. Sprawdź, jak pierwszy element wpływa na wynik i kiedy pętla zostaje zakończona. Jeśli nie możesz wskazać, co dokładnie dzieje się z pierwszym elementem i jak to wpływa na wynik, opis rozwiązania wymaga doprecyzowania.
Rozłóż polecenie na części pierwsze
W pliku dane.txt znajduje się 1000 wierszy, z których każdy zawiera datę i temperaturę rozdzielone spacją. Należy policzyć liczbę dni, w których temperatura była ujemna, oraz znaleźć najwyższą odnotowaną temperaturę. Zapisz wyniki w pliku wyniki.txt, każdą odpowiedź w osobnym wierszu. Przed napisaniem kodu, rozłóż polecenie na cztery części.
| Fragment polecenia | Co z niego wynika |
|---|---|
| 1000 wierszy | rozmiar danych; jedno przejście pętlą wystarczy |
| data i temperatura rozdzielone spacją | wiersz trzeba rozbić na dwie części, druga to liczba |
| ile było dni z temperaturą ujemną | licznik zwiększany przy warunku mniejszym od zera |
| najwyższa odnotowana temperatura | akumulator startujący od pierwszej wartości, nie od zera |
| każdą w osobnym wierszu | dwie linie w pliku wynikowym, w kolejności z polecenia |
Rozłożenie polecenia na części sprawia, że program pisze się niemal sam, a każdy jego fragment ma jasne uzasadnienie w konkretnym fragmencie treści. Dwie rzeczy, które łatwo przeoczyć przy szybkim czytaniu tabeli, to fakt, że temperatura jest drugą wartością w wierszu, a akumulator dla maksimum nie może zaczynać się od zera ze względu na możliwość wystąpienia wartości ujemnych.
Sprawdź
Przeanalizuj polecenie, notując szczegóły
Podczas analizy zadania programistycznego zwróć uwagę na rozmiar danych wejściowych, format wiersza, wszystkie wymagane obliczenia oraz format oczekiwanej odpowiedzi. Cztery podkreślenia zwykle pokrywają całą treść zadania.
Wybierz konstrukcję programu
Znajomość wyniku, danych i przypadków granicznych upraszcza wybór konstrukcji programu. Aby znaleźć maksymalną wartość w tablicy liczb, wystarczy przejrzeć ją tylko raz. Dodatkowa tablica jest potrzebna, gdy wynik zależy od wielu wcześniejszych elementów lub konieczne jest odwołanie się do danych.
- Wybierz jedną pętlę, gdy każdą wartość przetwarzasz niezależnie.
- Licznik jest używany, gdy wynik to liczba elementów spełniających określony warunek.
- Suma to wynik powstały przez dodawanie wybranych wartości.
- Słownik jest używany, gdy konieczne jest policzenie wystąpień każdej wartości.
- Sortowanie danych jest wskazane, gdy uporządkowana kolejność ułatwia dalszą analizę.
Przećwicz analizę zadania na arkuszu kalkulacyjnym
Rozwiązuj pełne zadanie maturalne, przechodząc od treści do wyniku. Trening rozwiązywania zadań od treści do wyniku ujawnia, czy problem leży w metodzie, kodzie czy kontroli odpowiedzi.
Zobacz kurs maturalny