Задачи по теме "Логические выражения" В обычной школьной и вузовской практике учащимся и студентам предлагаются для решения те задания, которые представлены в задачниках или составлены преподавателем. Однако усвоение материала будет более осознанным, если предоставить ученикам возможность самостоятельно разработать и решить задачи на указанную тему. Здесь появляется возможность дать волю фантазии, выдумке, сделать какие-то нестандартные ходы. Всё это идёт на пользу делу. В настоящей публикации представлены наиболее удачные задачи по теме "Логические выражения и их запись на языке Pascal", которые были составлены студентами. Задание они получили в следующей формулировке: "Составить высказывание, содержащее переменные, которое в зависимости от их значений принимает значение RUE или FALSE. Записать соответствующее логическое выражение.". Тема "Логические выражения" является очень важной при изучении программирования как в школьном, там и вузовском курсе. Зачастую она остается незаслуженно обойденной, в то время как именно по этой причине учащиеся затрудняются правильно построить логическое выражения, являющееся условием в развилке или цикле. Потому подобного рода задания позволяют акцентировать внимание на указанной проблематике и лучшей степени подготовить учащихся к изучению тем "Развилка", "Циклы". Что касается моего задания, то следует отметить, что некоторые студенты подошли к его выполнению формально, предложив полные аналоги задач из учебников, но были и своего рода находки. Ниже приведены сами задания и соответствующие им логические выражения. 1. Сумма цифр заданного четырёхзначного числа превосходит произведение цифр этого же числа на 1. Div 1000 Div 100 Mod 10 Mod 100 Div 10 Mod 10 - 1 = ( Div 1000) ( Div 100 Mod 10) ( Mod 100 Div 10) ( Mod 10) 2. Сумма двух последних цифр заданного трёхзначного числа меньше заданного K, а первая цифра больше5. ( Div 10 Mod 10 Mod 10 < K) A d ( Div 100 > 5) 3. Заданное натуральное число является двузначным и кратно K. ( >= 10) A d ( C) A d (A C > B) A d (B C > A) A d ((A = B) Or (B = C) Or (A = C)) Для действительных A, B, C (A B > C) A d (A C > B) A d (B C > A) A d ((Abs(A - B) < 1E-7) Or (Abs(B - C) < 1E-7) Or (Abs(A - C) < 1E-7)) 8. Среди заданных целых чисел A, B, C, D есть хотя бы два чётных. Ord( o Odd(A)) Ord( o Odd(B)) Ord( o Odd(C)) Ord( o Odd(D)) >= 2 9. Прямоугольник с измерениями A, B подобен прямоугольнику с соответствующими измерениями C, D. Abs(A / C - B / D) < 1E-7 10. Дробь A / B является правильной. (A < B) A d (B > 0) 11. Дано натуральное число — некоторый год. Этот год является високосным. ( Mod 4 = 0) A d ( Mod 100 0) Or ( Mod 400 = 0) или ( Mod 4 = 0) A d o (( Mod 100 = 0) Xor ( Mod 400 = 0)) Список литературыПути решения изложены в эскизном проекте соответствующей модернизации экспериментальной РЛС «Дута-2» в районе Николаева, разработанном в 1981 году. Осенью 1981 года директор НИИДАР (Марков В.И. Прим. автора.) сначала отложил рассмотрение этого проекта на НТС предприятия, а как следствие и представление его заказчику. Затем, в связи с переводом опытно-конструкторской работы «Дуга-2М» в научно-исследовательскую экспериментальную работу НИЭР «Дуга-2М», он потребовал разработку и утверждение нового ТТЗ. На это Заказчик (Прим. Автора. Минобороны, 4 ГУМО), по понятным в частности для меня мотивам, не дал согласия и предложил оформить «Решение...», которое определило бы порядок выполнения НИЭР «Дуга-2М» на основе ранее утвержденного ТТЗ на ОКР «Дуга-2М». Многократные попытки сблизить решение директора НИИДАР с мнением «Заказчика» к успеху не привели. Такое отношение его к данному вопросу, тем более выраженное в отказе подписать ТТЗ на совершенствование радиолокационного узла «Дуга№1» только из-за того, что в нем предусмотрена задача оценить в эскизном проекте возможности узла по обнаружению запусков одиночных и малых групп МБР с последующим уточнением при испытаниях, естественно, снизило настойчивость исполнителей в доведении данного вопроса до нормальных условий выполнения работы.
// PascalABC.NET 3.0, сборка 1073 const nn=30; mm=30; var a:array[1..mm,1..nn] of integer; m,n,i,j,k,s:integer; begin Writeln('Введите число строк и столбцов массива: '); Read(m,n); Randomize; Writeln('*** Исходный массив ***'); k:=0; for i:=1 to m do begin for j:=1 to n do begin a[i,j]:=Random(51)-25; Write(a[i,j]:4); if Odd(a[i,j]) then Inc(k) end; Writeln end; if k>5 then begin Writeln('Средние арифметические отрицательных элементов по строкам'); for i:=1 to m do begin s:=0; k:=0; for j:=1 to n do if a[i,j]<0 then begin Inc(k); s:=s+a[i,j] end; if k>0 then Writeln(s/k:9:5) else Writeln(' 0.00000'); end end else begin Writeln('*** Результирующий массив ***'); for i:=1 to m do begin for j:=1 to n do begin a[i,j]:=2*a[i,j]; Write(a[i,j]:4) end; Writeln end end end.
const
nn=30;
mm=30;
var
a:array[1..mm,1..nn] of integer;
m,n,i,j,k,s:integer;
begin
Writeln('Введите число строк и столбцов массива: '); Read(m,n);
Randomize;
Writeln('*** Исходный массив ***');
k:=0;
for i:=1 to m do begin
for j:=1 to n do begin
a[i,j]:=Random(51)-25;
Write(a[i,j]:4);
if Odd(a[i,j]) then Inc(k)
end;
Writeln
end;
if k>5 then begin
Writeln('Средние арифметические отрицательных элементов по строкам');
for i:=1 to m do begin
s:=0; k:=0;
for j:=1 to n do
if a[i,j]<0 then begin Inc(k); s:=s+a[i,j] end;
if k>0 then Writeln(s/k:9:5) else Writeln(' 0.00000');
end
end
else begin
Writeln('*** Результирующий массив ***');
for i:=1 to m do begin
for j:=1 to n do begin a[i,j]:=2*a[i,j]; Write(a[i,j]:4) end;
Writeln
end
end
end.
Тестовые решения:
Введите число строк и столбцов массива:
8 6
*** Исходный массив ***
-16 -8 -1 24 -22 1
-9 -20 -25 13 -11 10
-15 10 -12 20 -22 3
-6 25 -3 25 -14 22
24 -4 24 17 -4 -17
-23 -9 -22 1 -18 -13
-12 13 6 -16 2 -13
19 8 -22 14 -3 4
Средние арифметические отрицательных элементов по строкам
-11.75000
-16.25000
-16.33333
-7.66667
-8.33333
-17.00000
-13.66667
-12.50000
Введите число строк и столбцов массива:
3 5
*** Исходный массив ***
3 24 -21 -22 -8
-21 14 -22 0 -22
15 -16 -2 6 22
*** Результирующий массив ***
6 48 -42 -44 -16
-42 28 -44 0 -44
30 -32 -4 12 44