1. вводится не менее восьми чисел. конец ввода 0. найти сумму первых пяти чисел и произведение последних пяти чисел. составить блок-схему и программу к . 2. вводится текст. конец ввода f4. найти количество букв.
procedure Add2Ring(a: integer); // Добавляет в кольцо очередной элемент begin if ir = n then ir := 1 else ir := ir + 1; R[ir] := a end;
var i, S, d: integer; P: longint;
begin S := 0; ir:=0; writeln('Вводите числа, 0 - конец ввода'); for i := 1 to n do begin readln(d); S := S + d; Add2Ring(d) end; repeat readln(d); if d <> 0 then Add2Ring(d); until d = 0; P := 1; for i := 1 to n do P := P * R[i]; writeln('Сумма первых ', n, ' чисел: ', S, ', произведение последних: ', P) end.
Программу надо сформатировать и тогда её структура будет видна лучше. А чтобы понять, как идет выполнение, в нужных точках ставим промежуточную выдачу - это называется "трассировкой".
var s, k: integer; label met; begin s:=-12; k:=90; Writeln('s=',s,', k=',k); s:=s+10; Writeln('s=',s); met: Writeln('Метка met:'); k:=k+10; Write('k=',k); if k<200 then s:=50 else s:=s+k; Writeln(', s=',s); if k<200 then goto met; Writeln('Результат: s=',s) 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
n = 5;//Емкость памяти типа "кольцо"
type
Ring = array[1..n] of integer;
var
ir: integer;
R: Ring;
procedure Add2Ring(a: integer);
// Добавляет в кольцо очередной элемент
begin
if ir = n then ir := 1
else ir := ir + 1;
R[ir] := a
end;
var
i, S, d: integer;
P: longint;
begin
S := 0;
ir:=0;
writeln('Вводите числа, 0 - конец ввода');
for i := 1 to n do
begin
readln(d);
S := S + d;
Add2Ring(d)
end;
repeat
readln(d);
if d <> 0 then Add2Ring(d);
until d = 0;
P := 1;
for i := 1 to n do P := P * R[i];
writeln('Сумма первых ', n, ' чисел: ', S, ', произведение последних: ', P)
end.