Сущность старинного сюжета "мужик и черт" такова:
черт, имеющий первоначально сумму а рублей, за счет этих денег удваивает имеющуюся у мужика на руках сумму ( первоначально в рублей) при каждом переходе того через волшебный мост, за что взимается с него плату в с рублей. процесс продолжается до полного разорения одного из участников.
составьте программу, описывающую весь ход их взаимных подсчётов. значение а,в и с должны вводиться с консоли по запросу программы. выполнить эту программу при а=20, в=10, с=11; при а=20, в=11, с=10; при а=20, в=12,с=16
как поведёт себя программа при а=20, в=12,с=12.
Переводим целую часть:
2765342:2=1382671(0)
1382671:2=691335(1)
691335:2=345667(1)
345667:2=172833(1)
172833:2=86416(1)
86416:2=43208(0)
43208:2=21604(0)
21604:2=10802(0)
10802:2=5401(0)
5401:2=2700(1)
2700:2=1350(0)
1350:2=675(0)
675:2=337(1)
337:2=168(1)
168:2=84(0)
84:2=42(0)
42:2=21(0)
21:2=10(1)
10:2=5(0)
5:2=2(1)
2:2=1(0)
1010100011001000011110 - это целая часть
Переводим дробную:
0,23*2=0,46(0)
0,46*2=0,92(0)
0,92*2=1,84(1)
0,84*2=1,68(1)
0,68*2=1,36(1)
0,36*2=0,72(0)
0,72*2=1,44(1)
0,44*2=0,88(0)
0,00111010 - дробная часть
В итоге:
1010100011001000011110,00111010 - это данное число в двоичной СС
===== PascalABC.NET =====
begin
// 1
var a := MatrRandom(5, 6, -10, 10);
a.Println(4);
var (kn, kz, kp) := (0, 0, 0);
for var i := 0 to a.RowCount - 1 do
for var j := 0 to a.ColCount - 1 do
if a[i, j] > 0 then
kp += 1
else if a[i, j] = 0 then
kz += 1
else
kn += 1;
Println('Отрицательных', kn, ' нулевых', kz,
' положительных', kp);
// 2
var b := MatrRandom(5, 6, 1, 100);
b.Println(5);
var s := b.ElementsWithIndices;
var imin := s.MinBy(p -> p[0]);
var imax := s.MaxBy(p -> p[0]);
Writeln('Индексы минимального элемента [',
imin[1] + 1, ',', imin[2] + 1, ']');
Writeln('Индексы максимального элемента [',
imax[1] + 1, ',', imax[2] + 1, ']');
// 3
var c := MatrRandom(5, 9, -3, 5);
c.Println(3);
Print('Количество положительных по строкам:');
c.Rows.Select(r -> r.Count(p -> p > 0)).Println
end.