2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Помогите пожалуйста! Структуры данных в Си
Сообщение17.03.2012, 14:13 


13/04/09
77
Такая ситуация, у нас очень плохой семинарист по информатике, поэтому все приходится делать самостоятельно. Есть задача:
"Написать структуру данных, итератор по ней и тест (три файла: алгоритм, файл заголовков, тест). Тест должен демонстрировать работоспособность структуры. Помните, что требуемых структур может быть много (более одного экземпляра)

Структура данных --- упорядоченный набор с введением функции отношения"

Во-первых, что это за тип данных? Набор, насколько я понимаю, это просто $n$ упорядоченных чисел, можете, пожалуйста, пояснить что такое функция отношения?

Во-вторых, что должна содержать структура? Просто описание данных (ввод и вывод) или еще должна реализовывать какие то алгоритмы?

В-третьих, что такое итератор и что должно(может) содержаться в тесте?

Буду очень благодарен за любую информацию по вопросам) сдача на этой неделе)

 Профиль  
                  
 
 Re: Помогите пожалуйста! Структуры данных в Си
Сообщение17.03.2012, 16:59 
Аватара пользователя


24/12/11
186
Тип структуры это struct. Что такое итератор в Си -- я не знаю, но видимо вам просто надо их в цикле перебирать (в структуре должен быть указатель типа struct foo *next).

Тема у вас свободная. Главное показать, что структура "работает". Например, через бинарные деревья можете сделать почти практически полезную программу: берёт, скажем, "Войну и мир" и составляет словарь всех используемых слов (кроме предлогов) в алфавитном порядке.

 Профиль  
                  
 
 Re: Помогите пожалуйста! Структуры данных в Си
Сообщение17.03.2012, 17:42 


13/04/09
77
А что именно будет делать этот указатель? И что именно в каком цикле мы должны перебирать?

 Профиль  
                  
 
 Re: Помогите пожалуйста! Структуры данных в Си
Сообщение17.03.2012, 18:03 
Заслуженный участник
Аватара пользователя


30/01/06
72407
По формулировке это больше похоже на упражнение по C++, STL и шаблонам, чем по Си. Например, "введение функции отношения" на это намекает.

 Профиль  
                  
 
 Re: Помогите пожалуйста! Структуры данных в Си
Сообщение17.03.2012, 18:19 
Аватара пользователя


24/12/11
186

(Оффтоп)

Munin в сообщении #549415 писал(а):
Например, "введение функции отношения" на это намекает.

А что это такое? Интересно даже стало. А "упорядоченный набор с введением функции отношения" -- это типа определение структуры в стиле а-ля ГОСТ, что ли?.

 Профиль  
                  
 
 Re: Помогите пожалуйста! Структуры данных в Си
Сообщение17.03.2012, 19:15 


13/04/09
77
Munin в сообщении #549415 писал(а):
По формулировке это больше похоже на упражнение по C++, STL и шаблонам, чем по Си. Например, "введение функции отношения" на это намекает.


Не, строго надо на Си, в задании специально на этом акцент поставили.

Все таки как понять "итератор по программе" и функцию отношения? Может это что то типа суммы/разности двух наборов?

 Профиль  
                  
 
 Re: Помогите пожалуйста! Структуры данных в Си
Сообщение17.03.2012, 21:44 
Заслуженный участник
Аватара пользователя


30/01/06
72407

(Оффтоп)

wallflower в сообщении #549427 писал(а):
А что это такое? Интересно даже стало.

Я так понял, что это означает, что тип, предназначенный для хранения в контейнере, удоветворяет STL концепциям LessThan Comparable и/или Strict Weakly Comparable.


NiGHTeR в сообщении #549447 писал(а):
Все таки как понять "итератор по программе"

Итератор не по программе. Итератор по структуре данных. Итератор - это такой объект, который "указывает" на какое-то место в структуре данных, и с ним можно делать операции: извлечь указываемый элемент, перевести итератор вперёд, перевести назад, выяснить, не дошёл ли итератор до конца или начала структуры данных. Например, для массива роль итератора выполняет указатель, но для других структур данных это может быть какой-то другой тип, и операции над ним должны быть совершенно другими. Это понятие естественно выглядит в C++ и других объектно-орентированных языках, где реализация итератора может быть инкапсулирована, но в Си это странно.

 Профиль  
                  
 
 Re: Помогите пожалуйста! Структуры данных в Си
Сообщение18.03.2012, 06:52 


24/05/09

2054
Может речь идёт о связанном списке? Там есть и данные и адреса, указывающие на элементы списка.

 Профиль  
                  
 
 Re: Помогите пожалуйста! Структуры данных в Си
Сообщение18.03.2012, 14:12 


13/04/09
77
Munin в сообщении #549521 писал(а):

(Оффтоп)

wallflower в сообщении #549427 писал(а):
А что это такое? Интересно даже стало.

Я так понял, что это означает, что тип, предназначенный для хранения в контейнере, удоветворяет STL концепциям LessThan Comparable и/или Strict Weakly Comparable.


NiGHTeR в сообщении #549447 писал(а):
Все таки как понять "итератор по программе"

Итератор не по программе. Итератор по структуре данных. Итератор - это такой объект, который "указывает" на какое-то место в структуре данных, и с ним можно делать операции: извлечь указываемый элемент, перевести итератор вперёд, перевести назад, выяснить, не дошёл ли итератор до конца или начала структуры данных. Например, для массива роль итератора выполняет указатель, но для других структур данных это может быть какой-то другой тип, и операции над ним должны быть совершенно другими. Это понятие естественно выглядит в C++ и других объектно-орентированных языках, где реализация итератора может быть инкапсулирована, но в Си это странно.


А можете, пожалуйса, привести какой-нибудь пример кода, использующего простенькую структуру с итератором?

 Профиль  
                  
 
 Re: Помогите пожалуйста! Структуры данных в Си
Сообщение18.03.2012, 20:21 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Повторяю, мне кажется, это гвоздь не от той стенки. Концепция итератора вообще почти бесполезна в Си. Я напишу, а вы спросите: а в чём разница с простым указателем на элемент структуры? А реализация операций сильно зависит от используемой структуры, в массивах она одна, в деревьях другая.

 Профиль  
                  
 
 Re: Помогите пожалуйста! Структуры данных в Си
Сообщение18.03.2012, 20:36 


13/04/09
77
А что тогда конкретно в моей задаче стоит понимать под итератором?

Указатель на элемент списка который при увеличении будет указывать на следующий элемент?

 Профиль  
                  
 
 Re: Помогите пожалуйста! Структуры данных в Си
Сообщение18.03.2012, 21:32 
Заслуженный участник
Аватара пользователя


30/01/06
72407
Дело в том, что вашу задачу не обязательно реализовывать списком. Но если списком - то да, указатель на элемент списка.

 Профиль  
                  
 
 Re: Помогите пожалуйста! Структуры данных в Си
Сообщение18.03.2012, 22:09 


24/05/09

2054
Это кусок рабочей программы, иллюстрирующий работу со связанными списками, тут есть и структуры и адреса.

код: [ скачать ] [ спрятать ]
Используется синтаксис C++
//связанный список
class NDSet
  {
  public:
   NDSet* pPrev;
   NDSet* pNext;

   AnsiString Dig;
  //сюда можно поместить
  //любые данные
  };

//указатель на первый элемент списка
//указатель на последний элемент списка
NDSet* pListBeg;
NDSet* pListEnd;


pListBeg = NULL;
pListEnd = NULL;


//---------------------------------------------------------------------------
// функция сортирует список при добавлении нового элемента

void funcSortList(void)
 {
 AnsiString X;

 //копируем в pListEnd1 адрес текущего элемента
 NDSet* pListEnd1 = pListEnd;

 //продолжаем до тех пор, пока адрес не равен 0
 while(pListEnd1)
  {
  //текущий элемент
  NDSet* pNDS = pListEnd1;

  //сортировка невозможна при единственном элементе
  if(pNDS->pPrev == NULL) return;

  //предыдущий элемент
  NDSet* pNDS1 = pNDS->pPrev;

  X = pNDS1->Dig;

  if(pNDS->Dig < X) {pNDS1->Dig = pNDS->Dig; pNDS->Dig = X;}

  pListEnd1 = pNDS->pPrev;
  }

 return;
 }

 Профиль  
                  
 
 Re: Помогите пожалуйста! Структуры данных в Си
Сообщение18.03.2012, 23:19 
Заслуженный участник
Аватара пользователя


30/01/06
72407

(Оффтоп)

Прекрасный пример, как делать не надо. Впрочем, с рабочими программами это часто случается, особенно старыми.

 Профиль  
                  
 
 Re: Помогите пожалуйста! Структуры данных в Си
Сообщение19.03.2012, 00:57 
Заслуженный участник


09/09/10
3729

(Оффтоп)

Munin
Особенно замечательно, что при сортировке не "ящики" переставляются, а их "содержимое" перекладывается. А итератора как не было, так и нет. Тихий ужас, в общем.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 25 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group