Wstęp do informatyki Ćwiczenia Piotr Fulmański
Piotr Fulmański 1 e-mail 1: fulmanp@math.uni.lodz.pl Wydział Matematyki i Informatyki, Uniwersytet Łódzki Banacha 22, 90-238, Łódź Polska Data ostaniej modyfikacji: 30 listopada 2007
Spis treści Spis treści 3 1 Algorytmy 5 1.1 Funkcja.............................. 6 1.1.1 Rozwiązanie (pseudokod)................ 6 1.2 Sumowanie wyrazów....................... 7 1.2.1 Rozwiązanie (pseudokod)................ 7 1.3 Średnia.............................. 8 1.3.1 Rozwiązanie (pseudokod)................ 8 1.4 Macierz.............................. 9 1.4.1 Rozwiązanie (pseudokod)................ 9 1.5 Macierz.............................. 10 1.5.1 Rozwiązanie (pseudokod) (wersja 1).......... 10 1.5.2 Rozwiązanie (pseudokod) (wersja 2).......... 10 1.6 Macierz.............................. 12 1.6.1 Rozwiązanie (pseudokod)................ 12 1.7 Potęga iteracyjnie........................ 13 1.7.1 Rozwiązanie (pseudokod)................ 13 1.8 Potęga rekurencyjnie....................... 14 1.8.1 Rozwiązanie (pseudokod)................ 14 1.9 Selectionsort........................... 15 1.9.1 Rozwiązanie (przebieg wykonania)........... 16 1.9.2 Rozwiązanie (schemat blokowy)............. 16
4 SPIS TREŚCI
Rozdział 1 Algorytmy W tej części zestawu ćwiczeń chcemy zaprezentować serię zadań związanych z zapisywaniem algorytmu, przechodzeniem od jednej postaci do drugiej (np. od pseudokodu do schematu blokowego) oraz śledzeniem sposobu jego wykonania.
6 Algorytmy 1.1 Funkcja Niech dana będzie funkcja określona w następujący sposób 2x dla x 5, f(x) = x dla x ( 5, 5], 2x dla x 6. (1.1) Napisz program (funkcję) zwracający odpowiednią wartość funkcji f(x) dla zadanego jako argument funkcji x. Zauważmy, że bardzo problematyczne w tym zadaniu jest zachowanie funkcji dla x (5, 6). Można od biedy dla takich argumentów zwrócić wartość, której funkcja nigdy nie przyjmuje jednak nie jest to najlepsze rozwiązanie. W praktyce należałoby albo zastosować mechanizm wyjątków, albo zadbać o to, że użytkownik nie wywoła funkcji ze złym argumentem. I właśnie to ostatnie założenie (inteligentnego zachowania użytkownika) przyjmiemy, choć jest ono całkowicie sprzeczne z praktyką. Dzięki takiemu założeniu kod staje się czytelniejszy a pamiętajmy, że rolą tego rozdziału jest jedynie ćwiczenie umiejętności poprawnego zapisywania i posługiwania się algorytmem. Zwracamy uwagę na słowo: poprawnego!!!. 1.1.1 Rozwiązanie (pseudokod) function GetValue(x) if (x<=-5) then v:=2*x; else if ((x>-5) AND (x<=5)) then v:=x; eles if ((x>=6)) then v:=-2*x; return v;
1.2 Sumowanie wyrazów 7 1.2 Sumowanie wyrazów Proszę napisać program wczytujący maksymalnie n liczb i obliczający ich sumę. Jeśli jedną z podanych liczb będzie 0 algorytm powinien się zakończyć. 1.2.1 Rozwiązanie (pseudokod) function Sum(n) s:=0; for i:=1 to n step 1 a:=read(); if (a==0) then break; s:=s+a; return s;
8 Algorytmy 1.3 Średnia Proszę napisać program wczytujący liczby tak długo jak ich suma nie przekroczy wartości 100. Po przekroczeniu wartości 100 program powinien zwrócić średnią arytmetyczną wprowadzonych liczb. 1.3.1 Rozwiązanie (pseudokod) function Sum(n) s:=0; c:=0; while (s<=100) a:=read(); s:=s+a; c:=c+1; return (s/c);
1.4 Macierz 9 1.4 Macierz Proszę napisać program wypisujący zawartość macierzy kwadratowej o wymiarze nxn kolumnami od pierwszego wiersza do ostatniego. Przykład input: n:=3 1 2 3 M:= 4 5 6 7 8 9 output: 1 4 7 2 5 8 3 6 9 1.4.1 Rozwiązanie (pseudokod) function PrintMatrix(M,n) for i:=1 to n step 1 for j:=1 to n step 1 Print(M[i][j]);
10 Algorytmy 1.5 Macierz Proszę napisać program kopiujący dane z macierzy do tablicy jednowymiarowej o wymiarze 1 n n. Dane powinny być kopiowane kolumnami. Przykład input: n:=3 1 2 3 M:= 4 5 6 7 8 9 S result: S=[1 4 7 2 5 8 3 6 9] 1.5.1 Rozwiązanie (pseudokod) (wersja 1) function MatrixToSequence(M,n,S) for i:=1 to n step 1 for j:=1 to n step 1 S[j+(i-1)*n]:=M[j][i]; return S; 1.5.2 Rozwiązanie (pseudokod) (wersja 2) function MatrixToSequence(M,n,S) c=1; for i:=1 to n step 1 for j:=1 to n step 1 S[c]:=M[j][i];
1.5 Macierz 11 c=c+1; return S;
12 Algorytmy 1.6 Macierz Proszę napisać program kopiujący dane z tablicy jednowymiarowej o wymiarze 1 n n do macierzy o wymiarze n n. Dane powinny wypełniać macierz kolumnami. Przykład input: n:=3 M S=[1 4 7 2 5 8 3 6 9] result: 1 2 3 M:= 4 5 6 7 8 9 1.6.1 Rozwiązanie (pseudokod) function SequenceToMatrix(M,n,S) for i:=1 to n*n step 1 x=(i%n)+1 y=(i/n)+1 M[x][y]:=S[i]; return M;
1.7 Potęga iteracyjnie 13 1.7 Potęga iteracyjnie Proszę napisać iteracyjny program obliczający n-tą potęgę liczby naturalnej a. Przykład input: a:=3 n:=3 result: 27 1.7.1 Rozwiązanie (pseudokod) Iteracyjny sposób obliczania potęgi sprowadza się do zaimplementowania następującej formuły a n = a a }{{} n function Power(a,n) p:=1; for i:=1 to n-1 step 1 p:=p*a; return p;
14 Algorytmy 1.8 Potęga rekurencyjnie Proszę napisać rekurencyjny program obliczający n-tą potęgę liczby naturalnej a. Przykład input: a:=3 n:=3 result: 27 1.8.1 Rozwiązanie (pseudokod) Rekurencyjny sposób obliczania potęgi sprowadza się do zaimplementowania następującej formuły function Power(a,n) if (n==0) then p:=1; else p:=a*power(a,n-1); return p; a n = a a n 1, dla n > 0, a 0 = 1.
1.9 Selectionsort 15 1.9 Selectionsort Poniżej zapisano pewien algorytm. Proszę wykonać go dla zadanego zbioru danych i napisać odpowiadający jemu schemat blokowy. Algorytm: #a - array of Integer numbers #n - dimension fo array a function Selectionsort(a,n) for i:=1 to n-1 step 1 min:=a[i]; #searching for a min value in subsequence a[i+1...n] of array a for j:=i+1 to n step 1 if (a[j]<a[i]) then min:=a[j]; pos:=j; #exchange min value and a[i] tmp:=a[i]; a[i]:=a[pos]; a[pos]:=tmp; return a; Przykład input: a:=[2 4 1 3] n:=4 result: a=[1 2 3 4] description: step 1: exchange value at index 3 with value at index 1: situation before: a=[2 4 1 3]
16 Algorytmy situation after: a=[1 4 2 3] step 2: exchange value at index 3 with value at index 2: situation before: a=[1 4 2 3] situation after: a=[1 2 4 3] step 3: exchange value at index 4 with value at index 3: situation before: a=[1 2 4 3] situation after: a=[1 2 3 4] 1.9.1 Rozwiązanie (przebieg wykonania) Przyjmijmy dane a oraz n jak w przykładzie. Zgrubny schemat wykonania zawarty jest w przykładzie. Oto szczegółowy przebieg wykonania. 1.9.2 Rozwiązanie (schemat blokowy)