Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631

Формирование, вывод и сохранение списка

07.12.2011, 08:36. Показов 1256. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Из старой лабы по спискам попробовал чуть переделать код, вот такой код пока появился черновой, я вот только не пойму образовался список ли у меня или просто строки ввел и все, просто при выводе в листбокс приходилось каждую строчку отдельно писать ну для фамилии отдельно для даты тоже, а нельзя было одну для всех?? весь список чтоб вывело?вообще потом желательно чтоб его в файл сохраняло в этой структуре как у меня сейчас, и если надо другой кнопкой его от туда выводило в поле листбокс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <vcl.h>
#pragma hdrstop
 
#include "struc.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
 struct lfile{
    AnsiString name;
    AnsiString data;
    AnsiString vrema;
};
struct sp{
    lfile elfile;   // поле данных
    sp *next;   // указатель
};
 
 
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
 
}
 
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
sp* list =new sp; //создаем указатель на голову списка
    sp *ptr;
    ptr=list;
        ptr->elfile.name = Edit1->Text;
        ptr->elfile.data = Edit2->Text;
        ptr->elfile.vrema =  Edit3->Text;
        ListBox1->Items->Add(ptr->elfile.name + " " + ptr->elfile.data+ " " + ptr->elfile.vrema);
 Комментарий модератора 
lexflax, Правила
2.3. Создавайте темы с осмысленными и понятными названиями - это серьезно повышает шансы, что на ваш вопрос ответят.
Изначальное название темы: "список получился?".
Миниатюры
Формирование, вывод и сохранение списка  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.12.2011, 08:36
Ответы с готовыми решениями:

Формирование списка с остатками от деления целых чисел из исходного списка на заданное число N
люди помогите пожалуйста!!! Формирование списка с остатками от деления целых чисел из исходного списка на заданное число N.

Формирование списка, состоящего из списка самого низшего уровня
Написать программу формирования списка, состоящего из списков самого низшего уровня для заданного списка.

Дублирование вхождения каждого элемента списка One и формирование из этих значений списка Double (пояснить условие)
Здравствуйте. Вот собственно само задание: В составе программы описать функцию, которая дублирует вхождение каждого элемента списка One и...

11
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
07.12.2011, 14:08
Вначале все равно придется поработать ручками, например, добавить строки в StringList
C++
1
2
3
4
5
StringList->Add(ptr->elfile.name+
                " "+
                ptr->elfile.data+
                " "+
                ptr->elfile.vrema);
Потом присвоить строки StringList'a строкам ListBox1'a , а
C++
1
StringList->SaveToFile(filename);
0
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
07.12.2011, 14:27  [ТС]
Цитата Сообщение от lexflax Посмотреть сообщение
ListBox1->Items->Add(ptr->elfile.name + " " + ptr->elfile.data+ " " + ptr->elfile.vrema);
а чем моя строчка отличается вот от вашей
C++
1
2
3
4
5
StringList->Add(ptr->elfile.name+
                " "+
                ptr->elfile.data+
                " "+
                ptr->elfile.vrema);
StringList это компонент который так же размещается на форме?
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
07.12.2011, 14:57
Я думаю понятно, что из одного элемента списка не бывает, поэтому "да" ответить точно нельзя, ибо что может быть у вас следующим шагом не понятно, да и реализация смущает.

Далее, изобретать велосипед не стоит, но если уже и заниматься этим, то имхо тут более рационально использовать структуры + классы, где потрудившись над реализацией - после нет головной боли при работе с динамической памятью. Обычно применяется конструкция,
подобная следующей:
[структура: элемент из списка]
  • указатель на предыдущий элемент.
  • указатель на следующий элемент.
  • значение(я) текущего элемента.
[класс: список элементов]
PRIVATE [доступно только в классе]:

указатели:
  • первый элемент - думаю, для чего он служит, особо объяснять не нужно, если его не существует, значит и списка нет.
  • последний элемент - объявлять имеет смысл, если в списке будет больше одного элемента, а значит всегда, ибо при добавлении нового элемента, нужно знать указатель последнего элемента, а постоянно устраивать не стоит - жизнь и так коротка.
  • используемый элемент - все просто, программист запросил определенный элемент и его указатель записывается, применяется не часто, однако иногда имеет смысл при частом обращении к одним и тем же данным.
другое:
  • количество элементов в списке - не нужно проходить цикл из 200 000 000 шагов, если "класс знает", что элементов только 199 999 999.
PUBLIC [доступно везде]:

стандартные операции:
  • процедура инициализация - стандартное обнуление памяти и иногда установка максимального размера списка или других "полу-статических" данных.
  • процедура деструкторизации - здесь происходят стандартные действия при удалении экземпляра класса, а так внутри класса хранится не список, а указатели на его элементы, то прописать их удаление [освобождение памяти] нужно вручную.
  • процедура добавления элемента в список:
    00: создание новой абстрактной структуры - создание и установка значения = параметру процедуры, установка указателя предыдущего элемента = указателю последнего элемента списка[см. выше], установка указателя следующего элемента = 0.
    01: если элемент создается впервые - загрузить структуру последнего элемент списка (указатель еще не изменен) и изменить в ней указатель на следующего элемента на созданный элемент; иначе - установить указатель первого элемента на созданный элемент.
    02: изменить указатель последнего элемента - на созданный элемент.
    03: увеличить значение счетчика.
  • процедура удаления элемента из списка:
    00: обязательное условие: если элемент существует (введенный номер меньше количества элементов) - продолжить процедуру удаления.
    01: получение указанного элемента - по указателю загрузить структуру.
    02: если предыдущий элемент существует - загрузить и изменить его указатель следующего элемента на указатель следующего элемента удаляемой структуры; иначе (элемент был первый в списке!) изменить указатель первого элемента в списке на указатель следующего элемента удаляемой структуры.
    03: если следующий элемент существует - загрузить и изменить его указатель предыдущей структуры на указатель предыдущей структуры удаляемой структуры; иначе (элемент был последний в списке!) изменить указатель последнего элемента в списке на указатель предыдущего элемента удаляемой структуры.
    04: удаление элемента - освобождение памяти структуры.
    05: уменьшить значение счетчика.
  • функция получения/изменения значения(ий) элемента по индексу (в современном варианте реализуется через свойство - __property).
  • функция получения количества элементов в списке (в современном варианте реализуется через свойство).
  • процедура очищения списка - происходит практически все тоже самое как и при деструкторизации класса, только с обнулением счетчика.

Не по теме:

К данной конструктции можно добавить функции получения элемента списка в текстовом представлении, сохранения всего списка в текстовом файле в виде отчета, замены индексов элементов (необходимо при возвможности сортировки данных), вставки новой структуры между двух других структур и т.п.


Но что касается сохранения данной информации в текстовом представлении стандартных функций на этот счет нет, если решили самостоятельную реализацию, то пишите обслуживающие функции и процедуры сами.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
07.12.2011, 15:29
Цитата Сообщение от lexflax Посмотреть сообщение
StringList это компонент который так же размещается на форме?
ну... а где же ещё...
0
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
07.12.2011, 15:36  [ТС]
дааааааа, мне моих знаний явно не хватит, ладно как нибудб потихоничку да получится подскажите один момент, вот допустим хочу цикл бесконечно чтобы был до тех пор пока не нажмет пользователь определенную кнопку, допустим кнопку два , на которой написанно остановить
C++
1
2
3
4
5
6
 bool b;
    while (b==true){
        ptr->elfile.name = Edit1->Text;
        ptr->elfile.data = Edit2->Text;
        ptr->elfile.upd =  Edit3->Text;
        ListBox1->Items->Add(ptr->elfile.name + " " + pr->elfile.data+ " " + ptr->elfile.upd);
вот как эту кнопку прописать в этом коде ? чтоб она b изменяло в состояние ложное и цикл прекращался...
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
07.12.2011, 15:40
Получайте состояние клавиши и используйте Application->ProcessMessages().
0
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
07.12.2011, 15:42  [ТС]
можно с небольшим примером в моем коде?
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
07.12.2011, 15:47
Цитата Сообщение от lexflax Посмотреть сообщение
можно с небольшим примером в моем коде?
И чего я про клавиши ляпнул.... %)

unit.h
C++
1
2
3
4
5
6
class TForm1: public TForm
{
//...
private:
  bool Stop;
}
unit.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void __fastcall TForm1::Button1Click(TObject* Sender)
{
  // ...
  Stop = false;
  while (!Stop)
  {
    // некие действия
  }
  // ..
}
void __fastcall TForm1::Button2Click(TObject* Sender)
{
  Stop = true;
}
0
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
07.12.2011, 16:18  [ТС]
Цитата Сообщение от DefineTrueFalse Посмотреть сообщение
class TForm1: public TForm
{
//...
private:
* bool Stop;
}
если я правильно понял то надо было создать файл unit.h в котором разместить то что процетировал а потом через include подключить его, ну я сделал так но выдает такую ошибку
[BCC32 Error] struc.cpp(10): E2209 Unable to open include file 'unit.h'
я так понимаю он его не может открыть потому что не видит, хотя создал его в той же папке где все остальные файлы хранятся даже на всякий случай скопировал его в соседние и все равно такая ошибку может я его не так подключаю? вот код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <vcl.h>
#pragma hdrstop
 
#include "struc.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
#include <unit.h>
 struct lfile{
    AnsiString name;
    AnsiString data;
    AnsiString upd;
};
struct sp{
    lfile elfile;   // поле данных
    sp *next;   // указатель
};
 
 
 
 
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
 
 
}
 
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
sp* list =new sp; //создаем указатель на голову списка
    sp *ptr;
    ptr=list;
 
 
        ptr->elfile.name = Edit1->Text;
        ptr->elfile.data = Edit2->Text;
        ptr->elfile.upd =  Edit3->Text;
        ListBox1->Items->Add(ptr->elfile.name + " " + ptr->elfile.data+ " " + ptr->elfile.upd);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Stop=false;
if (Stop=false)   ShowMessage("Есть")
 
 
}
Добавлено через 2 минуты
или надо так подключать #include "unit.h"
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
07.12.2011, 16:30
Не нужно юнит новый создавать, просто вкладку с H файлом откройте в вашей форме и там переменную объявите.
0
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631
07.12.2011, 16:51  [ТС]
Алилуя все заработало как надо) но когда заработало понял что это уже не нужно)))
сейчас подругому решил пусть цикл будет бесконечным и обрывается только тогда когда выскакивает сообщения в котором сказанно " чтоб добавить еще одного человека нажмите Y иначе N" вот если нажмет N через условие if с помощью break прервать цикл, вот я только не знаю как передать переменной значение когда мы допустим на клавиатуре нажали Y или N и чтоб после нажатия окошко showmessage закрылось
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void __fastcall TForm1::Button1Click(TObject *Sender)
{
sp* list =new sp; //создаем указатель на голову списка
    sp *ptr;
    ptr=list;
 
        while (true){
        ptr->elfile.name = Edit1->Text;
        ptr->elfile.data = Edit2->Text;
        ptr->elfile.upd =  Edit3->Text;
        ListBox1->Items->Add(ptr->elfile.name + " " + ptr->elfile.data+ " " + ptr->elfile.upd);
        ShowMessage("Если хотите добавить еще одного человека нажмите Y иначе N");
        Name=
        if(name=='n') break;
        ptr->next=new sp;
        ptr=ptr->next;}
}
вот как в Name передать значение нажатой кнопки???
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.12.2011, 16:51
Помогаю со студенческими работами здесь

Формирование списка из N первых элементов исходного списка
Предикат proc выводит первые N элементов исходного списка. Как его переделать, чтобы он не выводил, а формировал новый список в переменной...

Формирование и просмотр списка и функция, которая изменяет каждое значение информационной части элемента списка на его квадрат
Написать программу, содержащую процедуры формирования и просмотра списка и функцию, которая изменяет каждое значение информационной части...

Формирование списка + выборка из этого же списка
Сформировать список, состоящий из 5-10 записей в соответствии с вариантом задания: Список личной библиотеки студента: автор,...

Сохранение списка объектов класса в ручную, сохранение в XML. Без сериализации.
Здравствуйте! Хотел спросить. Как можно сохранить список объектов в XML файл вручную? Я сериализацией делаю так: Класс, который будем...

Формирование упорядоченного списка из целых чисел; удаление из списка отрицательные чисел и удвоение положительных
Составить программу, которая: • обеспечивает первоначальный ввод целых чисел и формирует из них упорядоченного списка; • затем ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru