Как определить разность? - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

Дано целое число в двоичной системе счисления т.е. последовательность цифр 0 и 1. Осуществить циклический сдвиг элементов массива в лево на две позиции. Определить разность исходного и полученного после сдвига числа.

Решение задачи: «Как определить разность?»

textual
Листинг программы
const n=10; 
var a,b,c: array [1..n] of byte;
    i,j,k:integer;
begin 
randomize;
writeln('Исходное число в СС 2');
for i:=1 to n do
 begin
  if i=1 then a[i]:=1
  else a[i]:=random(2);
  write(a[i]);
 end; 
writeln;
//создадим второе число сдвигом первого на 2 позиции влево
for i:=1 to n do
if i<n-1 then b[i]:=a[i+2]
else b[i]:=a[i-(n-2)];
writeln('Число после циклического сдвига на 2 позиции влево');
for i:=1 to n do
write(b[i]);
writeln;
//выясним которое больше
i:=1;
while (i<=n)and(a[i]=b[i])do inc(i);
if i>n then
 begin
  write('Числа одинаковые, разность = 0');
  exit;
 end;
if b[i]>a[i] then //если второе больше
for i:=1 to n do //поменяем их
 begin
  k:=a[i];
  a[i]:=b[i];
  b[i]:=k;
 end;
writeln('Разность чисел');
//выведем в виде решения столбиком
for i:=1 to n do
write(a[i]); //большее число
writeln;
writeln('-');
for i:=1 to n do
write(b[i]);  //меньшее число
writeln;
for i:=1 to n do
write('-'); //черта
writeln;
for i:=n downto 1 do
if a[i]>=b[i] then c[i]:=a[i]-b[i]//если уменьшаемое не меньше вычитаемого
else  //иначе
 begin
  c[i]:=1;//пишем 1
  if a[i-1]=1 then a[i-1]:=0//если в предыдущем разряде 1, меняем на 0("занимаем 1")
  else //если 0, занимаем 1 в первом  более старшем разряде где 1
   begin
    j:=1;
     while (j<i) and (a[i-j]=0) do
      begin
       a[i-j]:=1;
       inc(j);
      end;
     a[i-j]:=0;
    end;
  end;
k:=n; //убираем ведущие ноли в результате
while c[1]=0 do
 begin
  for i:=1 to k-1 do
  c[i]:=c[i+1];
  k:=k-1;
 end;
for i:=1 to n-k do //выводим пробелы вместо ведущих нолей
write(' ');
for i:=1 to k do  //выводим результат
write(c[i])
   
end.

Объяснение кода листинга программы

  1. Объявляются переменные: n, a, b, c, i, j, k типа integer и массив a размером n, заполняемый случайными значениями из диапазона [1..2] (строка 7).
  2. Выводится исходное число (строка 13).
  3. Создается второе число, сдвинутое на 2 позиции влево от первого (строки 18-21).
  4. Если числа равны, выводится сообщение Числа одинаковые, разность = 0 и программа завершается (строки 27-28).
  5. Если второе число больше первого, они меняются местами (строки 29-34).
  6. Выводится разность чисел (строки 36-43).
  7. Если в разряде, соответствующем второму числу, значение 1, то записывается 0 (строки 44-51).
  8. Если в разряде, соответствующем второму числу, значение 0, то записывается 1 (строки 52-57).
  9. Удаляются ведущие нули в результате (строки 58-65).
  10. Выводится результат без ведущих нулей (строки 66-67).

Оцени полезность:

13   голосов , оценка 3.923 из 5
Похожие ответы