IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Списки и удаление повторяющихся символов
NTL
сообщение 14.12.2006 0:01
Сообщение #1


Фанат Delphi
**

Группа: Пользователи
Сообщений: 72
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


Используя однонаправленные списки, помогите, пожалуйста, написать процедуру. В слове, состоящем из букв и цифр и заканчивающемся точкой, перед каждой группой одинаковых букв вставить цифру, изображающую число букв в этой группе, а саму группу заменить одной буквой. Other words, например, собббака, то выводим со3бака и т.д. Ввод-вывод списка есть smile.gif
Код
Type
  point = ^MyWord;
  MyWord = record
    ch: char;
    next: point
  end;
var
   slovo:point;
{---------------------------------------------------------------------------}
procedure Print (first: point);
Var r: point;
begin
  R:= first;
  write('C/\OBO = ');
  While r<>nil do
    begin
      Write (r^.ch);
      R:=r^.Next;
  end;
  writeln;
end;
{---------------------------------------------------------------------------}
procedure Vvod(var first:point);
var r, last:point;
begin
  first:= nil; last := nil;

   writeln('HABEPuTE C/\OBO C "." HA KOHCE ');
  repeat
      new(r);
      r^.next := nil;
      read(r^.ch);

      if first = nil then first := r
      else last^.next := r;

      last := r;
  until r^.ch = '.';

end;

ЗЫ: Спасибо, volvo, за редактирование ввода


--------------------
ICQ (384-043-857)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
NTL
сообщение 15.12.2006 16:29
Сообщение #2


Фанат Delphi
**

Группа: Пользователи
Сообщений: 72
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


Вот алгоритмически вроде написал, но не компилируется...Помогите плизззз
Код
Procedure insert_before (Var q: point; x: char);
Var r: point;
Begin
  New(r);
  r^.Next:=q^.Next;
  q^.Next:=r;
  r^.ch:=q^.ch;
  q^.ch:=x
end;
{---------------------------------------------------------------------------}
Procedure Delete(Var q: point);
Var r: point;
Begin
  r:=q^.next;
  q^:=r^;
  r^.Next:=nil;
End;
{----------------------------------------------------------------------------}
Procedure MyProc(first:point);
var r,temp:point;
       k:integer;
begin
new(r);
r:=first;
repeat
     k:=0;
     temp:=r;
     if temp = temp^.next then
       begin
          r:=temp;
           while (temp = r^.next) do
              begin
                  inc(k);
                  r:=r^.next;
                  delete(r);
              end;
           insert_before(temp,chr(ord(k)));
       end;
     r:=r^.next;
  write(r^.ch);
until r = nil;
end;


--------------------
ICQ (384-043-857)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 15.12.2006 17:11
Сообщение #3


Гость






Что именно не компилируется? Номер строки и сообщение об ошибке компилятора - в студию... У меня проходит компиляцию безошибочно. Может, вызываешь как-нибудь не так?
 К началу страницы 
+ Ответить 
Гость
сообщение 17.12.2006 12:39
Сообщение #4


Гость






Цитата(volvo @ 15.12.2006 17:11) *

Что именно не компилируется?

Я хотел сказать, что не получаю должного рез-та. Хотя по коду вроде все правильно give_rose.gif
 К началу страницы 
+ Ответить 
NTL
сообщение 20.12.2006 13:50
Сообщение #5


Фанат Delphi
**

Группа: Пользователи
Сообщений: 72
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


Ну, неужели никто не может помочь мне smile.gif Пожалуйста...


--------------------
ICQ (384-043-857)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 20.12.2006 20:37
Сообщение #6


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


покажи, как вызываешь...


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
NTL
сообщение 21.12.2006 3:21
Сообщение #7


Фанат Delphi
**

Группа: Пользователи
Сообщений: 72
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


Никак не могу додуматься...Помогите плзззз give_rose.gif
Код
begin
clrscr;
  vvod(slovo);
  print(slovo);
  MyProc(slovo);
  readkey;
  end.


--------------------
ICQ (384-043-857)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 21.12.2006 11:42
Сообщение #8


Гость






procedure myproc(first: point);
var
r, temp: point;
k: integer;

begin
r := first;
repeat
k:=1;
temp := r;
while (r^.next <> nil) and (temp^.ch = r^.next^.ch) do begin
inc(k);
delete®;
end;

if k > 1 then
insert_before(temp, chr(ord('0') + k));

r:=r^.next;
until r = nil;
end;


Вызывать - вот так:

  clrscr;
vvod(slovo);
print(slovo);
MyProc(slovo);
print(slovo);
readkey;

, потому, что тебе надо не заменить "на лету", оставив сам список неизменным, в заменить символы именно в списке, следовательно в myproc не печатается ничего, печать вызывается ПОСЛЕ...
 К началу страницы 
+ Ответить 
NTL
сообщение 22.12.2006 16:46
Сообщение #9


Фанат Delphi
**

Группа: Пользователи
Сообщений: 72
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


volvo, спасибо огромное!Опять ВЫ меня выручаете give_rose.gif Все работает!


--------------------
ICQ (384-043-857)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 13:50
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"