Рекомендации к выполнению лабораторных работ




Выбор номера варианта осуществляется по последней цифре пароля

Лабораторная работа №1

Тема 1: Стандартные функции. Арифметические выражения.

(в лекциях см. п. 1.4, 2.9 )

Тема 2: Логические выражения. Условный оператор.

(в лекциях см. п. 2.4, 3.3 )

Пример задания:

1. Вычислить значение арифметического выражения следующего вида:

  2y при 0 < y < = 20
2. Вычислить значение функции f = y+2 при y = 0
  у/2 при у < 0 или y > 25

3. Вывести на экран значения y и f.

Варианты программы:

1.

Var   A, B, C, D, Y ,f: Real;
Begin
  A:=1.5; B:=4.3; C:=10; D:=7.1; {ввод данных}
  Y:=(A*Sqrt(Abs(Sin(A+B*C)))-Exp(-A*C))/Sqrt(Abs(2*B+D));
  WriteLn (‘Y=’, Y:8:3); {вывод результата}
  f:=0; {перед началом вычисления значению f присваивается 0 (можно любое
         другое значение) для того, чтобы в случае, если ни одно из условий не
         выполнится, на экран вывелось f = 0, т.е. чтобы значение f не осталось
         неопределенным }
  if (y>0) and (y<=20) then f:=2*y;
  if (y=0) then f:=y+2;
  if (y<0) or (y>25) then f:=y/2;
  WriteLn ('f=', f:8:3);
End.

2.

Const D=10;
Var  A, B, C, Y ,f: Real;
Begin
  randomize;
  A:=random;
  Write('введите числa B и C типа real:');
  Read(B,C);
  Y:=(A*Sqrt(Abs(Sin(A+B*C)))-Exp(-A*C))/Sqrt(Abs(2*B+D));
  WriteLn ('Y=', Y:8:3); { вывод  результата}
  if (y>0) and (y<=20)  then f:=2*y
    else if (y=0) then
            f:=y+2
         else
           if (y<0) or (y>25) then f:=y/2
            else  f:=0;
  WriteLn ('f=', f:8:3);
End.

Замечание: В первом варианте программы выполняется три проверки условия (т.е. три оператора if ) даже если например уже первое условие будет истинным (хотя понятно, что в этом случае другие условия точно будут ложными и нет необходимости в их проверке). Во втором варианте используется один вложенный оператор if, что позволяет избежать лишних проверок.

Задание:

Разработать программу для вычисления:

1) значения заданного арифметического выражения (см. вариант по таблице 1);

2) значения заданной функции (см. вариант по таблице 2);

и вывода на экран полученных результатов.

Значения исходных данных выбираются произвольно. Ввод исходных данных организовать любым известным вам способом (использовать не менее двух способов).


Таблица 1 – Варианты арифметических выражений

Номер варианта Выражение Исходные данные
0
x, y
1
x, y
2
c, x, y
3
b, x, y
4
x, y, z
5
x, y, z
6
x, y, z
7
x, y
8
x, y, z
9
x, y, z

Таблица 2 – Варианты функций  

0
b =
ln|x/y|+(x^2+y)^3, при x-y=0;ln|x*y|+(x^2+y)^3, при x-y>0;(x^2+y)^3, при x-y<0.
1
c =
x^2+y^2+sin(x), при x-y=0;(x-y)^2+cos(x), при 0<x-y<=36;(y-x)^2+tg(x), при x-y<0.
2
d =
(x-y)+arctg(x), при x>y;(y-x)^3+arctg(x), при y>x;(y+x)^3+0.5, при x=y.
3
f =
|x|-|y|, при 0.5<=xy<1.0;
x+y, при 0.1<xy<0.5;2x, при 1.0<=xy<2.5.
4
g =
arctg(x+|y|), при 2<y<12;arctg(|x|+y), при y<=2;(x+y)^2, при y>=12.
5
h =
5x-3y, при -1<x<15;x+2*|y|, при x>15;2y, при x=15 или x<= -1
6
i =
3x^3+3y^2, при x>|y|;|x-y|, при 3<x<|y|;(x-y)^2, при x=|y|.
7
j =
ln(|x|+|y|), при 5<=|xy|<10;x-y, при |xy|>=10;x+y, при |xy|<5.
8
c =
x^2+y^2, при x-y<=0;cos(y), при 0<x-y<=45;(y-x)^2, при x-y>45.
9
h =
2x+4y, при -4<=x<32;x+2*|x|-y, при x>32;3x, при x=32 или x< -4

Лабораторная работа №2

Тема 1: Операторы циклов с условиями: While и Repeat

(в лекциях см. п. 3.6, 3.7)

Задание:

Написать программу для вычисления заданного выражения и вывода на экран полученного значения, используя заданный циклический оператор (см. вариант по таблице 1);

Таблица 1.

Номер варианта
Выражение
Оператор цикла
0
- 0,1+ 0,4 -0,7+…-1,9 While
1
0,2- 0,5 +0,8-…+2,0 Repeat
2
-0,18 + 0,20 – 0,22 +...+ 0,36 While
3
0,15 - 0,17 + 0,19 -...- 0,33 Repeat
4
0,8 - 0,10 + 0,12 -...- 0,26 While
5
-0,5 + 0,7 – 0,9 +...+ 0,23 Repeat
6
- 0,13+ 0,16 -1,9+…-3,1 While
7
0,4 - 0,8 +1,2-…+4,0 Repeat
8
- 0,3+ 0,5 -0,7+…-3,1 While
9
0,6 - 0,7 + 0,8 -...- 3,3 Repeat
 

Лабораторная работа №3

Тема 1: Работа с одномерными массивами.

(в лекциях см. п. 4.1 )

Тема 2: Подпрограммы: процедуры и функции.

(в лекциях см. п. 5 )

 

Пример задания:

Массив T=(6, –3, 14, 7, –2, –4, 12, 0) преобразован к виду T=(–1, –10, 7, 0, –9, –11, 5, –7). Определите правило преобразования и напишите программу, которая:

1) по такому же алгоритму преобразовывает произвольный массив T из 38 элементов и выводит на экран элементы преобразованного массива.

2) вычисляет сумму тех элементов преобразованного массива, которые находятся в диапазоне [–14, 2], и выводит результат на экран.

Указания:

- сформировать массив T из 38 случайных целых чисел в диапазоне [–30,30] и вывести элементы массива на экран;

- преобразование массива оформить в виде процедуры;- вычисление суммы оформить в виде функции;

- все выводы на экран осуществлять в основной программе.

Варианты программы:

 uses crt; {подключение модуля CRT, чтобы можно было использовать 
            содержащиеся в нем стандартные  процедуры clrscr и readln} 
 const kol_el=38; {задаем количество элементов массива;  
                   при отладке программы удобнее задать меньшее количество элементов } 
 type mas=array [1..kol_el] of integer; {создаем новый тип - массив} 
 var T:mas; 
 Procedure Preobr(var a:mas); {процедура, преобразующая переданный в качестве 
                               параметра массив по заданному правилу}
  var i:integer; {Здесь i – локальная переменная, она доступна только в теле данной процедуры. 
                  Переменная i,  описанная в основной программе –глобальная и доступна в любом  месте программы, но только если
                  нет локальной переменной с тем же именем. В этой процедуре можно было бы и не описывать локальную  i,
                  а использовать глобальную, но хороший стиль программирования предполагает,
                  что все переменные, которые используются только для выполнения каких-либо действий внутри подпрограммы 
                  должны быть в ней и описаны, чтобы избежать различных  ошибок} 
  begin 
     for i:=1 to kol_el do

a[i]:=a[i]-7;

end; Function Sum(b:mas):integer; var i,s:integer; begin s:=0; for i:=1 to kol_el do s:=s+b[i]; sum:=s; {обязательное присвоение имени функции полученного результата} end; var i:integer; {описание i:integer; и Т:mas можно было бы расположить в одном разделе Var } Begin clrscr; Randomize; for i:=1 to kol_el do begin T[i]:=Random(61)-30; write(T[i]:4); end; Preobr(T);{при вызове процедуры происходит следующее: - в памяти создается копия массива T – массив a (формальный параметр процедуры), - выполняется тело процедуры, в котором преобразуется массив a; - возврат в основную программу на оператор, следующий за вызовом процедуры; При возврате в массив T переносятся значения преобразованного массива a } writeln; writeln; for i:=1 to kol_el do write(T[i]:4); {вывод преобразованного массива} {вызов функции Sum, выполнение тела функции, возврат в программу, вывод результата на экран: } write(#13,#10,#10,'Summa elementov = ',Sum(T)); readln; End.

Еще некоторые пояснения к программе:

Оператор write(#13,#10,#10,'Summa elementov = ',Sum(T)); можно было бы заменить последовательностью из трех следующих операторов:

  writeln; 
  writeln; 
  write('Summa elementov = ',Sum(T)); 

Результат один и тот же: вывод текста Summa elementov = … будет осуществлен в начале новой строки через строчку от предыдущего вывода.

#10 - перевод строки

#13 - переход к началу строки (см. п.2.3 лекций)

Т.е. оператор write(#13,#10,#10,'Summa elementov = ',Sum(T)); выполняется следующим образом: сначала курсор перемещается в начало текущей строки, затем переводится на следующую строку в ту же позицию, снова переводится на следующую строку в ту же позицию, и только потом выводится текст.

 

Общий текст задания для всех вариантов:

Задана последовательность значений элементов некоторого массива до и после преобразования по некоторому правилу. Определите алгоритм преобразования и напишите программу, которая:

1) формирует массив из заданного количества случайных целых чисел в заданном диапазоне и выводит элементы массива на экран;

2) по определенному вами алгоритму преобразовывает этот массив и выводит на экран элементы преобразованного массива.

3) производит заданные вычисления и выводит результат на экран.

Указания:

- преобразование массива оформить в виде процедуры;

- заданные вычисления оформить в виде функции;

- все выводы на экран осуществлять в основной программе.

Варианты заданий:

  1. Массив A = (15, 9, –6, 12, –9, 18, 0) преобразован к виду A = (5, 3, 0, 4, 0, 6, 0). Размер массива A - 20 элементов из диапазона [–25,25]. Вычислить сумму четных элементов преобразованного массива.
  2. Массив B = (3, –4, 7, 2, 9, –7, 0) преобразован к виду B = (–6, 0, –14, –4, –18, 0, 0). Размер массива B - 15 элементов из диапазона [–14,14]. Вычислить произведение нечетных элементов преобразованного массива.
  3. Массив C = (–4, 9, 5, –8, –5, 4, 0) преобразован к виду C = (–8, 0, 0, –16, –10, 0, 0). Размер массива C - 40 элементов из диапазона [–23,23]. Вычислить сумму нечетных элементов преобразованного массива.
  4. Массив D=(4, –8, 9, 3, 4, –5, 0) преобразован к виду D=(–2, –14, 3, –3, –2, –11, –6). Размер массива D - 24 элемента из диапазона [–32,32]. Вычислить сумму тех элементов преобразованного массива, которые находятся в диапазоне [–14, 2].
  5. Массив F=(5, –8, 4, 8, 12, –4, 0) преобразован к виду F=(–7, –20, –8, –4, 0,–16,–12). Размер массива F - 63 элемента из диапазона [–50,50]. Вычислить сумму тех элементов преобразованного массива, которые находятся в диапазоне [–2, 21].
  6. Массив H = (6, –6, –3, 8, 4, –7, 0) преобразован к виду H = (14, 0, 0, 16, 12, 0, 8). Размер массива H - 10 элементов. из диапазона [–44,44] Вычислить произведение тех элементов преобразованного массива, которые находятся в диапазоне [0, 18].
  7. Массив K = (5, –5, 4, 9, –7, –11, 0) преобразован к виду K = (0, 1, 0, 0, –1, –5, 0). Размер массива K - 21 элемент из диапазона [–56,56]. Вычислить сумму тех элементов преобразованного массива, которые находятся в диапазоне [–1, 16].
  8. Массив L = (–2, 6, –8, 9, –5, 12, 0) преобразован к виду L = (1, 9, –5, 12, –2, 15, 3). Размер массива L - 36 элементов из диапазона [–31,31]. Вычислить сумму тех элементов преобразованного массива, которые находятся в диапазоне [–8, 25].
  9. Массив M = (5, –5, 9, –2, 14, –7, 0) преобразован к виду M = (5, 0, 9, 0, 14, 0, 0). Размер массива M - 22 элемента из диапазона [–47,47]. Вычислить сумму тех элементов преобразованного массива, которые находятся в диапазоне [–16, 6].
  10. Массив N = (8, –9, –3, 5, 4, –7, 0) преобразован к виду N = (0, –9, –3, 0, 0, –7, 0). Размер массива N - 18 элементов из диапазона [–68,68]. Вычислить сумму тех элементов преобразованного массива, которые находятся в диапазоне [–7, 27].