Tablice. TYPE identyfikator tablicy = ARRAY [Indeksl,..., Indeksn] OF Typ; Dany identyfikator_ tablicy można wykorzystać w deklaracji VAR:



Podobne dokumenty
Wprowadzenie komentarzy do programu

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja, - liczby losowe

INSTRUKCJA PUSTA. Nie składa się z żadnych znaków i symboli, niczego nie robi. for i := 1 to 10 do {tu nic nie ma};

Podprogramy. Procedury

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Podstawy programowania

Wykład II PASCAL - podstawy składni i zmienne, - instrukcje wyboru, - iteracja cz. 1

Podstawy Programowania C++

Wykład IV PASCAL - łańcuch znaków, - procedury i funkcje, - sortowanie bąbelkowe

Instrukcja standardowa Writeln

Lekcja 6: Pascal. Procedura i funkcja

PoniŜej znajdują się pytania z egzaminów zawodowych teoretycznych. Jest to materiał poglądowy.

Programowanie w Turbo Pascal

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

typ zakres sposob zapamietania shortint integer bajty (z bitem znaku) longint byte word

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA)

INSTRUKCJE PĘTLI, INSTRUKCJA WYBORU. Instrukcja pętli For to do

Instrukcje podsumowanie. Proste: - przypisania - wejścia-wyjścia (read, readln, write, writeln) - pusta - po prostu ; (średnik) Strukturalne:

2.Sprawdzanie czy podana liczba naturalna jest pierwsza Liczba pierwsza to liczba podzielna tylko przez 1 i przez siebie.

Wykład III PASCAL - iteracja cz, 2, - liczby losowe, - tablice

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Informatyka 1. Przetwarzanie tekstów

lekcja 8a Gry komputerowe MasterMind

Programowanie 3 - Funkcje, pliki i klasy

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

Programowanie. Wprowadzanie danych i wyprowadzanie wyników. Klasa 2 Lekcja 24 WEJŚCIE/WYJŚCIE

Programowanie w języku Python. Grażyna Koba

1. Napisz program, który wyświetli Twoje dane jako napis Witaj, Imię Nazwisko. 2. Napisz program, który wyświetli wizytówkę postaci:

Zmienne i struktury dynamiczne

Zadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for.

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Podstawy programowania

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

Pascal - wprowadzenie

1. Nagłówek funkcji: int funkcja(void); wskazuje na to, że ta funkcja. 2. Schemat blokowy przedstawia algorytm obliczania

Pliki. Ze względu na typ zawartych w nich danych rozróżnia się trzy podstawowe rodzaje plików:

1 Powtórzenie wiadomości

Zadania język C++ Zad. 1. Napisz program wczytujący z klawiatury wiek dwóch studentów i wypisujący informację o tym, który z nich jest starszy.

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

#7 P r o g r a m... Rys Struktura zmiennej typu string

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Metody numeryczne Laboratorium 2

IX. Wskaźniki.(3 godz.)

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Wstęp do programowania

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

OPERACJE NA PLIKACH. Podstawowe pojęcia:

Wymiar musi być wyrażeniem stałym typu całkowitego, tzn. takim, które może obliczyć kompilator. Przykłady:

Struktury, unie, formatowanie, wskaźniki

Laboratorium nr 1. i 2.

Programowanie w języku Java

Pliki. Operacje na plikach w Pascalu

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

PROGRAMOWANIE W C++ ZADANIA

Programowanie w języku C++ Agnieszka Nowak Brzezińska Laboratorium nr 2

3. Opracować program kodowania/dekodowania pliku tekstowego. Algorytm kodowania:

do instrukcja while (wyrażenie);

Podstawy programowania 2. Temat: Wprowadzenie do wskaźników. Przygotował: mgr inż. Tomasz Michno

Podstawy Programowania Podstawowa składnia języka C++

PASCAL Kompendium. Środowisko TURBO PASCAL Skróty klawiaturowe. Edycja kodu Pomoc spis treści. Skopiowanie zaznaczonego bloku do schowka

Przykłady zastosowań funkcji tekstowych w arkuszu kalkulacyjnym

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Podstawy programowania 2. Temat: Drzewa binarne. Przygotował: mgr inż. Tomasz Michno

INFORMATYKA Z MERMIDONEM. Programowanie. Moduł 5 / Notatki

Programowanie 2 - Tablice i łańcuchy

Lab 9 Podstawy Programowania

Zestaw 1-1 Organizacja plików: Oddajemy tylko źródła programów (pliki o rozszerzeniach.cpp)!!!

Język programowania PASCAL

3. Podstawowe funkcje mamematyczne. ZAPOZNAĆ SIĘ!!!

Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

tablica: dane_liczbowe

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Języki programowania obiektowego Nieobiektowe elementy języka C++

Proste programy w C++ zadania

1 Podstawy c++ w pigułce.

Wrocław, dn. 19 kwietnia 2006 roku. Anna Kaleta Piotr Chojnacki IV rok, informatyka chemiczna Liceum Ogólnokształcące nr 10 we Wrocławiu

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

ZASADY PROGRAMOWANIA KOMPUTERÓW

Wstęp do programowania. Różne różności

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

Programowanie Delphi obliczenia, schematy blokowe

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119

Podstawy programowania skrót z wykładów:

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Kilka prostych programów

Algorytmy i struktury danych

Programowanie obiektowe - zadania

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst.

Zajęcia 6 wskaźniki i tablice dynamiczne

Ćwiczenie 1. Wprowadzenie do programu Octave

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Język ludzki kod maszynowy

WIADOMOŚCI WSTĘPNE WPROWADZENIE DO JĘZYKA TURBO PASCAL. Klawisze skrótów. {to jest właśnie komentarz, moŝna tu umieścić dowolny opis}

I. Podstawy języka C powtórka

Transkrypt:

Tablice Tablica jest to struktura danych zawierająca pewien uporządkowany zbiór obiektów tego samego typu. Tablice jednowymiarowe odpowiadają wektorom, natomiast tablice dwuwymiarowe macierzom. Elementy tablicy oznakowane są za pomocą indeksów. Tablica stanowi- więc pewien typ strukturalny, zwany typem tablicowym. Tablicę tworzymy za pomocą słowa kluczowego ARRAY. Zdefiniowanie typu tablicowego ma postać: TYPE identyfikator tablicy = ARRAY [Indeksl,..., Indeksn] OF Typ; Dany identyfikator_ tablicy można wykorzystać w deklaracji : Nazwa_zmiennej : identyfikator_ tablicy; Indeks oznacza liczbę elementów. Zawiera on kres dolny i górny, czyli zakres tablicy. Jeśli podany jest tylko jeden indeks, to tablica jest jednowymiarowa, na przykład: TYPE Dane = ARRAY [1..10] OF INTEGER; Zdefiniowano typ tablicowy identyfikujący tablicę jednowymiarową zawierającą 10 elementów. Dany identyfikator tablicy Dane wykorzystany zostanie w deklaracji : TAB : Dane; W powyższym zapisie jest zadeklarowana tablica TAB. Jeśli tablica zawiera więcej indeksów, na przykład dwa, to jest ona dwuwymiarowa: TYPE Dane_l = ARRAY [1..5,1..7] OF REAL; (...) Liczby : Dane_l; Zadeklarowano tablicę dwuwymiarową Liczby zawierającą 5 wierszy (1...5) i 7 kolumn (1...7) z elementami w postaci liczb rzeczywistych. Tablicę Liczby można zadeklarować również bezpośrednio za pomocą deklaracji, jak to przedstawiono poniżej: Dane_1 = ARRAY [1..5,1..7] OF REAL; Jeśli oznaczymy wiersze jako zmienną i (i = l,...,i) oraz kolumny jako zmienną j (j= l,...,j), to element w tablicy na przecięciu i-tego wiersza i j-tej kolumny ma oznaczenie: Identyfikator_tablicy [i, j] Dla określenia elementu znajdującego się w tablicy o identyfikatorze Liczby na przecięciu 2 wiersza i 3 kolumny użyjemy następującego zapisu: Liczby[2, 3] Nadawanie wartości elementom tablicy odbywa się przez przypisanie im pewnej wartości, na przykład: Liczby[3, 5]:=25; W powyższym zapisie elementowi tablicy Liczby znajdującemu się na przecięciu 3 wiersza i 5 kolumny przypisano wartość 25. Nadawanie wartości elementom tablicy może również odbywać się poprzez wczytywanie tych wartości z zewnątrz, np. za pomocą jednej z instrukcji powtórzeń. Bardzo często do tego celu wykorzystuje się instrukcję FOR. Ćwiczenie 76 Napisać program realizujący wprowadzanie liczb całkowitych do tablicy jednowymiarowej o n elementach, a następnie wydrukowanie jej zawartości. Przyjąć dla tablicy maksymalny rozmiar n_max=20 elementów. Do wprowadzania i drukowania danych z tablicy zastosować procedury. Tytuł programu Tablica_jednowymiarowa". Zapisać program na dysku w pliku o nazwie table_1.pas. W bloku deklaracyjnym po słowie kluczowym CONST określić należy maksymalny rozmiar tablicy, tj. n_max=20;

Po słowie kluczowym TYPE zdefiniować należy typ tablicowy identyfikujący tablicę jednowymiarową zawierającą n_max elementów: TYPE Dane = ARRAY [l..n_max] OF INTEGER; Następnie po słowie zadeklarować należy zmienną n, służącą do sterowania wprowadzaniem liczby elementów oraz tablicę TAB. n : INTEGER; T_l :Dane; Do wczytywania danych zastosujemy instrukcję FOR. Wczytujemy dane element po elemencie do tablicy jednowymiarowej przy zastosowaniu procedury Wprowadzanie. Wyprowadzanie danych następuje w procedurze Odczyt_tablicy wykorzystującej również instrukcję FOR. Obie procedury wykorzystują zmienną globalną n. PROGRAM Tablica_jednowymiarowa; * CONST n_max=20; (* maksymalna liczba elementów *) TYPE Dane = ARRAY [l..n_max] OF INTEGER; n : INTEGER; T_1 :Dane; (****************************************) PROCEDURE Wprowadzanie ( T: Dane); i : INTEGER; (* zmienna kontrolna *) Writeln (' Wprowadzanie danych do tablicy '); Write (' Podaj liczbę elementów (n<=20), n= '); Readln (n); Write (' Podaj elementy tablicy w kolejności'); FOR i:=1 TO n DO Write('element nr= ',i,', T_1[', i,' ] = '); Readln (T[i]); (******************************************) PROCEDURE Odczyt_tablicy ( T: Dane); i: INTEGER; (* zmienna kontrolna *) Write (' Odczytaj elementy tablicy w kolejności'); FOR i:=1 TO n DO Write (' element nr = *,i,', T_l[',i,' ] = '); Writeln (T[i]) (***********************************) ClrScr;

Wprowadzanie (T_1); Odczyt_tablicy (T_1); REPEAT UNTIL KeyPressed END. Ćwiczenie 77 Napisać program realizujący wprowadzanie liczb całkowitych do tablicy jednowymiarowej o n elementach, a następnie wydrukowanie jej zawartości w odwrotnej kolejności. Do wprowadzania i drukowania danych z tablicy zastosować procedury. Tytuł programu Tablica_odwrotna". Zapisać program na dysku w pliku o nazwie table_2.pas. Ćwiczenie 78 Napisać program sprawdzający czy w danej tablicy jednowymiarowej znajdują się jednakowe elementy. Program ma drukować te elementy i podawać ich pozycję. Do wprowadzania i drukowania danych z tablicy oraz wyszukiwania jednakowych elementów zastosować procedury. Tytuł programu Tablica _elementy". Zapisać program na dysku w pliku o nazwie table_3.pas. Uwaga: Przy sprawdzaniu elementów tablicy kolejność postępowania jest następująca: najpierw porównywana jest liczba pierwsza z drugą, następnie pierwsza z trzecią itd. Jeśli porównamy liczbę pierwszą ze wszystkimi liczbami, to należy również porównywać liczbę drugą ze wszystkimi liczbami, ale za wyjątkiem pierwszej. Operację porównywania przeprowadza się dla każdej liczby porównując ją ze wszystkimi liczbami poczynając od liczby następnej. Ćwiczenie 79 Napisać program realizujący wprowadzanie liczb całkowitych do tablicy o wymiarach m x n (m - liczba wierszy, n - liczba kolumn) oraz wydrukowanie jej zawartości. Przyjąć dla tablicy następujące maksymalne rozmiary: w_max=10 i k_max=10. Do wprowadzania i drukowania danych zastosować procedury. Tytuł programu Tablica_dwuwymiarowa". Zapisać program na dysku w pliku o nazwie table _4.pas. W bloku deklaracyjnym po słowie kluczowym CONST określamy maksymalny rozmiar tablicy, tj. CONST w_max=10; (* w_max - max liczba wierszy *) k_max=10; (* k max - max liczba kolumn *) Po słowie kluczowym TYPE definiujemy typ tablicowy. Tablica jest dwuwymiarowa o liczbie wierszy odpowiadającą stałej w_max (10), zaś liczba kolumn odpowiada stałej k_max (10). TYPE Dane = ARRAY [1..w_max, 1..k_max] OF INTEGER; Po uruchomieniu programu w pamięci komputera zostanie zarezerwowane miejsce dla tak określonej tablicy. Następnie po słowie kluczowym zadeklarować należy zmienne m oraz n, które służą do wprowadzania aktualnych wartości liczb wierszy i kolumn wraz z typami oraz tablicę TAB. m,n : INTEGER; TAB :Dane; Do wczytywania danych zastosujemy instrukcję FOR. Wczytujemy dane wiersz po wierszu do tablicy dwuwymiarowej przy zastosowaniu procedury Wprowadzanie. Wyprowadzanie danych następuje w procedurze Odczyt_tablicy wykorzystującej również instrukcję FOR. Obie procedury wykorzystują zmienne globalne m i n. PROGRAM Tablica_dwuwymiarowa; CONST w max =10; (* maksymalna liczba wierszy *) k_max=10; (* maksymalna liczba kolumn *) TYPE Dane = ARRAY [l..w max, l..k max] OF INTEGER; m,n : INTEGER; TAB :Dane; (**********************************************************************)

PROCEDURE Wprowadzanie ( T:Dane); i, j : INTEGER; (* zmienna kontrolna *) Writeln (' Wprowadzanie danych do tablicy '); Write (' Podaj liczbę wierszy (m<=10), m= '); Readln (m); Write (' Podaj liczbę kolumn (n<=10), n= '); Read (n); Write (' Podaj elementy tablicy w kolejności'); Writeln (' wiersz po wierszu '); FOR i:=1 TO m DO FOR j:=1 TO n DO Write (' w= ',i, ' k= ',j,', TAB[',i, ', ',j, ']= '); Readln (T[i,j]); (*******************************************) PROCEDURE Odczyt tablicy ( T:Dane); i j :INTEGER; (* zmienna kontrolna *) Write (' Odczytaj elementy tablicy w kolejności'); Writeln (' wiersz po wierszu '); FOR i:=1 TO m DO FOR j:=1 To n DO Write(' w= ',i,', k= ',j,', TAB[',i,','j,'] = '); Writeln (T[i,j]) (***********************************************) ClrScr; Wprowadzanie (TAB); Odczyt_tablicy (TAB); REPEAT UNTIL KeyPressed END. Ćwiczenie 80 Napisać program realizujący wprowadzanie liczb całkowitych do tablicy o wymiarach m x n (m - liczba wierszy, n - liczba kolumn) oraz wydrukowanie jej zawartości w kolejności kolumna po kolumnie. Przyjąć dla tablicy następujące maksymalne rozmiary: w_max=15 i k_max=15. Do wprowadzania i drukowania danych z tablicy zastosować procedury. Tytuł programu Kolumna_po_kolumnie". Zapisać program na dysku w pliku o nazwie table_5.pas. Ćwiczenie 81 Napisać program realizujący znajdowanie sumy elementów w określonym wierszu tablicy dwuwymiarowej. Do wprowadzania, obliczania sumy i drukowania danych z tablicy zastosować procedury. Tytuł programu Suma_elementow_w_wierszu". Zapisać program na dysku w pliku o nazwie tablejs.pas. Ćwiczenie 82 Napisać program realizujący zamianę dwóch wskazanych wierszy tablicy dwuwymiarowej. Do wprowadzania, zamiany wierszy i drukowania danych z tablicy zastosować procedury. Tytuł programu Zamiana _wierszy". Zapisać program na dysku w pliku o nazwie table_7.pas. Uwaga: Zamiany dwóch wskazanych wierszy można dokonać w pętli FOR. Jeśli przyjmie się oznaczenia:

j - bieżąca kolumna, n - liczba elementów wiersza, wl - numer pierwszego wiersza do zamiany, w2 - numer drugiego wiersza do zamiany, z_p - zmienna pomocnicza, to można już przedstawić zamianę wierszy za pomocą następującej konstrukcji: FOR j:=1 TO n DO p:=tab[w1,j]; TAB[w1,j]:=TAB[w2,j]; TAB[w2,j] : = z _p; Najpierw zostaje wzięty pierwszy element wiersza w1 i przepisany do zmiennej z_p. Następnie pierwszy element wiersza w2 zostaje przepisany na pierwsze miejsce (wcześniej zwolnione) wiersza w1. Ze zmiennej pomocniczej z_p wpisujemy element na miejsce pierwsze wiersza w2. Ten sposób działania powtarzany jest w pętli dla każdego elementu zaznaczonych wierszy. Funkcja losowa RANDOM Funkcja losowa RANDOM wyprowadza wartość liczby losowej. W przypadku podania argumentu Zakres wynikiem działania funkcji będzie liczba całkowita z przedziału O...Zakres -1. Jeżeli argument ten został pominięty, wynikiem będzie liczba rzeczywista z przedziału 0...1. Pierwsze wywołanie funkcji RANDOM musi być poprzedzone wywołaniem procedury RANDOMIZE. Przykładowy zapis funkcji RANDOM: RANDOMIZE; i:=random (6); Losujemy liczby całkowite z przedziału 0...5. Wylosowana liczba podstawiana jest pod zmienną i. Ćwiczenie 91 Napisać program symulujący 20 rzutów monetą i obliczający liczbę wyrzuconych orłów i reszek. Program ma tytuł Rzut_moneta_1". Zapisać program na dysku w pliku o nazwie moneta_1.pas. Przyjmijmy oznaczenia: ORZEŁ - zmienna przechowywująca liczbę wyrzuconych orłów, RESZKA - zmienna przechowywująca liczbę wyrzuconych reszek. 0-1 - przedział liczb całkowitych do losowania, gdzie 0 oznacza wylosowanego orła, a 1 wylosowaną reszkę. Pierwsze wywołanie funkcji RANDOM poprzedzi wywołanie procedury RANDOMIZE. Zapis funkcji RANDOM: m:=random (2); Cały program został przedstawiony poniżej: PROGRAM Rzut_moneta; i, ORZEŁ, RESZKA, x : INTEGER; Tak_Nie : CHAR; CONST n=20; (******************************************************)

REPEAT ClrScr; RANDOMIZE ; ORZEL:=0; RESZKA:=0; FOR i:=l TO n DO x:=random(2); IF x=0 THEN ORZEL:=ORZEL+l ELSE RESZKA:=RESZKA+1; Writeln (' Losowy rzut moneta '); Writeln (' Moneta rzucano ', i,' razy '); Writeln (' Wylosowano orla...', ORZEL:2 razy'); Writeln (' Wylosowano reszke..reszka:2,' razy'); Writeln (' Jeszcze raz?(t)ak'); Tak Nie:=UpCase(ReadKey) UNTIL NOT (Tak_Nie='T') END. Ćwiczenie 92 Uruchomić program Turbo Pascal. Napisać program symulujący losowanie 20 liczb z 80. Program ma tytuł Multi_lotek_1". Zapisać program na dysku w pliku o nazwie multi_1.pas. Z tablicy Liczby będą losowane liczby. Wylosowane zostaną usunięte, aby ich ponownie nie losować. Usuwanie wylosowanej liczby odbywa się za pomocą konstrukcji: FOR n:=nr_los TO 79-i DO natomiast przesuwanie pozostałych liczb do przodu za pomocą konstrukcji: Liczby [n]: =Liczby [n+1]; Cały program został przedstawiony poniżej: PROGRAM Toto_Multi_Lotek; TYPE t_zakres = 0..80; (* zakres liczb w totku; zero dodatkowo z uwagi na sortowanie z wartownikiem *) CONST (* Z tej tablicy będziemy losowali liczby; wylosowane usuwamy, aby ich ponownie nie losować *) Liczby : ARRAY[1..80] OF t_zakres = (1, 2, 3, 4, 5, 6, 7, 8, 9,10, 11,12,13,14,15,16,17,18,19,20, 21,22,23,24,25,26,27,28,29,30, 31,32,33,34,35,36,37,38,39,40, 41,42,43,44,45,46,47,48,49,50, 51,52,53,54,55,56,57,58,59,60, 61,62,63,64,65,66,67,68,69,70, 71,72,73,74,75,76,77,78,79,80); i, j, nr_los, n, x : t_zakres; wylosowane : ARRAY [0..20] OF t_zakres; (***************************************)

ClrScr; Randomize; (* losujemy liczby *) FOR i:=1 TO 20 DO nr_los:=random(80-i)+1; (* losujemy numer liczby z tablicy 'Liczby' *) wylosowane[i]:=liczby [nr_los]; FOR n:=nr_los TO 79-i DO Liczby[n]:=Liczby[n+l]; (* wylosowana liczbę usuwamy z tablicy 'Liczby' a pozostałe przesuwamy do przodu *) (* sortujemy wylosowane liczby *) FOR i: =2 TO 20 DO x:=wylosowane[i]; wylosowane [0]: =x; (* wylosowane [0]' pełni role wartownika *) j:=i-1; WHILE x<wylosowane[j] DO wylosowane(j+1 ]:=wylosowane[j ]; j:=j-l; (* zmniejszamy j o 1 *) wylosowane[j+l]:=x WritelnC Wylosowano następujące liczby w MultiLotku: '); FOR i:=l TO 20 DO Write (wylosowane[i]:4); Readln; END. Ćwiczenie 93 Napisać program symulujący rzuty kostką. Program zawiera funkcje DWA, której wynikiem jest liczba rzutów kostką, jaką trzeba wykonać, aby wypadły dwa oczka. Program ma tytuł Kostka_l". Zapisać program na dysku w pliku o nazwie kostka _1.pas. Ćwiczenie 94 Napisać program losujący tablicę jednowymiarową N liczb i wypisujący parę liczb sąsiednich o największej sumie. Program ma tytuł Para_liczb_1". Zapisać program na dysku w pliku o nazwie para.pas. Ćwiczenie 95 Napisać program losujący tablicę jednowymiarową N liczb i porządkujący, tak aby na początku były liczby podzielne przez 2, dalej podzielne przez 3, 5 i 7. Na końcu mają się znajdować pozostałe liczby. Program ma tytuł Ustawianie_liczb". Zapisać program na dysku w pliku o nazwie table_13.pas. Działania na tekstach Do przedstawienia wszelkich napisów, czyli łańcuchów, w Turbo Pascalu służy typ STRING, czyli zmienna łańcuchowa. Wartością łańcucha jest dowolny ciąg znaków ujęty w apostrofy. Łańcuch znaków może być traktowany jako specyficzna tablica, której typem jest CHAR:

TYPE STRING = ARRAY [0...255] OF CHAR; W deklaracji: Wyraz: STRING; dla zmiennej Wyraz długość maksymalna ciągu wynosi 255 znaków. Turbo Pascal nie obsługuje dłuższych łańcuchów. W powyższej deklaracji wielkość zmiennej Wyraz została podana bez klamer i wartości ją określającej. Tak zadeklarowana zmienna zajmuje w pamięci 256 bajtów. W deklaracji w postaci: Wyraz : STRING[30]; tak zdefiniowana zmienna może przechowywać najwyżej 30 znaków i każdy kolejny znak będzie po prostu ignorowany. Odczytywanie aktualnej długości łańcucha zapamiętanego w zmiennej odbywa się za pomocą funkcji LENGTH. Funkcja LENGTH Zapis ogólny funkcji: LENGTH(s); Wynikiem jest długość łańcucha znaków s, czyli liczba przedstawiająca liczbę znaków, z których on się składa. Wynik jest typu INTEGER. W poniższym przykładzie zmienna Zdanie jest przydzielona do wprowadzonego tekstu w postaci wyrazu KOT". Zdanie:=' KOT' LENGTH (Zdanie); Odczytaną wartością funkcji LENGTH(Zdanie) jest 3. Tyle bowiem liter liczy wyraz KOT". Ćwiczenie 96 Napisać program sprawdzający długość wprowadzonego nazwiska i imienia. Program ma tytuł Dlugosc_wyrazow". Zapisać program na dysku w pliku o nazwie string_l.pas. W programie zmiennymi jest Nazwisko oraz Imie. Odczyt długości nazwiska uzyskuje się konstrukcją: Writeln (Length (Nazwisko)); zaś odczyt imienia Writeln (Length (Imie)); Cały program został przedstawiony poniżej: PROGRAM Długość_wyrazow; Nazwisko : STRING [25]; Imie : STRING [20]; (*******************) ClrScr; WriteLn (' Wyznaczenie długości nazwiska i imienia '); WriteLn; Write (' Pisanie należy zakończyć naciśnięciem '); WriteLn (' klawisza Enter'); WriteLn; Write (' Podaj nazwisko...: '); ReadLn (Nazwisko); Write (' Podaj imie... : '); ReadLn (Imie); WriteLn; WriteLn (' Imie ',Imie,' zawiera ',Length (Imie),' liter'); WriteLn (' Nazwisko ',Nazwisko,' zawiera ',Length (Nazwisko),' liter'); REPEAT UNTIL KeyPressed END.

Turbo Pascal umożliwia operacje nie tylko na całych łańcuchach, lecz również na poszczególnych znakach w łańcuchu. Wyraz : STRING [30]; W powyższym zapisie jest zadeklarowana zmienna typu String. W zapisie Wyraz[3] oznacza trzeci znak łańcucha zapamiętany w zmiennej Wyraz. Wyraz[3] jest typem CHAR, mimo że cały Wyraz jest typu String. Nie wolno żądać dostępu do numeru znaków, których nie ma w danym łańcuchu. Dla bezpieczeństwa najlepiej jest sprawdzić dany łańcuch funkcją LENGTH. Ćwiczenie 97 Napisać program wyświetlający wprowadzony tekst z klawiatury jako rozstrzelony. Program ma tytuł Tekst_rozstrzelony". Zapisać program na dysku w pliku o nazwie string_2.pas. Zmiennej tekst zostaje przypisany wprowadzony tekst z klawiatury. Program wylicza liczbę znaków, a następnie w pętli FOR jest realizowane wyświetlenie kolejnego znaku i dopisanie spacji. PROGRAM Tekst_rozstrzelony; tekst : STRING; i : INTEGER; (******************************) ClrScr; Writeln (' Napisz krotki tekst i nacisnij ENTER'); Readln (tekst); FOR i:=l TO LENGTH (tekst) DO Write (tekst[i],* '); Readln END. Ćwiczenie 98 Napisać program zamieniający we wprowadzonym tekście znak s na p. Program ma tytuł Tekst_zamiany". Zapisać program na dysku w pliku o nazwie string_3.pas. Funkcja COPY Zapis ogólny funkcji: COPY(s,Indeks,Licznik); Funkcja ta powoduje wycięcie z łańcucha znaków s, od miejsca oznaczonego numerem Indeks liczby znaków określonych przez Licznik. Wynik jest typu STRING. W poniższym zapisie: COPY ('KOMPAKT', 5,3); otrzymamy wyraz 'AKT'. Do łączenia łańcuchów wykorzystuje się funkcję CONCAT. Funkcja CONCAT Zapis ogólny funkcji: CONCAT(s l,s 2,...,s_n); Funkcja ta powoduje połączenie łańcuchów s_l, s_2, s_n w jeden wspólny łańcuch. Jeśli wielkość powstałego łańcucha przekroczy długość 256 znaków, wszystkie pozostałe znaki zostają obcięte. Wynik jest typu STRING. Zapis:

CONCAT('ADAM',' ',I,' ','MICHAL'); umożliwia uzyskanie napisu 'ADAM I MICHAŁ'. Funkcję CONCAT możemy zastąpić zwyczajnym dodawaniem: s:='komp'+'akt'; Otrzymamy napis 'KOMPAKT'. Do poszukiwania łańcucha s_l w łańcuchu s stosujemy funkcję POS. Funkcja POS Zapis ogólny funkcji: POS(s_1,s); Funkcja ta powoduje wyszukiwanie łańcucha s_l w łańcuchu s. Wynikiem jest numer miejsca, w którym łańcuch s_1 po raz pierwszy zostanie znaleziony w łańcuchu s. Wynik jest typu BYTE. POS('PASCAL','TURBO PASCAL'); Powyższy zapis powoduje uzyskanie wyniku 7. Ćwiczenie 99 Napisać program sprawdzający liczbę małych liter a" w tekście. Program ma tytuł Obecność_litery_a". Zapisać program na dysku w pliku o nazwie string_4.pas. W programie wyznaczana jest długość tekstu (liczba znaków), a następnie sprawdzany jest każdy znak, czy zgodność jest z literą 'a'. PROGRAM Obecność_litery_a; tekst : STRING; (* sprawdzany tekst *) i : INTEGER; ile : INTEGER; (* ile jest liter 'a' w tekście *) (**********************************) ClrScr; Writeln (' Wyznaczenie liczby małych liter 'a' w tekście '); Writeln (' Napisz tekst i nacisnij ENTER'); Readln (tekst); ile:=0; FOR i:=l TO LENGTH (tekst) DO IF (tekst[i]= 'a') THEN ile:=ile+l; Writeln (' Liczba małych liter "a" w tekście : ',ile); REPEAT UNTIL KeyPressed END. Procedura DELETE Zapis ogólny procedury: DELETE (s, Indeks, Licznik); Z łańcucha znaków s zostanie od miejsca oznaczonego numerem Indeks usunięta liczba znaków określona przez zmienną Licznik. Parametrem W musi być zmienna, a nie dowolne wyrażenie, ponieważ procedura DELETE zmienia zawartość s. Dla przykładu: s:='kapela'; DELETE (s, 1, 3); otrzymamy napis 'ela'. Wstawianie danego łańcucha do innego łańcucha uzyskujemy korzystając z procedury INSERT.

Procedura INSERT Zapis ogólny procedury: INSERT (s_l,s, Indeks); Do zmiennej s typu STRING zostaje wpisany od pozycji Indeks łańcuch znaków s_l. Parametrem s musi być zmienna, a nie dowolne wyrażenie, ponieważ procedura INSERT zmienia zawartość s. Dla przykładu: s:='stacja'; INSERT ('gna',s, 4); otrzymamy napis 'Stagnacja 1. Ćwiczenie 100 Napisać program sprawdzający działanie podanych funkcji i procedur. Program ma tytuł Przykłady_1". Zapisać program na dysku w pliku o nazwie string_5.pas. W poniższym programie sprawdzimy przykłady do podanych uprzednio funkcji i procedur. PROGRAM Przykłady_1; Zdanie_1 : String[10]; Zdanie_2 : String[8]; Zdanie_3 : String[4]; Zdanie_4 : String[8]; Zdanie 5 : String[15]; Zdanie_6 : String[6]; Zdanie_7 : String[8]; Zdanie_8 : String[6]; Zd_1 :String[20]; Zd_2 : String[20]; (************************) ClrScr; Zdaniel := 'KOMPAKT'; Zdanie_2 := 'ADAM '; Zdanie 3 := 'I '; Zdanie 4 := 'MICHAŁ'; Zdanie_5 := 'TURBO PASCAL'; Zdanie_6 := 'PASCAL'; Zdanie_7 := 'Kapela'; Zdanie_8 := 'Stacja'; Writeln (' Przykładowe wyniki działania funkcji '); Writeln (' Funkcja COPY '); Zd_l := COPY(Zdanie 1,5,3); Writeln (' ',Zd_l); Writeln (' Funkcja CONCAT '); Zd_2 := CONCAT(Zdanie_2, Zdanie 3, Zdanie_4); WritelnC ',Zd_2); Writeln (' Funkcja POS '); Write (' '); Writeln (POS(Zdanie 6,Zdanie_5));

Writeln (' Funkcja DELETE '); DELETE (Zdanie_7,1,3); Write (' '); Writeln(Zdanie_7); Writeln (' Funkcja INSERT '); INSERT ('gna',zdanie_8,4); Write(' '); Writeln (Zdanie_8); REPEAT UNTIL KeyPressed END. Procedura STR oraz VAL są najczęściej wykorzystywanymi procedurami przy obróbce tekstu. Procedura STR Zapis ogólny procedury: STR (x[:długość[:miejsca dziesiętne]],s); Procedura ta przekształca wartość numeryczną argumentu x na wartość typu STRING, która zostaje zapamiętana przez zmienną s będącą typu STRING. Przy zapamiętywaniu w łańcuchu wartości 370.0 jako stałej typu REAL, zapis procedury przybierze postać: STR (370.0,s); W zmiennej s zostanie zapisana wartość 3.7000000000+E02 Dla liczby 370 jako stałej typu INTEGER będzie to: STR (370,s); W zmiennej s zostanie zapisana wartość 370. Dla liczby 370 jako 3.7E+02 będzie to: STR (3.7E+02: 3:l,s); W zmiennej s zostanie zapisana wartość 370.0. Liczbę 324.111123 należy odpowiednio zapisać (np. z trzema miejscami po kropce dziesiętnej): STR (324.111123: 15:3,s); W zmiennej s zostanie zapamiętana wartość 324.111. Procedura VAL Zapis ogólny procedury: VAL(s, x, Kod); Procedura ta przekształca łańcuch znaków s na wartość numeryczną zapamiętaną w zmiennej numerycznej x będącej typu REAL lub INTEGER. W zmiennej Kod zawarta jest informacja dotycząca przebiegu powyższej operacji. Zmienna ta ma wartość 0, jeśli operacja zamiany wartości z łańcuchowej na wartość numeryczną nastąpiła bez błędów. W innym przypadku zmienna ta otrzymuje liczbę pierwszego błędnego znaku w danym łańcuchu. Dla zmiennej s (np. s=2) typu INTEGER otrzymamy: VAL(s, x, Kod); x=2 oraz Kod=0, Ćwiczenie 101 Napisać program wczytujący promień kola jako wyrażenie typu STRING oraz obliczający pole koła. Program ma tytuł Promien_kola_1". Zapisać program na dysku w pliku o nazwie string_6.pas. Cały program został przedstawiony poniżej: PROGRAM Promien_kola_1; PromienString : STRING[20]; Promien_Real : REAL ; Polekola : REAL ; Ocena : INTEGER ;

(*********************************) ClrScr; WriteLn (' Obliczenie pola kola - promien_string '); WriteLn; Write (' Podaj promień kola w cm : '); ReadLn (Promien_String); WriteLn; (* zamiana na wartość numeryczna *) VAL (Promien_String, Promien_Real, Ocena); IF Ocena = 0 THEN Pole_kola := Pi * Sqr(Promien_Real); WriteLn; Write (' Pole kola o promieniu r= ', Promien_String,' wynosi ',Pole_kola: 8:3,' cm kw.'); WriteLn; END ELSE WriteLn('Bledny znak na miejscu ',Ocena); REPEAT UNTIL KeyPressed END. Ćwiczenie 102 Napisać program przekształcający liczby całkowite na wyrażenie typu STRING o żądanym formacie. Program ma tytuł Przejrzysta_postac_liczb". Zapisać program na dysku w pliku o nazwie string_7.pas. Liczby, którymi operuje Turbo Pascal, nie mogą zawierać w sobie żadnych niewidocznych znaków (spacji). Wartość liczby w postaci 123456781 jest trudna do odczytu. Liczba napisana w sposób następujący: 123 456 781 jest bardziej przejrzysta. Program będzie zamieniał wprowadzane liczby na taki właśnie format. Po wprowadzeniu liczby do programu zostaje ona zamieniona procedurą STR na wartość typu STRING. Następuje obliczenie jej długości i wstawienie do pozycji wyznaczonej przez licznik nowego łańcucha w postaci spacji powodującej rozsunięcie liczb po każdych trzech cyfrach licząc od prawej strony. PROGRAM Przejrzysta_postac_liczb;. LiczbaString : STRING[15]; Liczba : LONGINT; Licznik : SHORTINT; (*********************) ClrScr; Writeln (' Przejrzystość liczb'); Write (' Podaj liczbę całkowita (do 9 cyfr): '); Readln (Liczba); STR (Liczba, Liczba_String); Licznik := Length(Liczba_String) - 2; WHILE Licznik > 0 DO Insert (' ',Liczba_String, Licznik); Licznik := Licznik - 3 Writeln (' Przejrzysta postać : ', Liczba_String); REPEAT UNTIL KeyPressed

END. Ćwiczenie 103 Napisać program przekształcający liczby całkowite większe niż 9-cyfrowe na wyrażenie typu STRING o żądanym formacie (co trzy cyfry). Program ma tytuł Przejrzystość_ liczb". Zapisać program na dysku w pliku string_8.pas. Ćwiczenie 104 Napisać program wczytujący dany tekst i wypisujący z niego wszystkie wyrazy, których pierwszy znak jest równy ostatniemu. Program ma tytuł Znaki_rowne". Zapisać program na dysku w pliku o nazwie string_9.pas. Ćwiczenie 105 Napisać program wczytujący dany tekst i wypisujący z niego wszystkie wyrazy o nieparzystej długości zaczynające się na literę 'p'. Program ma tytuł Wyrazy_nieparzyste". Zapisać program na dysku w pliku o nazwie st_1.pas.. Ćwictenie 106 Napisać program sprawdzający, czy dany tekst jest palindromem (czytany od początku i od końca tworzy ten sam ciąg znaków). Program ma tytuł Palindromy". Zapisać program na dysku w pliku o nazwie st_2.pas. Ćwiczenie 107 Napisać program tworzący wszystkie możliwe anagramy danego słowa. Anagram tworzy się przestawiając kolejność liter w wyrazie. Program ma tytuł Anagramy". Zapisać program na dysku w pliku o nazwie st_3.pas. Ćwiczenie 108 Napisać program pozwalający wykonywać dodawanie bardzo dużych liczb naturalnych (liczba cyfr >9). Program ma tytuł Dodawanie_duzych_liczb". Zapisać program na dysku w pliku o nazwie st_4.pas. Uwaga: Jednym ze sposobów rozwiązania jest metoda polegająca na traktowaniu liczby jako ciągu cyfr, a więc jako zmiennej łańcuchowej. Pozwala to na działania na liczbach o 255 cyfrach. Liczbę naturalną na zmienną łańcuchową zamienia funkcja STR, zmienną łańcuchową na liczbę naturalną zamienia funkcja VAL. Dodawanie przebiega tak jak w przypadku zwykłego dodawania pisemnego. W metodzie drugiej przyjmuje się, że liczba jest tablicą zawierającą cyfry. Dodawanie przebiega podobnie jak w metodzie pierwszej. Ćwiczenie 109 Napisać program pozwalający wykonywać mnożenie bardzo dużych liczb całkowitych (liczba cyfr >9). Program ma tytuł Mnożenie_duzych_liczb". Zapisać program na dysku w pliku o nazwie st_5.pas. Ćwiczenie 110 Napisać program pozwalający wykonywać obliczenie ilorazu i reszty z dzielenia bardzo dużych liczb naturalnych (liczba cyfr >9). Program ma tytuł Dzielenie_duzych_liczb". Zapisać program na dysku w pliku st_6.pas.