Главная страница

Методическое указание. Лабораторная работа 1 Программирование линейных алгоритмов


Скачать 274 Kb.
НазваниеЛабораторная работа 1 Программирование линейных алгоритмов
Дата25.03.2018
Размер274 Kb.
Формат файлаdoc
Имя файлаМетодическое указание.doc
ТипЛабораторная работа
#39402

Лабораторная работа №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 := bb – 4ac;

if d<0 then

writeln (‘Корни мнимые’)

else

begin

x1 := (-b + sqrt(d)) / (2a);

x2 := (-b - sqrt(d)) / (2a);

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;

Begin


writeln(‘Введите исходные данные’);

read(a, b);
writeln (‘ x y(x)’);

x := -0.5;

while x <= 2.5 do
begin

y := 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;

Begin


writeln(‘Введите исходные данные’);

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(2k+1)/cos(2k+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;

Begin


writeln(‘Введите массив В’);

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;

Begin


writeln(‘Введите размер массива 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;

Begin


writeln(‘Введите массив 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;

Begin


writeln(‘Введите матрицу А’);

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;

Begin


writeln(‘Введите матрицу 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;

Begin


writeln(‘Введите матрицу 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;

Begin


writeln(‘Введите матрицу 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.

Контрольные задания

Линейные программы
   Номера вариантов соответствует порядковому номеру студента по аудиторному журналу

     

Даны x, y, z . Вычислить a, b, если:






1.

     













2.

     













3.

     













4.

     













5.

     













6.

     













7.

     













8.

     













9.

     













10.

     













11.

     













12.

     













13.

     













14.

     













15.

     









Ветвления


  1. Составить программу для вычисления функции:    


  2. Найти max (a, b).

  3. Дана точка М(x, y). Присвоить z = 1, если точка внутри эллипса    и z = 0, если точка вне эллипса.

  4. Вычислить y(x), если y = x2 при x > 1 и y = x при x <= 1.

  5. Вычислить:


  6. Даны два отрезка [a, b], [c, d] на прямой. Установить, имеют ли они общие точки или нет.

  7. Дана точка М(x, y). Присвоить z = 1, если точка принадлежит окружности с радиусом R и центром в точке (a, b) и z = 0 в противном случае.

  8. Вычислить функцию f(x), если f(x) = e-x при х >= 0 и f(x) = cos x при х < 0.

  9. Составить программу для вычисления y = t2 - t -1, где

  10. Составить программу решения уравнения .

  11. Составить программу вычисления модуля |5x - 4|.

  12. Составить программу вычисления функции:


  13. Составить программу вычисления корня .

  14. Составить программу вычисления функции y=lg(3x-6).

 

Выбор

  1. Составить программу вычисления площадей различных геометрических фигур

  2. Составить программу вычисления площадей различных геометрических фигур

  3. Составить программу вычисления значения функции
     

  4. Составить программу вычисления значения функции 


  5. Найти остаток от деления целой части значения функции z = ln(x2+ab) на 7 и, в зависимости от его величины, напечатать сообщение об одном из дней недели, пронумеровав их от 0 до 6.

  6. Даны три числа а, b, с, удовлетворяющие аксиоме треугольника и число р. Выполнить следующие действия: если р=1 - найти периметр треугольника; если р=2 - найти площадь треугольника; если р=3 - найти угол а. Иначе напечатать слово "треугольник".

  7. Найти остаток от деления целого выражения а=(с+d)(2k-m) на 5 и вывести сообщение о величине остатка. Если остаток равен 0, присвоить а значение целой части выражения. При нечетном остатке напечатать "нечетное число", при четном - "четное число"

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

  9. Найти остаток от деления целой части выражения z = cos(x2+1) на 4 и, и зависимости от его величины, напечатать сообщение об одном из времен года, пронумеровав их от 0 до 3.

  10. Найти остаток от деления целого выражения c = k(a+b) на 4 и вывести сообщение о величине остатка. Если остаток равен 0, то значение переменной оставить без изменения, если 1 или 3 - уменьшить на величину остатка, если 2 - увеличить на величину остатка.

  11. По номеру дня недели (1,2,3,4,5,6,7) указать название этого дня. Указать рабочие и выходные дни.

  12. Найти остаток от деления целой части выражения sin(a+b)0.5c на 4 и вывести на экран сообщение о величине остатка. Если остаток равен 0, то значение выражения заменить на его целую часть. Если остаток равен 1, значение выражения заменить на его дробную часть. В остальных случаях оставить без изменения.

  13. В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно".

  14. Составить программу вычисления значения функции
     

  15. Составить программу вычисления значения функции 

Циклы


 

(for ... to).

  1. Дано 100 вещественных чисел. Вычислить разность между максимальным и минимальным из них.

  2. Дана непустая последовательность различных чисел. Определить порядковый номер наименьшего из них.

  3. Даны целое n>0 и последовательность из n вещественных чисел, среди которых есть хотя бы одно отрицательное число. Найти наибольшее среди отрицательных чисел.

  4. Дана последовательность a1, a2, ..., an вещественных чисел. Найти сумму всех элементов, больших заданного числа b.

  5. Дана таблица целых чисел a1, a2, ..., an. Найти тройки чисел а(i-1), a(i), a(i+1), удовлетворяющие условию:

  6. Дана таблица целых чисел a1, a2, ..., an. Упорядочить эту таблицу.

  7. Дана таблица целых чисел a1, a2, ..., an. Найти сумму S= a1*an+a2*an-1+...+an*a1.

  8. Дана таблица целых чисел a1, a2, ..., an. Найти количество чисел, принадлежащих отрезку [p, q].

  9. Дана таблица целых чисел a1, a2, ..., an и число с. Найти минимальное значение индекса р, при котором a1 + a2 + ...+ ap < c.

  10. Дана таблица целых чисел a1, a2, ..., an. Подсчитать количество различных чисел. Составьте новую таблицу, состоящую из различных элементов данной, входящих в нее в такой же последовательности.

  11. Дана таблица целых чисел a1, a2, ..., an. Вычислить

  12. Дана таблица положительных чисел a1, a2, ..., an. Вычислить

  13. Даны две последовательности a1<= a2<= ...<= an и b1<= b2<= ...<= bm. Получить таблицу чисел с1<= с2<= ...<= сn+m из эти двух таблиц.

  14. Дана таблица целых чисел a1, a2, ..., an и число с. Расширить эту таблицу до таблицы a1<= a2<= ...<= an+1, включив в нее число с.

  15. Дана таблица положительных чисел a1, a2, ..., an. Вычислить

Массивы

Задание 4.


  1. Дана прямоугольная матрица А(nxn). Заменить наименьший элемент каждой строки, начиная со второй, наибольшим элементом предыдущей строки.

  2. Дана действительная квадратная матрица порядка n. Построить последовательность действительных чисел A1, A2, ..., An по правилу: если в i - той строке матрицы элемент, принадлежащий главной диагонали, отрицателен, то Ai равно сумме элементов i - той строки, предшествующих первому отрицательному элементу; в противном случае Ai равно сумме последних элементов i - той строки, начиная с первого по порядку неотрицательного элемента.

  3. Дана действительная квадратная матрица порядка n. Вычислить сумму тех ее элементов, расположенных на главной диагонали и выше нее, которые превосходят по величине все элементы, расположенные ниже главной диагонали. Если на главной диагонали и выше нее нет элементов с указанным свойством, то ответом должно служить сообщение об этом.

  4. Заданы квадратная матрица А порядка n и число К(1<=К<=n). Столбец с минимальным по модулю элементом в К - той строке переставить с К - тым столбцом.

  5. Задана квадратная матрица порядка n. Исключить из нее строку и столбец, на пересечении которых расположен минимальный элемент главной диагонали.

  6. Дана матрица А(nxn). Найти максимальный по модулю элемент матрицы. Переставить строки и столбцы матрицы таким образом, чтобы максимальный по модулю элемент матрицы был расположен на пересечении К - той строки и К - того столбца.

  7. Дана целочисленная матрица размерностью nxm. Найти матрицу, получающуюся из данной перестановкой строк - первой с последней, второй с предпоследней и т.д.

  8. Дана целочисленная матрица размерностью nxm, целые числа к, l (1<=k<=n, 1<=l<=n, k<>l). Преобразовать матрицу так, чтобы строка с исходным номером к непосредственно следовала за строкой с исходным номером l.

  9. Найти все различающиеся элементы целочисленной квадратной матрицы размерностью nxm.

  10. Дана матрица А(nxn). Написать программу, которая упорядочивает строки этой матрицы по убыванию первых элементов ее строк.

  11. Дана матрица А(nxn). Написать программу, которая упорядочивает строки этой матрицы по возрастанию.

  12. Дана матрица А(nxn). Написать программу, которая находит максимальную из сумм элементов, стоящих на диагоналях, параллельных главной диагонали.

Контрольные вопросы.


  1. Алгоритмы и алгоритмические языки. Алфавит языка программирования паскаль.

  2. Константы и переменные Арифметические выражения

  3. Структура программы на паскале.

  4. Типы данных на паскале.

  5. Выражения, операнды , операции на паскале.

  6. Операторы ввода и вывода.

  7. Оператор присваивания на паскале привести примеры программ.

  8. Условные операторы.

  9. Оператор выбора

  10. Операторы цикла с условием.

  11. Операторы цикла с параметром.

  12. Операторы цикла.

  13. Символьный тип данных .

  14. Строковый тип данных.

  15. Понятие массива Одномерные массивы.

  16. Двумерные массивы.

  17. Процедуры .

  18. Функции.




написать администратору сайта