Контрольная работа по предмету "Информатика, программирование"


Выражения и условный оператор 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


2. X=3 (выполнено второе условие, 0<=x<4):


Расчет значения функции в заданной точке


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


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


3. X=5 (выполнено третье условие, x>=4):


Расчет значения функции в заданной точке


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


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


Программа дает верные результаты, отладка завершена.





2.
Какие типы использовались при описании переменных в программе?


При описании данной программы использовались переменные вещественного типа.





3.
Чем определяется выбор того, или иного типа?


Типом данных называется множество допустимых значений этих данных, а также совокупность операций над ними. Типы делятся на следующие группы: простые, структурированные, указатели, процедурные, объекты. Есть стандартные (предопределенные) и определяемые программистами в разделе, начинающемся со слова 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
в точках xi

которые берутся с заданного интервала [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:=(b-a)/(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


2. Цикл repeat:


2. Цикл "repeat"


Значение s: 0.15809431


3. Цикл For … To … Do:


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


Значение s: 0.15809431


4. Цикл For … DownTo … Do:


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


Значение s: 0.15809431


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





2.
Опишите оператор While.


Оператор While имеет следующую структуру:


While
логическое выражение
do
оператор
;


Работает этот оператор очень просто. Вычисляется значение логического выражения. Если получается истина (True), то выполняется оператор, а затем снова вычисляется значение логического выражения. Если снова получается истина, то опять выполняется оператор, и т.д. Так продолжается до тех пор, пока при вычислении логического выражения не получится ложь (False). После этого оператор While заканчивает свою работу и передает действие следующему оператору.


В частности, если в самом начале работы While при вычислении логического выражения получается ложь, то оператор не выполнится ни разу. Как обычно, в качестве оператора может выступать некоторый составной оператор. Может показаться странным, что оператор While вообще когда-нибудь заканчивает свою работу. В самом деле, почему одно и то же логическое выражение сначала было истинным, а потом, после нескольких выполнений оператора, стало ложным? Логическое выражение зависит от нескольких переменных, значение которых меняется во время выполнения оператора, что влечет за собой изменения значения логического выражения. В принципе, это вовсе не означает, что каждый оператор While когда-нибудь заканчивает работу. То есть, не исключена ситуация, когда логическое выражение всегда будет истинным, и оператор While будет работать вечно. Такая ситуация называется зацикливанием. Таким образом, при использовании оператора While и вообще других циклических операторов нужно быть аккуратным и стараться избегать зацикливаний. Это значит, что при программировании любого цикла нужно стараться всегда объяснить самому себе, почему этот цикл не будет вечным, а когда-нибудь закончит свою работу.





3.
В чем ее основные отличия от остальных циклов 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:=b-a; p2:=a; end
;


{p1 - расстояние между левой и правой границей}


{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


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


- сгенерированные элементы матрицы не выходят за границы заданного диапазона;


- минимальное и максимальное значения определены верно;


- вектор диагональных элементов составлен правильно;


- изменены местами нужные строка и столбец.


Отладка завершена.



Не сдавайте скачаную работу преподавателю!
Данную контрольную работу Вы можете использовать для выполнения своих заданий.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :