Задачи №4-11 из
учебника 10 класса.
4. Дано натуральное
трехзначное число n, в записи которого нет нулей. По предложенной записи
алгоритма (псевдокод и в виде блок-схемы), определите результаты работы
алгоритма.
В приведенной записи DIV и
MOD соответственно операции деления нацело и получения остатка от
целочисленного деления. В фигурных скобках записаны пояснения (комментарии) к
операторам.
|
Read(n) {Ввод N}
A := n mod 10 {разряд единиц}
B :=
n div 100 {разряд сотен}
C :=
n div 10 mod 10 {десятки}
L := (n mod
A=0) and (n mod B=0) and (n mod C=0)
Write ( L) {Вывод L}
|
Переведите алгоритм на язык программирования и получите
работающую программу.
program ch4_4;
var
n,a,b,c: word;{беззнаковое целое}
l : boolean;
begin
write('Натуральное трехзначное
число ==>');
readln(n);
a := n mod 10;
b := n div 100;
c := (n div 100) mod 10;
l := ( (n mod a) = 0) and ( (n mod b)=0) and ((n mod c)=0);
writeln(l);
end.
5. По предложенным записям алгоритма напишите программу
вычисления значения функции
|
Read (x)
If (x–12)
Y:=–x2
else
if (x<0)
Y:=x4
else
Y:= x–2
Write (Y)
|
Протестируйте
полученную программу, используя не менее трех тестовых наборов, чтобы можно
было проверить все переходы.
program ch4_5;
var
x,y: double;{вещ с двойной
точностью}
begin
write('Значение аргумента ==>');
readln(x);
if x <= -12 then
y :=
-x*x
else
if x <0 then
y := x*x*x*x
else
y := x-2;
writeln(y);
end.
6. Даны записи двух
алгоритмов подсчета количества нечетных цифр в натуральном
числе n. Слева решение оформлено с использованием цикла с
предусловием, справа – с постусловием.
Выберите любой способ и переведите его на язык
программирования. Протестируйте полученную программу.
Алгоритмы реализуют
следующую идею. Из числа выбирается цифра младшего
разряда, проверяется на нечетность и затем отбрасывается. Нечётные цифры
учитываются. Этот процесс повторяется до тех пор, пока число не исчерпается,
т.е. не станет равным нулю.
|
Read(n)
K
:= 0
While ( n <> 0)
if
(n mod 10 mod
2 = 1)
K
:= K + 1
n
:= n div 10
Write (K)
|
Read ( n)
K
= 0
Do
if
(n mod 10 mod
2 = 1)
K
= K + 1
n
:= n div 10
While (n <> 0 )
Write (K)
|
program ch4_6_1;
var
n: word;
k: byte;{беззнаковое короткое целое}
begin
write('Число N ==>');
readln(n);
k := 0;
while n <> 0 do
begin
if (n mod 10) mod 2 = 1 then
k := k+1;
n := n div 10;
end;
writeln(k);
end.
program ch4_6_2;
var
n: word;
k: byte;
begin
write('Число N ==>');
readln(n);
k := 0;
repeat
if (n mod 10) mod 2 = 1 then
k := k+1;
n := n div 10;
until n =0;
writeln(k);
end.
7. Используя предлагаемые записи алгоритма, напишите программу нахождения
произведения первых k натуральных чисел, кратных трём.
|
Read(k)
P
= 1 {здесь накапливаем произведение}
For I
:= 1 to k/3
P
= P * I * 3
Write(P)
|
program ch4_7;
var
k,i: word;
p: longword;
begin
write('Число K ==>');
readln(k);
p := 1;
for i:=1 to k do
p :=
p*i*3;
writeln(p);
end.
8. Напишите программу решения
следующей задачи.
Лотерейный номер состоит из трех чисел,
каждое из которых может быть от 0 до 99 включительно. Определите шанс угадать
выигрышный лотерейный номер.
Идея решения. Надо
вычислить количество перестановок для заданного числа объектов (3), которые
выбираются из общего числа объектов (100). Перестановка – это любое множество
объектов, в котором внутренний порядок имеет значение. Формула определения
числа перестановок имеет следующий вид:
Следовательно,
надо написать функцию, вычисляющую факториал некоторого числа M
(M!=1*2*3*4*…*M)
и вычислить количество перестановок.
program ch4_8;
function a_n_k( n,k : word):longword;
var
i,p : longword;
begin
p := 1;
for i := n downto n-k+1 do
p := p
*i;
a_n_k := p;
end;
begin
writeln ('Количество сочетаний из
100 по 3: ', a_n_k(100,3));
end.
9. Напишите программу заполнения
массива X(N)
положительными и отрицательными элементами. Из него требуется сформировать
новый массив только из положительных элементов. Найти из них наибольший
элемент. Распечатать новый массив и наибольший элемент.
program ch4_9;
var
x,y : array[0..100] of integer;
i,count : word;
max : integer;
begin
for i:=0 to 100 do
x[i]
:= random(200)-100;
count := 0;
max := -1;
for i:=0 to 100 do
if x[i] > 0 then
begin
y[count] := x[i];
if y[count] > max then
max := y[count];
inc(count);
end;
writeln ('Результат:');
for i:=0 to count-1 do
write(y[i],' ');
writeln;
writeln ('Максимальный элемент:', max);
end.
10. Напишите программу, в
которой предлагается список учащихся разных классов, посещающих футбольную
секцию. Требуется упорядочить список по возрастанию классов. Распечатать список
фамилий и классов.
program ch4_10;
type
schooler = record
fio : string;
age : word;
end;
var
schoolers : array[1..100] of schooler;
i,lim : word;
swap : boolean;
buf :
schooler;
begin
for i:=1 to 10 do
begin
writeln('Ученик №',i);
write('ФИО ==>');
readln(schoolers[i].fio);
write('Класс ==>');
readln(schoolers[i].age);
end;
lim := 9;
repeat
swap := false;
for i:=1 to lim do
if schoolers[i].age
> schoolers[i+1].age then
begin
swap := true;
buf
:= schoolers[i];
schoolers[i] := schoolers[i+1];
schoolers[i+1] := buf;
end;
lim :=
lim-1;
until not swap;
writeln
('По возрастанию классов:');
for i:=0 to 10 do
write(schoolers[i].fio,', ',schoolers[i].age,' класс.');
end.
11. Напишите программу нахождения
минимального элемента первой строки массива К(n,
n),
заполненного случайными числами.
program ch4_11;
const
N = 100;
var
k: array[1..N,1..N] of integer;
i,j,min: byte;
begin
for i:=1 to N do
for j:=1 to N do
k[i,j] := random(10000)-10000;
min := 1;
for i:=2 to N do
if k[1,i] < k[1,min] then
min := i;
writeln ('Минимальный элемент первой строки: K[1,',min,']=',k[1,min]);
end.
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.