1)в диапазоне от 0 до 100 подсчитать количество чисел оканчивающихся на 3. 2)в диапазоне от 0 до 50 подсчитать количество чисел сумма цифр которых равна 3.
1. вариант с последовательным приращением аргумента var x: real; begin x: =-1; while x< =2 do begin writeln('x=',x: 4: 1,' y=',1/x: 0: 10); x: =x+0.2 end end. решение x=-1.0 y=-1.0000000000 x=-0.8 y=-1.2500000000 x=-0.6 y=-1.6666666667 x=-0.4 y=-2.5000000000 x=-0.2 y=-5.0000000000 x= 0.0 y=-18014398509482000.0000000000 x= 0.2 y=5.0000000000 x= 0.4 y=2.5000000000 x= 0.6 y=1.6666666667 x= 0.8 y=1.2500000000 x= 1.0 y=1.0000000000 x= 1.2 y=0.8333333333 x= 1.4 y=0.7142857143 x= 1.6 y=0.6250000000 x= 1.8 y=0.5555555556 x= 2.0 y=0.5000000000 2. вариант с вычислением аргумента путем умножения var x: real; i: integer; begin for i: =1 to 16 do begin x: =0.2*(i-1)-1; writeln('x=',x: 4: 1,' y=',1/x: 0: 10) end end. решение x=-1.0 y=-1.0000000000 x=-0.8 y=-1.2500000000 x=-0.6 y=-1.6666666667 x=-0.4 y=-2.5000000000 x=-0.2 y=-5.0000000000 x= 0.0 y=infinity x= 0.2 y=5.0000000000 x= 0.4 y=2.5000000000 x= 0.6 y=1.6666666667 x= 0.8 y=1.2500000000 x= 1.0 y=1.0000000000 x= 1.2 y=0.8333333333 x= 1.4 y=0.7142857143 x= 1.6 y=0.6250000000 x= 1.8 y=0.5555555556 x= 2.0 y=0.5000000000 анализ решений при х=0 функция 1/х терпит разрыв. при подходе к нулю слева она стремится к минус бесконечности, а справа - к плюс бесконечности. первый вариант программы из-за суммирования на каждом шаге ошибок машинного округления пришел не к нулевому аргументу х, что к неточному вычислению значения функции (как видно по результату, аргумент не дошел до нуля слева). во втором варианте аргумент вычислялся более точно, накопления суммы не было и при нуле мы получили именно "бесконечность". выводы табуляция функций по второму варианту предпочтительнее. но её недостатком является необходимость предварительного вычисления количества повторений цикла по известной формуле int((b-a)/h)+1 и подготовка формулы для расчета текущего значения переменной в виде функции от параметра цикла.
Чечин-Павлова615
02.11.2022
1) 537218687454,427878₉ ⇒х₂₇обратим внимание, что 9=3², 27=3³. это дает возможность произвести перевод, пользуясь троичной системой счисления, как промежуточной.при записи в троичной системе счисления каждая девятиричная цифра кодируется двумя троичными, а двадцатисемиричная - тремя.составим табличку перехода от девятиричной системы к троичной0⇒00, 1⇒01, 2⇒02, 3 ⇒10, 4⇒11, 5⇒12, 6⇒20, 7⇒21, 8⇒22.и просто делаем подмену цифр. 537218687454,427878₉ =12 10 21 02 01 22 20 22 21 11 12 11, 11 02 21 22 21 22 = 121021020122202221111211,110221222122₃ = 121 021 020 122 202 221 111 211,110 221 222 122₃перегруппировка нам понадобилась, чтобы четко выделить тройки разрядов для последующего перевода. теперь нам нужна еще одна табличка - для перевода из троичной системы в двадцатисемиричную.000⇒0, 001⇒1, 002⇒2, 010⇒3, 011⇒4, 012⇒5, 020⇒6, 021⇒7, 022⇒8,100⇒9 101⇒a, 102⇒b, 110⇒c, 111⇒d, 112⇒e, 120⇒f, 121⇒g, 122⇒h,200⇒i, 201⇒j, 202⇒k, 210⇒l, 211⇒m, 212⇒n, 220⇒o, 221⇒p, 222⇒q 121 021 020 122 202 221 111 211,110 221 222 122₃ =g 7 6 h k p d m, c p q h₂₇ = g76hkpdm,cpqh₂₇ответ: 537218687454,427878₉ = g76hkpdm,cpqh₂₇2) с шестнадцатиричной и восьмеричной системами счисления все так же, но проще, потому что в школах учат двоичные коды чисел от 0 до 15.16=2⁴, 8=2³. мы переходим от шестнадцатиричной системы счисления к двоичной, заменяя каждую цифру четырьмя битами (тетрадой), а потом разбиваем результат на тройки (триады) и каждую триаду заменяем восьмеричной цифрой. cfb5ee,d349c₁₆ =1100 1111 1011 0101 1110 1110, 1101 0011 0100 1001 1100₂ = 110011111011010111101110,11010011010010011100₂ = 110 011 111 011 010 111 101 110,110 100 110 100 100 111 000₂ =6 3 7 3 2 7 5 6, 6 4 6 4 4 7 0₈ = 63732756,646447₈ответ: cfb5ee,d349c₁₆ = 63732756,646447₈
Ответить на вопрос
Поделитесь своими знаниями, ответьте на вопрос:
1)в диапазоне от 0 до 100 подсчитать количество чисел оканчивающихся на 3. 2)в диапазоне от 0 до 50 подсчитать количество чисел сумма цифр которых равна 3.
var i,i1,i2,count1,count2: integer;
begin
count1: =0;
count2: =0;
for i: =0 to 100 do
if (i mod 10=3) then inc(count1);
for i: =0 to 50 do
begin
i1: =i mod 10;
i2: =i div 10;
if (i1+i2=3) then inc(count2);
end;
writeln (count1);
writeln (count2);
readln;
end.