Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > C++ Builder
Перезагрузить страницу Связанный список и работа с ним
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
alexu alexu вне форума
Member
 
Сообщений: 433
Сказал(а) спасибо: 0
Поблагодарили 4 раз(а) в 4 сообщениях
Регистрация: 01.06.2007
По умолчанию Связанный список и работа с ним - 04.05.2010, 17:30

Имею: программу, которая проделывает некоторые операции с одним файлом (в моем конкретном случае - жмёт в МР3, это непринципиально)

Хочу: проделывать то же с группой выбранных файлов. Как это сделать я умею, но дело осложняется тем, что у меня отдельная кнопка для выбора файла и отдельная - для запуска кодирования. Т.е. выбранные имена файлов нужно перекинуть в обработчик другой кнопки. Самое простое - создать глобальный массив строк побольше с запасом, например 1000 - ессно никому не придет в голову кодировать последовательно 1000 файлов - но это некрасивое решение задачи, поэтому хочу для этой цели использовать связанный список - т.е. создать именно столько элементов, сколько выбрано файлов. Заодно и связанные списки освою.

Пример использования связанного списка беру из учебника:


Код:
//количество одновременно открытых файлов
int Cx;

//связанный список
class NameDataSet
  {
  public:
  NameDataSet* pNext;
  AnsiString FilelNameStr;
  };

//указатель на первый элемент списка
NameDataSet* pHead = 0;


//добавление объекта в начало списка
void addHead(NameDataSet* pNDS)
  {
  pNDS -> pNext = pHead;
  pHead = pNDS;
  }




//нажатие кнопки файл
void __fastcall TForm1::Button1Click(TObject *Sender)
{

Cx = OpenDialog1 -> Files -> Count;

for (int j = 0; j < Cx; j++)
  {
  //создаем новый объект для заполнения
  NameDataSet* pNDS = new NameDataSet;

  //записываем в объект имя файла
  pNDS->FilelNameStr = OpenDialog1 -> Files -> Strings[j];

  //добавляем объект в начало списка
  addHead(pNDS);
  }






//поочередно выводим все элементы списка на экран

//ругается на эту строчку, т.к. не видит pNDS
pNDS = pHead;

while (pNDS)
  {
  //вывод на экран
  Label1->Caption = pNDS->FilelNameStr;

  //получим адрес следующего элемента
  pNDS = pNDS->pNext;

  //задержка, чтобы видеть как работает программа
  Sleep (1000);
  }


}
То есть не работает даже в пределах обработчика одной кнопки, а мне нужно передать элементы списка в обработчик другой. Я честно говоря плаваю во всяких этих классах и объектах, подскажите пжлста, что я делаю неправильно. Да и еще, надо где-то удалить элементы списка...
Ответить с цитированием
  (#2 (permalink)) Старый
FataLL FataLL вне форума
Member
 
Аватар для FataLL
 
Сообщений: 1,783
Сказал(а) спасибо: 2
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 04.11.2004
По умолчанию 05.05.2010, 03:17

Код:
....
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  // <-- вот тут вставь очистку списка
  Cx = OpenDialog1 -> Files -> Count;
...
...
NameDataSet* pNDS = pHead; // чтобы не ругалось

...
...

  //задержка, чтобы видеть как работает программа
  Sleep (1000); // вместо задержки можешь здесь вызывать свой конвертер, передавая ему имя файла
А вообще, зачем тебе такие сложности, если у тебя уже есть список? OpenDialog1->Files->Strings[] прекрасно хранит все твои выбранные файлы, зачем их ещё куда-то переписывать? Так что вся твоя программа сводится к
Код:
Cx = OpenDialog1 -> Files -> Count;

for (int j = 0; j < Cx; j++)
{
   ConvertToMP3( OpenDialog1 -> Files -> Strings[j] );
}
Ответить с цитированием
  (#3 (permalink)) Старый
alexu alexu вне форума
Member
 
Сообщений: 433
Сказал(а) спасибо: 0
Поблагодарили 4 раз(а) в 4 сообщениях
Регистрация: 01.06.2007
По умолчанию 05.05.2010, 10:39

Вообще да, в этой программе наверно никаких списков не нужно.

Но хотелось бы в них разобраться, поэтому поменяем условие задачи:

1. Объявляем глобальный связанный список, чтобы был доступен из любого места программы
2. По нажатию 1-й кнопки добавляем к списку новый элемент и записываем туда какое-нибудь значение.
3. По нажатию 2-й кнопки последовательно выводим имеющиеся элементы списка на экран
4. Очищаем память.
Ответить с цитированием
  (#4 (permalink)) Старый
FataLL FataLL вне форума
Member
 
Аватар для FataLL
 
Сообщений: 1,783
Сказал(а) спасибо: 2
Поблагодарили 25 раз(а) в 25 сообщениях
Регистрация: 04.11.2004
По умолчанию 05.05.2010, 11:39

У тебя ж уже всё написано...
Код:
//связанный список
class NameDataSet
  {
  public:
  NameDataSet* pNext;
  AnsiString FilelNameStr;
  };

//указатель на первый элемент списка
NameDataSet* pHead = 0;

// добавление объекта в начало списка
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  //создаем новый объект для заполнения
  NameDataSet* pNDS = new NameDataSet;

  //записываем в объект данные
  pNDS->FilelNameStr = Edit1->Text;

  // добавляем элемент в список
  pNDS -> pNext = pHead;
  pHead = pNDS;
}

// поочередно выводим все элементы списка на экран
void __fastcall TForm1::Button2Click(TObject *Sender)
{
  NameDataSet* pNDS = pHead;

  while( pNDS != NULL )
  {
    //вывод на экран
    Label1->Caption = pNDS->FilelNameStr;

    //получим адрес следующего элемента
    pNDS = pNDS->pNext;

    //задержка, чтобы видеть как работает программа
    Sleep (1000);
  }
}

// удаляем всё
void __fastcall TForm1::Button3Click(TObject *Sender)
{
  while( pHead != NULL )
  {
    NameDataSet* pNDS = pHead;
    pHead = pHead->pNext;
    delete pNDS;
  }
}
Ответить с цитированием
  (#5 (permalink)) Старый
alexu alexu вне форума
Member
 
Сообщений: 433
Сказал(а) спасибо: 0
Поблагодарили 4 раз(а) в 4 сообщениях
Регистрация: 01.06.2007
По умолчанию 05.05.2010, 15:58

Ну да, работает, спасибо.
Ответить с цитированием
Ads.
Ads
Ответ

Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задан список произвольного уровня вложенности,превратить его в список атомов Дрон Lisp 6 19.11.2014 22:38
Что такое связанный список farus Вопросы начинающих программистов 1 01.06.2011 07:07
программа которая берет список и создает список другой из этого же списка + исходный Ma3day Prolog 5 26.11.2010 15:40
Связанный граф ler Prolog 20 17.12.2009 03:57
Задан список произвольного уровня вложенности, сформировать из него новый список Kolobov_Anton Lisp 3 26.03.2009 22:29
Как построить список из элементов 1го списка входящих во 2ой список Ирина 24 Lisp 3 10.02.2009 10:55
Построить список из элементов 2го списка не входящий в 1ый список Ирина 24 Lisp 4 10.02.2009 10:28
Список loxmatii Prolog 0 18.04.2008 12:00
Связанный список Disassociative С/С++ 7 01.08.2005 21:57
Как сделать список DBGrid связанный с базой данных wash C++ Builder 1 17.03.2005 21:34
Есть объект - связанный список tLinkList. В него можно добавлять указатели DeepFinder Oberon 3 21.02.2005 11:25
Работа с файлами как получить список файлов Anonymous С/С++ 5 12.09.2003 14:48



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов