Temat C6. Stosowanie tablic w języku C++ i list w języku Python

przez | 1 maja 2020

Zapisy podstawy programowej realizowane w temacie:

I. Rozumienie, analizowanie i rozwiązywanie problemów
Zakres rozszerzony. Uczeń spełnia wymagania określone dla zakresu podstawowego, a ponadto:

  1. w zależności od problemu rozwiązuje go, stosując metodę wstępującą lub zstępującą;
  2. do realizacji rozwiązania problemu dobiera odpowiednią metodę lub technikę algorytmiczną i struktury danych;

II. Programowanie i rozwiązywanie problemów z wykorzystaniem komputera i innych urządzeń cyfrowych.

Zakres rozszerzony. Uczeń spełnia wymagania określone dla zakresu podstawowego, a ponadto:

  1. projektuje i tworzy rozbudowane programy w procesie rozwiązywania problemów, wykorzystuje w programach dobrane do algorytmów struktury danych, […]
  2. stosuje zasady programowania strukturalnego i obiektowego w rozwiązywaniu problemów;
  3. sprawnie posługuje się zintegrowanym środowiskiem programistycznym przy pisaniu, uruchamianiu i testowaniu programów;

I + II. Zakres rozszerzony. Uczeń spełnia wymagania określone dla zakresu podstawowego, a ponadto:

  1. zapisuje za pomocą listy kroków, schematu blokowego lub pseudokodu, i implementuje w wybranym języku programowania, algorytmy poznane na wcześniejszych etapach […]:

Spis treści

  1. Na czym polega dobór struktur danych do algorytmu?
  2. Zmienne indeksowane
  3. Deklarowanie tablicy w języku C++
  4. Wczytywanie i wyprowadzanie elementów tablicy w języku C++
  5. Definiowanie listy w języku Python
  6. Wczytywanie i wyprowadzanie elementów listy w języku Python

1. Na czym polega dobór struktur danych do algorytmu?

Przed zapisem algorytmu w postaci programu ustalamy, jakie struktury danych będą potrzebne (inaczej: jak zorganizowane będę dane). Ich wybór jest zazwyczaj narzucony przez zadanie. Jeśli jest to zadanie matematyczne, to danymi są liczby. Zwykle trzeba doprecyzować, jakie mają to być liczby (np. rzeczywiste, całkowite czy naturalne). Jeśli zadanie ma polegać na porządkowaniu nazwisk uczniów, dane muszą być zadeklarowane jako ciągi znaków (łańcuchy), natomiast jeśli mają to być informacje osobowe o uczniu, musimy posłużyć się rekordami (łańcuchy i rekordy omówimy w dalszych tematach).

Czasem określa się inny typ dla danych wprowadzanych do programu, a inny dla danych wyprowadzanych, np. gdy wykonujemy obliczenia średniej arytmetycznej liczb całkowitych, to typ wyniku powinien być zadeklarowany jako rzeczywisty.

Należy tak dobrać typy danych, aby:
  1. było możliwe wprowadzenie właściwych danych,
  2. było możliwe wyprowadzenie poprawnych wyników (zadanie musi być wykonane zgodnie ze specyfikacją).

2. Zmienne indeksowane

W zależności od algorytmu należy też czasem ustalić, czy zastosować typy danych złożone, czy proste. Na przykład w algorytmie mnożenia n liczb (temat C3) działanie mnożenia określaliśmy następująco: iloczyn = iloczyn a. Wszystkie wprowadzane liczby pamiętane były kolejno w zmiennej o tej samej nazwie – a. Nieistotne było zapamiętywanie wszystkich liczb w różnych zmiennych, bo zależało nam na wyniku iloczynu, który był zapamiętywany w zmiennej iloczyn.

Podobnie określaliśmy sumowanie n elementów: suma = suma + a, gdzie wszystkie liczby wprowadzane były kolejno do zmiennej a.

Niektóre algorytmy wymagają jednak zapamiętania wszystkich danych (np. elementów zbioru) zarówno w trakcie działania całego programu, jak również po jego zakończeniu. Przykładem może być algorytm porządkowania, ponieważ po jego zakończeniu musimy otrzymać wszystkie elementy w wyznaczonym porządku.

Aby zapamiętać wszystkie dane, nadajemy im różne nazwy. Stosujemy wówczas tzw. zmienne indeksowane, np. a0, a1, …, an-1
Taki sposób oznaczania zmiennych znamy z innych przedmiotów, np. matematyki lub fizyki.
Aby utworzyć zmienne indeksowane w różnych językach programowania, stosuje się złożone struktury danych, np. tablice (w języku C++), listy (w języku Python).

3. Deklarowanie tablicy w języku C++

Aby utworzyć zmienne indeksowane w języku C++, stosuje się tablice.
Tablica jest złożoną strukturą danych, składającą się z określonej (z góry, w przypadku omawianych przez nas tablic statycznych) liczby elementów tego samego typu.

C++
Deklaracja tablicy

opis_typu nazwa_tablicy [liczba_elementów_tablicy];

W języku C++ opis_typu oznacza typ elementów tablicy, a w nawiasach kwadratowych umieszczamy liczbę elementów.

Do elementów tablicy odwołujemy się, podając nazwę tablicy i indeks elementu umieszczony w nawiasach kwadratowych, np.: a[0], a[1], …, a[n – 1] – dla tablicy n-elementowej o nazwie a. W języku C++ indeks tablicy zawsze zaczyna się od zera, zatem ostatni element tablicy n-elementowej ma indeks n–1.

Liczbę elementów tablicy musimy określić wcześniej:

  • wpisać w deklaracji tablicy jako konkretną wartość (liczbę naturalną większą od 0)
  • lub
  • podać za pomocą wcześniej zdefiniowanej stałej (const). Nie można zmienić liczby elementów raz zadeklarowanej tablicy

Przykład 1. Deklarowanie tablic w języku C++

C++

  1. Deklaracja tablicy składającej się z czterdziestu liczb rzeczywistych: const int N = 40;
    float a[N];
    Do elementów tablicy odwołujemy się przez zmienne: a[0], a[2], … a[39].
  2. Deklaracja tablicy składającej się z dwudziestu znaków: char znak[20]; Do elementów tablicy odwołujemy się przez: znak[0], znak[1], … znak[19].
  3. W języku C++ możliwe jest deklarowanie tablic dwuwymiarowych. Deklaracja tablicy dwuwymiarowej, składającej się z 10×15, czyli 150 elementów, ma postać: int tab[10][15]; Do elementów takiej tablicy odwołujemy się, podając indeksy elementu w kolejnych nawiasach kwadratowych: tab[i][j], np.: tab[0][0], tab[0][1], … tab[4][0], tab[4][1], … tab[9][14].

4. Wczytywanie i wyprowadzanie elementów tablicy w języku C++

W języku C++ tablicę można zainicjalizować podczas jej deklaracji, podając w nawiasach klamrowych wartości kolejnych elementów tablicy.

int tab[5]={7, -1, 2, 0, 8};

Elementy tablicy można wprowadzić również w inny sposób (np. z klawiatury), stosując instrukcję pętli.

Przykład 2. Definiowanie funkcji w języku C++, wczytujących elementy tablicy

Zdefiniujemy funkcję bez parametrów umożliwiającą wczytywanie liczb całkowitych do tablicy n-elementowej. Rozmiar tablicy podamy jako stałą.

C++

Ćwiczenie 1. Wprowadzamy dane do tablicy i wyprowadzamy je na ekran

  1. Otwórz plik TC6_c1.cpp, w którym zapisany jest program z przykładu 2. Wyjaśnij, co dzieje się w poszczególnych wierszach programu.
  2. Zdefiniuj funkcję wypisz umożliwiającą wyprowadzanie elementów tablicy na ekran monitora (w kolumnie). Wywołaj tę funkcję w programie głównym i dodaj w nim odpowiednie polecenia, powodujące wyprowadzenie elementów tablicy w oddzielnych wierszach.
  3. Zapisz plik pod tą samą nazwą.

Ćwiczenie 2. Modyfikujemy program

  1. W programie zmodyfikowanym w ćwiczeniu 1. zdefiniuj funkcję bez parametrów suma, która będzie obliczała sumę dodatnich elementów tablicy i wyprowadzała wynik pod kolumną z danymi.
  2. Zapisz plik pod nazwą TC6_c2.

Przykład 3. Definiowanie tablicy dwuwymiarowej w języku C++

Zdefiniujemy funkcję czytaj_dwa_wymiary wczytującą elementy do tablicy dwuwymiarowej. Rozmiary tablicy podane są jako stałe.

C++

Ćwiczenie 3. Definiujemy tablicę dwuwymiarową w języku C++

  1. Otwórz plik TC6_c3.cpp, w którym zapisany jest program z przykładu 3. Wyjaśnij, co dzieje się w poszczególnych wierszach programu.
  2. Zdefiniuj funkcję czytaj_dwa_wymiary wyprowadzającą elementy na ekran monitora (odpowiednio w wierszach i kolumnach).
  3. Wywołaj funkcję czytaj_dwa_wymiary w programie głównym.
  4. Zapisz plik pod tą samą nazwą.

5. Definiowanie listy w języku Python

Aby wykorzystać zmienne indeksowane w języku Python, możemy zdefiniować specjalną strukturę danych – listę.

nazwa_listy = [element1, element2, …, element_n]

Do elementów listy odwołujemy się, podając nazwę listy i indeks elementu umieszczony w nawiasach kwadratowych, np. a[0], a[1], …, a[n – 1] – dla listy n-elementowej o nazwie a. W języku Python pierwszy indeks jest zawsze równy 0.

Lista (w odróżnieniu od tablicy) może zawierać elementy różnego typu, dlatego w języku Python nie określamy typu elementów listy.

Zarówno typ zmiennych przechowywanych w liście, jak i liczba elementów listy mogą się zmienić w trakcie działania programu.

Wartości elementów listy możemy:

  • podać od razu w definicji listy,
  • przypisać od razu taką samą wartość wszystkim elementom listy.

Liczbę elementów listy możemy przypisać zmiennej.

Przykład 4. Definiowanie listy w języku Python

Zdefiniowanie listy składającej się z czterdziestu liczb o wartości początkowej zero:

N = 40
a = [0] * N

Do elementów tablicy odwołujemy się przez zmienne: a[0], a[2], … a[39].

Zdefiniowanie listy o nazwie CENY, składającej się z siedmiu elementów o indeksach od 0 do 6:

CENY = [27,48,20,21,17,28,91]

do elementów listy odwołujemy się przez zmienne: CENY[0], CENY[1], …, CENY[6].

Zdefiniowanie listy o nazwie lista_skladnikow składającej się z trzydziestu elementów, z których każdy jest równy zero (wyzerowanie wszystkich elementów listy):

lista_skladnikow = [0] * 30

do elementów listy odwołujemy się przez zmienne: lista_skladnikow [0], lista_skladnikow[1], …, lista_skladnikow[29]

W języku Python możliwe jest definiowanie list dwuwymiarowych.

Definicja listy tworzy listę składającą się z piętnastu list o rozmiarze dziesięciu elementów każda, o wartości początkowej zero, może mieć postać:

M = 15
N = 10
tab = [[0] * N] * M

Do elementów takiej tablicy odwołujemy się, podając indeksy elementu w kolejnych nawiasach kwadratowych: tab[i][j], np.: tab[0][0], tab[0][1], … tab[4][0], tab[4][1], … tab[9][14].

6. Wczytywanie i wyprowadzanie elementów listy w języku Python

W języku Python listę można zainicjalizować w jej definicji, podając w nawiasach kwadratowych wartości kolejnych elementów tablicy.

tab[5]= [7, -1, 2, 0, 8]

Elementy listy można wprowadzić również w inny sposób (np. z klawiatury), stosując instrukcję pętli.

Przykład 5. Definiowanie funkcji w języku Python, wczytujących elementy listy

Zdefiniujemy funkcję bez parametrów umożliwiającą wczytywanie liczb całkowitych do listy n-elementowej. Rozmiar listy podamy jako stała.

Ćwiczenie 4. Wprowadzamy dane do listy i wyprowadzamy je na ekran

  1. Otwórz plik TC6_c4.py, w którym zapisany jest program z przykładu 5. Wyjaśnij, co dzieje się w poszczególnych wierszach programu.
  2. Zdefiniuj funkcję wypisz umożliwiającą wyprowadzanie elementów listy na ekran monitora (w kolumnie). Wywołaj tę funkcję w programie głównym i dodaj w nim odpowiednie polecenia, powodujące wyprowadzenie elementów listy w oddzielnych wierszach.
  3. Zapisz plik pod tą samą nazwą.

Ćwiczenie 5. Modyfikujemy program

  1. W programie zmodyfikowanym w ćwiczeniu 4. zdefiniuj funkcję bez parametrów suma, która będzie obliczała sumę dodatnich elementów listy i wyprowadzała wynik pod kolumną z danymi.
  2. Zapisz plik pod nazwą TC6_c5.

Przykład 6. Definiowanie listy dwuwymiarowej w języku Python

Zdefiniujemy funkcję czytaj_dwa_wymiary wczytującą elementy do listy dwuwymiarowej. Rozmiary tablicy podane są jako stałe.

Definicja

a = [[0] * N] * M

tworzy listę składającą się z M list o rozmiarze N każda.

Ćwiczenie 6. Definiujemy listę dwuwymiarową w języku Python

  1. Otwórz plik TC6_c6.py, w którym zapisany jest program z przykładu 6. Wyjaśnij, co dzieje się w poszczególnych wierszach programu.
  2. Zdefiniuj funkcję czytaj_dwa_wymiary wyprowadzającą elementy na ekran monitora (odpowiednio w wierszach i kolumnach).
  3. Wywołaj funkcję czytaj_dwa_wymiary w programie głównym.
  4. Zapisz plik pod tą samą nazwą.

Zadania

  1. Napisz program, który umożliwi wprowadzenie dziesięciu liczb rzeczywistych i wyprowadzenie ich w kolumnie na ekranie, ale w odwrotnej kolejności.
  2. Napisz program, który wczytuje liczby całkowite do tablicy lub listy ośmioelementowej, a wypisuje na ekran indeks elementu tablicy lub listy, którego wartość wynosi zero. Natomiast jeśli nie ma takiego elementu, wypisuje komunikat „brak elementu zerowego”.
  3. Napisz program obliczający sumę elementów umieszczonych na głównej przekątnej tablicy lub listy dwuwymiarowej, składającej się z 5×5 liczb całkowitych.
  4. Dla zainteresowanych
  5. Z ciągu n liczb naturalnych wypisz liczby, których suma cyfr jest większa od 100. W programie wykorzystaj funkcję suma_cyfr(liczba), która obliczy sumę cyfr liczby podanej jako parametr. W celu obliczenia wartości cyfry skorzystaj z możliwości obliczenia reszty z dzielenia przez 10.
  6. Napisz program, który wyświetli „tabliczkę mnożenia” dla liczb naturalnych z zakresu ⟨1;10⟩. Zastosuj tablicę lub listę dwuwymiarową.