Для начала переведем -16 в двоичную СС. Мы знаем ,что 16 это 2^4, значит двоичная запись будет: 10000(единица и 4 нуля).Теперь сделаем из прямого кода обратный(заменим единицы нулями и наоборот) и получим 01111(незначщий ноль можно убрать).
Теперь переведем -73 в двоичную СС, для этого будем делить 73 на 2 и записывать остатки от деления (остатки должны быть <2 и >=0), а затем записать число задом наперед ( смотрите фото ); При переводе получили: 1001001(прямой код) переведем в обратный -->0110110(первый незначщий ноль можно убрать);
ответ: -16=1111
-73=110110
===== PascalABC.NET ====
begin
var a := ArrRandom(25, 20, 100);
a.Println.SortedDescending.Println
end.
===== Free Pascal =====
const
n = 25;
var
a: array[1..n] of integer;
i, j, t: integer;
begin
randomize;
for i := 1 to n do
begin
a[i] := random(81) + 20;
write(a[i], ' ')
end;
writeln;
// пузырьковая сортировка по убыванию
for i := n - 1 downto 1 do
for j := 1 to i do
if a[j] < a[j + 1] then
begin
t := a[j];
a[j] := a[j + 1];
a[j + 1] := t
end;
// вывод результатов
for i := 1 to n do
write(a[i], ' ');
end.
На самом деле, n - i — смещение относительно первой буквы, которое будет иметь i-тая в алфавите буква после шифровки. Для того, чтобы получить номер буквы, нужно прибавить к смещению порядковый номер первой буквы. В случае с обычным алфавитом — 1. (А ещё можно делать наоборот: искать отрицательное смещение и прибавлять номер последнего элемента)
С программой все чуть-чуть посложнее (но не так, чтобы сильно). Номер символа в ней определяется не положением в алфавите, а используемой кодировкой. Обычно, символы идут в таблице кодировки друг за другом, но есть и исключения. Например, буква "ё" обычно идет отдельно от остального алфавита.
Программа читает стандартный ввод (клавиатура) построчно.
Если буквы латинские, достаточно простой арифметики с кодами символов и перевод результата в символьных формат.
Для русских символов выделена переменная, содержащая алфавит в правильном порядке (хотя можно было бы извернуться и решить первым но зачем?). Если символ подходит входит в один из двух алфавитов, то шифруется. Нет - выводится без изменений.
Программа будет работать до тех пор пока не будет введен символ с кодом 0 (Ctrl + @).
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace {
class Program {
static void Main(string[] args) {
string buff,
alfa = "", //алфавит
key = new string(alfa.ToCharArray().Reverse().ToArray());//перевернутый алфавит
bool isEnd = false;
while (!isEnd) {
Console.Write("Введите текст: ");
buff = Console.ReadLine();
Console.Write("Результат: ");
for (int i = 0; i < buff.Length; ++i) {
if (buff[i] == '\0') isEnd = true; //Выход?
if (buff[i] >= 'a' && buff[i] <= 'z')
Console.Write((char)('z' - buff[i] + 'a'));
else if (buff[i] >= 'A' && buff[i] <= 'Z')
Console.Write((char)('Z' - buff[i] + 'A'));
else if (buff[i] >= 'а' && buff[i] <= 'я' || buff[i] == 'ё')
Console.Write(key[alfa.IndexOf(buff[i])]);
else if (buff[i] >= 'А' && buff[i] <= 'Я' || buff[i] == 'Ё') Console.Write(key[alfa.ToUpper().IndexOf(buff[i])].ToString().ToUpper());
else
Console.Write(buff[i]);
}
Console.WriteLine(); Console.WriteLine();
}
}
}
}