Міністерство освіти і науки України
Національний університет „Львівська Політехніка”
Кафедра ЕОМ
Звіт
про виконання лабораторної роботи № 3
з курсу „Основи алгоритмізації та програмування”
Тема: Розв'язання найпростіших задач із використанням
процедур вводу-виводу.
Виконано:
стдент групи КІ-14
Сорокевич М.І.
Перевірено:
Ногаль М.В.
Львів – 2003
МЕТА РОБОТИ: 1. Освоєння найпростішої структури програми.
2. Отримання основних навиків організації вводу-виводу значень стандартних типів даних та використання оператора присвоєння.
Теоретичні відомості
Оператор присвоювання
У Паскалi цей оператор позначається знаком ":=". Ця група символiв сприймається компiлятором як єдине цiле. При виконаннi оператора присвоювання спочатку обчислюється значення виразу, який стоїть у правiй частинi оператора (пiсля знаку :=), а потiм його значення присвоюється змiннiй, що стоїть у лiвiй частинi. При цьому тип виразу повинен вiдповiдати типу змiнної. Для стандартних типiв це означає, що типи повиннi спiвпадати. Дозволяється присвоювання змiннiй дiйсного типу (Real) виразiв, значення яких є цiлим (Integer).
В результатi виконання оператора присвоювання змiннiй присвоюється значення деякого виразу. Прикладами операторiв присвоювання є:
a:=0 b:=c x1:=(-b+sqrt(sqr(b)-4*a*c))/(2*a) x:=x+1
В першому випадку змiннiй a присвоюється значення 0. У другому випадку змiнна b набуває значення змiнної c. Третiй оператор присвоювання присвоює змiннiй x1 значення виразу, що стоїть справа. Останнiй з вищенаведених операторiв присвоює змiннiй x попереднє значення, збiльшене на одиницю. Якщо до виконання оператора x:=x+1 змiнна x мала значення 1.3, то пiсля виконання цього оператора значення x стане рiвним 2.3. Для того, щоб оператор присвоювання мiг бути виконаний, необхiдно, щоб всi змiннi, якi входять у вираз, мали деякi значення.
Оператори вводу
Ввiд/вивiд пов'язаний з обмiном iнформацiєю мiж оперативною пам'яттю та зовнiшнiми носiями iнформацiї. В авторському Pascal зокрема не iснує спецiальних операторiв вводу-виводу. Для обмiну iнформацiєю з навколишнiм середовищем у програмах, написаних на мовi TurboPascal, використовуються спецiальнi стандартнi процедури (процедура - це один з видiв пiдпрограм). До процедур, якi забезпечують ввiд iнформацiї належать:
READ, READLN.
Процедури READ, READLN належать до стандартних чи вбудованих процедур мови Pascal. Стандартнi процедури не потребують попереднього опису; вони доступнi будь-якiй програмi, в якiй є звернення до них. Рiзниця мiж оператором вводу та звертанням до процедури вводу полягає в тому, що iм'я процедури вводу, як i будь-якої iншої процедури середовища TurboPascal, не є зарезервованим словом, а отже, користувач може написати свою власну процедуру з iм'ям READ чи READLN.
Розглянемо структуру оператора (надалi процедури вводу будемо називати операторами). Оператор вводу складається з iдентифiкатора READ(Read - вiд англ. читати) та списку змiнних, якi записуються в круглих дужках пiсля самого оператора.
Приклад: READ(A,ki-14,Lobur_M)
READLN(A)
READLN(Skriabin)
READ(X,Y,Z)
Як видно, число змiнних у дужках може бути довiльним: якщо змiнних є декiлька, то вони роздiляються комами. При виконаннi оператора вводу змiнним у дужках присвоюються введенi значення. Нехай на клавiатурi набрано число 3.6, тоді у результатi виконання оператора READ(a) змiнна a набуде значення 3.6. Аналогiчно оператор READ(x1,x2,y) зможе бути виконаний, коли на клавiатурi будуть набранi три числа, роздiленi пробiлами.
Оператор READLN (скорочення вiд READLine - ввести рядок) виконує аналогiчнi дiї, що й оператор READ. Але на вiдмiну вiд оператора READ, READLN пiсля закiнчення вводу переводить курсор на початок наступного рядка. Тобто наступний оператор вводу буде здійснювати ввід даних з початку наступного рядка.
Ввiд можна здiйснювати як за допомогою оператора READ, так i READLN. Наприклад, потрiбно здiйснити ввiд 4-x змiнних: A,B,D,T.
Var
A,B,D,T:real;
Begin
........
READ(A,B,D,T);
........
End.
Var
A,B,D,T:real;
Begin
........
READLN(A,B,D);
READ(T);
........
End.
Var
A,B,D,T:real;
Begin
........
READ(A,B,D);
READ(T);
........
End.
Ввiд можна здiйснити будь яким чином:
Використання операторiв вводу дозволяє багаторазово використовувати ту саму програму для проведення обчислень з рiзними вхiдними даними. Іноді під час виконання програми виникає потреба зробити затримку, щоб подивитися виведені результати. У цьому випадку дуже часто використовують оператори READ чи READLN без параметрів. Якщо під час виконання програми комп'ютер зутріне у тексті програми оператори READ чи READLN без параметрів, то він буде очікувати натиснення клавіші Enter.
Оператори виводу
Ввiд/вивiд пов'язаний з обмiном iнформацiєю мiж оперативною пам'яттю та зовнiшнiми носiями iнформацiї. В авторському Pascal, та в TurboPascal зокрема не iснує спецiальних операторiв вводу-виводу. Для обмiну iнформацiєю з навколишнiм середовищем у програмах, написаних на мовi TurboPascal, використовуються спецiальнi стандартнi процедури (процедура - це один з видiв пiдпрограм). До процедур, якi забезпечують вивiд iнформацiї вiдносяться:
WRITE, WRITELN.
Процедури WRITE, WRITELN належать до стандартних чи вбудованих процедур Паскаля. Стандартнi процедури не потребують попереднього опису; вони доступнi будь-якiй програмi, в якiй є звернення до них. Рiзниця мiж оператором виводу та звертанням до процедури виводу полягає в тому, що iм'я процедури виводу, як i будь-якої iншої процедури середовища TurboPascal, не є зарезервованим словом, а отже, користувач може написати свою власну процедуру з iм'ям WRITE чи WRITELN.
Оператори виводу мають такий загальний вигляд:
WRITE(X1[:W1[:D1]],...,Xn [:Wn [:Dn]])
WRITELN(X1 [:W1[:D1]],...,Xn[:Wn[:Dn]])
Примiтка: вмiстиме дужок [...] не є обов'язковим.
У даному записi операторiв X1,...,Xn - вирази, значення яких виводяться; W1,...,Wn - вираз цiлого типу, що визначає число позицiй, якi вiдводяться на число; D1,...,Dn - число позицiй пiсля коми. Якщо число, що виводиться, виявиться менше нiж Wi, то воно злiва доповнюється пробiлами. Якщо Wi опустити, то для числа видiляється стандартна довжина поля. Якщо кiлькiсть вiдведених на число символiв є недостатньою, то вiдбувається автоматичне доповнення поля до необхiдних розмiрiв.Органiзацiя виводу чисел дійсного типу (REAL) вiдрiзняється вiд виводу цілих чисел (INTEGER) тим, що при виводі дійсних чисел можна задати кiлькiсть позицiй пiсля коми, а при виводі цілих - ні. Якщо в операторi виводу не вказується довжина поля W, то пiд кожне число вiдводиться стандартна довжина поля та дійсні числа виводяться у експоненцiальній формі. Нехай змiннi A,B,C - дiйсного типу та в програмi їм вiдповiдно присвоєнi значення 641.536; 17841.1; -7.4385. Далi наведемо оператори виводу та результати їх роботи:
Оператор
Результат виводу
Writeln(A:6:2,B:9:2,C:8:4)
641.54 17841.10 -7.4385
Writeln(A,B,C)
6.415360E+02 1.784110E+04 -7.438500E+00
При виводi значень типу BOOLEAN на екран виводяться значення True або False. Наприклад, оператор WRITELN(A<B:7); надрукує у вiдведених йому семи позицiях слово True, якщо значення змiнної A<B, та False в протилежному випадку. Оператори виводу WRITELN та WRITE виконують аналогiчнi дiї - виводять данi. Вiдмiннiсть мiж ними полягає в тому, що оператор виводу WRITELN забезпечує закiнчення друку поточного рядка. Наступний оператор виводу пiсля даного WRITELN почне вивiд з нового рядка.
Дуже часто при вводi даних чи при їх виводi потрiбно вивести певний коментар (щоб знати, яку iнформацiю потрiбно вводити чи що вивелося на екран). Тому перед виводом даних чи їх вводом виводять повiдомлення, що потрiбно ввести, чи якi величини вивелися. Вивести будь-який текст дозволяють оператори виводу WRITELN, WRITE. Розглянемо приклад. У програмi стоїть завдання ввести два числа й обчислити їх суму. Для вводу двох чисел достатньо написати оператор READLN(x,y). Але при цьому на екранi буде знаходитись лише мерехтячий курсор, який вказуватиме на те, що потрiбно щось ввести. Тобто якщо стороння людина захоче скористатися вашою програмою, вона не буде знати, що потрiбно зробити. В даному випадку замiсть оператора READLN(x,y) потрiбно написати два оператора:
WRITE('Введiть два числа: ');
READLN(x,y);
WRITELN('Сума чисел x i y =',x+y);
Як видно з прикладiв текст коментаря в операторi виводу записується в ' '. Коментарi дозволяють самодокоментувати програму, роблять її iнтерфейс зрозумiлим користувачу (cтворюють дружнiсть iнтерфейсу).
Елементарнi програми
Будь-яка програма, написана на мовi Паскаль має свою структуру. В авторському Паскалi програму можна подiлити на заголовок програми та блок. Блок в свою чергу складається з роздiлу описiв та роздiлу операторiв i закiнчується крапкою. В свою чергу роздiл описiв можна розкласти ще на складовi.
Розглянемо структуру програми, написану у середовищі TurboPascal. Будь-яку програму, написану у даному середовищi можна подiлити на такi блоки:
* роздiл описiв;
* роздiл опису процедур та функцiй;
* основний блок.
Детальнiше це можна зобразити таким чином:
* РОЗДIЛ ОПИСIВ
PROGRAM заголовок програми
USES пiдключення бiблiотек
LABEL опис мiток
CONST опис сталих
TYPE опис нових типiв
VAR опис змiнних
* РОЗДIЛ ОПИСУ ПРОЦЕДУР I ФУНКЦIЙ
* ОСНОВНИЙ БЛОК
BEGIN
..........
END.
Найпростiша програма на Паскалi схематично може бути зображена наступним чином:
program N(...);
var A1;
...
Ak;
begin
P1;
Pn
end.
Тут N - iм'я програми, A1,...,Ak - описи змiнних, P1,...,Pn - оператори. В авторському Паскалi замiсть ... всерединi дужок пiсля назви програми потрiбно помiстити iдентифiкатори input та output, якщо програма буде виконувати ввiд та вивiд. Iдентифiкатор input означає, що в програмi зустрiнеться оператор вводу, а output - оператор виводу. В середовищi програмування TurboPascal iдентифiкатори input, output не є обов'язковими. У вище наведеній програмi P1,...,Pn оператори виконуються в порядку їх розмiщення один за одним.
Розберемо тепер приклади простих програм. Розглянемо програму:
program first_program;
begin
end.
Це – найпростiша програма на мовi Паскаль. Вона призначена для того, щоб ... просто iснувати, тобто нiяких дiй дана програма не виконує. У цiй програмi не передбачено вводу чи виводу даних, відсутні арифметичнi дiї. Ця програма лиш демонструє структуру програми (порiвняйте дану програму з найпростiшою програмою, зображеною схематично. Не важко зауважити, що їх структури є однаковими, але у данiй програмi вiдсутнi роздiл описiв i роздiл операторiв). Розглянемо ще одну тривiальну програму, яка здiйснює обрахунок суми трьох чисел:
program Suma;
var a,b,c,Sum:real;
begin
write('Введiть два числа типу Integer: ');
readln(a,b);
write('Введiть дiйсне число: c=');
readln(c);
Sum:=a+b+c;
writeln('Сума 3-х чисел =',Sum:6:3);
end.
В цiй програмi в порiвняннi з попередньою з'явилися новi елементи. Перш за все це опис 4-ох змiнних, якi використовуються у програмi. Виконавча частина цiєї програми, що починається оператором BEGIN i завершується оператором END, мiстить оператори, якi будуть виконуватись. Дiя операторiв READLN, WRITE та WRITELN вам вже вiдома. Оператор Sum:=a+b+c присвоює змiннiй Sum суму елементiв a,b,c. Як ви зауважили, кожна з програм завершується крапкою. Все, що знаходиться пiсля крапки компiлятором не сприймається.
ЛІТЕРАТУРА
1.Фаронов В.В. Программирование на персональныx ЭВМ в среде Турбо-Паскаль.-М.:Изд-во МГТУ,1990.
2.Зуев Е.А. Система программирования Turbo Pascal.-М.:Радио и связь,1991.
3.Турбо Паскаль 7.0 - К.: Издательская группа BHV,1996
Порядок виконання роботи
ЗАВДАННЯ (Варіант 23): Написати програму, яка обчислює значення функції f(x)=x/12+12 в точці x=-0.34 і на основі знайдених значень будує скалярну матрицю розміру 3*3 (по діагоналі даної матриці розміщені знайдені значення функції, всі решта елементи рівні 0).
program input_output;
{$APPTYPE CONSOLE}
uses SysUtils;
var f,x : real;
begin
writeln('f 0 0');
writeln('0 f 0');
writeln('0 0 f');
writeln('f=x/12+12. Введіть x (за умовою x=-0.34).');
readln(x);
f:=x/12+12;
writeln(f:6:2,0:6,0:6);
writeln(0:6,f:6:2,0:6);
writeln(0:6,0:6,f:6:2);
writeln('Для виходу з програми натисніть Enter.');
readln;
end.
Висновок: На цій лабораторній роботі я освоїв структуру найпростішої програми, отримав основні навики організації вводу-виводу значень стандартних типів даних та використання оператора присвоєння на прикладі написання програми виводу матриці, застосувавши в ній оператор виводу writeln, оператор вводу readln і оператор присвоєння.