Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2010, 01:21   #1
rowlin
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 31
По умолчанию список (в чем ошибка ?)

Доброго времени суток!
задача :
cоздать список и заменить вхождения Е1 на Е2
вроде написал :
Код:
program popitka003;
uses crt;
type Tinf=char;
      tp=^el;
      el=record
           data: Tinf ;
           next: tp;
      end;

var head : tp;
   l,t   : char;

procedure vkln(var spis1 : tp;znach:TInf);
var
   tmp : tp;
begin
     if spis1=nil then  begin
        GetMem(spis1,sizeof(el));
        tmp:=spis1;
     end
     else
     begin
        tmp:=spis1;
        while tmp^.next<>nil do
           tmp:=tmp^.next;
        GetMem(tmp^.next,sizeof(el));
        tmp:=tmp^.next;  end;
   tmp^.next:=nil;
   tmp^.data:=znach;
end; { AddElem }

procedure enter(var head : tp );
var s :char;pred : tp;
begin
   new(head);
   head^.data:='*';
   head^.next:=nil;
   pred:=head;
   writeln('введите символы ,конец списка-:*:');
   repeat
      read(s);
      if s <>'*' then
         vkln(pred,s);
      until s='*'
end; { enter }
procedure enter(var head : tp );
var s :char;pred : tp;
begin
   new(head);
   head^.data:='*';
   head^.next:=nil;
   pred:=head;
   writeln('введите символы ,конец списка-:*:');
   repeat
      read(s);
      if s <>'*' then
         vkln(pred,s);
      until s='*'
end; { enter }

procedure print(z :tp );
begin
   if z=nil then begin write('end.');
      exit;
   end;
   while z<>nil do
   begin
      write(z^.data,' ' );
      z:=z^.next
   end;
end; { print }

procedure zamena(el : tp;chn,e:Tinf );
begin
   el:=head;
   while el<>nil do
   begin
      if el^.data=chn then
         el^.data:=e
      else
         el:=el^.next
   end;
end; { zamena }

begin
   writeln('welcome');
   enter(head);
   print(head);
   writeln('vvedite zna4enie ,kotoroe neobxodimo zamenit`');
   readln(l);
   writeln('pomenjat` na..:');
   readln(t);
   zamena(head,l,t);
   print(head)
end.
но при запуске выходит
Код:
Starting program: /home/****/src/FPC/1111
welcome                                                                        
 введите символы,конец  списка-:*:{тут  ввод 'error*'}                   
* e                                                                                             |
 r                                                                                              |
 r                                                                                              |
 o                                                                                              |
 r                                                                                              |
 vvedite zna4enie ,kotoroe neobxodimo zamenit` r                                             
pomenjat` na..:
o                                                                                               
* e o r o r o o o r o 
 {^вот вывод:eek:}                                                                       
Program exited normally.
не подскажите в чем ошибка ??

Последний раз редактировалось Stilet; 15.12.2010 в 09:12.
rowlin вне форума Ответить с цитированием
Старый 15.12.2010, 16:16   #2
rowlin
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 31
По умолчанию

xmmm...возможно все дело в gdm <по-идее должена же работать правильно>
не могли бы вы откомпилить и выполнить в win-fpc (возможно ,такой проблемы не будет,хотя ...) ?
rowlin вне форума Ответить с цитированием
Старый 15.12.2010, 16:20   #3
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

В процедуре enter делается read(s), а при тестировании символы вводятся на отдельной строке. Не факт, что ошибка в этом, но всё же.
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума Ответить с цитированием
Старый 16.12.2010, 01:35   #4
rowlin
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 31
По умолчанию

OCTAGRAM
да я вкурсе насчет этого(сократил с целью экономия места)... -ввод char через enter
но меня более тревожит вывод - должна производиться замена символа ,а не вставке между

но ..все-же спасибо за содействие
rowlin вне форума Ответить с цитированием
Старый 16.12.2010, 09:32   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Предлагаю кое-что усовершенствовать:
Код:
type Tinf=char;
      tp=^el;
      el=record
           data: Tinf ;
           next: tp;
      end;

var head : tp;   s:string;
   l,t   : char;

procedure vkln(var spis1 : tp;znach:TInf);
var
   tmp : tp;
begin
     if spis1=nil then  begin
        GetMem(spis1,sizeof(el));
        tmp:=spis1;
     end
     else
     begin
        tmp:=spis1;
        while tmp^.next<>nil do
           tmp:=tmp^.next;
        GetMem(tmp^.next,sizeof(el));
        tmp:=tmp^.next;  end;
   tmp^.next:=nil;
   tmp^.data:=znach;
end; { AddElem }

procedure enter(var head : tp );
var s :string;pred : tp;i:integer;
begin
   new(head);
   head^.data:='*';
   head^.next:=nil;
   pred:=head;
   writeln('введите символы как строку');
   readln(s);
   for i:=1 to length(s) do begin
         vkln(pred,s[i]);
   end
end; { enter }

procedure print(z :tp );
begin
   if z=nil then begin write('end.');
      exit;
   end;
   while z<>nil do
   begin
      write(z^.data,' ' );
      z:=z^.next
   end;
end; { print }

procedure zamena(el : tp;chn,e:Tinf );
begin
   el:=head;
   while el<>nil do
   begin
      if el^.data=chn then       el^.data:=e;
      el:=el^.next
   end;
end; { zamena }

begin
   writeln('welcome');
   enter(head);
   print(head);
   writeln('vvedite zna4enie ,kotoroe neobxodimo zamenit`');
   readln(l);
   writeln('pomenjat` na..:');
   readln(t);
   zamena(head,l,t);
   print(head);
   readln;
end.
Смысл виден?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.12.2010, 21:21   #6
rowlin
Пользователь
 
Регистрация: 14.12.2010
Сообщений: 31
По умолчанию

Stilet- спасибо что откликнулись
теперь все работает =)
жаль, лабу уже сдал ...- сменив char на intreger
rowlin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В чем ошибка? bwitcher Помощь студентам 8 11.12.2010 14:46
Графы. Хранение хранить список смежностей как хеш-таблицу. Чем не идеал? Kn793 Свободное общение 7 08.11.2010 17:55
В чем ошибка gheorge1989 Microsoft Office Access 8 27.10.2009 22:45
В чем ошибка? AleNa666 Паскаль, Turbo Pascal, PascalABC.NET 2 28.04.2009 14:28
В чем ошибка ? Droid Общие вопросы Delphi 13 03.05.2008 18:17