Помощь - Поиск - Пользователи - Календарь
Полная версия: Изменение кода
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
ds2207
Задачка: Дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных латинских букв; между соседними словами – запятая или не менее одного пробела, за последним словом - точка.
Напечатать те слова последовательности, которые отличны от последнего слова,
предварительно преобразовав каждое из них по следующему правилу:
- оставить в слове только первые вхождения каждой буквы.

Код:

Код
program q;

var
  s: string;
  i: integer;
  m: set of char;

  function posl(x: string): string;
  begin
    while (pos(' ', x) > 0) do
    begin
      Delete(x, 1, pos(' ', x));
    end;
    Delete(x, pos('.', x), 1);
    posl := x;
  end;

begin
  readln(s);
  while pos(' ', s) > 0 do
  begin
    m := [];
    if (copy(s, 1, pos(' ', s) - 1) <> posl(s)) and (pos(' ', s) > 1) then
      for i := 1 to pos(' ', s) do
      begin
        if not (s[i] in m) then
          Write(s[i]);
        include(m, s[i]);
      end;
    Delete(s, 1, pos(' ', s));
  end;
end.




Переделайте,пожалуйста код,чтобы в нём отсутствовали функции



.
Федосеев Павел
Я так понимаю, что ты бросаешь сообщения "на удачу"="мне повезёт".

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

Или, если трудно, если это не твоё, то смени специальность или подумай, может в тебе другие наклонности - например, ты хороший повар, кафельщик, бетонщик, менеджер по продажам, врач.
ds2207
Я бросаю эти сообщения не "на удачу",а в надежде найти помощь,т.к. в этой сфере я совсем недавно и как работают функции не понимаю.Я понимаю отдельные участки кода,но полностью изменить этот код я не могу,кроме того у меня очень мало времени,поэтому я и обратился сюда за помощью.Что же касается "если трудно, если это не твоё" я вам скажу вот что:во-первых я не нуждаюсь в вашем,безусловно,глупом совете,а во-вторых "если трудно",то нужно идти до конца,а не сдаваться,как предлагаете вы.Всё начинается с малого.Далеко не у всех людей всё получается с самого начала.
Федосеев Павел
Ну вот и начни с малого.
Отформатируй текст исходников для облегчения понимания - я предлагаю форматтер исходного кода JCF - по этой и этой ссылкам. Очень удобно, да и преподавателю сдавать не стыдно (они обычно фыркают, если нет отступов).
После этого "проявится" структура программы:
program q;

var
s: string;
i: integer;
m: set of char;

function posl(x: string): string;
begin
while (pos(' ', x) > 0) do
begin
Delete(x, 1, pos(' ', x));
end;
Delete(x, pos('.', x), 1);
posl := x;
end;

begin
readln(s);
while pos(' ', s) > 0 do
begin
m := [];
if (copy(s, 1, pos(' ', s) - 1) <> posl(s)) and (pos(' ', s) > 1) then
for i := 1 to pos(' ', s) do
begin
if not (s[i] in m) then
Write(s[i]);
include(m, s[i]);
end;
Delete(s, 1, pos(' ', s));
end;
end.

Теперь видно, хоть от чего ты хочешь избавиться.
Федосеев Павел
Я не пойму условие задачи. Что нужно:
1. сначала нужно найти преобразованное последнее слово, запомнить его в переменной. Потом выделять слова, преобразовывать, сравнивать с последним и в случае неравенства выодить на печать.
или
2. нужно выделять слова, сравнивать с последним, и если различны, то произвести преобразование и вывести на печать?
ds2207
Второе: нужно вывести по одной(первой) букве каждого,различного с последним слова
Федосеев Павел
Тогда изменения будут заключатся в ведении новой переменной LastWord: string
Перед основным циклом найдёшь последнее слово LastWord и в цикле будешь сравнивать не с posl, а с LastWord.
ds2207
Большое спасибо)
Федосеев Павел
Справился? Или это сарказм?
ds2207
Цитата(Федосеев Павел @ 29.12.2014 1:07) *

Справился? Или это сарказм?

Нет,не сарказм,справился.Ещё раз спасибо.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.