0 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 37
|
||||||
1 | ||||||
Формирование списка08.07.2013, 10:09. Показов 2156. Ответов 17
Метки нет (Все метки)
Начал учить Си недавно. ВРоде все идет более-менее нормально, но на списках я встал колом и не могу понять почему так происходит. Итак, задача состоит в том, чтобы по заранее введенным хапактеристикам выводить графики функций. В начале работы мы не знаем сколько их хочет ввести пользователь. Как можно реализовать список для данной задачи?
Вот все структуры, которые я использую в своей программе и кусок кода по выводу графика
0
|
08.07.2013, 10:09 | |
Ответы с готовыми решениями:
17
Дублирование вхождения каждого элемента списка One и формирование из этих значений списка Double (пояснить условие) Формирование и просмотр списка и функция, которая изменяет каждое значение информационной части элемента списка на его квадрат Формирование упорядоченного списка из целых чисел; удаление из списка отрицательные чисел и удвоение положительных Формирование списка из текстового файла |
0 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 37
|
|
08.07.2013, 10:32 [ТС] | 3 |
В общих чертах. Но для данной задачи не получается никак вообще. Потому и прошу помощи, чтобы по готовому примеру разобраться детально. Ну или может хоть как-то помочь кто-то сможет
0
|
0 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 37
|
|
08.07.2013, 10:57 [ТС] | 5 |
Все верно, нужно просто создавать новые point. Но так как я новичек, то я никак не могу въехать каким образом это происходит. То есть каким образом программа поймет, что мне больше не надо ничего создавать? Как это реализовать я не знаю, а другие примеры из интернета ничем не помогают мне.
0
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
||||||
08.07.2013, 11:11 | 6 | |||||
Цикл while(), после каждой итерации (добавления нового элемента в список) вопрос: продолжить? (y\n)? и ввод в char. Если вводится n, то выход из цикла.
Добавлено через 1 минуту Вот, для образца, создание списка в цикле. Только тут данные вводятся из файла, и выход - когда данные в файле заканчиваются:
0
|
Почетный модератор
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
|
||||||
08.07.2013, 11:16 | 7 | |||||
Может быть не совсем то, но
0
|
0 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 37
|
|
08.07.2013, 11:30 [ТС] | 8 |
Но я делаю эту программу в билдере. На форме, а не в консольном режиме, то есть мне надо будет сделать какую-то кнопку, нажав на которую, пользователь может продолжить ввод?
0
|
0 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 37
|
|
08.07.2013, 11:36 [ТС] | 10 |
Так тут же мы вводим заранее известное количество графиков. А я не знаю это число.
0
|
Почетный модератор
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
|
|
08.07.2013, 11:48 | 11 |
В определенный момент программы вы должны будете знать это число. Иначе это невозможно сделать будет. Алгоритм выделяющий ровно я_не_знаю_сколько памяти. )) Такого же не бывает.
Тут возможны два варианта: 1) Либо в определенный момент пользователю предлагается ввод общего количества; 2) Либо, что хуже, общее количество зануляется при старте программы и увеличивается на +1 на каждой итерации ввода. Так что у вас?
0
|
0 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 37
|
|
08.07.2013, 11:53 [ТС] | 12 |
Ну тогда скорее всего второй вариант. Но как его реализовать в билдере?
А нельзя сделать например как-то так: пользователь вводит данные и нажимает кнопку "добавить". Программа записывает эти данные, затем пользователь вводит новые данные иповторно нажимает кнопку добавить и данные опять записываются. Ну к примеру в тот же список. Или так не получится?
0
|
Почетный модератор
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
|
|
08.07.2013, 12:19 | 13 |
Ага. В общем виде у вас есть форма, в которой заполняются поля будущего элемента списка, а по нажатию на какую-нибудь кнопочку типа "добавить новую", происходит добавление. Приблизительно так?
И вы хотите использовать именно списки? Не какие-нибудь там векторы или еще какие-нибудь контейнеры, а списки.
0
|
0 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 37
|
||||||
08.07.2013, 12:29 [ТС] | 14 | |||||
Да, абсолютно верно. Записываем данные в первую ячейку. Ставим ссылку на следующую ячйеку и заново воодим данные. И так пока пользователь не введет все, что ему необходимо. Да, задача стоит построить это именно списком.
Я как-то так написал, но не уверен будт ли это работать
0
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
08.07.2013, 22:19 | 15 |
Для списка как раз и бывает (в чём одно из отличий от массивов). Память выделяется под один элемент, который и добавляется в список. Сколько таких элементов добавить - решает пользователь. Robbie4LFC, как один из вариантов, сделайте цикл добавления и кнопку, при нажатии на которую, происходит выход из цикла. В цикле, после добавления очередного элемента, проверяйте нажатие этой кнопки.
0
|
0 / 0 / 0
Регистрация: 08.07.2013
Сообщений: 37
|
||||||
09.07.2013, 00:09 [ТС] | 16 | |||||
Спасибо всем за помощь. Реализовал следующим образом:
0
|
5498 / 4893 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
|
|
09.07.2013, 01:47 | 17 |
Вообще-то, сначала память под элемент списка выделяется, а потом данные вводятся в этот элемент. Под head где память выделяется? Конец списка как у вас определяется? А как выход из ввода сделали?
0
|
SatanaXIII
|
09.07.2013, 09:57
Формирование списка
#18
|
Не по теме: Перефразирую: у нас сперва ноль памяти выделено, потом на плюс один элемент списка (известное значение), потом еще на плюс один... У нас всегда известно сколько нужно выделить. Это статические массивы работают по принципу "А выдели мне приблизительно двести пятьдесят байт под буфер, думаю хватит".
0
|
09.07.2013, 09:57 | |
Формирование символьного двухсвязного списка Формирование списка и работа с ним Формирование нового списка или из pascal -> с++ Динамические структуры данных. Формирование линейного списка. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |