Код | //Выделяет память var //Выделяет память 4 раза по 4 байта, с гранулярностью 4 байта count, i, m , j: integer; //Выделяет память 6 байт input : string; //Выделяет память 2 раза по 6 байт s, t : string;
//Компилятор начинает понимать "ЭТО" код програмы begin //Затирает 4 байта памяти ноликами count := 0; //Записывает в поток IOStrem, 16 байт write('Vvedite stroky: '); //Читает из потока IOStrem байты, до появления кода 13. Записывает, всё что прочитает в точку памяти Addr(input) readln(input); //Затирает 4 байта данных значением лежащим по адресу Addr(input)-4 i:= length(input) - 1; //Начинается цикл, в котором учавствуют переменная лежащая по адресу Addr(i) и набором байт лежащим по адресу Addr(input) while input[i] <> ' ' do dec(i); //Копируются данные из адреса Addr(input) в адрес Addr(s), и стирается 4 байта по адресу Addr(s)-4 значением (length(input) - i - 1) s:= copy(input, i + 1, length(input) - i - 1); //Начинается цикл, в котором учавствет точка памяти Addr(j), длинной 4 байта и точка памяти Addr(i) также длиной 4 байта for j:= 1 to i do //Начало начала цикла begin //Проверка значения точки памяти Addr(input) на 0 if input[j] <> ' ' then //Если таки там было 0, то дописать в точку памяти (Addr(t)+PDWORD(Addr(t)-4)^) длинной 1 байта и значение точки памтяи Addr(input[j]) длиной 1 байт t:= t + input[j] //Начало если то, что проверяти таки не НОЛЬ else //Начало начала если то, что проверяти таки не НОЛЬ begin //Проверяем значение точки памтяи (Addr(t)-4) длинной 4 байта на НОЛЬ, а также сравнить данные точки памтяи Addr(t) и Addr(s) длинной (PDWORD(Addr(t)-4)^) if (t <> ' ') and (t <> s) then //Если удалось сравнить перечисленное выше на 2 и 0 десятых строчки выше, то записать данные в файловый поток IOStream код пробела, а так же данные в адресе Addr(t), размером лежащим по адресу (Addr(t)-4) но на еденичку меньше, что бы мало не показалось writeln(' ', copy(t, 1, length(t) - 1)); //Записать по адресу Addr(t) число 32, и по адресу (Addr(t)-4) четыре байтика нулей t:= ' '; //Окончание того, что начиналось если то, что проверяти таки не НОЛЬ end; //Генерация в коде JUMP'а, на адресс begin'а, что определял начало цикла end; //Чтение из IOStream'а данных, ожидая числа 13 readln; //Конец понимания компилятором, что "ЭТО" было кодом end.
|
Прости, но иногда убивают такие вот вопросы. Человек может не знать чего-то, но он не имеет право не знать НИЧЕГО !!! |