Выражения и условный оператор IF. Операторы циклов.
Массивы и подпрограммы

Тип работы:
Контрольная
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Томский межвузовский центр дистанционного образования

Томский государственный университет систем управления и радиоэлектроники (ТУСУР)

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

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

по дисциплине «информатика»

автор пособия Тимченко С. В., Сметанин С. И.

вариант № 1

Выполнила

Студентка гр. З-828-Б

Специальности 80 105

Афонина Юлия Владимировна

Г. Нефтеюганск

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. 0) = 4. 0

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

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

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

Значение f (3. 0) = -0. 12 021 014

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

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

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

Значение f (5. 0) = 1. 0

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

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. 77 777 778

Результаты вычислений, полученные при помощи различных циклов:

1. Цикл While:

1. Цикл «while»

Значение s: 0. 15 809 431

2. Цикл repeat:

2. Цикл «repeat»

Значение s: 0. 15 809 431

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

3. Цикл «for … to … do»

Значение s: 0. 15 809 431

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

4. Цикл «for … downto … do»

Значение s: 0. 15 809 431

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

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: =100 000;

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: =-100 000;

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

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

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

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

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

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

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

ПоказатьСвернуть
Заполнить форму текущей работой