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

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

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

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Многосвязные списки, Помощь
D1ma
сообщение 1.06.2009 19:15
Сообщение #21


Новичок
*

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

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


Цитата(Lapp @ 1.06.2009 19:29) *

Сдается мне, что ты и не пытался уточнить.. Ладно, твое дело, в конце концов.
Лови.
PROCEDURE MIN(A:LINK;VAR B:WORD);
VAR
I:WORD;
BEGIN
B:=256;
i:=0;
WHILE A<>NIL DO begin
case A^.VAL of
#13: ;
#10: begin
if i<b then b:=i;
i:=0
end
else Inc(i)
end;
A:=A^.LNK;
END
END;


Спасибо smile.gif
только помойму последняя строка символов не проверяется на длину, т.к. если его длина меньше остальных
то не выдается его длина
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Krjuger
сообщение 1.06.2009 20:11
Сообщение #22


Профи
****

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

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


вот тебе немног другая реализация,но как я и говрил вполне кустарно....Кстати вопрос больше в Лапу,когда я в дату списка записываю стринг,а потом скидываю строку во временный txt файл,то у меня окончание ознаменуется #26 это конец файла чтоли или как?


USES CRT;
CONST
PATH='C:\TPascal\F1.TXT';
TYPE
DATA=string;
LINK=^RS;
RS=RECORD VAL:DATA;
LNK:LINK;
END;
TF=TEXT;
VAR
F:TF;
A:LINK;
B,ch:WORD;
cch:char;
str:text;

PROCEDURE ADD(VAR A:LINK;B:DATA);
BEGIN
IF A<>NIL THEN ADD(A^.LNK,B) ELSE
BEGIN
NEW(A);
A^.VAL:=B;
A^.LNK:=NIL;
END;
END;

PROCEDURE LOAD(VAR F:TF;VAR A:LINK);
VAR
I:DATA;
BEGIN
ASSIGN(F,PATH);
RESET(F);
A:=NIL;
WHILE NOT EOF(F) DO
BEGIN
READ(F,I);
ADD(A,I);
readln(f);
END;
END;

PROCEDURE OUTPUT(A:LINK);
BEGIN
WHILE A<>NIL DO
BEGIN
WRITE(A^.VAL);
A:=A^.LNK;
writeln;
END;
END;

PROCEDURE MIN(A:LINK;VAR B:WORD);
VAR
I:WORD;
BEGIN
B:=256;
WHILE A<>NIL DO
BEGIN
ch:=0;
rewrite(str);
write(str,a^.val);
reset(str);
read(str,cch);
while cch<>#26 do begin
read(str,cch);
ch:=ch+1;
end;
IF ch<B THEN B:=ch;
A:=A^.LNK;
END;
IF B=256 THEN B:=0;
END;

BEGIN
CLRSCR;
assign(str,'C:\TPascal\f2.txt');
LOAD(F,A);
OUTPUT(A);
MIN(A,B);
WRITELN;
WRITELN('MIN=',B);
READLN;
END.


Еще так как это не рабочий вариант,то я файлы не закрыл,думаю сам справишся.

Сообщение отредактировано: Krjuger - 1.06.2009 20:13
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 1.06.2009 20:13
Сообщение #23


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(D1ma @ 1.06.2009 20:15) *
последняя строка символов не проверяется на длину,
Да, ошибся я. Секундочку..
Ну, вот так можно, наверное..
PROCEDURE MIN(A:LINK;VAR B:WORD);
VAR
I:WORD;
BEGIN
B:=256;
i:=0;
WHILE A<>NIL DO begin
case A^.VAL of
#13: ;
#10: begin
if i<b then b:=i;
i:=0
end
else Inc(i)
end;
A:=A^.LNK;
END;
if i<b then b:=i;
END;

Только ты спрячь и не показывай volvo. А то тут одна строка кода сдублирована...
smile.gif


Добавлено через 1 мин.
Пожалуйста, не надо всякий раз цитировать ВЕСЬ предыдущий мессадж при ответе.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Krjuger
сообщение 1.06.2009 20:16
Сообщение #24


Профи
****

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

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


Цитата

Только ты спрячь и не показывай volvo. А то тут одна строка кода сдублирована...

УУУУууу.....молись,в прошлый раз volvo конкурс устроил,как избавиться от условия))))Растерзает ведь...


Сообщение отредактировано: Krjuger - 1.06.2009 20:20
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 1.06.2009 20:27
Сообщение #25


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Нет, погоди, так снова неправильно. Дай минутку.

Добавлено через 12 мин.
Вот так будет правильно:
PROCEDURE MIN(A:LINK;VAR B:WORD);
VAR
I:WORD;
BEGIN
B:=256;
i:=0;
WHILE A<>NIL DO begin
case A^.VAL of
#13: ;
#10: begin
if i<b then b:=i;
i:=0
end
else Inc(i)
end;
A:=A^.LNK;
END;
if (0<i)and(i<b) then b:=i else if b=256 then b:=0
END;



--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
D1ma
сообщение 4.06.2009 18:53
Сообщение #26


Новичок
*

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

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


в общем, оказалось что это вовсе не многосвязный список... nea.gif

Как же надоела эта задача... mad.gif

Код

uses crt;
type slov=^slovo;
     slovo=record
     sim:char;
     ss:slov;
     end;
     spisok=^zveno;
     zveno=record
     sl:slov;
     cc:spisok;
     end;
var s,s1,s2:spisok;
    t:text;
    b,i:word;
begin
clrscr;
assign(t,'C:/f1.txt');
reset(t);
s1:=nil;
while not eof(t) do begin
new(s);
s2^.sl:=nil;
  while not eoln(t) do begin
   new(s^.sl);
   read(t,s^.sl^.sim);
   s^.sl^.ss:=s2^.sl;
   s2^.sl:=s^.sl;
  end;
readln(t);
s^.cc:=s1;
s1:=s;
end;
close(t);

while s<>nil do begin
while s^.sl<>nil do begin
  write(s^.sl^.sim);
  s^.sl:=s^.sl^.ss;
end;
writeln;
s:=s^.cc;
end;

b:=256;
i:=0;
While S<>nil do begin
Case S^.sl^.sim of
      #13:;
      #10: begin
if i<b then b:=i;
        i:=0
      end
      else Inc(i)
    end;
     s:=s^.cc;
end;
if (0<i)and(i<b) then b:=i else if b=256 then b:=0;
write('MIN=',b);
end.

Вроде как формирует из файла многосвязный список, только строки наоборот ))
По аналогии вычисление длины короткой строки написал вроде как в предыдущей программе, только что-то не работает...
Помогите плз, осталась единственная несданная задача...

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
D1ma
сообщение 6.06.2009 7:17
Сообщение #27


Новичок
*

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

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


Блин...
В чем ошибка?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
D1ma
сообщение 6.06.2009 18:35
Сообщение #28


Новичок
*

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

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


Решил сначала попробывать с использованием типа STRING, c ним все просто

Код

b:=256;
while s<>nil do begin
while s^.sl<>nil do begin
write(s^.sl^.sim);
if length(S^.sl^.sim)<b then b:=length(S^.sl^.sim);
s^.sl:=s^.sl^.ss;
end;
writeln;
s:=s^.cc;
end;write(b);


Но нужно с использованием Char.
В общем считает, но не отдельную строку, а всю длину.
Код

hile s<>nil do begin
while s^.sl<>nil do begin
  write(s^.sl^.sim);

Case S^.sl^.sim of
      #13:;
      #10: begin
if i<b then b:=i;
        i:=0
      end
      else Inc(i)
    end;
    
end;

s^.sl:=s^.sl^.ss;
end;
writeln;
s:=s^.cc;
end;
if (0<i)and(i<b) then b:=i else if b=256 then b:=0;
write('MIN=',b);

Как сделать чтобы считал не всю длину, а токо длину строки?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
D1ma
сообщение 6.06.2009 20:08
Сообщение #29


Новичок
*

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

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


Решил попробывать вот так:

while s<>nil do begin
Case S^.sl^.sim of
#13:;
#10: begin
if i<b then b:=i;
i:=0
end
else Inc(i)
end;

while s^.sl<>nil do begin
write(s^.sl^.sim);

s^.sl:=s^.sl^.ss;
end;
writeln;
s:=s^.cc;
end;
if (0<i)and(i<b) then b:=i else if b=256 then b:=0;
write('MIN=',b);


Почему-то мне кажется что должно быть так, но считает неверно...

М
Пожалуйста, пользуй тэги code=pas /code

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 6.06.2009 20:21
Сообщение #30


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Я довольно много поменял тут..
Разберешься?
type
pSlovo= ^Slovo;
Slovo= record
c: char;
Next: pSlovo;
end;
pSpisok=^Spisok;
Spisok=record
s,s1: pSlovo;
Next: pSpisok;
end;

var
L,L1: pSpisok;
t: text;
b,i: word;

begin
assign(t,'f1.txt');
reset(t);
L:=nil;
while not eof(t) do begin
if L=nil then begin
New(L);
L1:=L
end
else begin
New(L^.Next);
L:=L^.Next
end;
with L^ do begin
next:=nil;
s:=nil;
while not eoln(t) do with s^ do begin
if s=nil then begin
New(s);
s1:=s
end
else begin
New(s^.next);
s:=s^.next
end;
with s^ do begin
read(t,c);
next:=nil
end
end;
readln(t);
end
end;
close(t);

L:=L1;
while L<>nil do with L^ do begin
s:=s1;
while s<>nil do with s^ do begin
write©;
s:=Next
end;
writeln;
L:=Next
end;

b:=256;
L:=L1;
while L<>nil do with L^ do begin
i:=0;
s:=s1;
while s<>nil do with s^ do begin
case c of
#13:;
#10: begin
if i<b then b:=i;
i:=0
end
else Inc(i)
end;
s:=Next
end;
L:=Next
end;
if (0<i)and(i<b) then b:=i else if b=256 then b:=0;
write('MIN=',b)
end.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
D1ma
сообщение 8.06.2009 16:01
Сообщение #31


Новичок
*

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

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


Спасибо!!! smile.gif
Плохо разобрался токо, немогли бы написать действие след. операторов? -)


L1:=L;

s1:=s;

L:=Next;

s:=Next;

L:=Next;



Сообщение отредактировано: D1ma - 8.06.2009 16:03
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 8.06.2009 19:35
Сообщение #32


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(D1ma @ 8.06.2009 17:01) *
немогли бы написать действие след. операторов?
Ты лучше в программе комментами пиши, какое именно место непонятно и почему.

L1:=L;
s1:=s;
- запомнить начало списка

L:=Next;
s:=Next;
- продвижение вперед по списку


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
D1ma
сообщение 9.06.2009 16:09
Сообщение #33


Новичок
*

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

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


Исправьте что не так smile.gif


while not eof(t) do begin
if L=nil then begin
New(L);
L1:=L {Запоминаем начало списка}
end
else begin
New(L^.Next);
L:=L^.Next {переход на след. элемент}
end;
with L^ do begin
next:=nil;{обнуляем ссылку}
s:=nil;
while not eoln(t) do with s^ do begin
if s=nil then begin
New(s);
s1:=s {Запоминаем начало подсписка}
end
else begin
New(s^.next);
s:=s^.next {переход на след. элемент}
end;
with s^ do begin
read(t,c);
next:=nil {обнуляем ссылку}
end
end;
readln(t) ; {?}
end
end;
close(t);

L:=L1;
while L<>nil do with L^ do begin
s:=s1; {Запоминаем начало подсписка}
while s<>nil do with s^ do begin
write©;
s:=Next {продвижение вперед по списку}
end;
writeln;
L:=Next {продвижение вперед по списку}
end;

b:=256;
L:=L1;
while L<>nil do with L^ do begin
i:=0;
s:=s1;
while s<>nil do with s^ do begin
case c of
#13:;
#10: begin
if i<b then b:=i;
i:=0
end
else Inc(i)
end;
s:=Next {продвижение вперед по списку}
end;
L:=Next {продвижение вперед по списку}
end;

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Krjuger
сообщение 10.06.2009 13:54
Сообщение #34


Профи
****

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

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


Ну а ты скажи,что не так и тебе исправят..Где ошибка,то? что тебя не устраивает?Уу тебя в руках всегда есть встроеный в паскаль дебагер,где ты можеш проверить все изменения переменных при каждом шаге,только для этого надо самому понимать,что должно происходить и что произошло и смотреть где именно ошибка,и тогда уже думать,как это исправить.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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