Томский межвузовский центр дистанционного образования
Томский государственный университет систем управления и радиоэлектроники (ТУСУР)
Кафедра экономика
Контрольная работа №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
Результаты тестирования:
- сгенерированные элементы матрицы не выходят за границы заданного диапазона;
- минимальное и максимальное значения определены верно;
- вектор диагональных элементов составлен правильно;
- изменены местами нужные строка и столбец.
Отладка завершена.
Похожие работы
... выполнения этой функции */ /* указатель q должен быть возвращен в первоначальное */ /* положение */ free(++q); /* Рассмотрим возможность изменения индексации и */ /* освобождения памяти для двумерного массива */ b=(float **)calloc(m,sizeof(float *)); for (i=0; i < m; i++) b[i]=(float *)calloc(n,sizeof(float)); /* После распределения памяти начальным элементом */ /* массива ...
... программе. В данном разделе они перечислены в алфавитном порядке и приводятся с объяснениями. Эти ошибки могут являться следствием случайного затирание памяти программой. Abnormal program termination Аварийное завершение программы Данное сообщение может появляться, если для выполнения программы не может быть выделено достаточного количества памяти. Более подробно оно рассматривается в конце ...
... F := SomeFunction; напротив, оператор I := F(4); вызывает эту функцию (запускает ее алгоритм) и после обработки возвращает результат вычислений переменной I. 15.6. Формальные и фактические параметры В Object Pascal есть понятия формального и фактического параметров. Формальным называется параметр, который содержится в заголовке описания подпрограммы, а фактическим – параметр в обращении к ...
... с приглашением по запросу (в машинной графике)required parameter обязательный параметрrequired space обязательный пробел (в системах подготовки текстов)requirements specification 1. техническое задание 2. описание требований к программному средствуrerun перезапуск, повторный запускreschedule переупорядочивать очередь (о диспетчере операционной системы)reschedule interval период переупорядочения ...
0 комментариев