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

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

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

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Многосвязные списки, Помощь
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #24


Профи
****

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

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


Цитата

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

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


Сообщение отредактировано: Krjuger -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #27


Новичок
*

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

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


Блин...
В чем ошибка?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #31


Новичок
*

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

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


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


L1:=L;

s1:=s;

L:=Next;

s:=Next;

L:=Next;



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


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

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

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


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

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

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


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #34


Профи
****

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

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


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

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

 





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