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

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

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

 
 Ответить  Открыть новую тему 
> Списки и удаление повторяющихся символов
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






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


Гость






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

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

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


Фанат Delphi
**

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

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


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


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


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

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

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


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


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


Фанат Delphi
**

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

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


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


--------------------
ICQ (384-043-857)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 не печатается ничего, печать вызывается ПОСЛЕ...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Фанат Delphi
**

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

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


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


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

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

 





- Текстовая версия 22.10.2020 16:19
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name