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