Все выпуски  

RFpro.ru: Программирование на Delphi и Lazarus


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Академик
Рейтинг: 10620
∙ повысить рейтинг »
Орловский Дмитрий
Статус: Мастер-Эксперт
Рейтинг: 7204
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2309
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Delphi и Lazarus

Номер выпуска:1628
Дата выхода:31.05.2012, 23:00
Администратор рассылки:Киселёва Алёна aka Verena (Академик)
Подписчиков / экспертов:140 / 94
Вопросов / ответов:1 / 2

Консультация # 186228: Уважаемые эксперты! Пожалуйста, ответьте на вопрос: Помогите, пожалуйста,выполнить задания в делфи (консольное приложение и пояснение в каждой строчке).Задания нужно выполнить до 30 включительно: 1)Дана строка символов. Известно, что первый символ отличен от пробела и что среди остальных сим-волов имеется хотя бы один пробел. Рассматриваются ...


Консультация # 186228:

Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
Помогите, пожалуйста,выполнить задания в делфи (консольное приложение и пояснение в каждой строчке).Задания нужно выполнить до 30 включительно:
1)Дана строка символов. Известно, что первый символ отличен от пробела и что среди остальных сим-волов имеется хотя бы один пробел. Рассматриваются символы s1,..., sn - символы, предшествующие первому пробелу. Преобразовать последовательность s1,..., sn, удалив из каждой группы идущих подряд цифр, в которой более двух цифр и которой предшествует точка, все цифры, начиная с третьей (напри-мер, ab+0.1973-1.1 преобразуется в ab+0.19-1.1).
2)Программа. Дан текст, за которым следует точка. В алфавитном порядке напечатать (по разу) все строчные русские гласные буквы, входящие в этот текст.
3)на делфи написана игра Пятнашки,дан алгоритм и нужно построить блок схему по этому алгоритму:
1) Добавляем стартовую клетку в открытый список.
2) Повторяем следующее:
a) Ищем в открытом списке клетку с наименьшей стоимостью F. Делаем ее текущей клеткой.
b) Помещаем ее в закрытый список. (И удаляем с открытого)
c) Для каждой из соседних 8-ми клеток ...
∙ Если клетка непроходимая или она находится в закрытом списке, игнорируем ее. В противном случае делаем следующее.
∙ Если клетка еще не в открытом списке, то добавляем ее туда. Делаем текущую клетку родительской для это клетки. Расчитываем стоимости F, G и H клетки.
∙ Если клетка уже в открытом списке, то проверяем, не дешевле ли будет путь через эту клетку. Для сравнения используем стоимость G. Более низкая стоимость G указывает на то, что путь будет дешевле. Если это так, то меняем родителя клетки на текущую клетку и пересчитываем для нее стоимости G и F. Если вы сортируете открытый список по стоимости F, то вам надо отсортировать свесь список в соответствии с изменениями.
d) Останавливаемся если:
∙ Добавили целевую клетку в открытый список, в этом случае путь найден.
∙ Или открытый список пуст и мы не дошли до целевой клетки. В этом случае путь отсутствует.
3) Сохраняем путь. Двигаясь назад от целевой точки, проходя от каждой точки к ее родителю до тех пор, пока не дойдем до стартовой точки. Это и будет наш путь.

Дата отправки: 28.05.2012, 22:08
Вопрос задал: Бондаренко Сергей Николаевич (Посетитель)
Всего ответов: 2
Страница онлайн-консультации »


Консультирует Киселёва Алёна aka Verena (Академик):

Здравствуйте, Бондаренко Сергей Николаевич!
Соответственно правилам, при наличии в вопросе более чем одной задачи эксперт в праве ответить на любую по выбору. Отвечу на первую.

© Цитата: Бондаренко Сергей Николаевич
Дана строка символов. Известно, что первый символ отличен от пробела и что среди остальных сим-волов имеется хотя бы один пробел. Рассматриваются символы s1,..., sn - символы, предшествующие первому пробелу. Преобразовать последовательность s1,..., sn, удалив из каждой группы идущих подряд цифр, в которой более двух цифр и которой предшествует точка, все цифры, начиная с третьей (напри-мер, ab+0.1973-1.1 преобразуется в ab+0.19-1.1).

Для поиска пробела в строке пользуемся функцией pos (<подстрока>,<строка>). Она возвращает индекс первого вхождения подстроки в строку. Для удаления символов используем процедуру delete (<строка>,<позиция>,<количество>). Остальное должно быть ясно из комментариев.
Код :
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

   Var s: string;  //строка
      ps, pd, i: integer; //позиция пробела, позиция точки, текущий символ
begin
  readln (s);    //получаем строку
  ps:= pos (' ', s); //получаем позицию пробела
  i:= 1;     //начинаем с первого символа
  while (i<ps) do  //пока не дойдём до пробела
  begin
    while (i<ps) and (s[i]<>'.') do inc(i);  //доходим до первой точки
    pd:= i;  //запоминаем позицию точки
    inc (i);  //переходим на символ за точкой
    while (i<ps) and (ord(s[i])>=48) and (ord(s[i])<= 57) do inc(i);
    //пока не кончится строка и текущий символ - цифровой, проходим дальше
    if (i-pd-1>2) then begin   //если число цифр больше двух
      delete (s, pd+3, i-pd-3);  //удаляем все с третьей
      ps:= ps-(i-pd-3);  //уменьшаем позицию пробела на число удалённых символов
    end;
  end;
  writeln ('Result: ', s); //выводим результат
  readln;  //чтобы не закрылось окно
end.

Проверено в Delphi 7.
Удачи!

Консультировал: Киселёва Алёна aka Verena (Академик)
Дата отправки: 31.05.2012, 00:08
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует sir Henry (Старший модератор):

Здравствуйте, Бондаренко Сергей Николаевич!
Ответ на вопрос №2. Код в приложении.
Использование: в функцию OnlyLowerSimbols() в качестве параметра передаётся любая строка текста. Каждая буква из этой строки текста сверяется с набором русских строчных букв и заносится в хранилище букв типа TStringList. Буква проверяется на существование в хранилище с помощью функции CheckExists() - если такая уже есть, то буква не заносится, если нет, то заносится. После того, как все буквы занесены, происходит их сортировка с помощью встроенного в хранилище метода Sort.
Вывод строки отсортированных букв осуществляется любым удобным для Вас способом (т.к. способов очень много, я не стал этого делать в программе), например:
Memo1.Lines.Add(OnlyLowerSimbols(Какая-то_строка_текста));

Приложение:

Консультировал: sir Henry (Старший модератор)
Дата отправки: 31.05.2012, 11:48
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное