Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Pascal. Динамические структуры. Связанный список.

15K
26 апреля 2007 года
Салага
26 / / 19.12.2006
Задача - создать связанный список содержащий номер элемента и его представление в двоичной системе счисления.
Непонятно, почему но на вывод отправляется только предпоследний элемент.

Код:
Type spisok=^TypSpisok; {  Это наш список}
    TypSpisok=Record  { состоит из номера элемента и значения,  строкой}
                            nam:integer; kod:string; metk:spisok
                end;

var
    elem,beg:spisok;
    counter,lim:integer;

{ фунцкция переводящая из 10чной в любую другую }
{ на выходе получаем строку}
function FromTenTo(n, ss:longint):string;
    const
        Mas: string[16]='0123456789ABCDEF'; { массив для 16ричн. }
{зн7ачений }
    var
        s: String;
begin
s:='';
        repeat
            s:=Mas[(n mod ss)+1]+s;
            n:=n div ss;
        until n=0;
FromTenTo:=s;
end;


BEGIN

New(elem); { выделили память}
beg:=elem; { сохраняем адрес начала цепочки}
elem^.metk:=elem;


WriteLn(' VVedite predel spiska!');
ReadLn(lim);

counter:=0;
    While elem^.metk<>nil do
        begin
            elem^.nam:=counter;
            elem^.kod:=FromTenTo(counter,2);
                        counter:=counter+1;
            if counter=lim  then elem^.metk:=Nil;
{ при достижении конечного предела в метку пишем, о том,}
{что список закончился}
        end;

WriteLn(' Vivod'); { тестовый вывод }

repeat
    WriteLn (elem^.nam,'  ', elem^.kod);
        elem:=elem^.metk;

until elem=nil;

ReadLn(); { остановка}
End.
242
26 апреля 2007 года
Оlga
2.2K / / 04.02.2006
Паскаль никогда не учила, поэтому может и ошибаюсь. возникло пару вопросов по твоему заполнению и созданию списка:
Код:
[COLOR=red][COLOR=black][COLOR=red]New(elem);[/COLOR] { выделили память}[/COLOR]    [/COLOR][COLOR=red]{1}[/COLOR]
beg:=elem; { сохраняем адрес начала цепочки}
elem^.metk:=elem;
 
 
WriteLn(' VVedite predel spiska!');
ReadLn(lim);
 
counter:=0;
    [COLOR=blue]While elem^.metk<>nil do[/COLOR]
[COLOR=blue]     begin[/COLOR]
[COLOR=blue]         elem^.nam:=counter;[/COLOR]
[COLOR=blue]         elem^.kod:=FromTenTo(counter,2);[/COLOR]
[COLOR=blue]                     counter:=counter+1;[/COLOR]
[COLOR=blue]         if counter=lim  then elem^.metk:=Nil; [/COLOR]
[COLOR=blue]{ при достижении конечного предела в метку пишем, о том,} [/COLOR]
[COLOR=blue]{что список закончился} [/COLOR]
[COLOR=blue]     end;[/COLOR]


[COLOR=#ff0000]{1} [/COLOR][COLOR=black]под какое количество элементов ты выделяешь память? разве не под один узел? [/COLOR]
[COLOR=blue]{2} [/COLOR][COLOR=black]где ты двигаешься по списку? у меня создается впечатление, что ты выделяешь память под один узел и постоянно записываешь в него новые данные. выводит lim-1?[/COLOR]
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог