Составить циклический процесс определения произведения натуральных чисел (факториал) 1*2*3 *n, для произвольного n (n! ) план работы. 1. условие 2. модель 3.список переменных с их расшифровкой 4.блок-схема алгоритма 5.программный код
1. Есть 2. 3. n - заданное число, y - факториал числа, i - счётчик 4. Прил. 5. var y: System.uint64; //Большая цифра же и положительная n, i: byte; //Нет смысла большие числа брать слишком, переполнение будет
begin readln(n); //Принимаем число... y := 1; i := 1; repeat y := y * i; //...и умножаем такое-то количество раз i := i + 1; until i > n; if (y = 0) then //Выводим, предусмотрев переполнение writeln('Слишком большая цЫферка') else writeln(y); end.
1) Один байт = 8 бит, максимальное число 2^8 - 1 = 255, если числа без знака. Для знаковых чисел старший бит отводится под знак числа, следовательно, минимальное число = - 2^7 - 1 = - 127, максимальное число = + 127 2) Число 1607, ячейка двухбайтовая, один бит под знак, следовательно, под число отводится 15 бит, в двоичном представлении 1607(10) = 11001000111(2), дополняем до 16 бит, старший бит - знаковый - нулевой, так как число положительное = 0000011001000111(2) - это двоичное представление в двухбайтовой ячейке, чтобы получить шестнадцатиричное представление, разбиваем число справа - налево по 4 бита 0000 0110 0100 0111 и записываем в шестнадцатиричном виде 0111(2) = 7(16) 0100(2) = 4(16) 0110(2) =6(16) 0000(2) = 0(16) 1607(16) = 0647(16) или без старшего не значащего нуля = 647(16) 3) для получения дополнительного кода числа, находят обратное число, или инверсию числа, для этого каждый бит числа изменяют на противоположный, 1 на 0, 0 на 1 105(10) = 1101001(2) - это и есть дополнительный код числа - 105, т.е. дополнительным кодом числа (- а) будет число а. Найдем дополнительный код в однобайтовой ячейке числа 105(10) = 01101001(2), а) находим обратное 01101001(2) ->(обратное) ->10010110(2) б) дополнительный код-> обратный код + 1 ->(дополнительный)->10010111(2), а это число - 105 потому, что отрицательные числа представляются в дополнительном коде. Если для числа - 105 найти дополнительный код, то получим число 105 10010111(2)->(дополнительный)->01101000+1->01101001 = 69(16) = 16*6+9 = 96+9 = 105
// PascalABC.NET 3.0, сборка 1128 begin var a:=ArrRandom(20,-10,19); a.Println(','); // 1 var b:=ReadArrInteger('Введите 10 целых чисел',10); // 2 Writeln('Количество положительных элементов ', a.Where(x->x>0).Count); // 3 for var i:=0 to 19 do if a[i]<0 then a[i]:=0; Writeln('Массив А после замены отрицательных'); a.Println(','); //4 Writeln('Сумма положительных элементов ', a.Where(x->x>0).Sum) // 5 end.
Тестовое решение: 14,8,9,-5,6,3,3,-10,-8,18,7,13,2,17,-1,0,4,-3,8,-8 Введите 10 целых чисел -5 0 13 -7 -14 11 8 19 -3 -1 Количество положительных элементов 13 Массив А после замены отрицательных 14,8,9,0,6,3,3,0,0,18,7,13,2,17,0,0,4,0,8,0 Сумма положительных элементов 112
2.
3. n - заданное число, y - факториал числа, i - счётчик
4. Прил.
5.
var
y: System.uint64; //Большая цифра же и положительная
n, i: byte; //Нет смысла большие числа брать слишком, переполнение будет
begin
readln(n); //Принимаем число...
y := 1;
i := 1;
repeat
y := y * i; //...и умножаем такое-то количество раз
i := i + 1;
until i > n;
if (y = 0) then //Выводим, предусмотрев переполнение
writeln('Слишком большая цЫферка')
else
writeln(y);
end.