Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Robbie4LFC
0 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 37
#1

Формирование списка - C++

08.07.2013, 10:09. Просмотров 807. Ответов 17
Метки нет (Все метки)

Начал учить Си недавно. ВРоде все идет более-менее нормально, но на списках я встал колом и не могу понять почему так происходит. Итак, задача состоит в том, чтобы по заранее введенным хапактеристикам выводить графики функций. В начале работы мы не знаем сколько их хочет ввести пользователь. Как можно реализовать список для данной задачи?
Вот все структуры, которые я использую в своей программе и кусок кода по выводу графика
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
typedef struct complex
{
        float real;
        float image;
}complex;
typedef struct properties
{
        float ampl;
        float freq;
        float phase;
}properties;
typedef struct point
{
        properties p;
        complex comp;
        point *next;
}point;
 point* newpoint = new point;
        newpoint->p.ampl = StrToFloat (Edit5->Text);
        newpoint->p.freq = StrToFloat (Edit4->Text);
        newpoint->p.phase = StrToFloat (Edit6->Text);
        newpoint->comp.real = cos(newpoint->p.phase)*newpoint->p.ampl;
        newpoint->comp.image = sin(newpoint->p.phase)*newpoint->p.ampl;
        Series4->Add(newpoint->comp.real);
        Series5->Add(newpoint->comp.image);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2013, 10:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Формирование списка (C++):

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

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

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

Формирование списка и работа с ним - C++
Задали написать программу на с++. Написал её, а точнее составил из разных кусков, которые были даны на семинаре. Программа работает, но ,к...

Формирование списка из текстового файла - C++
Люди объясните пожалуйста словесно выполнение функции ввода списка из текстового файла, желатено построчно очень важно понять, ну и по...

Формирование символьного двухсвязного списка - C++
нужна функция формирования символьного 2вусвязного списка!!! Хэлп!!!

17
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.07.2013, 10:25 #2
Цитата Сообщение от Robbie4LFC Посмотреть сообщение
Как можно реализовать список для данной задачи?
А вообще, как списки реализовываются знаете?
0
Robbie4LFC
0 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 37
08.07.2013, 10:32  [ТС] #3
Цитата Сообщение от alsav22 Посмотреть сообщение
А вообще, как списки реализовываются знаете?
В общих чертах. Но для данной задачи не получается никак вообще. Потому и прошу помощи, чтобы по готовому примеру разобраться детально. Ну или может хоть как-то помочь кто-то сможет
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.07.2013, 10:45 #4
Цитата Сообщение от Robbie4LFC Посмотреть сообщение
Но для данной задачи не получается никак вообще.
В чём сложность именно для этой задачи? Создавать, в цикле, новые point и добавлять их в список? Или нужно что-то другое?
0
Robbie4LFC
0 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 37
08.07.2013, 10:57  [ТС] #5
Цитата Сообщение от alsav22 Посмотреть сообщение
В чём сложность именно для этой задачи? Создавать, в цикле, новые point и добавлять их в список? Или нужно что-то другое?
Все верно, нужно просто создавать новые point. Но так как я новичек, то я никак не могу въехать каким образом это происходит. То есть каким образом программа поймет, что мне больше не надо ничего создавать? Как это реализовать я не знаю, а другие примеры из интернета ничем не помогают мне.
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.07.2013, 11:11 #6
Цитата Сообщение от Robbie4LFC Посмотреть сообщение
То есть каким образом программа поймет, что мне больше не надо ничего создавать?
Цикл while(), после каждой итерации (добавления нового элемента в список) вопрос: продолжить? (y\n)? и ввод в char. Если вводится n, то выход из цикла.

Добавлено через 1 минуту
Вот, для образца, создание списка в цикле. Только тут данные вводятся из файла, и выход - когда данные в файле заканчиваются:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
struct Node
{
   int it;
   struct Node *next;
};
 
Node *front = NULL; // начало списка
Node *rear  = NULL; // конец  списка
 
while (!f.eof())
{
    Node *add = new Node; // новый элемент списка
    if (add == NULL) return false; // если память не выделена
        
    f >> add -> it;
    add -> next = NULL;
        
    if (front == NULL) // если список пустой, то в начало
        front = add; // front начало списка
        
    else  rear -> next = add; // если список не пустой, то в конец
    rear = add; // rear конец списка
 }
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,533
Завершенные тесты: 1
08.07.2013, 11:16 #7
Может быть не совсем то, но
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int count = StrToInt(Edit->Text);
point *arrPoint = new point[count];
 
for(int i=0; i<count; i++)
  {
        arrPoint[i]->p.ampl = StrToFloat (Edit5->Text);
        arrPoint[i]->p.freq = StrToFloat (Edit4->Text);
        arrPoint[i]->p.phase = StrToFloat (Edit6->Text);
        arrPoint[i]->comp.real = cos(arrPoint[i]->p.phase)*arrPoint[i]->p.ampl;
        arrPoint[i]->comp.image = sin(arrPoint[i]->p.phase)*arrPoint[i]->p.ampl;
        Series4->Add(arrPoint[i]->comp.real);
        Series5->Add(arrPoint[i]->comp.image);
  }
0
Robbie4LFC
0 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 37
08.07.2013, 11:30  [ТС] #8
Цитата Сообщение от alsav22 Посмотреть сообщение
Цикл while(), после каждой итерации (добавления нового элемента в список) вопрос: продолжить? (y\n)? и ввод в char. Если вводится n, то выход из цикла.
Но я делаю эту программу в билдере. На форме, а не в консольном режиме, то есть мне надо будет сделать какую-то кнопку, нажав на которую, пользователь может продолжить ввод?
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.07.2013, 11:35 #9
Цитата Сообщение от Robbie4LFC Посмотреть сообщение
На форме, а не в консольном режиме, то есть мне надо будет сделать какую-то кнопку, нажав на которую, пользователь может продолжить ввод?
С формами не знаком, это уж вам видней как сделать. По билдеру отдельные ветки форума есть.
0
Robbie4LFC
0 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 37
08.07.2013, 11:36  [ТС] #10
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Может быть не совсем то, но
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int count = StrToInt(Edit->Text);
point *arrPoint = new point[count];
 
for(int i=0; i<count; i++)
  {
        arrPoint[i]->p.ampl = StrToFloat (Edit5->Text);
        arrPoint[i]->p.freq = StrToFloat (Edit4->Text);
        arrPoint[i]->p.phase = StrToFloat (Edit6->Text);
        arrPoint[i]->comp.real = cos(arrPoint[i]->p.phase)*arrPoint[i]->p.ampl;
        arrPoint[i]->comp.image = sin(arrPoint[i]->p.phase)*arrPoint[i]->p.ampl;
        Series4->Add(arrPoint[i]->comp.real);
        Series5->Add(arrPoint[i]->comp.image);
  }
Так тут же мы вводим заранее известное количество графиков. А я не знаю это число.
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,533
Завершенные тесты: 1
08.07.2013, 11:48 #11
Цитата Сообщение от Robbie4LFC Посмотреть сообщение
Так тут же мы вводим заранее известное количество графиков. А я не знаю это число.
В определенный момент программы вы должны будете знать это число. Иначе это невозможно сделать будет. Алгоритм выделяющий ровно я_не_знаю_сколько памяти. )) Такого же не бывает.
Тут возможны два варианта:
1) Либо в определенный момент пользователю предлагается ввод общего количества;
2) Либо, что хуже, общее количество зануляется при старте программы и увеличивается на +1 на каждой итерации ввода.
Так что у вас?
0
Robbie4LFC
0 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 37
08.07.2013, 11:53  [ТС] #12
Цитата Сообщение от SatanaXIII Посмотреть сообщение
В определенный момент программы вы должны будете знать это число. Иначе это невозможно сделать будет. Алгоритм выделяющий ровно я_не_знаю_сколько памяти. )) Такого же не бывает.
Тут возможны два варианта:
1) Либо в определенный момент пользователю предлагается ввод общего количества;
2) Либо, что хуже, общее количество зануляется при старте программы и увеличивается на +1 на каждой итерации ввода.
Так что у вас?
Ну тогда скорее всего второй вариант. Но как его реализовать в билдере?
А нельзя сделать например как-то так: пользователь вводит данные и нажимает кнопку "добавить". Программа записывает эти данные, затем пользователь вводит новые данные иповторно нажимает кнопку добавить и данные опять записываются. Ну к примеру в тот же список. Или так не получится?
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,533
Завершенные тесты: 1
08.07.2013, 12:19 #13
Цитата Сообщение от Robbie4LFC Посмотреть сообщение
А нельзя сделать например как-то так: пользователь вводит данные и нажимает кнопку "добавить". Программа записывает эти данные, затем пользователь вводит новые данные иповторно нажимает кнопку добавить и данные опять записываются. Ну к примеру в тот же список.
Ага. В общем виде у вас есть форма, в которой заполняются поля будущего элемента списка, а по нажатию на какую-нибудь кнопочку типа "добавить новую", происходит добавление. Приблизительно так?
И вы хотите использовать именно списки? Не какие-нибудь там векторы или еще какие-нибудь контейнеры, а списки.
0
Robbie4LFC
0 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 37
08.07.2013, 12:29  [ТС] #14
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Ага. В общем виде у вас есть форма, в которой заполняются поля будущего элемента списка, а по нажатию на какую-нибудь кнопочку типа "добавить новую", происходит добавление. Приблизительно так?
И вы хотите использовать именно списки? Не какие-нибудь там векторы или еще какие-нибудь контейнеры, а списки.
Да, абсолютно верно. Записываем данные в первую ячейку. Ставим ссылку на следующую ячйеку и заново воодим данные. И так пока пользователь не введет все, что ему необходимо. Да, задача стоит построить это именно списком.
Я как-то так написал, но не уверен будт ли это работать
C++
1
2
3
4
5
6
7
8
9
point *newpoint = new point;
        {
                newpoint->p.ampl = StrToFloat (Edit5->Text);
                newpoint->p.freq = StrToFloat (Edit4->Text);
                newpoint->p.phase = StrToFloat (Edit6->Text);
                newpoint->comp.real = cos(newpoint->p.phase)*newpoint->p.ampl;
                newpoint->comp.image = sin(newpoint->p.phase)*newpoint->p.ampl;
                newpoint->next = newpoint;
        }
0
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.07.2013, 22:19 #15
Цитата Сообщение от SatanaXIII Посмотреть сообщение
В определенный момент программы вы должны будете знать это число. Иначе это невозможно сделать будет. Алгоритм выделяющий ровно я_не_знаю_сколько памяти. )) Такого же не бывает.
Для списка как раз и бывает (в чём одно из отличий от массивов). Память выделяется под один элемент, который и добавляется в список. Сколько таких элементов добавить - решает пользователь. Robbie4LFC, как один из вариантов, сделайте цикл добавления и кнопку, при нажатии на которую, происходит выход из цикла. В цикле, после добавления очередного элемента, проверяйте нажатие этой кнопки.
0
08.07.2013, 22:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.07.2013, 22:19
Привет! Вот еще темы с ответами:

Формирование нового списка или из pascal -> с++ - C++
Добрый вечер всем! Друзья помогите пожалуйста решить задачу на языке С++. Комп содержит записи, состоящие из трех полей: 1) фамилия 2)...

Динамические структуры данных. Формирование линейного списка. - C++
Текст помощи для некоторой программы организован в виде линейного списка. Каждая компонента текста помощи содержит термин (слово) и...

Формирование списка по приципу "очереди" - C++
Можете ,пожалуйста, внятно объяснить, а то сижу уже часа 2 и не понимаю, что к чему #include &lt;iostream&gt; using namespace std; ...

Написать код программы, выполняющей растяжку списка и вставку, удаление из списка и сжатие списка - C++
Люди ПОМОГИТЕ осталось совсем мало , мне нужна помощь!!! написать код программ: 1) Написать код программы, выполняющей растяжку...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru