среда, 25 декабря 2013 г.

TShape

TShape - найпростіші графічні об'єкти на формі типу коло, квадрат і т.п. Вид об'єкту вказується у властивості Shape. Властивість Pen визначає колір і вигляд межі об'єкта. Brush задає колір і вигляд заповнення об'єкта. Ці властивості можна змінювати як під час дизайну, так і під час виконання програми.



Властивості Canvas :

Brush -кисть , є об'єктом зі своїм набором властивостей:

Bitmap - картинка розміром строго 8x8 , використовується для заповнення ( заливки ) області на екрані.

Color - колір заливки.

Style - зумовлений стиль заливки ; це властивість конкурує з властивістю Bitmap - яке властивість Ви визначили останнім, те й буде визначати вид заливки.

Handle - дана властивість дає можливість використовувати кисть в прямих викликах процедур Windows API .

ClipRect - ( тільки читання) прямокутник , на якому відбувається графічний висновок .

CopyMode - властивість визначає , яким чином відбуватиметься копіювання (метод CopyRect ) на дану канву зображення з іншого місця : один до одного , з інверсією зображення та ін

Font - шрифт , яким виводиться текст ( метод TextOut ) .

Handle - дана властивість використовується для прямих викликів Windows API .

Pen - олівець , визначає вид ліній; як і кисть ( Brush ) є об'єктом з набором властивостей:

Color - колір лінії

Handle - для прямих викликів Windows API

Mode - режим виводу: проста лінія , з інвертуванням , з

виконанням виключає або та ін

Style - стиль виводу: лінія , пунктир та ін

Width - ширина лінії в точках

PenPos - поточна позиція олівця , олівець рекомендується переміщати за допомогою методу MoveTo , а не прямий установкою даної властивості .

Pixels - двомірний масив елементів зображення ( pixel ) , з його допомогою Ви отримуєте доступ до кожної окремої точці зображення (див. приклад до даного уроку ) .

Методи Canvas :

Методи для малювання найпростішої графіки - Arc , Chord , LineTo , Pie , Polygon , PolyLine , Rectangle , RoundRect . При промальовуванню ліній в цих методах використовуються олівець ( Pen) канви , а для заповнення внутрішніх областей - кисть ( Brush ) .

вторник, 26 ноября 2013 г.

Робота з файлами

Типи файлів Турбо Паскаль

Турбо Паскаль підтримує три файлових типи:
  • текстові файли;
  • типізовані файли;
  • нетипізовані файли.
Доступ до файлу в програмі відбувається за допомогою змінних файлового типу. Змінну файлового типу описують одним з трьох способів:
file of тип - типізований файл (вказаний тип компоненти);
text - текстовий файл;
file - нетипізований файл.
Приклади опису файлових змінних:
var
   f1: file of char;
   f2: file of integer;
   f3: file;
   t: text;
    

Стандартні процедури та функції

Будь-які дискові файли стають доступними програмі після зв'язування їх з файловою змінною, оголошеної в програмі. Всі операції в програмі здійснюються тільки за допомогою пов'язаної з ним файлової змінної.

Assign(f, FileName)

пов'язує файлову змінну f з фізичним файлом, повне ім'я якого задано в рядку FileName. Встановлений зв'язок буде чинним до кінця роботи програми, або до тих пір, поки не буде зроблено перепризначення.
Після зв'язку файлової змінної з дисковим ім'ям файлу в програмі потрібно вказати напрямок передачі даних (відкрити файл). В залежності від цього напрямку говорять про читання з файлу або запису в файл.

Reset(f)

відкриває для читання файл, з яким пов'язана файлова змінна f. Після успішного виконання процедури Reset файл готовий до читання з нього першого елемента. Процедура завершується з повідомленням про помилку, якщо зазначений файл не знайдений.
Якщо f - типізований файл, то процедурою reset він відкривається для читання і запису одночасно.

Rewrite(f)

відкриває для запису файл, з яким пов'язана файлова змінна f. Після успішного виконання цієї процедури файл готовий до запису в нього першого елемента. Якщо вказаний файл вже існував, то всі дані з нього видаляються.

Close(f)

закриває відкритий до цього файл з файлової змінної f. Виклик процедури Close необхідний при завершенні роботи з файлом. Якщо з якоїсь причини процедура Close не буде виконана, файл усе-таки буде створений на зовнішньому пристрої, але вміст останнього буфера в нього не буде перенесено.
EOF(f): boolean
повертає значення TRUE, коли при читанні досягнутий кінець файлу. Це означає, що вже прочитаний останній елемент у файлі або файл після відкриття виявився порожній.
Rename(f, NewName)
дозволяє перейменувати фізичний файл на диску, пов'язаний з файловою змінною f. Перейменування можливо після закриття файлу.

Erase(f)

видаляє фізичний файл на диску, який був зв'язаний з файловою змінною f. Файл до моменту виклику процедури Erase має бути закритий.

IOResult

повертає ціле число, яке відповідає коду останньої помилки введення - виведення. При нормальному завершенні операції функція поверне значення 0. Значення функції IOResult необхідно надавати якій-небудь змінній, так як при кожному виклику функція обнуляє своє значення. Функція IOResult працює тільки при вимкнутому режимі перевірок помилок введення - виведення або з ключем компіляції {$I-}.

                                 Program p1;
Var a: longint ; t: text; s: integer;
begin
assign( t,'input.txt');
Reset(t);

read(t, a);
 s:= a*2;
close(t);
assign(t,'output.txt');
rewrite(t); {перезаписуємо фаил}
write(t,s); {Выводимо дані. }
close(t);
end.

четверг, 21 марта 2013 г.

задачі


 Читання послідовності довжиною до 35 символів з ​​текстового файлу example.txt (його вміст, наприклад, "23456 Всім привіт!"

     Функція Eoln (var F: text) повертає булеве значення True, якщо поточна файлова позиція знаходиться на маркері кінця рядка або виклик Eof (F) повернув значення True. У всіх інших випадках значення функції буде False.

     Функція Eof (var F: text) повертає булеве значення True, якщо вказівник кінця файлу знаходиться відразу за останнім компонентом. В іншому випадку - False.


program wtf2;
var F: text; St: string[35];
begin
    assign(F, 'example.txt');     reset(F);
    while not Eoln(F) do
        begin
           read(F,St);
          writeln('St = ',St);         end;
    readln(F);     close(F);
    writeln('вивід символів з ​​файлу закінчено. для виходу — Enter.');
    readln;
end.


 При роботі з файлами в TP використовуються наступні процедури:

     assign (var F; name: string); - встановлює відповідність між файлом і файлової змінної, відкриває всі інші процедури роботи з файлами. F - змінна будь-якого файлового типу, name - повне ім'я файлу.
     close (var F); - закінчення процедур роботи з файлами (закриття файлу).
     rewrite (var F: file); - створює і відкриває новий файл.
     reset (var F: file); - відкриває існуючий файл.
     append (var F: text); - відкриває існуючий текстовий файл і позиціонує покажчик обробки на кінець файлу.

     Після цього можна доповнювати текстовий файл інформацією, починаючи з кінця рядка.

     erase (var F); - видаляє невідкритий зовнішній файл будь-якого типу, що задається змінною F.
     rename (var F: newname: string); - перейменовує невідкритий файл F будь-якого типу. Нове ім'я задається рядком newname.

     Текстовий файл можна розглядати як послідовність символів, розбиту на рядки довжиною від 0 до 256 символів. Для опису використовується стандартний тип text: var F: text; (F - файлова змінна).

вторник, 19 марта 2013 г.

Задачі

Два бандити(Бандити Гаррі і Ларрі відпочивали на природі. Вирішивши постріляти, вони виставили на колоду кілька банок з-під пива (не більше 10). Гаррі почав прострілювати банки по порядку, починаючи з самої лівої, Ларрі - з самої правої. У якийсь момент вийшло так, що вони одночасно прострелили одну і ту ж останню банку.
Гаррі обурився і сказав, що Ларрі повинен йому купу грошей за те, що той позбавив його задоволення прострелити кілька банок. У відповідь Ларрі сказав, що Гаррі повинен йому ще більше грошей з тих же причин. Вони стали сперечатися хто кому скільки винен, але ніхто з них не пам'ятав скільки банок було на початку, а шукати прострелені банки по всій окрузі було неохота. Кожен з них пам'ятали тільки, скільки банок прострелив він сам.
Визначте за цими даними, скільки банок не прострелив Гарі і скільки банок не прострелив Ларрі.Вхідні даніУ єдиному рядку вхідного файлу INPUT.TXT записано 2 числа - кількість банок, прострелених Гаррі і Ларрі відповідно.Вихідні даніУ файл OUTPUT.TXT виведіть 2 числа - кількість банок, не прострелених Гаррі і Ларрі відповідно.


 
program task3;
var
  a,b,c,d,f:integer;
begin
  assign(input,'input.txt'); reset(input);
  assign(output,'output.txt'); rewrite (output);
  readln(a,b);
  c:=a+b-1;
  d:=c-a;
  f:=c-b;
  writeln(output,d,' ',f);
  close(input);
  close(output);
end.
 

Наведемо програму, що виводить на екран перші п'ять рядків текстового файла.

Program ex5;
var f:text;
  s:string;
  i:integer;
begin
  writeln('reading rows from the text file');
  assign(f,'t.txt');
  reset(f);
  for i:=1 to 5 do
    begin
      readln(f,s);
      writeln(s);
    end;
  close(f);
  readln;
end.


четверг, 28 февраля 2013 г.

масиви

Дамо поняття масиву. Масив – це впорядкований іменований набір із фіксованої кількості однотипних даних. Доступ до будь-якого елементу масиву здійснюється за його номером. У масиви можна об’єднувати результати експериментів, списки прізвищ співробітників, різні складні структури даних. Наприклад, список учнів у класному журналі є масивом. У масиві дані розрізняються за своїми порядковими номерами (індексами). Якщо кожний елемент масиву визначається за допомогою одного номера, то такий масив називається одновимірним, якщо за двома – то двовимірним. Двовимірний масив – це таблиця з рядків і стовпців. У таблицях перший номер вказує на рядок, а другий – на положення елемента в рядку. Усі рядки таблиці мають однакову довжину.
Одновимірний масив може бути набором чисел, сукупністю символьних даних чи елементів іншої природи (навіть масив масивів). Так само, як і в послідовності, в одновимірному масиві можна вказати елемент з конкретним номером, наприклад а5, або записати загальний вигляд елемента, використовуючи як індекс змінну і, вказуючи діапазон її зміни:
a[i] , i=1, 2 n.
Задачі, в яких використовуються масиви, можуть мати різне формулювання. Наприклад, задача починається зі слів «Дано n чисел...» і далі вказується, що треба зробити з цими числами. При написанні програми мовою Паскаль для розв'язання подібної задачі слід виконати такі дії:
  • визначити, які числа задані: цілі чи дійсні; якщо про це
конкретно не сказано, то краще вважати їх дійсними;
  • назвати весь масив одним ім'ям (це ім'я буде використовуватись для кожного елемента, тільки до імені масиву додаватиметься номер елемента – індекс);
  • описати масив у розділі змінних var, тим самим відвести місце в пам'яті для масиву;
  • ввести дані до пам'яті.
В описі масиву використовують спеціальне слово array (масив), після якого у квадратних дужках через дві крапки вказують діапазон змінювання номерів елементів, далі слово of (із) і тип даних масиву. Коли транслятор зустрічає опис масиву, він відводить для нього стільки послідовних ділянок пам'яті, скільки вказано в квадратних дужках, і такої довжини, яка відповідає типу даних у масиві.
Здебільшого номери елементів змінюються від 1 до заданого числа n, яке є ocтаннім значенням (верхньою межею) номера елемента масиву. Значення n можна задати в розділі констант (const). Приклад опису масиву:
const n = 10; var a: array [1..n] of real;
Цей опис означає, що для масиву a буде відведено десять ділянок оперативної пам'яті по шість байтів кожна. У Паскалі імена цих ділянок записуються так:
a[1], a[2], a[3], a[4], a[5], a[6].
В описі після імені масиву а ставиться двокрапка, після якої вказується тип даного – масив. Якщо в програмі кілька масивів одного розміру і типу, то, як і для простих змінних, їх імена можна задати через кому, а потім, після двокрапки, вказати опис масиву. Для введення даних у пам'ять необхідно організувати цикл. Оскільки введення описаного масиву а може мати вигляд:
for і := 1 to n do read(a[i]);
Значення, що вводяться, набираються на клавіатурі і відокремлюються одне від одного пропусками, після чого натискається Enter. Введення можна прокоментувати і вводити кожне дане в окремому рядку після підказу:
for і := 1 to n do begin write ('a [', і, '] = '); readl n(a[i]) end;
При обробці масивів розв'язування багатьох задач базується на простіших задачах:
  • обчислення суми (добутку) елементів масиву;
  • знаходження найбільшого (найменшого) елемента;
  • упорядкування елементів за зростанням або спаданням. 

Створити масив за допомогою генератора псевдовипадкових чисел. Ввести з клавіатури деяке значення та визначити номер найпершого з елементів, що дорівнюють цьому значенню. Якщо таких елементів не існує, вивести відповідне повідомлення.
Лінійний пошук здійснюється шляхом перебирання всіх елементів масиву та порівняння кожного з них із заданим значенням. Якщо елемент знайдено, цикл пошуку переривається і виводиться знайдений індекс. А якщо цикл пошуку дійшов останнього елемента, і цей елемент не дорівнює заданому значенню, виводиться повідомлення про відсутність шуканого елемента. Описаний алгоритм пошуку елемента в неупорядкованому масиві реалізовано в програмі ех7_5, код якої наведено нижче. 



 задача

Визначити добуток двох матриць розміром NxN.

вторник, 26 февраля 2013 г.

задачі масиви

Задача 1. У заданій послідовності цілих чисел визначити кількість і суму елементів, кратних 10.





Файл:Pr3.jpg

Задача 3. Дано n чисел. Замінити всі від’ємні числа їх модулями.

Файл:Pr6.jpg 
Задача 3. Напишіть програму для відшукання найбільшого елементу масиву [1..n], де n = 117.

Файл:Pr4.jpg
 

четверг, 21 февраля 2013 г.

задачі. цикл з параметрами



Задача. Обчислити та вивести на екран номери і значення перших n=10 елементів. a := 3 + cos(2*i)
Це можна зробити за допомогою наступної програми:
program Elements;
var i,n: integer; a : real;
begin
n := 10;
for і := 1 to n do begin
a := 3 + cos(2*i); writeln(i:4, a:15:2)
end
end.
3.           Пошук потрібних елементів. Задача пошуку потрібних елементів з-поміж усіх елементів послідовності розв'язують методом перегляду і аналізу всіх елементів. Для відбору потрібних елементів використо­вують деяку умову (логічний вираз). Усе це роблять за допомогою команди if, яка знаходиться в тілі команди циклу.
З а д а ч а 3. Нехай елементи числової послідовності описуються формулою a=2-2cos3i, і = 1,2,...,12. Вивести на екран номери і значення лише додатних елементів.
program Find;
var i,n: integer; a : real;
begin
n := 12;
for і := 1 to n do begin
a := 2 - 2*cos(3*i);
if a > 0 then writeln(i:4, a:15:2)
end
                    end.
Завдання. Виведіть на екран елементи, які більші, ніж 1 і менші, ніж 2.

четверг, 7 февраля 2013 г.

Двохвимірні Масиви

Двовимірний масив являє собою масив, в якому положення елементів визначається 2-ма індексами. Фактично, двовимірний масив - це звичайний (одновимірний) масив, елементами якого є інші одномірні масиви.

Тому двовимірний масив можна задати таким чином: b: array [1 .. n] of array [1 .. m] of integer.
Однак, подібний запис двовимірного масиву на практиці використовується нечасто. Найбільш кращим є наступний варіант: b: array [1 .. n, 1 .. m] of integer.
Схематично, двовимірний масив можна представити у вигляді матриці, де перший індекс [1 .. n] визначає кількість рядків, а другий індекс [1 .. m] визначає кількість стовпців. Для прикладу візьмемо масив b: array [1 .. 7,1 .. 6] of integer. Схематично його можна представити так:


dvumernihyj massiv 

Як видно, такий масив містить 42 елемента (7 × 6). Для доступу до елементу масиву необхідно вказати номер рядка і стовпця, на перетині яких цей елемент розташований. Наприклад, на нашому малюнку елемент масиву b [3,3] має значення 122.
Наступна програма записує в кожен елемент масиву випадкове число і потім виводить всі ці числа на екран.



  1. program massiv10;
  2. uses crt;
  3. const N=5;
  4.          M=4;
  5. var X:array [1..N, 1..M] of integer;
  6.        I, J:integer;
  7. begin
  8. clrscr;
  9. randomize;
  10. for i:=1 to N do
  11.     for j:=1 to M do
  12.     x [I, J]:=random (100);
  13. for i:=1 to N do
  14. begin
  15.   for j:=1 to M do
  16.     write (' ',x[I,J]);
  17.     writeln
  18. end;
  19. readln
  20. end.
 У рядку № 3 і № 4 вкажемо значення для константи «N» і «M».
У рядку № 5 запишемо область двовимірного масиву, що складається з N - рядків і M - стовпців. Він записується також як і одновимірний масив, тільки у квадратних дужках вказується область зберігання двовимірного масиву. Таким чином, наш масив буде складатися з 5 рядків і 4 стовпців
У рядку № 6 записуємо змінні, для зберігання індексів рядка і стовпця.
Рядок № 9,10,11,12 - заповнюємо масив випадковими числами (Усі рядки і стовпці заповняться випадковими числами). Як видно з програми, для того щоб заповнити елементи двовимірного масиву різними значеннями, необхідно використовувати 2 цикли (один цикл вкладається в інший). У зовнішньому циклі лічильником виступає індекс рядка, у внутрішньому циклі - індекс стовпця. Зовнішній цикл виконається один раз тільки коли внутрішній цикл виконається 4 рази. А так як зовнішній цикл повинен виконатися 5 разів, то внутрішній цикл за цей час виконається 20 разів, заповнивши при цьому всі 20 елементів двовимірного масиву.
Рядок № 13 - № 17. Виводимо значення всіх елементів масиву на екран. Причому, як тільки заповнюються всі комірки одного рядка масиву, проиходит перехід на інший рядок, і наступна рядок масиву виводиться на іншому рядку.

вторник, 29 января 2013 г.

задачі

Умова: Дано одновимірний масив цілих чисел А[i], де i = 1,2,…n. Вивести елементи масиву з парними індексами.
В даному випадку незручно користуватися для виведення на екран елементів з парними індексами циклом з параметром, тому що він дозволяє зміну індексу тільки на одиницю. Тому пропонуємо скористатися циклом з перед або післяумовою.

Program Example_311_2;
    Uses crt;
    Var N,i : word; {N - кількість елементів масиву, i -
                   змінна циклу}
          А : array [1..100] of longint; {A - заданий масив}
Begin
  Clrscr;
  Write ('Введіть кількість елементів масиву (<100 br="">  Readln (N);
 For i:=1 to N do
   Begin
    A[i]:=random(300); {Заповнення масиву
                        випадковими числами}
    Write(А[i]:5); {Виведення масиву на екран
                    для контролю правильності
                    роботи програми}
    End;
    Writeln; {Переведення курсору на наступний
             рядок}
     i:=2;
   while i<=N do
    Begin
      Write(A[i]:5);
      i:=i+2; {Змінна циклу змінюється на 2, щоб
               вибрати тільки парні елементи}
     End;
     Readkey; {Затримка зображення на екрані}
   End.

четверг, 24 января 2013 г.

 1) Масив з 25 елементів заповнений випадковими числами з інтервалу [0:12). 
 Роздрукувати всі елементи масиву великі 7
 
 
Program xa;
var 
  a:array [1..25] of integer;
  i,n:integer;
begin
  randomize;
  for i:=1 to 25 do
  begin
    a[i]:=random(13);
    if a[i]>7 then
      Write(a[i]:4)
  end;
  readln
end.

Масиви

У різних розділах математики та інших наук дані, що мають вигляд інформації, заданої як послідовність рядків і стовпчиків, називають порізному: матриці - у вищій алгебрі, таблиці - у розрахункових задачах, масиви - у програмуванні.
У задачах, які передбачають введення великої кількості довільних початкових даних, для задання інформації зручно використовувати генератор випадкових чисел.У задачах, які передбачають роботу з таблицями значень, результати для кращої читабельності зручно виводити у вигляді справжньої таблиці, розташовуючи рядок під рядком, а числа у стовпчиках одне під одним.

Масив - це великий простір чогось однорідного за типом.
(Зі словника іноземних слів, 1954 р.)
Масив у програмуванні - це тип структури даних, що має складені значення. (З Оксфордського словника англійської мови, 1995 р.)
Масив - це впорядкований скінченний набір елементів (даних) одного типу. Зазвичай працюють з масивами, які містять числа.
Масивом називається скінченна послідовність змінних одного типу, які мають однакове ім'я та різняться порядковим номером.

Індексом називається порядковий номер елемента масиву.

Отже, введено новий тип — масив. Усі типи, які досі були вам відомі, називаються простими. Масив є прикладом структурованого типу, тобто він, у свою чергу, складається з елементів іншого типу.

Як звернутися до елементів цього масиву? Для цього необхідно вказати індекс.

Наприклад,

T[2], T[5], T[i], T[i + j].

Але в третьому і четвертому прикладах для визначення необхідного елемента масиву треба знати значення величин і та j. Така загальність визначення індексу масиву є дуже потужним засобом програмування, але разом з цим і провокує можливі помилки: отриманий результат обчислення індексу масиву може виходити за межі інтервалу, виділеного для індексів даного масиву.

I ще один важливий момент, яким у жодному разі не можна нехтувати. Масиви відносяться до структур з так званим прямим або довільним доступом: щоб визначити окремий елемент масиву, достатньо вказати його індекс.

Тепер зрозуміло, як у циклі перебирати різні значення елементів масиву: для цього достатньо змінювати їх індекси. А закон зміни індексів дуже простий - кожне наступне значення більше попереднього на одиницю. Дуже зручна закономірність!


Оскільки у мові Pascal усе з чим ми працюємо потрібно оголошувати, то масиви також потрібно оголосити. Це можна зробити кількома способами:

у полі const

const <ім'я змінної>=array[1 .. <клькість елементів>] of <тип> = (1,2,3, ... <значення>);

у полі type

type <ім'я типу>=array[1 .. <кількість елементів>] of <тип>;
var <ім'я змінної> : <ім'я типу>; 

у полі var

var <ім'я змінної> : array[1 .. <кількість елементів>] of <тип>;

Приклад:

type Mas = array[1 .. 5] of integer;
var a : Mas;

Масиви бувають одновимірними (у вигляді послідовності чисел), двовимірними (у вигляді таблиць чисел розміром m x n) і багатовимірними (3-,4-вимірні і т.д. 3-вімірні - це об'ємний простір з комірками, а 4-вимірні і більше - це фантастично-абстрактні поняття). 

Масив називається одновимірним, якщо для задання місцеположення елемента в масиві необхідно вказати значення лише одного індексу.
Масив називається двовимірним, якщо для задання місцеположення елемента в масиві необхідно вказати значення двох індексів.
Запам'ятайте, що у двовимірних масивах перший індекс завжди вказує на номер рядка, а другий - на номер стовпчика в цьому рядку!
Розмірність масивів у Pascal необмежена, вона визначається лише об'ємом пам'яті вашого комп'ютера.
Резонним буде запитання: а як же розташовуються масиви в пам'яті комп'ютера? Пояснення для одновимірних масивів дуже просте – всі вони розташовані в пам'яті підряд. Двовимірні масиви розташовуються дещо інакше - спочатку елементи пер­шого рядка, потім другого і т. д. Розташування масивів більшої розмірності пояснюється аналогічно.
Залишилося з'ясувати, як пояснити програмі, що ви працюватимете з елементами, які утворюють масив значень.Загальний вигляд опису масивів:
<ім'я змінної>: array [<межі зміни індексів>] of <тип>.
Наприклад,
varA: array[1..10] of real;B: array[1..100,1..100] of byte;C: array[1..100] of array[1..100] of byte.
Цікаво, що другий і третій приклади описують однакові ма­сиви. Справді, адже будь-яку таблицю можна розглядати як послідовність рядків, де кожний рядок у свою чергу є також послідовністю. Звернення до елементів останнього масиву буде мати такий вигляд: C[i][j].
Зауваження.
По-перше, межі індексів завжди вказуються через два символи «.».
По-друге, при розподілі пам'яті в опи­совій частині програми під масив буде зарезервовано стільки місця, скільки передбачає вказана кількість елементів масиву. Тому при виконанні програми ви можете використовувати кількість елементів не більшу, ніж описана в розділі змінних.
По-третє, межі зміни індексів повинні бути сталими величи­нами, а не змінними, інакше невідомо буде, скільки місця не­обхідно відвести в пам'яті під такий масив.

Розглянемо таку задачу.
Нехай дано таблицю здійснення рейсів N автобусами протягом M днів. Рейси, що відбулися, позначаються в таблиці цифрою 1, а ті, що з деяких причин не відбулися, - цифрою 0. Треба скласти програму, яка підраховує кількість рейсів, що не відбулися.
Приклад програми
program voyage;
var R :array[1..30,1..100] of byte;

і, j, n, m, count : integer;
begin
write ('Задайте кількість автобусів: ');
repeatreadIn(n) until (n > 0) and (n <= 30);
write ('Задайте кількість днів: ');
repeatreadln (m) until (m > 0) and (m <= 100);
writeln ('Задайте інформацію про здійснення рейсів: ');
for i := 1 to n do for j := 1 to m do beginwrite (i, ' автобус, ', j, ' день: ');
repeatreadln(R[i,j]) until (R[i, j] = 0) or (R[i, j] = 1) end;count := 0;
for і := 1 to n do
for j := 1 to m do
if R[i. j] = 0 then count := inc (count);
writeln ('Кількість нездійснених рейсів: ', count:5);
repeat
until
Key
Pressed
end.
У цій програмі використано нову стандартну процедуру мови Pascal inc (count). Ії призначення - заміна значення пара­метра на 1. Можливий ще такий варіант використання цієї процедури: inc (n, step). У цьому разі збільшення параметра п відбуватиметься з кроком step. У Pascal існує альтернативна процедура Dec, яка зменшує значення вказаного параметра.

Якщо ви спробували виконати цю програму на комп'ютері, то, напевно, під час виправлення можливих помилок вам що­разу доводилося знову і знову задавати початкові дані. Можли­вості мови Pascal дають змогу уникнути такої незручності.

Повернемося до початку знайомства з Pascal, де вводилося поняття про розділ констант const. У цьому розділі ідентифіка­торами позначаються сталі величини. Надалі в програмі замість цих сталих величин вказуватимемо лише відповідні їм ідентифікатори. Зручність полягає в тому, що якщо знадобить­ся поміняти значення якоїсь константи, то достатньо це зроби­ти тільки в розділі const, не чіпаючи всієї програми.

Наприклад, можна розміри масиву задати таким чином:
const SizeLine = 100;
SizeColumn = 100;
var A: array [1..SizeLine, 1..SizeColumn] of real;
.............................................
repeatread (n, m) until (n > 0) and (n <= SizeLine) and (m > 0) and (m <= SizeColumn);


Зверніть увагу на те, що в розділі констант стоїть символ «=», а не символ «:=».Використовуючи в програмі константи, необхідно врахувати таку особливість: їх значення не можна змінювати під час виконання програми. Тобто ідентифікаторам, що визначають

константи, не можна присвоювати ніяких нових значень. їх можна використовувати лише для обчислення інших значень.

Ми говорили про те, як незручно під час редагування програми щоразу заново задавати значення елементів масиву. Спробуємо і це зробити за допомогою розділу констант:

constA:array[1..3, 1..4] of real= ((1.5, 1.2, 2.1,-4.42), (2.4,5.7,-1, 45.4), (-1.1,7, 45,-10));

3 останнього прикладу видно, що в розділі констант можна задавати ще й тип. Такі константи називаютьсятипізованими. Значення масивам задаються таким чином: в одновимірних масивах вони записуються через кому, у двовимірних – значення елементів рядків беруться у круглі дужки, для тривимірних – аналогічним чином. Відмінність типізованих констант від простих, для яких тип не вказується, полягає в тому, що їх значен­ня можна змінювати під час виконання програми.

Якщо ж вас не цікавлять конкретні дані, які будуть надані елементам масиву під час виконання програми, то скористайтеся можливостями стандартної процедури Pascal Randomize та функції Random (n), що генерують випадкові числа. Параметр n (типу Word) у процедурі Random визначає праву межу інтервалу, в якому будуть визначатися випадкові числа (ліва межа завжди 0). Функція Random може задаватися і без параметра. У цьому разі вона генеруватиме те дійсне число в діапазоні [0; 1). А для того щоб випадкові числа в програмі з кожним її наступним запуском не повторювалися (хоча вони і випадкові, але послідовність цих чисел постійна), то скористайтеся процедурою Randomize, яка встановить початок відрахунку випадкових чисел залежно від поточного стану системного годинника вашого комп'ютера.

Фрагмент програми, що використовує випадкові числа, може виглядати так:

randomize;
for і := 1 to n doa[i] := random (100);


Одновимірні масиви 
  Введення масиву з клавіатури
     for i:=1 to n do readln(a[i]);    тут (і надалі) і - параметр, n - кількість елементів у 
                                                       масиві, а -  одновимірний масив
  Друк масиву на екран 
     for i:=1 to n do writeln(a[i]);
   Перебір всіх елементів
     for i:=1 to n do
        begin
       if a[i]=0 then s:=s+1;    - кількість елементів, які відповідають умові (у даному разі 
                                       ті, що рівні  нулю). Кількість буде записана до змінної s 
      if a[i]=0 then k:=i;        - порядковий номер елементу, який відповідає умові (=0)
        end;
  Пошук мінімального/максимального елеманту 
Припускаємо, що це перший і переглядаємо масив. Якщо зустрінемо більший (чи менший) за нього елемент, то цей елемент стає максимальним (мінімальним). Розглянемо пошук максимального:
max:=a[1]; 
for i:=1 to n do
   if a[i]>max then max:=a[i];
  Сортування за зростанням/спаданням 
Переглянемо масив n разів. Кожного разу розглядаємо всі елементи від 1 до n-1. Якщо елемент більший (сортування за зростанням) за нступний за ним, то міняємо їх місцями.
fo j:=1 to n do        {переглядаємо масив n разів}
for i:=1 to n-1 do    {переглядаємо кожного разу елементи від 1 до n-1 (бо можемо                          
                      поміняти міцями  a[n-1] і a[n] - а у програмі буде a[i] та a[i+1] при i=n-1)}
    if a[i]>a[i+1] then
       begin
            b:=a[i];       {зберігаємо значення a[i] в іншу змінну, тип якої такий як і   
                                               елементів масиву}
            a[i]:=a[i+1];  {власне міняємо місцями елементи - записуємо менше значення на 
                                              місце    більшого}
            a[i+1]:=b;       {"витягуємо" з пам'яті значення a[i], більше, і записуємо на нове   
                                                               місце}
       end; 
Такий метод сортування називається бульбашковим (або "Метод бульбашки"). Різні особи по-різному трактують цю назву, тому я взагалі не буду трактувати її. Сприймайте цей метод так, як його обізвали.
Двовимірні масиви (n x m)
  Введення масиву з клавіатури 
for i:=1 to n do       {перебір n рядків}
  for j:=1 to m do     {перебір m стовпців}
    readln(a[i,j]);         {власне ввід кожного елементу}
  Вивід масиву на екран 
Щоб вивести двовимірний масив на екран у вигляді таблиці роблять наступне: 
for:=1 to n do     {перебір рядків}
  begin
     for j:=1 to m do write(a[i,j],' ');      {вивід кожного рядка}
     writeln;                                       {перехід на новий рядок}
  end; 

Приклад програми.
Утворити і вивести масив у з елементами у(к), к=1,12. Перший додатний елемент поміняти місцями з максимальним
program Masuvu;
uses crt;
var y,g:array [1..12] of real; max,h:real;
k,n,m:integer;
begin 
clrscr; 
max:=-1000000; 
n:=0; 
for k:=1 to 12 do 
begin 
y[k]:=sin(k*k)*cos(k*k*k)-sin(k)+5.2; 
if y[k]>max then 
begin 
max:=y[k]; 
m:=k; 
end; 
if y[k]>0 then 
begin 
n:=n+1; 
g[n]:=y[k]; 
h:=g[1]; 
end; 
if y[k]=g[1] then 
begin 
y[k]:=max; 
y[m]:=h; 
end; 
writeln (k,' element ',y[k]:5:2); 

if n>0 then writeln ('pershuj dodatnij element',g[1]:5:2)else writeln('nema dodatnih elementiv'); 
writeln ('maksumalnuj element - ', m,' -',max:5:2); 
readln; 
end. 
end.