Вирази і умовний оператор IF Оператори циклів Масиви та підпрограми

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Томський міжвузівський центр дистанційної освіти

Томський державний університет систем управління та радіоелектроніки (ТУСУР)

Кафедра економіка

Контрольна робота № 1

з дисципліни «інформатика»

автор посібника Тимченко С.В., Сметанін С.І.

варіант № 1

Виконала

Студентка гр.З-828-Б

Спеціальності 080105

Афоніна Юлія Володимирівна

Г. Нефтеюганськ

2009

Завдання № 1. «Висловлювання і умовний оператор IF»

  1. Обчислити значення функції f в точці x.

Рішення:

Program prog1;

Var

f, x: real;

Begin

writeln ('Розрахунок значення функції в заданій точці');

write ('Введіть число x:');

readln (x);

if x <0 then f: = SQR (x +3) else

begin

if x <4 then f: = sin (x-2) / (SQR (x) -16)

else f: = SQRT (x-4);

end;

writeln ('Значення f (', x: 0:8, ') =', f: 0:8);

readln;

end.

Тестування програми:

    1. X =- 1 (виконано першу умову, x <0):

Розрахунок значення функції в заданій точці

Введіть число x: -1

Значення f (-1.00000000) = 4.00000000

    1. X = 3 (виконано друга умова, 0 <= x <4):

Розрахунок значення функції в заданій точці

Введіть число x: 3

Значення f (3.00000000) = -0.12021014

    1. X = 5 (виконано третя умова, x> = 4):

Розрахунок значення функції в заданій точці

Введіть число x: 5

Значення f (5.00000000) = 1.00000000

Програма дає вірні результати, налагодження завершена.

  1. Які типи використовувалися при описі змінних у програмі?

При описі даної програми використовувалися змінні дійсного типу.

  1. Чим визначається вибір того, чи іншого типу?

Типом даних називається безліч допустимих значень цих даних, а також сукупність операцій над ними. Типи поділяються на такі групи: прості, структуровані, покажчики, процедурні, об'єкти. Є стандартні (зумовлені) і які визначаються програмістами в розділі, що починається зі слова Type. Прості типи визначають впорядкована множина значень елементів і діляться на речові, цілі, символьний, логічний, що перераховується і тип-діапазон. Речові типи визначають дробові числа і представлені 5 стандартними типами: real, single, double, extended, comp. Цілі типи визначають цілі числа і представлені 5 стандартними типами: integer, longint, shortint, byte, word, стандартний символьний тип char визначає повний набір допустимих символів. Стандартний логічний тип Boolean представляє собою тип даних, кожен елемент якого може приймати 1 з 2-х значень: False (брехня), True (правда). Перераховується тип не є стандартним і визначається набором ідентифікаторів, до яких може збігатися значення елемента даних.

У даній програмі вибір типу real для змінної x обумовлений тим, що функції sqrt (x), sin (x) і sqr (x) допускають аргументи такого типу. А так як значення функції sin (x) має тип real для аргументу типу real, то для змінної f необхідно також вибрати тип real.

Завдання № 2. «Оператори циклів»

  1. Завдання:

Обчислити суму s значень функції f в точках x i які беруться з заданого інтервалу [a; b] через рівні відрізки довжиною h. Довжина відрізка розраховується за формулою . Тут i = 1,2,3 ... n - номер точки; n - задається кількість точок; a - начло і b - кінець інтервалу зміни x. Вивести на екран результати обчислень, отримані за допомогою наступних циклів:

  • While логіческое_вираженіе Do тіло _ циклу;

  • Repeat тіло _ циклу Until логічне _ вираз;

  • For параметр: = хв. _ Значення To макс. Do тіло _ циклу;

  • For параметр: = макс. _ Значення DownTo хв. Do тіло _ циклу;

При виконанні завдання спочатку в програмі потрібно задати значення вихідних даних: межі інтервалу a і b, кількість точок n. Це можна зробити, описавши відповідні константи в розділі оголошення констант Const.

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

Рішення:

Program prog2;

const

a = 3;

b = 10;

n = 10;

var

s, x, h: real;

i: integer;

begin

writeln ('Обчислення суми значень функції');

h: = (ba) / (n-1);

writeln ('a =', a);

writeln ('b =', b);

writeln ('n =', n);

writeln ('h =', h: 0:8);

writeln;

{Цикл "while"}

writeln ('1. Цикл "while" ');

x: = a;

s: = 0;

i: = 1;

while i <= 10 do

begin

s: = s + sin (x +3) / exp (2 / 5 * ln (x +3));

x: = x + h;

i: = i +1;

end;

write ('Значення s:');

writeln (s: 0:8);

{Цикл "repeat"}

writeln ('2. Цикл "repeat" ');

x: = a;

s: = 0;

i: = 1;

repeat

s: = s + sin (x +3) / exp (2 / 5 * ln (x +3));

x: = x + h;

i: = i +1;

until i> 10;

write ('Значення s:');

writeln (s: 0:8);

{Цикл "for ... to ... do"}

writeln ('3. Цикл "for ... to ... do" ');

x: = a;

s: = 0;

for i: = 1 to 10 do

begin

s: = s + sin (x +3) / exp (2 / 5 * ln (x +3));

x: = x + h;

end;

write ('Значення s:');

writeln (s: 0:8);

{Цикл "for ... downto ... do"}

writeln ('4. Цикл "for ... downto ... do" ');

x: = a;

s: = 0;

for i: = 10 downto 1 do

begin

s: = s + sin (x +3) / exp (2 / 5 * ln (x +3));

x: = x + h;

end;

write ('Значення s:');

writeln (s: 0:8);

readln;

End.

Тестування програми:

Змінні a, b, h задані в розділі констант в програмі:

const

a = 3;

b = 10;

n = 10;

Результат роботи програми:

Обчислення суми значень функції

a = 3

b = 10

n = 10

h = 0.77777778

Результати обчислень, отримані за допомогою різних циклів:

    1. Цикл While:

1. Цикл "while"

Значення s: 0.15809431

    1. Цикл repeat:

2. Цикл "repeat"

Значення s: 0.15809431

    1. Цикл For ... To ... Do:

3. Цикл "for ... to ... do"

Значення s: 0.15809431

    1. Цикл For ... DownTo ... Do:

4. Цикл "for ... downto ... do"

Значення s: 0.15809431

Програма дає однакові результати для всіх циклів, налагодження завершена.

  1. Опишіть оператор While.

Оператор While має наступну структуру:

While логічне вираження do оператор;

Працює цей оператор дуже просто. Обчислюється значення логічного виразу. Якщо виходить істина (True), то виконується оператор, а потім знову обчислюється значення логічного виразу. Якщо знову виходить істина, то знову виконується оператор, і т.д. Так продовжується до тих пір, поки при обчисленні логічного виразу не вийде брехня (False). Після цього оператор While закінчує свою роботу і передає дію наступному оператору.

Зокрема, якщо на самому початку роботи While при обчисленні логічного виразу виходить брехня, то оператор не виконається жодного разу. Як завжди, в якості оператора може виступати деякий складений оператор. Може здатися дивним, що оператор While взагалі коли-небудь закінчує свою роботу. Справді, чому одне і те ж логічне вираз спочатку було істинним, а потім, після декількох виконань оператора, стало хибним? Логічний вираз залежить від декількох змінних, значення яких змінюється під час виконання оператора, що тягне за собою зміни значення логічного виразу. У принципі, це зовсім не означає, що кожен оператор While коли-небудь закінчує роботу. Тобто, не виключена ситуація, коли логічне вираз завжди буде істинним, і оператор While працюватиме вічно. Така ситуація називається зацикленням. Таким чином, при використанні оператора While і взагалі інших циклічних операторів потрібно бути акуратним і намагатися уникати зациклення. Це означає, що при програмуванні будь-якого циклу потрібно намагатися завжди пояснити самому собі, чому цей цикл не буде вічним, а коли-небудь закінчить свою роботу.

  1. У чому її основні відмінності від інших циклів Turbo Pascal?

Цикл while має наступні відмінності від оператора repeat:

  1. У операторі while перевірка умови виходу виконується на початку виходу, а у repeat в кінці.

  2. Тіло циклу може виконуватися жодного разу в while, а в repeat завжди виконується хоча б один раз;

  3. Умова виходу задовольняється, якщо вираз помилково, repeat - якщо це правда,

  4. Тіло циклу має містити тільки один оператор, а в repeat можна помістити будь-яку кількість операторів.

Оператор For: Якщо значення умовного виразу істинне, то цикл продовжує виконуватися, а якщо значення умовного вираження помилково, то відбувається вихід з циклу. Після виходу з циклу йде перехід до наступного оператору програми. Зміна - це вираз, що визначає, як буде змінюватися параметр циклу. У операторі for спочатку перевіряється умова і якщо значення умови "істинно", то йде виконання тіла циклу (блоку операторів або простого оператора).

Завдання № 3. «Масиви та підпрограми»

Результатом виконання третього завдання повинна бути програма, написана з використанням підпрограм - не менше 2 процедур і 1 функції.

Завдання пов'язане з діями над квадратною матрицею m [n, n], у якій кількість рядків і стовпців одно n (2 ≤ n ≤ 10). Матриці можуть бути або речового, або цілого типу. Значення компонентів матриці слід задавати випадковим чином і в такому діапазоні, щоб отримані дані були нетривіальними, тобто неочевидними, не лежать на поверхні.

Завдання:

    1. Знайти мінімальне та максимальне значення компонентів квадратної речовій матриці m [n, n].

    2. Поміняти місцями в матриці m [n, n] компоненти рядка, що містить мінімум, з компонентами стовпця, який містить максимум. Якщо мінімумів або максимумів в матриці кілька, то взяти рядок і стовпець перших зустрічних при переборі з мінімумів і максимумів відповідно.

    3. У одновимірний масив v [n] записати компоненти головної діагоналі зміненої матриці m [n, n] (індекси рядка та стовпця головної діагоналі рівні).

    4. Обчислити суму компонентів отриманого масиву v [n].

    5. На екран вивести вихідну матрицю m [n, n], перші зустрінуті мінімальну і максимальну компоненти з індексами, змінену матрицю m [n, n], масив v [n], суму компонентів масиву v [n].

Рішення.

У наступній програмі використані 3 процедури:

  • input_matrix для введення n і заповнення матриці m [n, n];

  • output_matrix для виведення матриці на екран;

  • change_matrix для зміни елементів стоки і стовпця матриці;

і одна функція:

  • vector_v для виводу на екран вектора v [n] і підсумовування його елементів.

Формат виводу результатів розрахунку задається постійною digits:

const

digits = 3;

яка вказує, скільки знаків після коми відображати.

Програма:

program prog3;

const

digits = 3;

type

matrix = array [1 .. 10, 1 .. 10] of real;

vector = array [1 .. 10] of real;

var

m: matrix;

v: vector;

n: integer;

procedure input_matrix (var m: matrix; var n: integer);

var

p1, p2, a, b: real;

input: boolean;

i, j: integer;

begin

input: = false;

repeat

writeln ('Введіть розмір квадратної матриці n');

writeln ('не менше 2 і не більше 10:');

readln (n);

if (n <2) or (n> 10) then

begin

writeln ('Ви ввели неправильний розмір матриці,');

writeln ('n повинно бути не менше 2 та не більше 10. ");

end

else

begin

input: = true;

end;

until input;

writeln ('Введіть ліву a і праву b кордону ');

writeln ('діапазону значень компонент матриці:');

write ('a ='); readln (a);

write ('b ='); readln (b);

if a> b then

begin

p1: = a;

a: = b;

b: = p1;

end;

if a = b then begin p1: = 0; p2: = b; end

else if b = 0 then begin p1: = a; p2: = 0; end

else begin p1: = ba; p2: = a; end;

{P 1 - відстань між лівою і правою кордоном}

{P2 - ліва межа}

randomize;

for i: = 1 to n do

for j: = 1 to n do

m [i, j]: = p2 + random * p1;

end; {input_matrix}

procedure output_matrix (var m: matrix; n: integer);

var

i, j: integer;

begin

for i: = 1 to n do

begin

for j: = 1 to n do

begin

write (m [i, j]: 0: digits);

write ('');

end;

writeln;

end;

writeln;

end; {output_matrix}

procedure change_matrix (var m: matrix; n: integer);

var

i, j: integer;

min_r, min_c, max_r, max_c: integer;

min_z, max_z: real;

value: real;

begin

min_z: = 100000;

for i: = 1 to n do

for j: = 1 to n do

if m [i, j] <min_z then

begin

min_r: = i; min_c: = j; min_z: = m [i, j];

end;

writeln ('Мінімальне значення та індекси:');

write (min_z: 0: digits);

write ('; стовпчик:');

write (min_c);

write (', рядок: ");

writeln (min_r);

max_z: =- 100000;

for i: = 1 to n do

for j: = 1 to n do

if m [i, j]> max_z then

begin

max_c: = j; max_r: = i; max_z: = m [i, j];

end;

writeln ('Максимальне значення та індекси:');

write (max_z: 0: digits);

write ('; стовпчик:');

write (max_c);

write (', рядок: ");

writeln (max _ r);

{Зміна елементів рядка та стовпця}

write ('Зміна елементів');

write (min_r);

write ('рядка і');

write (max_c);

writeln ('стовбця');

for i: = 1 to n do

begin

value: = m [min_r, i];

m [min_r, i]: = m [i, max_c];

m [i, max_c]: = value;

end;

end; {change_matrix}

procedure vector_v (m: matrix; var v: vector; n: integer);

var

i: integer;

s: real;

begin

for i: = 1 to n do

v [i]: = m [i, i];

s: = 0;

for i: = 1 to n do

s: = s + v [i];

writeln ('Вектор v [n ]:');

for i: = 1 to n do

write (v [i]: 0: digits, '');

writeln;

write ('Сума компонентів вектора:');

writeln (s: 0: digits);

end; {vector_v}

begin

input_matrix (m, n);

writeln ('Первісна матриця ');

output_matrix (m, n);

change_matrix (m, n);

writeln ('Нова матриця ');

output_matrix (m, n);

vector_v (m, v, n);

readln;

end.

Тестування програми:

Введіть розмір квадратної матриці n

не менше 2 і не більше 10:

3

Введіть ліву a і праву b кордону

діапазону значень компонент матриці:

a = -5

b = 5

Первісна матриця

4.326 -3.582 -2.539

-2.236 -1.983 1.980

2.884 3.248 -1.216

Мінімальне значення та індекси:

-3.582; Стовпчик: 2, рядок: 1

Максимальне значення та індекси:

4.326; стовпчик: 1, рядок: 1

Зміна елементів 1 рядка і 1 стовпця

Нова матриця

4.326 -2.236 2.884

-3.582 -1.983 1.980

-2.539 3.248 -1.216

Вектор v [n]:

4.326 -1.983 -1.216

Сума компонентів вектора: 1.127

Результати тестування:

  • згенеровані елементи матриці не виходять за межі заданого діапазону;

  • мінімальне і максимальне значення визначені вірно;

  • вектор діагональних елементів складено правильно;

  • змінені місцями потрібні рядок і стовпець.

Налагодження завершена.

Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Контрольна робота
73.5кб. | скачати


Схожі роботи:
Оператори алгоритмічної мови Паскаль Стандартні функції і оператори роботи з рядками
Масиви Двовимірні масиви
Крилаті вирази
Регулярні вирази в perl
Паскаль лексика вирази семантика
Підпрограми процедури і функції
Процедури підпрограми та параметри
Паскаль рекурсивні означення та підпрограми
Програмування Функції процедури та підпрограми
© Усі права захищені
написати до нас