ЖУРНАЛ ХАКЕР

Gthtrjlbhjdobr

Спецвыпуск Хакер, номер #004, стр. 004-028-5


Найденные символы мы будем сохранять в переменную Result, поэтому для начала присвоим ей пустую строку. Теперь берем цикл for от первой до последней буквы введенной строки (она хранится в свойстве Text компоненты Edit1, а функция length возвращает нам длину введенной в нее строки - для рассмотренного примера она вернет 6, и цикл будет исполняться от одного до шести). Еще один цикл for - начиная с первого символа, просматриваем строку EngLet до конца (length(EngLet) и проверяем оператором if, не совпадают ли та буква, которую мы сейчас ищем (Form1.Edit1.Text[i]), и та, на которую сейчас указывает счетчик j внутреннего цикла (а он указывает на EngLet[j]); если совпадают - то выскакиваем из цикла при помощи оператора break, кричим во все горло "Rulezz!" и добавляем найденную буковь (RusLet[i]) к строке Result при помощи функции Concat (она берет две строки, приписывает к концу первой вторую и возвращает полученную строку. Догадайся, что вернет эта функция, если ее вызвать так: Concat( "Fu", "ck off!" ) ). Вот и все, а после того, как циклы завершатся, мы полученную строку вписываем во вторую строку ввода - в свойство Text компоненты Edit1 на форме Form1, во как.

Кидалово

Догадайся, где я тебя только что кинул!.. Догадался? Нет!

Правильный ответ такой (запусти прогу и проверь): если ввести "Dj,kf" то прога выдаст "Вобла", а если ввести "Dj,kf b gbdj", то она ответит снова "Вобла", а "gbdj" (пиво) она зажмет и не отдаст.

- Почему, нехороший человек, ты меня опять кинул? - вежливо, не ругаясь, спросишь меня ты.

- А чтобы ты внимательнее относился потом к написанию кода, потому что, чтобы найти ошибку, нужно гораздо больше времени, чем на то, чтобы написать здоровенную прогу всего с одной этой ошибкой, - отвечу тебе я.

Секрет в том, что когда мы во втором цикле ищем в строке EngLet символ "пробел", мы его там не находим, огорчаемся и добавляем в переменную Result символ RusLet[length(Englett)+1], а это за пределами нашей строки, и там лежит какая-то лажа. Поэтому поступим так - введем специальную переменную Flag - флажок, который мы будем по умолчанию поднимать, а опускать - если нашли нужный символ в строке EngLet. Потом если он окажется все еще поднятым после окончания цикла, мы будем добавлять в Result не из RusLet[i], а прямо из Form1.Edit1.Text[i] - то есть, в нашем случае, добавлять пробел там, где надо.

Итак, исправь эту часть процедуры вот так:

for i:=1 to length(Form1.Edit1.Text) do begin

Назад на стр. 004-028-4  Содержание  Вперед на стр. 004-028-6