субота, 25 листопада 2017 р.

Тема 3. Підпрограми-функції

Процедури-функції
1. Задається функція так:
Function <ім'я функції>(<список формальних параметрів>):<тип результату>;

2. У тілі функції обов'язково повинен бути оператор присвоєння виду:
<ім'я функції>:=<вираз>

3. Результат виконання функції потрібно присвоїти відповідній змінній.

Параметрце змінна, яка використовується для обчислення значення функції. Відмінність параметру від звичайної змінної полягає в тому, що він описується не в розділі опису змінних, а в заголовку функції. Конкретне значення параметр отримує під час роботи програми при викликанні функції з основної програми.
Список формальних параметрів використовується для передачі даних в підпрограму – функцію. Після імені змінної чи групи імен змінних йде двокрапка і записується тип цих змінних.
Тип результатуце тип значення, яке функція повертає у викликаючу її програму.
В розділі операторів знаходиться хоча б один оператор, який присвоює імені функції деякий вираз.

Приклад: Порахувати суму двох чисел.
Program Dem_fun;
Var x1,x2,x:Real;
Function Fsum(a,b:Real):Real;
Begin
  Fsum:=a+b
End;
Begin
  Write (‘вв.2 числа’)
  Read(x1, x2);
  X:=Fsum(x1,x2);
  Write (x1,’+’,x2,’=’,x)
End.
Виклик функції користувача здійснюється аналогічно тому, як і виклик будь-якої функції   X:=Fsum(x1,x2).

Задача: по заданих дійсних значеннях x і y обчислити u=max(x+y,x*y), v=max(0.5,u).

Програма розв'язку цієї задачі з використанням функції:

Program Max3;
Var x,y,u,v:real;
Function Max(r1,r2:real):real;
Begin
 If r1>r2 then max:=r1 else max:=r2
End;
Begin
 Read(x,y);
 U:=Max(x+y,x*y);
 V:=Max(0.5,u);
 Writeln(u,v)
End.

Приклад. Скласти програму з використанням функцій та процедур з параметрами: порахувати суму елементів матриць a,b,c розміру 3´4, що містить дійсні елементи.

program PR2;
const m =3; n = 4;
type matr= array[1..3,1..4] of real;
var  a,b,c:matr; s1,s2,s3:real;

procedure Vvid(var d:matr);
var i, j: integer;
 begin
           for i: = 1 to 3 do
             for j: = 1 to 4 do
                 read(d[i, j]);
 end;

function SUM(d:matr):real;
var s:real;
begin s: =0;
    for i: = 1 to 3 do      
        for j: = 1 to 4 do
            s: = s + d[i, j];
    sum:=s;
 end;

begin  
      Vvid(a);  s1:=SUM(a); writeln (‘s1=’, s1);
      Vvid(b);  s2:=SUM(b); writeln (‘s2=’, s2);
      Vvid(c);  s3:=SUM(c); writeln (‘s3=’, s3);
end.

Підручник : ст. 206(Виклик з однієї процедури іншої),ст. 209, 211-212(функції), ст. 217=219(рекурсія).

Д./з. 1
1. Ввести вектори a,b,c з n дійсних елементів. Всі елементи, які належать проміжку [-5,5], замінити на максимальний елемент відповідного вектора. Вивести утворені вектори.Використати процедури.
2. Ввести ціле число x. Обчислити u = min(x,x2), v = min(0.2,u), використовуючи функції.
3. Ввести дійсні числа a,b,c. Якщо трикутник з такими сторонами існує, то знайти його площу (задати дві функції: для визначеня існування трикутника та знаходження площі). Підказка на ст.212.


Д./з. 2 (Використовуючи функції)
1. Порахувати середнє арифметичне додатніх елементів кожного з векторів a,b,c, які складаються з n дійсних елементів.
2. Порахувати кількість елементів, що належать проміжку [-6,6] кожного з векторів a,b,c, які складаються з n дійсних елементів. Також знайти максимальний елемент кожного з цих векторів.



субота, 11 листопада 2017 р.

Тема 1. Підпрограми. Процедури без параметрів

Підпрограми
Часто, працюючи над програмою, програміст помічає, що деяка послідовність команд, зустрічається в різних частинах програми декілька разів. Можна запобігти дублюванню коду в програмі. Для цього потрібно оформити команди, які зустрічаються декілька разів як підпрограму і замінити команди, оформлені як підпрограма командою виклику підпрограми.
Важливим принципом програмування є принцип модульності. В модульній програмі окремі її частини, призначені для розвязування часткових задач, організовані в підпрограми.
Підпрограмою називається самостійний фрагмент програми, який має ім’я та оформлений певним чином.
Модульний принцип організації програм має дві великі переваги :
1.             один і той же фрагмент можна використовувати багаторазово в різних програмах, не набираючи текст наново;
2.             програми краще писати невеликими частинами.
В мові Паскаль модульність забезпечується використанням підпрограм – процедур, підпрограм – функцій і модулів.

По структурі процедура і функція аналогічні самій програмі: є заголовок, може бути присутній один із розділів опису, який передбачений в основній програмі, і тіло процедури, яке являє собою сукупність операторів, закріплених в операторні дужки begin-end, а в кінці ставиться крапка з комою.
Як видно із синтаксичних діаграм, розрізняють процедури з параметром і без параметрів (це ті, де відсутній список формальних параметрів). Виклик процедури здійснюється шляхом вказування імені процедури і списку фактичних параметрів.

Процедури без параметрів
Процедура вводиться у використання (визначається) за допомогою опису процедури в розділі процедур і функцій програми:<заголовок процедури>;<блок>;
Заголовок процедури починається із службового слова procedure, містить ім’я процедури.
Для активізації процедури (тобто для виконання фрагменту програми, оголошеного процедурою) в потрібному місці програми служить оператор процедури:
<ім'я процедури>;
Різні особливості опису процедур і способи їх використання будемо розглядати на прикладі такої задачі.
Задача: по заданих дійсних значеннях x і y обчислити u=max(x+y,x*y), v=max(0.5,u).
запишемо цю програму в такому вигляді:
program MAX2;
var x, y, u, v, a, b, s: real;
begin read (x, y);
a: = x + y; b: = x*y;
if a > b then s: = a else s: = b;
u: = s;
a: = 0.5; b: = u;
if a > b then s: = a else s: = b;
v: = s;
writeln (‘u=’, u, ‘v=’, v)
end.
Тут  два умовні оператори співпадають. Щоб не записувати цей оператор два рази, оголосимо його процедурою з ім’ям MAXPR:
program MAX3;
var x, y, u, v, a, b, s: real;
procedure MAXPR;
begin if a > b then s: = a else s: = b end;
begin read (x, y);
a: = x + y; b: = x*y;
MAXPR;
u: = s;
a: = 0.5; b: = u;
MAXPR;
v: = s;
writeln (‘u=’, u, ‘v=’, v)
end.

Приклад. Скласти програму з використанням процедур без параметрів: порахувати суму елементів матриці розміру 3´4, що містить дійсні елементи.

program PR2;
const m =3; n = 4;
var  i, j: integer;a:array[1..3,1..4] of real; s:real;

procedure Vvid;
 begin
           for i: = 1 to 3 do
             for j: = 1 to 4 do
                 read(a[i, j]);
 end;

procedure SUM;
 begin s: =0;
    for i: = 1 to 3 do      
        for j: = 1 to 4 do
           s: = s + a[i, j];
 end;

begin  
               Vvid;
      SUM;
      writeln (‘s=’, s);
end.

Підручник : ст. 201-203.
Д./з.
1. Ввести ціле число x. Обчислити u = min(x,x2), v = min(0.2,u).
2. Порахувати суму і кількість додатніх елементів кожного з трьох векторів, які складаються з n дійсних елементів.


Тема 2. Процедури з параметрами

Процедури з параметрами
Задача: по заданих дійсних значеннях x і y обчислити u=max(x+y,x*y), v=max(0.5,u).
Програма розв'язку цієї задачі з використанням процедур з параметрами:

Program Max3;
Var x,y,u,v:real;
Procedure Max(r1,r2:real;var res:real);
Begin
 If r1>r2 then res:=r1 else res:=r2
End;
Begin
 Read(x,y);
 Max(x+y,x*y,u);
 Max(0.5,u,v);
 Writeln(u,v)
End.
r1, r2 – формальні параметри процедури, бо вони представляють не якісь конкретні значення, а значення “взагалі”. При кожному зверненні до процедури її формальні параметри конкретизуються.
Оскільки формальні параметри мають тип real, то фактичним параметром може бути будь-який арифметичний вираз.
Встановлюється відповідність між формальними і фактичними параметрами.
r1, r2 називаються параметрами-значеннями, оскільки кожний з них у тілі процедури набуває значення, яке йому задають під час звертання за допомогою відповідного фактичного параметра.
Формальний параметр res відрізняється від r1, r2. Це не значення, а змінна.
Щоб відрізнити параметр-змінну від параметра-значення, перед ним в списку формальних параметрів записується службове слово var. Для параметра-змінної фактичним параметром може бути тільки змінна!

Принцип локалізації: імена, що вводяться в будь-якій процедурі, мають силу тільки в цій процедурі.
Формальні параметри. Ці змінні існують тільки на час виконання тіла процедури, а після виходу з процедури вони припиняють своє існування.
Глобальні ідентифікатори в тілі процедури мають той самий зміст, що і до моменту входу в процедуру.
Локальні ідентифікатори. Це ідентифікатори, що не є формальними парметрами, але описані в тілі процедури і діють тільки в процедурі.


Об’єкти, які описані в самій процедурі, називаються локальними по відношенню до самої програми і можуть використовуватись тільки в тій процедурі, в якій вони описані. Крім локальних об’єктів (зокрема змінних та типів, констант) в процедурі і функції можуть використовуватися об’єкти, які описані в основній програмі і їх називають глобальними.
Виклик процедури здійснюється шляхом вказування імені процедури і списку фактичних параметрів.
Формальні параметри в процедурах і функціях розрізняють 2-х видів: параметри значення і параметри змінні. Параметри значення–це ті формальні параметри, зміна значень яких не впливає на зміну відповідних фактичних параметрів.
 При виклику процедури чи функції слід пам’ятати:
1)кількість фактичних параметрів повинна співпадати з кількістю формальних параметрів і типи відповідних параметрівтеж повинні співпадати;
2)значення всіх фактичних параметрів передаються відповідно формальним параметрам.
Параметрами-змінними називаються ті формальні параметри, які після виконання процедури передають свої значення відповідно фактичним параметрам (тобто вони їх змінюють). При описі параметри-змінні відрізняють від параметрів-значень, вказавши перед ними службове слово var.
При виклику процедури слід пам’ятати, що на місці фактичного параметра, коли відповідний формальний параметр описаний, як параметр–значення, може стояти вираз того самого типу (зокрема змінна або константа).
В випадку, коли формальний параметр описаний як параметр–змінна, то відповідний фактичний параметр повинен бути тільки змінною(бо вона здатна набувати нового значення).

Приклад. Скласти програму з використанням процедур без параметрів: порахувати суму елементів матриць a,b,c розміру 3´4, що містить дійсні елементи.

program PR2;
const m =3; n = 4;
type matr= array[1..3,1..4] of real;
var  a,b,c:matr; s1,s2,s3:real;

procedure Vvid(var d:matr);
var i, j: integer;
 begin
           for i: = 1 to 3 do
             for j: = 1 to 4 do
                 read(d[i, j]);
 end;

procedure SUM(d:matr; var s:real);
begin s: =0;
    for i: = 1 to 3 do      
        for j: = 1 to 4 do
            s: = s + a[i, j];
 end;

begin  
      Vvid(a);  SUM(a,s1); writeln (‘s1=’, s1);
      Vvid(b);  SUM(b,s2); writeln (‘s2=’, s2);
      Vvid(c);  SUM(c,s3); writeln (‘s3=’, s3);
end.

Підручник : ст. 204
Д./з. (використовуючи процедури з параметрами)
1. Ввести ціле число x. Обчислити u = min(x,x2), v = min(0.2,u).
2. Порахувати суму і кількість додатніх елементів кожного з векторів a,b,c, які складаються з n дійсних елементів.
3. Порахувати кількість елементів, що належать проміжку [-6,6] кожного з векторів a,b,c, які складаються з n дійсних елементів. Також знайти максимальний елемент кожного з цих векторів.



пʼятниця, 20 жовтня 2017 р.

Тип String

Стрічки


Під стрічкою розуміється скінченну послідовність символів (елементів таблиці ASCII). В Pascal така послідовність не може перевищувати 255 символів. Загальний вигляд опису змінних типу стрічка:
I спосіб:  type Strichka=string[N];
                var S:Strichka;                        
        II спосіб:  var S:string[N];
Var S: string[N]; де N вказує довжину максимальної стрічки, яка може бути присвоєна змінній S.
Якщо стрічка описана   var S: string [10];
то можна задати такі рядки    S:=’фізика’;   або    S:=‘’;{порожня стрічка}.
Змінній типу стрічка можна присвоювати значення або вводити оператором readln(s).

Аналогічно того, як при роботі з масивами, вказується доступ до елементів стрічки шляхом вказування імені змінної і порядкового номера елемента цієї стрічки. Крім того можна використовувати зміннуS[0], яка містить інфомацію про довжину стрічки S.
Фунція Ord(S[0]) видає довжину стрічки.
Для преставлення стрічки S в оперативній пам’яті КС виділяється(N+1) байт пам’яті.

Над стрічками виконуються всі операції порівняння. Вони визначаються наступним чином:
1) перевіряється довжина двох стрічок; якщо довжина однієї є більшою, то вона більша;
2) у випадку, коли довжини стрічок одинакові, більшою вважається та, в якій код першого символа, яким вони відрізняються, є більшим.

Операції над стрічками:
1). Додавання (склеювання) рядків:
S1:= concat (S1,S2)   або  S1:=S1+S2. Після її виконання в кінець S1 допишеться початок S2.
2) delete(S,n,m) – вилучає із стрічки S, починаючи з позиції n  m символів;
3) insert(S2,S1,N) – вставляє S2 в S1, починаючи з позиції N;
4) length (S)–визначає довжину стрічки;
5) copy (S,n,m)–копіює із стрічки S m символів, починаючи з позиції n;
6) pos(S2,S1)–визначає номер позиції, починаючи з якої S2 входить в S1 (перше входження). Якщо такого входження немає, то значення функції=0.

7) str(n, S)–перетворює число n в стрічку S;    (приклад: n=123,S=’123’)
8) val (S,n,c)-переводить стрічку в число, де S- стрічка, n-число, c–змінна типу байт. Параметр с (індикатор) вказує успішність такого переведення: якщо стрічка S переведено в число n, то c=0; в іншому випадку значення цієї змінної рівне позиції першого елемента стрічки, при переведенні якого в число виникає помилка (приклад: S=’12c47’, після виконання val(S, n ,c) n–невідоме, с=3.
9) upcase(c)-переводить малі букви в великі.

Приклад 1. Ввести рядок S, який може містити максимально  15 символів, і вивести його. Змінній Р присвоїти рядок ‘Lviv’.
Var S:string[15]; P:string[4];
Begin
   Readln(S);
   Writeln(S);
   P:=’Lviv’;
   Writeln(p)
End.

Приклад 2. Порахувати кількістьцифр 5 в стрічці.
Var S:string[20]; i,k:integer;
Begin
   Readln(S);
   k:=0;
  For i:=1 to Length(S) do
         If S[i]=’5’ then k:=k+1;
  Writeln(k)
End.

Приклад 3. Порахувати кількістьцифр 5 в стрічці (ІІ спосіб).
Var S:string[20]; i,k:integer;
Begin
   Readln(S);
   k:=0;
  while Pos(‘5’,S)>0 do
         k:=k+1;
  Writeln(k)
End.

Приклад 4.
В рядку S:string[10] слова ’Київ’ замінити на ’Львів’.
Var S:string[10]; i:integer;
Begin
  Read(s);
  i:=Pos(‘Київ’,s);   
 while i>0 do
   begin       
      Delete(s,i,4);
      Insert(‘Львів’,s,i);
      i:=Pos(‘Київ’,s);   
   end; 
 Write(s)
End.

Руденко, Речич, Потієнко. Інформатика. 9 клас ст. 172-174

Д./з. №1
1. Видалити всі слова red в рядку.
2. Всі сполучення abc в рядку замінити на defg, підрахувати кількість таких замін.
3. Після кожної букви в рядку записати букву s.

Д./з. №2
Задано : type slovo=string[8];
                   Var mas:array [1..12] of slovo;
1.      Порахувати кількість слів, коротших від слова Львів.
2.      Вивести всі слова, які відмінні від слова Київ.
3.      Текст, що утвориться з останніх літер всіх слів списку mas.
4.      Всі слова зі списку mas, що містять дві букви s.