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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2009, 23:21   #1
ge4r
Пользователь
 
Регистрация: 25.03.2009
Сообщений: 18
По умолчанию Работа со списками (паскаль)

нужна помощь
из исходного списка путем копирования создать 2 списка,в 1должны быть те слова которые начинаются на заданную комбинацию букв,во 2ом-которые заканчиваюца на эту комбинацию. исходный список и искомая комбинация вводится с клавиатуры
ge4r вне форума Ответить с цитированием
Старый 25.03.2009, 23:54   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

нужна помощь?... или "сделайте за меня"? если второе, то в разделе фриланс Вам с огромной радостью сделают (правда, за деньги)...

а если нужна помощь - то давайте Ваши наработки:
описание списка, как Вы его заполняете, как проверяете совпадение слов с заданной комбинацией букв...
что не получается, с чём проблемы?...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.03.2009, 09:04   #3
ge4r
Пользователь
 
Регистрация: 25.03.2009
Сообщений: 18
По умолчанию

Код:
type PList=^First;
    First=record
	info:string;
	next,last: PList;
ListB,ListE:Plist;
end;
procedure add (var L:PList);
var s:string;
newElem:Plist;
M:set of char;
N,i,count:integer;
begin

M:=['A'..'Z','a'..'z'];
repeat
count:=0;
writeln ('input element');
readln (s);
N:=length(s);
for i:=1 to N do begin
	if s[i] in M then inc(count);
	end;
	if count <> n then writeln('{not added}');
	if count = n  then begin

	writeln ('{added}');
	new(newElem);
	newElem^.next:=nil;
	newElem^.info:=s;
	 if L=nil then L:=newElem
	  else L^.last^.next:=newElem;
	L^.last:=newElem;
	end;
until s='';
end;
var L:Plist;
begin
add (L);
end.
для начала нужна помощь с реализацией заполнения исходного списка,вот код

Последний раз редактировалось ge4r; 26.03.2009 в 09:32.
ge4r вне форума Ответить с цитированием
Старый 26.03.2009, 10:24   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Так, предлагаю так вводить:
Код:
type 
 PItem=^TItem
 TItem=record
   s:string;
   Next,Prev:pitem
 end;
var first,Curent,NewI:PItem;
begin
 repeat
  readln(s);
  new(NewI);
 if First=nil then First:=NewI;
 NewI^.s:=s;
 NewI^.Prev:=Curent;
 if Curent<>nil then Curent^.Next:=New
 Curent:=NewI;
 until s='';
end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.03.2009, 10:41   #5
ge4r
Пользователь
 
Регистрация: 25.03.2009
Сообщений: 18
По умолчанию

спасиб,буду дальше писать...
ge4r вне форума Ответить с цитированием
Старый 28.03.2009, 13:25   #6
ge4r
Пользователь
 
Регистрация: 25.03.2009
Сообщений: 18
По умолчанию

у меня еще вопрос...как двигаца по списку?
while"ом?

далее будет просто
Код:
if pos(<нужная комбинация>,curent.s)=1 then <1ый список>:= curent;
if pos(<нужная комбинация>,curent.s)=length(слова из списка)-length (комбинации) then <2ой список>:= curent;
?
ge4r вне форума Ответить с цитированием
Старый 28.03.2009, 14:49   #7
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

двигаться так: если ListB - это голова списка-очереди, а ListE - Это указатель на последний элемент, то:

Код:
ListE:=ListB;
while ListE<>nil do
begin
....
ListE:=ListE^.Plist
end.
capta1n вне форума Ответить с цитированием
Старый 28.03.2009, 15:42   #8
ge4r
Пользователь
 
Регистрация: 25.03.2009
Сообщений: 18
По умолчанию

а в дебаге нельзя просматривать списки,которые получаюца?
ge4r вне форума Ответить с цитированием
Старый 28.03.2009, 19:29   #9
ge4r
Пользователь
 
Регистрация: 25.03.2009
Сообщений: 18
По умолчанию

посмотрите плз код:
Код:
type
PList=^TList;
TList=record
 s:string;
 Next,Prev:PList;
end;

procedure print (z:PList);
begin
while z<>nil do begin
 write(z^.s,' ');
 z:=z^.next;
 end;
end;

var list1,list2,first,Curent,NewI:PList;
k,s:string;
begin
writeln('input combination');
readln(k);
repeat {тут идет заполнение списка словами}
writeln ('input word to add');
readln(s);
new(NewI);
if First=nil then First:=NewI;
NewI^.s:=s;
NewI^.Prev:=Curent;
if Curent<>nil then Curent^.Next:=NewI;
Curent:=NewI;
until s='';
{тут List1-список,в который кидаем слова начинающиеся на комбинацию,List2-закнчивающиеся}
curent:=first;
while curent<>nil do begin {тут проверяем позом все слова из исходного списка и раскидываем по 2ум спискам,ошибка кажется где то тут}
if pos(k,curent^.s)=1 then begin
new(List1);
List1:=curent;
end;
if pos(k,curent^.s)=length(curent^.s)-length (k)+1 then begin
new(List2);
List2:=curent;
end;

curent:=curent^.next;
end;
print (List1);{тут идет вывод конечных списков}
writeln(' ');
print (List2);

end.
косяк вот в чем...тест:
na (искомая комбинация);
naaa
ababa
klkls
aaana

мой код выводит как 1ый список naaa ababa klkls а как 2ой aaana
с чего он запихивает туда ababa klkls не пойму...

Последний раз редактировалось ge4r; 28.03.2009 в 21:14.
ge4r вне форума Ответить с цитированием
Старый 29.03.2009, 12:47   #10
ge4r
Пользователь
 
Регистрация: 25.03.2009
Сообщений: 18
По умолчанию

вот,для будущих поколений

Код:
type
  PList=^TList;
  TList=record
    s: string;
    Next, Prev: PList;
  end;

procedure print(z: PList);
begin
  while z<>nil do begin
    write(z^.s,' ');
    z:=z^.next;
  end;
end;

function add_item(st: string;
		  const p_next, p_prev: PList): Plist;
var p:PList;
begin
  new (p);
  with p^ do begin
    s:=st;
    next:=P_next;
    prev:=P_prev;
  end;
  add_item:=p;
end;

procedure append_list (var ps,pf:Plist;s:string);
var p:PList;
begin
  P := add_item(s,nil,pf);
  if ps=nil then ps:=p
  else pf^.next:=p;
  pf:=p;
end;

var
  List1, Listf1, List2, Listf2, first,Curent,NewI:PList;
  k, st:string;
  len:integer;
begin
  first := nil; curent := nil;
  readln(k);
  repeat
    readln(st);
    append_list(first,curent,st);
  until st='';
  Len := length(k);

  List1 := nil; Listf1 := nil; List2 := nil; Listf2 := nil;
  curent := first;
  while curent <> nil do begin
    with curent^ do begin
      if copy(s, 1, Len) = k then
	append_list(List1, Listf1, s);
      if copy(s, length(s) - Len + 1, Len) = k then
	append_list(List2, Listf2, s);
    end;
    curent := curent^.next;
    end;
  print (list1);
  writeln;
  print (List2);
end.
ge4r вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста со списками... Horknee Паскаль, Turbo Pascal, PascalABC.NET 10 22.12.2008 16:21
Работа со списками Dimo444ka Помощь студентам 2 01.06.2008 16:34
С++ - задача со списками Галечка Помощь студентам 4 08.11.2007 23:05
Работа со списками. radist Паскаль, Turbo Pascal, PascalABC.NET 4 07.05.2007 00:05