Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > что делает каждая строка данного кода


Автор: natasha92 21.10.2009, 05:45
Напишите пожалуйста,что делает каждая строка этого кода. Немного не понимаю.
Код

var
    count, i, m , j: integer;
    input : string;
    s, t : string;

begin
    count := 0;
    write('Vvedite stroky: ');
    readln(input);
    i:= length(input) - 1;
    while input[i] <> ' ' do dec(i);
    s:= copy(input, i + 1, length(input) - i - 1);
    for j:= 1 to i do
    begin
      if input[j] <> ' ' then
        t:= t + input[j]
      else
      begin
        if (t <> ' ') and (t <> s) then
        writeln('  ', copy(t, 1, length(t) - 1));
        t:= ' ';
      end;
    end;
    readln;
end.

Автор: MetalFan 21.10.2009, 18:17
на лекции надо было ходить. и при чем тут раздел "кроссплатформенные технологии"?

Автор: Robus 1.11.2009, 17:04
Код

//Выделяет память
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.


Прости, но иногда убивают такие вот вопросы. Человек может не знать чего-то, но он не имеет право не знать НИЧЕГО !!!

Автор: volvo877 1.11.2009, 17:21
Цитата(Robus @  1.11.2009,  16:04 Найти цитируемый пост)
Выделяет память 4 раза по 4 байта, с гранулярностью 4 байта
Дальше можно не читать. Бред. На моем компиляторе выделяется 4 раза по 2 байта, что я делаю не так? 
Цитата(Robus @  1.11.2009,  16:04 Найти цитируемый пост)
Прости, но иногда убивают такие вот вопросы.
Такие ответы убивают не меньше. 

Автор: Robus 1.11.2009, 17:47
Цитата(volvo877 @  1.11.2009,  17:21 Найти цитируемый пост)
 делаю не так? 

Компилируете под не 32-ух битный размер данных. Всё вы делаете так как надо.


Цитата(natasha92 @  21.10.2009,  05:45 Найти цитируемый пост)
Напишите пожалуйста,что делает каждая строка этого кода. Немного не понимаю.

Вы напишите что вы хотите получить ? Поскольку либо программа не доделанная, либо задача идиотская ... Результат разбивает на слова отдиляемые пробелом, и высвечивает каждое слово в строке на экране, но почему-то на выкидывается один символ каждого слова, плюс ко всему этому последнее слова так же выкидывается. Странная задача! Если в задаче надо отобразить каждое слово в строке, то делается это всё на много проще.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)