Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Помогите понять как работает функция.  (Прочитано 769 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Callidus Furo

  • Автор темы
  • Участник
  • *
  • Сообщений: 125
    • Просмотр профиля
Помогите пожалуйста понять как работает функция, если не сложно можете в комментах подписать... Нужно данную функцию на делфи перенести, просто C++ плохо знаю....

Это функция для создания кольцевых односвязных списков

void SKOS () //в функции опущено описание элементов списка
//создание списка с включенным заглавным элементом
{ node *sag,*s,*q;
//s,q-рабочие указатели
int a;
sag= new node;
sag->next=sag;
s=sag;
count<<"вводите элементы списка:\n";
count<<"(ввод завершите нулем)\n ";
cin>>a;
if (el !=0)
{
q= new node;
q->inf=a;
s->next=q; s=q;
cin>>a;
while (a !=0)
{
q=new node;
q->inf=a;
s->next=q; s = q;
cin>>a;
}
q->next=sag;
renurn;
}
« Последнее редактирование: 29 Марта 2010, 20:33:43 от Callidus Furo »
Ubuntu 10.10 x32 - home desktop
Ubuntu 10.10 x32 - job

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Помогите понять как работает функция.
« Ответ #1 : 30 Марта 2010, 06:13:04 »
не функция а один большой memory leak =) прикольно!

Оффлайн Callidus Furo

  • Автор темы
  • Участник
  • *
  • Сообщений: 125
    • Просмотр профиля
Re: Помогите понять как работает функция.
« Ответ #2 : 30 Марта 2010, 11:41:32 »
не функция а один большой memory leak =) прикольно!

А вы не могли бы закомментировать эту функцию, что бы я понял как она работает. Я ее на делфи сам сделаю.
Ubuntu 10.10 x32 - home desktop
Ubuntu 10.10 x32 - job

Оффлайн Protopopulus

  • Старожил
  • *
  • Сообщений: 1690
  • А чего вы так смотрите?..
    • Просмотр профиля
Re: Помогите понять как работает функция.
« Ответ #3 : 30 Марта 2010, 11:45:02 »
Цитировать
Это функция для создания кольцевых односвязных списков
По-моему это главные слова в посте... ;) Гугли про кольцевые списки!!!
Если ты владеешь знаниями, то и знания владеют тобой. (с) Protopopulus

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Помогите понять как работает функция.
« Ответ #4 : 30 Марта 2010, 11:49:33 »
А Вы поработайте сами за компьютер, карандашом на бумаге. Самый верный способ во всем разобраться.

Возьмите лист бумаги, нарисуйте там квадратики, это будут переменные, подпишите их, впишите значения.
Стрелками обозначьте указатели.
Например, оператор присваивания
sag->next=sag;будет обозначен стрелкой, выходящей из квадратика, обозначенного "sag", и входящей в него же.

Двигаясь по ходу функции или по итерациям циклов, меняйте стрелки и значения переменных.

Не надо лениться! Свою голову Вам никто приставлять не будет.
« Последнее редактирование: 30 Марта 2010, 11:52:41 от wl »
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн Protopopulus

  • Старожил
  • *
  • Сообщений: 1690
  • А чего вы так смотрите?..
    • Просмотр профиля
Re: Помогите понять как работает функция.
« Ответ #5 : 30 Марта 2010, 11:55:10 »
Элемент односвязного списка имеет такую структуру:
type
TNode = record
  Next: Pointer;
  Data: Некотрой_тип;
end;
Next указывает на адрес следующего Node, а Data содержит некоторые данные.
Если ты владеешь знаниями, то и знания владеют тобой. (с) Protopopulus

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Помогите понять как работает функция.
« Ответ #6 : 30 Марта 2010, 12:04:58 »
Элемент односвязного списка имеет такую структуру:
type
TNode = record
  Next: Pointer;
...
end;
Точно Pointer, а не ^TNode?
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн Protopopulus

  • Старожил
  • *
  • Сообщений: 1690
  • А чего вы так смотрите?..
    • Просмотр профиля
Re: Помогите понять как работает функция.
« Ответ #7 : 30 Марта 2010, 12:06:31 »
Не. TNode еще не определен. Хотя... Сейчас проверю.

Пользователь решил продолжить мысль 30 Марта 2010, 12:14:34:
Все перепутал :-[ Слишком много всяких языков за последнее время перепробовал... Извините.
Вот описание:
type
TNext = ^TNode;
TNode = record
  Data: integer | string | etc.;
  Next: TNext;
end;
В паскале рекурсивное описание типов недопустимо. Поэтому, приходится делать таким эквивалентом.
« Последнее редактирование: 30 Марта 2010, 12:14:34 от Protopopulus »
Если ты владеешь знаниями, то и знания владеют тобой. (с) Protopopulus

Оффлайн Callidus Furo

  • Автор темы
  • Участник
  • *
  • Сообщений: 125
    • Просмотр профиля
Re: Помогите понять как работает функция.
« Ответ #8 : 31 Марта 2010, 15:24:07 »
А Node я как понимаю это класс?
Ubuntu 10.10 x32 - home desktop
Ubuntu 10.10 x32 - job

Оффлайн wl

  • Старожил
  • *
  • Сообщений: 1393
    • Просмотр профиля
Re: Помогите понять как работает функция.
« Ответ #9 : 31 Марта 2010, 15:49:32 »
Не Node, а TNode.
Не класс, а запись (record).
На свете феньки есть такие, брат Горацио, которых лохи просто не секут. (Шекспир, "Гамлет", вольный перевод)

Оффлайн Callidus Furo

  • Автор темы
  • Участник
  • *
  • Сообщений: 125
    • Просмотр профиля
Re: Помогите понять как работает функция.
« Ответ #10 : 31 Марта 2010, 15:51:19 »
Не Node, а TNode.
Не класс, а запись (record).

Спасибо, теперь чего-то уже понятно =)
Ubuntu 10.10 x32 - home desktop
Ubuntu 10.10 x32 - job

 

Страница сгенерирована за 0.046 секунд. Запросов: 25.