Лидеры рейтинга

ID: 226425

Konstantin Shvetski

Мастер-Эксперт

944

Россия, Северодвинск


ID: 259041

Алексеев Владимир Николаевич

Мастер-Эксперт

596

Россия, пос. Теплоозёрск, ЕАО


ID: 401284

Михаил Александров

Академик

351

Россия, Санкт-Петербург


ID: 137394

Megaloman

Мастер-Эксперт

308

Беларусь, Гомель


ID: 400669

epimkin

Профессионал

292


ID: 400484

solowey

Профессор

95


ID: 401888

puporev

Профессор

52

Россия, Пермский край


8.1.6

02.01.2021

JS: 2.2.2
CSS: 4.2.0
jQuery: 3.5.1


 

Создание программ на языках Pascal, Delphi и Lazarus.

Администратор раздела: Зенченко Константин Николаевич (Старший модератор)


Зенченко Константин Николаевич
Статус: Старший модератор
Рейтинг: 249
Gluck
Статус: 6-й класс
Рейтинг: 220
puporev
Статус: Профессор
Рейтинг: 52
 

Перейти к консультации №:
 

Консультация онлайн # 187480
Раздел: • Pascal / Delphi / Lazarus
Автор вопроса: Aleksandrkib (Посетитель)
Дата: 23.06.2013, 09:37
Поступило ответов: 1

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:

Дан текст. Найти слово в тексте, отличающееся не более, чем на два символа. Например: ищем корова - находим крова, карова, кроова и т.д.
Программа на языке Turbo Pascal.

Состояние: Консультация закрыта

Здравствуйте, Aleksandrkib!

Ожидается, что формат строки -- слова, разделённые пробелом.

function cutChar(s: String; p: Integer): String;
var
    str, ing: String;
begin
    str := copy(s, 1, p-1);
    ing := copy(s, p+1, length(s));
    cutChar := concat(str, ing);
end;

function sameStrings(s1: String; s2: String): boolean;
var
    len, i, p: Integer;
begin
    sameStrings := false;

    len := length(s1);
    if len <> length(s2) then exit;

    for i := 1 to len do
    begin
        p := pos(s1[1], s2);
        if p = 0 then exit;

        sameStrings := sameStrings(cutChar(s1, 1), cutChar(s2, p));
        if sameStrings = false then exit;
    end;

    sameStrings := true;
end;

function difference(s1: String; s2: String): String;
var
    len, i, p: Integer;
    s: String;
begin
    difference := '';

    if length(s1) < length(s2) then
    begin
        s := s1;
        s1 := s2;
        s2 := s;
    end;

    if length(s2) = 0 then
    begin
        difference := s1;
        exit;
    end;

    p := pos(s1[1], s2);
    if p = 0 then
        difference := concat(difference, s1[1], difference(cutChar(s1, 1), s2))
    else
        difference := concat(difference, difference(cutChar(s1, 1), cutChar(s2, p)));
end;

procedure writeDifferNoMore(text: String; word: String; dist: Integer);
var
    next: String;
    spacePos, p: Integer;
    diff: String;
begin
    while length(text) > 0 do
    begin
        spacePos := pos(' ', text);
        if spacePos > 0 then
            p := spacePos
        else
            p := length(text)+1;
        next := copy(text, 1, p-1);

        diff := difference(next, word);
        if length(diff) <= dist then
            write(next, ' ');
        delete(text, 1, p);
    end;
end;


var
    text, word: String;
begin
    //write(difference('abc', 'a1b2c'));
    write('Введите текст: '); readln(text);
    write('Введите слово: '); readln(word);
    writeDifferNoMore(text, word, 2);
end.


Примеры вывода:

Цитата:
Введите текст: крова карова кроова ололо пышь пышь
Введите слово: корова
крова карова кроова

Цитата:
Введите текст: можно грабить корованы
Введите слово: корова
корованы


Консультировал: Чекменёв Александр Анатольевич (Профессор)
Дата отправки: 23.06.2013, 20:15

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 187480

Чекменёв Александр Анатольевич

Профессор

ID: 399103

1

= общий = |  23.06.2013, 10:18 |  цитировать |  профиль |  личное сообщение
Aleksandrkib:

Добрый день. Что представляет из себя "текст"?

Boriss

2

= общий = |  23.06.2013, 11:30
Aleksandrkib:

То есть, или буква другая есть (нет) или порядком букв отличаются? Как и куда (в файл или на экран) выводить результат? Ну а текст - это текстовый файл в "паскалевском смысле"

Aleksandrkib

Посетитель

ID: 317729

3

= общий = |  23.06.2013, 12:54 |  цитировать |  профиль |  личное сообщение

Разместил задачу по просьбе другого человека. Сам особо "не в теме".
Пусть слово отличается порядком букв, а результаты выводятся на экран.
А там пусть сам разбирается. К Вам никаких претензий.

Boriss

4

= общий = |  23.06.2013, 13:07
Aleksandrkib:

Понятно. Если что не так - скажите, исправим

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.