Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ОАиЯП кр1

.docx
Скачиваний:
28
Добавлен:
30.03.2016
Размер:
195.59 Кб
Скачать

Министерство образования и науки

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

радиоэлектроники

Кафедра экономики

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

по дисциплине «Основы алгоритмизации и языки программирования/Объектно-ориетированное программирование-1»

Учебное пособие П.С. Мещеряков, С.В. Сметанин, С.В. Тимченко «Информатика. Часть 2. Программирование на языке Паскаль»

Вариант № 7

ВВЕДЕНИЕ

Основная цель - изучить язык высокого уровня Pascal, научиться формулировать несложные алгоритмы, реализовывать их в виде программ и отлаживать при помощи существующего программного обеспечения.

Задание 1

Вычислить значение функции f в точке x. Значение x должно вводиться с клавиатуры. Вывести полученный результат на экран.

Решение

var

x, f: real;

begin

write ('Введите число x='); readln (x);

if x<1 then f:=arctan(1/(x-1))

else

if x=1 then f:=ln(8*sqr(x)+x+3)

else

f:=abs(cos((sqr(x-3))/(sqr(x)+10)));

writeln ('f=', f:5:3);

readln;

end.

1) В каком порядке происходит вычисление значений выражений?

Группа

Тип действий

Операции или элементы

1

Вычисление в круглых скобках

( )

2

Вычисление значений функций

Функции

3

Унарные операции

Not, унарный +, унарный -

4

Операции типа умножения

*, /, Div, Mod, And

5

Операции типа сложения

+, -, Or, Xor

6

Операции отношения

=, < >, <, <=, >, >=

2) Запишите порядок вычисления значений во всех выражениях, встречающихся в Вашей программе.

Задание 2

Вычислить сумму s значений функции f в точках xi, которые берутся с заданного интервала [a; b] через равные отрезки длиной h. Длина отрезка рассчитывается по формуле . Здесь i = 1, 2, 3 ... n — номер точки; n — задаваемое количество точек; a — начало и b — конец интервала изменения x. Вывести на экран результаты вычислений, полученные при помощи следующих циклов:

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

Repeat тело_цикла Until логическое_выражение;

For параметр:=мин._значение To макс. Do тело_цикла;

For параметр:=макс._значение DownTo мин. Do тело_цикла;

Функция

Интервал

Количество точек n=20

Решение

const n=20;

var a, b, h, x, s, s1, s2, s3 :real;

i:integer;

begin

a:=12;

b:=21;

h:=(b-a)/(n-1);

x:=a;

s:=0;

s1:=0;

s2:=0;

s3:=0;

while x<=b do begin

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

x:=x+h;

end;

writeln('s=',s:5:3);

x:=a;

repeat

s1:=s1+exp((-2/3)*ln(x));

x:=x+h;

until x>=b;

writeln('s1=',s1:5:3);

x:=a;

for i:=1 to 20 do

begin

s2:=s2+exp((-2/3)*ln(x));

x:=x+h;

end;

writeln('s2=',s2:5:3);

x:=a;

for i:=20 downto 1 do

begin

s3:=s3+exp((-2/3)*ln(x));

x:=x+h;

end;

writeln('s3=',s3:5:3);

readln;

end.

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

Оператор цикла While содержит в себе выражение, которое управляет повторным выполнением оператора (который может быть составным оператором).

WHILE выражение DO

BEGIN

Внутренний оператор;

END;

Выражение, с помощью которого производится управление повторением оператора, должно иметь булевский тип. Вычисление его производится до того, как внутренний оператор будет выполнен. Внутренний оператор выполняется повторно до тех пор, пока выражение принимает значение True. Если выражение с самого начала принимает значение False, то оператор, содержащийся внутри оператора цикла while, не выполняется ни разу, поэтому этот цикл называют ещё циклом с предусловием.

2) В чём его основные отличия от остальных циклов Pascal?

от цикла Repeat…until :

- в операторе While…do проверка условия выхода выполняется в начале цикла, а не в конце цикла;

- в операторе While…do условие выхода удовлетворяется, если выражение ложно, а в операторе Repeat…until – если истинно;

- в операторе While...do тело цикла должно содержать только один оператор (либо использоваться составной оператор), а между ключевыми словами Repeat и Until можно поместить любое количество операторов (без использования составного оператора).

от цикла For

- оператор While..do организуется выполнение одного оператора неизвестное заранее число раз, а в операторе цикла For организует выполнение одного оператора заранее известное число раз.

Задание 3

Найти суммы компонент вещественной матрицы m[n,k] по строкам и записать их в одномерный массив v[n].

Заменить значения компонент в строках матрицы m[n,k] на 1, если сумма соответствующей строки окажется больше 0, на −1, если сумма меньше 0, на 0, если сумма равна 0.

Найти минимальное значение компонент массива v[n]. Если минимумов в массиве несколько, то запомнить индекс первого встреченного при переборе из минимумов.

На экран вывести исходную матрицу m[n,k], массив v[n], изменённую матрицу m[n,k], первую встреченную минимальную компоненту с индексом.

Решение

program

input_matrix

show_array

show_matrix

work1

work2

work3

const min=2;

max=10;

Type matrix = Array [1..max, 1..max] Of real;

Type vector = Array [1..max] Of real;

Procedure input_matrix (Var m: matrix; Var n, k: integer);

Var a, b, p1, p2, i, j: Integer;

Begin

repeat

Write ('Введите количество строк от ',min,' до ',max,' n = ');

ReadLN (n);

until n in [min..max];

repeat

Write ('Введите количество столбцов от ',min,' до ',max,' k = ');

ReadLN (k);

until k in [min..max];

repeat

Writeln('Введите границы диапазона значений компонент матрицы a<b');

ReadLN (a,b);

until a<b;

Randomize;

For i:=1 To n Do

begin

For j:=1 To k Do

begin

m[i,j]:=a+(b-a)*random;

end;

End;

end;

Procedure show_array (v: vector; n: integer);

var

i:integer;

begin

for i:=1 to n do

write(v[i]:5:1);

writeln;

end;

Procedure show_matrix (Var m: matrix; n, k: integer);

var

i,j:integer;

begin

for i:=1 to n do

begin

for j:=1 to k do

begin

write(m[i,j]:5:1);

end;

writeLn;

end;

end;

Procedure work1 (Var m: matrix; n, k: integer;var v: vector);

var

i,j:integer;

begin

for i:=1 to n do

begin

v[i]:=0;

for j:=1 to k do

begin

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

end;

end;

end;

Procedure work2 (Var m: matrix; n, k: integer;v:vector);

var

i,j:integer;

begin

for i:=1 to n do

begin

for j:=1 to k do

begin

if v[i]>0 then m[i,j]:=1

else if v[i]<0 then m[i,j]:=-1

else m[i,j]:=0;

end;

end;

end;

Procedure work3 (v: vector; n: integer);

var

i,imn:integer;

begin

imn:=1;

for i:=1 to n do

begin

if v[i]<v[imn]-0.0001 then imn:=i;{//-0.0001 для сравнения вещественых чисел}

end;

writeln('Минимальный элемент массива V=',v[imn]:0:1,' индекс первого=',imn);

end;

var a:matrix;

n,k: integer;

v:vector;

begin

input_matrix(a,n,k);

writeln('Исходная матрица');

show_matrix(a,n,k);

work1(a,n,k,v);

writeln('Массив сумм в строках');

show_array(v,n);

work2(a,n,k,v);

writeln('Измененная матрица');

show_matrix(a,n,k);

work3(v,n);

readln;

end.

ЗАКЛЮЧЕНИЕ

Изучил язык высокого уровня Pascal, научился формулировать несложные алгоритмы, реализовывать их в виде программ и отлаживать при помощи Borland Pascal.

ЛИТЕРАТУРА

1. Мещеряков П.С. Информатика. Часть 2. Программирование на языке Паскаль: Учебное пособие. – Томск: Факультет дистанционного обучения, ТУСУР, 2011.

2. Епанешников А.М. Программирование в среде Turbo Pascal 7.0 / А.М. Епанешников, В.А. Епанешников. — 3-е изд., стер. — М.: ДИАЛОГ-МИФИ, 1996.

3. Культин Н.Б. Turbo Pascal в задачах и примерах / Н.Б. Культин. — СПб.: БХВ-Петербург, 2000.

4. Шпак Ю.А. Turbo Pascal 7.0 на примерах / Ю.А. Шпак; под ред. Ю.С. Ков-танюка. — Киев: Юниор, 2003.