Томский межвузовский центр дистанционногообразования
Томский государственный университетсистем управления и радиоэлектроники (ТУСУР)
Кафедра экономика
Контрольная работа №1
по дисциплине «информатика»
автор пособия Тимченко С.В., СметанинС.И.
вариант №1
Выполнила
Студенткагр.З-828-Б
Специальности080105
АфонинаЮлия Владимировна
Г. Нефтеюганск
2009 г./>/>/>/>
Задание№1. «Выражения и условный оператор IF»
/>/>/>1. Вычислить значение функции f в точке x.
/>
/>/>/>
Решение:
Programprog1;
Var
f,x: real;
Begin
writeln('Расчетзначения функции в заданной точке');
write('Введите число x: ');
readln(x);
ifxthen f:=SQR(x+3) else
begin
ifxthenf:=sin(x-2)/(SQR(x)-16)
elsef:=SQRT(x-4);
end;
writeln('Значение f(',x:0:8,') = ',f:0:8);
readln;
end.
/>/>/>Тестированиепрограммы:
1. X=-1(выполнено первое условие, x
Расчет значения функции в заданной точке
Введите число x: -1
Значение f(-1.00000000) = 4.00000000
2. X=3(выполнено второе условие, 0
Расчет значения функции в заданной точке
Введите число 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,совпадающие между собой.
/>/>/>Решение:
Programprog2;
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;
whilei
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;
untili>10;
write('Значениеs: ');
writeln(s:0:8);
{цикл«for… to… do»}
writeln('3.Цикл«for… to… do»');
x:=a;
s:=0;
fori:=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;
fori:=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. В чем ее основные отличия от остальных циклов TurboPascal?
Цикл 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;
которая указывает, сколько знаков после запятойотображать.
/>/>/>Программа:
programprog3;
const
digits=3;
type
matrix=array[1..10, 1..10] ofreal;
vector=array[1..10] of real;
var
m:matrix;
v:vector;
n:integer;
procedureinput_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(nor (n>10) then
begin
writeln('Вы ввели неправильный размер матрицы,');
writeln('nдолжно быть не менее 2 и не более 10.');
end
else
begin
input:=true;
end;
untilinput;
writeln('Введителевуюa иправуюb границы');
writeln('диапазоназначений компонент матрицы:');
write('a= ');readln(a);
write('b= ');readln(b);
ifa>b then
begin
p1:=a;
a:=b;
b:=p1;
end;
ifa=b then begin p1:=0; p2:=b; end
elseif b=0 then begin p1:=a; p2:=0; end
elsebegin p1:=b-a; p2:=a; end;
{p1- расстояние между левой и правой границей}
{p2 — левая граница}
randomize;
fori:=1 to n do
forj:=1 to n do
m[i,j]:=p2+random*p1;
end;{input_matrix}
procedureoutput_matrix(var m:matrix; n:integer);
var
i,j:integer;
begin
fori:=1 to n do
begin
forj:=1 to n do
begin
write(m[i,j]:0:digits);
write('');
end;
writeln;
end;
writeln;
end;{output_matrix}
procedurechange_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;
fori:=1 to n do
forj:=1 to n do
ifm[i,j]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;
fori:=1 to n do
forj:=1 to n do
ifm[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('столбца');
fori:=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}
procedurevector_v(m:matrix;var v:vector;n:integer);
var
i:integer;
s:real;
begin
fori:=1 to n do
v[i]:=m[i,i];
s:=0;
fori:=1 to n do
s:=s+v[i];
writeln('Векторv[n]:');
fori:=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
Результаты тестирования:
- сгенерированныеэлементы матрицы не выходят за границы заданного диапазона;
- минимальноеи максимальное значения определены верно;
- вектордиагональных элементов составлен правильно;
- измененыместами нужные строка и столбец.
Отладка завершена.