Методическое указание. Лабораторная работа 1 Программирование линейных алгоритмов
Скачать 274 Kb.
|
Лабораторная работа №1Программирование линейных алгоритмовЦель работы: выработать практические навыки работы с системой Pascal, научиться создавать, вводить в компьютер, выполнять и исправлять простейшие программы на языке Pascal в режиме диалога, познакомиться с диагностическими сообщениями компилятора об ошибках при выполнении программ, реализующих линейные алгоритмы. Пример1: Определить расстояние на плоскости между двумя точками с заданными координатами M1(x1,y1) и M2(x2,y2) Решение М атематическая модель: расстояние на плоскости между двумя точками M1(x1,y1) и M2(x2,y2) высчитывается по формуле Программа program example1; var x1, x2, y1, y2: integer; d:real; begin writeln('Введите координаты двух точек:'); write('x1= '); readln(x1); write('y1= '); readln(y1); write('x2= '); readln(x2); write('y2 ='); readln(y2); d:=sqrt(sqr(y2-y1) +sqr(x2-x1)); writeln('d= ',d); readln; end. Пример2: Составить программу вычисления площади треугольника по формуле: , где - полупериметр; – стороны треугольника. Исходные данные: . Решение Program LVP; Uses Printrer; Var a, b, c, p, S: real; Begin writeln(‘Введите исходные данные’); read(a, b, c); p := (a + b + c) / 2; S := sqrt(p (p - a) (p - b) (p - c)); {Вывод на экран} writeln(‘Площадь треугольника S =’, S:5:2); {Вывод на печать} writeln(LST, ‘Площадь треугольника S =’, S:5:2); End. Лабораторная работа №2Программирование разветвляющихся алгоритмовЦель работы: научиться правильно использовать условный оператор if; научиться составлять программы решения задач на разветвляющиеся алгоритмы. Прмер1: Найти минимальное значение из трех различных чиселРешениеProgram P; Var a, b, c, min: real; Begin writeln (‘Введите числа a, b, c’); read (a, b, c); min := a; if b if c writeln (‘y =’, y:6:2); End. Пример2: . Вычислить значение переменной у по одной из двух ветвей: y = РешениеПрограмма Program P_1; Var x, y: real; Begin writeln (‘Введите число x’); read (x); if x>0 then y := ln(x) else y := exp(x); writeln (‘y =’ , y:6:2); End. Пример 3. Вычислить корни полного квадратного уравнения ax2+bx+c=0. В программе предусмотреть проверку дискриминанта на знак. Если дискриминант окажется отрицательным, то вывести сообщение «Корни мнимые». Решение Программа Program P_2; Var a, b, c, d, x1, x2: real; Begin writeln(‘Введите коэффициенты уравнения’); read (a, b, c); d := bb – 4ac; if d<0 then writeln (‘Корни мнимые’) else begin x1 := (-b + sqrt(d)) / (2a); x2 := (-b - sqrt(d)) / (2a); writeln(‘x1=’, x1:5:2, ‘ x2=’, x2:5:2); end; End. Пример 4. Вычислить значение y по одной из трех ветвей: При решении данной задачи возможны варианты программирования без использования вложенной структуры и с вложенной структурой. РешенияВариант 1. (Без использования вложенной структуры). Программа Program P_V1; Var x, y: real; Begin writeln(‘Введите число x’); read(x); if x>=1 then y := sqrt(x)/2; if (x>0) and (x<1) then y := exp(1/3*ln(x))/3; if x<= 0 then y := exp(1/4*ln(abs(x)))/4; writeln(‘y =’, y:6:2); End. Вариант 2. ( Использование вложенной структуры). Программа Program P_V2; Var x, y: real; Begin writeln(‘Введите число x’); read(x); if x>=1 then y := sqrt(x)/2 else if x>0 then y := exp(1/3*ln(x))/3 else y := exp(1/4*ln(abs(x)))/4; writeln(‘y =’, y:6:2); End. Пример 5. Вычислить значение y. Если значение x не принадлежит рассматриваемым промежуткам, то вывести на экран соответствующее сообщение. В задаче переменная x является вещественной и не может использоваться в качестве селектора оператора CASE. Введем новую переменную целого типа, которой присваивается целая часть значения x: n := trunc(x); РешениеProgram P_2; Var x, y: real; n: integer; Begin writeln(‘Введите число x’); read (x); if (x<1) or (x>=5) then writeln(‘x не принадлежит ‘, ‘рассматриваемой области’) else begin n := trunc(x); case n of 1: y := sin(x); 2: y := exp(-x); 3: y := ln(x); 4: y := sin (x)/cos(x); end; writeln(‘y=’, y:6:2); end; End. Лабораторная работа №3Программирование циклических алгоритмовЦель работы: закрепить практические навыки работы с системой Pascal, научиться правильно использовать различные операторы циклов; научиться составлять программы решения задач с использование циклических структур. Пример 1. Алгоритм табулирования функции с одной переменной. Вычислить таблицу значений функции: при , изменяющемся в интервале [-0.5, 2.5] с шагом 0.1. заданные вещественные числа. В данной задаче переменная является управляющей переменной цикла. РешениеПрограммаProgram TAB_1; Var a, b, x, y: real; Beginwriteln(‘Введите исходные данные’); read(a, b); writeln (‘ x y(x)’);x := -0.5; while x <= 2.5 do beginy := ln(abs(x))/(a*a - b*b); writeln(x:8:1, y:8:1) x := x + 0.1; end; End. Пример 2. Решить предыдущую задачу табулирования функции с использованием оператора цикла REPEAT. Программа Program TAB_2; Var a, b, x, y: real; Beginwriteln(‘Введите исходные данные’); read(a, b); writeln(‘ x y(x)’);x := -0.5; repeat y := ln(abs(x))/(a*a - b*b); writeln(x:8:1, y:8:1) x := x + 0.1; until x > 2.5; End. Пример3. Алгоритм организации счетчика. Дана последовательность: . Определить количество положительных членов последовательности. Решение Общий вид последовательности имеет вид , где . Программа Program Z_1; Var a: real; n, L: integer; Begin L := 0; for n := 1 to 50 do begin a := cos(2 n - 1); if a>0 then L := L + 1; end; writeln(‘L=’, L); End. Пример 4. Алгоритм накопления суммы. Дана последовательность: , где - заданное вещественное число. Вычислить сумму членов последовательности, которые по модулю больше 0.3. Решение Общий член последовательности имеет вид: , где . Программа Program Z_2; Var a, x, S: real; n: integer; Begin writeln(‘Введите число x’); read (x); S:=0; for n := 1 to 8 do begin a := sin(2 n x); if abs(a) > 0.3 then S := S + a; end; writeln(‘S=’, S:6:2); End. Пример 5. Алгоритм накопления произведения. Дана последовательность: . Вычислить значение: , где - произведение отрицательных членов последовательности. Решение Общий член последовательности имеет вид: где . Программа Program Z_3; Var x, y, P, PO: real; Begin PO := 1; x := 0.1; while x<=10 do begin y := cos(x); if y<0 then PO := PO y; x := x + 0.1; end; P := abs(PO); writeln(‘P=’, P:6:2); End. Пример 6. Алгоритм поиска минимального члена последовательности. ;. Найти минимальный член последовательности. Решение Программа Program Z_4; Var a, min: real; k: integer; Begin min := +1E6; for k := 1 to 10 do begin a := exp(k) sin(2k+1)/cos(2k+1); if a end; writeln(‘min=’, min:6:2); End. Лабораторная работа 4Программирование с использованием массивовЦель работы: научиться правильно описывать различные массивы, уметь инициализировать массивы, распечатывать содержимое массива; научится решать задачи на использование массивов. Одномерный массив Пример 1. Организация счетчика. Определить количество элементов заданного целочисленного массива , которые делятся на 3 без остатка. Программа Program OM_1; Var B: array [1… 20] of integer; i, L: integer; Beginwriteln(‘Введите массив В’); for i :=1 to 20 do read(b[i]); L := 0; for i :=1 to 20 do if (b[i] MOD 3) = 0 then L := L+1; writeln(‘L =’, L); End. Пример 2. Накопление суммы и произведения. Дано целое число и массив вещественных чисел . Вычислить среднее арифметическое и среднее геометрическое чисел массива, используя формулы: ; . РешениеProgram ОМ_2; Var Х: array [1… 100] of real; n, i: integer; S, P: real; Beginwriteln(‘Введите размер массива n’); read(n); writeln(‘Введите массив Х’); for i := 1 to n do read(x[i]); S := 0; P := 1; for i := 1 to n do begin S := S + x[i]; P := P x[i]; end; S := S/n; P := exp(1/n * ln(P)); writeln(‘S =’, S:6:2); writeln(‘P =’, P:10:2); End. Пример 3. Поиск минимального и максимального элементов массива. Дан вещественный массив . Поменять местами минимальный и максимальный элементы массива и вывести массив после обмена. В этой задаче дополнительно надо знать местоположение минимального и максимального элементов, поэтому одновременно с поиском надо запоминать индексы. Введем обозначения: min – минимальный элемент; imin – индекс минимального элемента; max – максимальный элемент; imax – индекс максимального элемента. РешениеProgram ОМ_3; Var T: array [1… 10] of real; i, imin, imax: integer; min, max: real; Beginwriteln(‘Введите массив T’); for i := 1 to 10 do read(t[i]); min := +1E6; max := -1E6; for i := 1 to 10 do begin if t[i] begin min := t[i]; imin := i; end; if t[i]>max then begin max := t[i]; imax := i; end; end; t[imin]:= max; t[imax]:= min; for i := 1 to 10 do write(t[i]:6:2); writeln; End. Двумерный массив Пример. Дана матрица вещественных чисел . Вычислить значение , где P1 и P2 – произведения положительных и отрицательных элементов матрицы соответственно. Решение Program DМ_1; Var A: array [1..4, 1..6] of real; i, j: integer; P1, P2, Z: real; Beginwriteln(‘Введите матрицу А’); for i := 1 to 4 do for j := 1 to 6 do read(a[i,j]); P1 := 1; P2 := 1; for i := 1 to 4 do for j :=1 to 6 do begin if a[i,j]>0 then P1 := P1 a[i,j]; if a[i,j]<0 then P2 := P2 a[i,j]; end; Z := P1/abs(P2); writeln(‘Z=’, Z:10:2); End. Пример. В квадратной целочисленной матрице вычислить модуль разности между числом нулевых элементов, стоящих ниже главной диагонали, и числом нулевых элементов, стоящих выше главной диагонали. Введем обозначения: L1 – число нулевых элементов ниже главной диагонали; L2 – число нулевых элементов выше главной диагонали; L= |L1-L2|. Решение Program DМ1_2; Var B: array [1..5, 1..5] of integer; i, j, L1, L2, L: integer; Beginwriteln(‘Введите матрицу B’); for i := 1 to 5 do for j := 1 to 5 do read(b[i,j]); L1 := 0; L2 := 0; for i := 1 to 5 do for j := 1 to 5 do if b[i,j]=0 then begin if i>j then L1 := L1+1; if i end; L := abs(L1 – L2); writeln(‘L=’, L); End. Пример . В матрице вещественных чисел первый элемент каждой строки поменять местами с минимальным элементом этой строки. Вывести матрицу Х после обмена. Решение Program DМ2_1; Var X: array [1..3,1..6] of real; i, j, jmin: integer; min: real; Beginwriteln(‘Введите матрицу X’); for i:= 1 to 3 do for j := 1 to 6 do read(x[i,j]); for i:=1 to 3 do begin min:=+1E6; for j:=1 to 6 do if x[i,j] begin min:=x[i,j]; jmin:=j; end; x[i,jmin]:=x[i,1]; x[i,1]:=min; end; for i:=1 to 3 do begin for j:=1 to 6 do write (x[i,j]:6:1); writeln; end; End. Пример . Дана матрица вещественных чисел . Вычислить среднее арифметическое каждого столбца. Результат оформить в виде одномерного массива . Решение Program DМ2_2; Var C: array [1..8, 1..4] of real; S: array [1..4] of real; i, j: integer; Beginwriteln(‘Введите матрицу C’); for i := 1 to 8 do for j := 1 to 4 do read(c[i,j]); for j := 1 to 4 do begin s[ j ] := 0; for i := 1 to 8 do s[ j ]:= s[ j ] + c[i,j]; s[ j ] := s[ j ]/8; end; for j := 1 to 4 do write(s[ j ]:8:2) writeln; End. Лабораторная работа 5Работа с символьной информацией Цель работы: познакомить с понятием "стринг" и выработать навыки работы с символьной информацией в языке программирования Pascal научиться использовать строки символов и множества при решении задач. Пример1. Дан текст, слова в котором, могут разделяться пробелами, запятыми, точками и т.д. Требуется напечатать все слова с удвоенной буквой "н". Решение program example1; var st, st1:string; i,j,k,n:integer; flag:boolean; const znak=[' ','.',',',':',';','!','?']; begin writeln('Введите текст'); readln(st); repeat while st[1] in znak do delete(st,1,1); i:=1; while (not (st[i] in znak)) and (i<=length(st)) do inc(i); st1:=copy(st,1,i-1); flag:= false; while (pos('н',st1)>0) and (not flag) do begin j:=pos('н',st1); n:=j; k:=0; while st1[n]='н' do begin inc(n); inc(k); end; if k=2 then flag:= true; delete(st1,j,k) end; if flag then writeln(copy(st,1,i-1)); delete(st,1,i); until st=''; readln; end. Контрольные задания Линейные программы Номера вариантов соответствует порядковому номеру студента по аудиторному журналу
Ветвления
Выбор
Циклы(for ... to).
МассивыЗадание 4.
Контрольные вопросы.
|