Иркутск, 2015г
Цель контрольной работы:
Проверка знаний по разделам:
· целочисленная арифметика;
· переводы целых чисел из одной системы счисления в другую;
· операторы IF, Case, Whilе, Repeat;
· алгоритмизация циклических процессов.
Порядок выполнения
1. Номер варианта: 7.
2. Номера задач: 7, 1, 9, 12, 21, 24а.
Задание 7
Нарисовать блок-схемы и определить значение переменной s после выполнения следующих операторов. Расписать изменение переменных s и i по шагам выполнения цикла.
7.а.
s = 0; i:= 0;
while i < 5 do begin i:= i + 1; s: = s + 1/i; end;
шаг | i | s |
1.5 | ||
1.83 | ||
2.08 | ||
2.28 |
7.б.
s: =0; i: = 10;
while i >1 do begin s:= s +1/i; i:= i -1 end;
шаг | i | s |
0.10 | ||
0.21 | ||
0.34 | ||
0.48 | ||
0.65 | ||
0.85 | ||
1.10 | ||
1.43 | ||
1.93 |
7.в.
s: = 0; i: = 1;
repeat s: = s + 1/i; i: = i - 1 until i< = 1;
шаг | i | s |
1.0 |
7.г.
s:=1; i:=10;
repeat s:=s*(10+i); i:=i-2 until i<1;
шаг | i | s |
Задание 1.
|
|
1. Условие:
Вычислить, не используя стандартные функции LN(x) и EXP(x) 2n, n - натуральное число
2. Математическая модель:
Натуральные числа больше 0.
Ln - возвращает натуральный логарифм аргумента.
EXP - возвращает экспоненту параметра.
3. Таблица внешних спецификаций:
Таблица 1.
No | Имя | Назначение | Тип | Ед. изм. | ОДЗ |
i | действительное число | Целое | - | любое | |
n | натуральное число | Целое | - | Больше 0 | |
st | Результат выполнения | Вещ. | - | любое | |
SOOB1 | Сообщение | Текст | - | 1 вид | |
SOOB2 | Сообщение | Текст | - | 1 вид |
Сообщения:
c1: ‘Введите степень->: ’
c2: ‘2 в степени =: ’
4. Таблица тестов:
Таблица 2.
№ теста | Исходные данные | Результат | Примечания | |
i | n | st | ||
5. Алгоритмизация:
Блок-схема алгоритма (рис. 1):
Рис. 1. Блок-схема алгоритма
6. Кодирование алгоритма:
program kontr1;
Var
i,n:integer;
st:real;
Begin
Repeat
write('Введите степень->');
readln(n);
until n>=0;
st:=1;
for i:=1 to n do
st:=st*2;
write('2 в ',n,' степени = ',st:0:0);
end.
Задание 9.
1. Условие:
Логической переменной T присвоить значение true или false в зависимости от того, является натуральное число R, не большего 100000, степенью 3 или нет
2. Математическая модель:
frac - возвращающает дробную часть числа, то есть если frac(x)=0, значит число Х целое
frac(ln(R)/ln(3)) = 0 - логарифм по основанию 3, и проверять его на "целое/не целое"
3. Таблица внешних спецификаций:
Таблица 1.
No | Имя | Назначение | Тип | Ед. изм. | ОДЗ |
r | Натуральное число | целое | - | положительное | |
SOOB1 | Сообщение | текст | - | 1 вид | |
SOOB2 | Сообщение | текст | - | 2 вид |
Сообщения:
|
|
c1: ‘Введите R (R <= 100000):’
c2: ‘True’
c3: ‘False’
4. Таблица тестов:
Таблица 2.
№ теста | Исходные данные | Результат | Примечания |
r | сообщение | ||
False | |||
True | |||
True | |||
False | |||
True |
5. Алгоритмизация:
Блок-схема алгоритма (рис. 1):
Рис. 1. Блок-схема алгоритма
6. Кодирование алгоритма:
program kontr9;
Var
R:integer;
Begin
Repeat
write('Введите R (R <= 100000): ');
readln(r);
until (r>=0) and (r<=100000);
writeln(frac(ln(R)/ln(3)) = 0);
readln;
end.
Задание 12.
1. Условие:
Определить число, полученное выписыванием в обратном порядке цифр заданного числа, не превышающего 65535.
2. Математическая модель:
Число должно быть больше 9 и не превышать число 65535.
3. Таблица внешних спецификаций:
Таблица 1.
No | Имя | Назначение | Тип | Ед. изм. | ОДЗ |
n | Целое число | Целое | - | любое | |
m | Вспомогательная переменная | Целое | - | любое | |
p | Вспомогательная переменная | Целое | - | любое | |
k | Вспомогательная переменная | Целое | - | любое | |
zn | Вспомогательная переменная | Целое | - | любое | |
i | Вспомогательная переменная | Целое | - | любое | |
SOOB1 | Сообщение | текст | - | 1 вид | |
SOOB2 | Сообщение | текст | - | 1 вид |
Сообщения:
c1: ‘Введите число >10:’
c2: ‘Полученное число =’
4. Таблица тестов:
Таблица 2.
№ теста | Исходные данные | Результат | Примечания |
n | m*zn | ||
5. Алгоритмизация:
Блок-схема алгоритма (рис. 1):
Рис. 1. Блок-схема алгоритма
6. Кодирование алгоритма:
program kontr12;
var n,m,p,k,zn,i:integer;
Begin
Repeat
write('Введите число >10: ');readln(n);
until (n>=10) and (n<=63556);
if then zn:=-1
else zn:=1;
n:=abs(n);m:=n;
while m>0 do
Begin
inc(k);
m:=m div 10;
end;
p:=1;
for i:=1 to k-1 do
p:=p*10;
m:=0;
while n>0 do
Begin
m:=m+p*(n mod 10);
n:=n div 10;
p:=p div 10;
end;
writeln('Полученное число = ',m*zn);
readln;
end.