Другие языки программирования и технологии

Нужна программа на паскале, вычисляющая дополнительный код отрицательного числа

KM
Kenichi Mamoru
882
program N75475221;
var
x: longint;
i: byte;
begin
write('Введите число: ');
readln(x);
write('Дополнительный код числа ', x, ': ');
for i := 1 to 32 do
begin
write(ord(x and $80000000 <> 0));
x := x shl 1
end;
readln
end.

Программа выводит дополнительный код введённого числа в двоичном виде.
Для положительных чисел дополнительный код совпадает с прямым (и обратным тоже) .



P.S. Программа работает в любом нормальном Паскале, кроме PascalABC. (PascalABC.NET я отношу к нормальным).
Сергей Щетинин
Сергей Щетинин
51 590
Лучший ответ
program lab;
const n=3;
type
tz=record {наш список}
NN:byte;
fio:string[40];
P1:byte;
P2:byte;
P3:byte;
npro:byte; {propuski}
end;
tt=array [1..n] of tz;
var
t:tt;
procedure vvod(var xt:tt); forward; {прототип процедуры ввода}
procedure Print_propusk(var pt:tt);forward;{прототип процедуры печать}
procedure vivod(var vt:tt); forward; {прототип процедуры вывода}

procedure vvod; {процедура ввода}
var
i:byte;
begin
for i:=1 to n do
with xt do begin
writeln('vvedite nomer, FIO, ocenky po 3-m predmetam, kolichestvo propuskov po neuvajitelnoy prichini');
readln(NN);
readln(fio);
readln(P1);
readln(P2);
readln(P3);
readln(npro);
end;
end;

procedure Print_propusk; {процедура вывода студентов, имеющих}
var {пропусти по неуважительной причине}
i,j,x,y:byte;
begin
writeln;
x:=0;
for i:=1 to n do begin
y:=0;
if pt.npro>0 then {если пропусков больше чем 0}
with pt do begin
writeln(NN,'. ',fio);
writeln('kolichestvo propuskov: ',npro);
x:=1;
if (P1<3) or (P2<3) or (P3<3) then begin
write('Neudovletvoritel''nie ocenki: ');
if (P1<3) then begin
y:=1;
writeln(' ',P1);
end;
if (P2<3) then begin
y:=1;
write(' ',P2);
end;
if (P3<3) then begin
y:=1;
write(' ',P3);
end;
writeln;
end else writeln('Neudovletvoritel''nih ocenok net!');
end;

end;
if x = 0 then
writeln('Net studentov s neuvajitel''nimi propuskami');

end;

procedure vivod; {процедура вывода всех студентов}
var
i:byte;
begin
writeln('------------------------------------------------------');
writeln('| | FIO |Mat.|Fiz.|prog.|propusk|');
writeln('------------------------------------------------------');
for i:=1 to n do
with vt do
writeln('|',NN:2,' | ',FIO:23,' | ',P1:2,' | ',P2:2,' | ',P3:3,' | ',npro,’ |’);
writeln('------------------------------------------------------');
end;
{osnovnaya programma}
BEGIN
vvod(t);
Print_propusk(t);
vivod(t);
readln;
END.
Николай Асенов
Николай Асенов
51 971
Kenichi Mamoru это к чему вообще?
Выводи n-1 по битам.
Выделяешь массив целых чисел размерностью 32
кладёшь с конца в него двоичное представление заданного числа, при этом производишь выравнивание вправо
затем все единички в массиве меняй на нули, а нули на единички, прибавляешь единицу в двоичной арифметике к текущему числу и получаешь массив, содержащий дополнительный код