![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() ![]() |
![]() |
ninja |
![]()
Сообщение
#1
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Добрый вечер. Необходимо решить следующую задачу:
Разработать алгоритм и программу. Организовать и заполнить два линейных динамических списка L1 и L2 типа FIFO, элементами которых являются целые числа, принимающие значения в диапазоне типа Integer. Выполнить следующие действия над списками: - удалить из списка L1 все отрицательные числа и поместить их в список L2, взяв их по модулю; - определить включает ли список L1 список L2, если включение имеет место, то объединить эти списки в один и упорядочить по возрастанию значений элементов. Действия выполнятся в произвольном порядке по выбору пользователя с отображением результатов преобразований. При заполнении списка и добавлении элементов выполнить анализ объема доступной динамической памяти. Начал писать программу столкнулся с такой проблемой необходимо в функцию передать 2 значения, из другой функции т.е. у меня функция spisok_L1 которая заполняет список, и функция prosmotr, но чтобы вывести значения из памяти мне необходимо знать адрес откуда начинать, и когда заканчивать вывод. Переменная schet4ik отвечает за количество элементов в списке, эта переменная передается, но как мне передать переменную которая указывает на начало списка. #include <iostream.h> |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата но как мне передать переменную которая указывает на начало списка. Через двойной указатель. Вот так, например:int spisok_L1(struct L1 **first) |
ninja |
![]()
Сообщение
#3
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Спасибо огромное работает.
|
ninja |
![]()
Сообщение
#4
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Появилась еще одна проблема: когда запускаю программу выбираю пункт меню добавить, добавляю 3 элемента т.е. ввожу 1,2,3 затем нажимаю просмотр, все выводится нормально, если хочу добавить еще элементы он добавляет только 1 остальные почему-то не выводятся, отслеживал по адресам вроде все нормально.
#include <iostream.h> |
volvo |
![]()
Сообщение
#5
|
Гость ![]() |
Я устал уже догадываться, тебе нужен С или С++, ты в заголовке пишешь одно, а в самом посте - другое. Вот как производится добавление в список и его распечатка на чистом С:
typedef Естественно, что брать адрес при вызове функции prosmotr не нужно, потому что ничего не должно изменяться, указатели на начало и на конец списка после печати должны быть такими же, как и до нее. Все прекрасно работает - добавляются значения в конец списка и после распечатки тоже. Да и функцию menu я бы переписал, зачем выводить по одному символу, если можно сразу вывести строку? |
ninja |
![]()
Сообщение
#6
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Спасибо огромное Владимир, вообще нужно на С++, я извиняюсь, за такой "кривой код" просто я не знаю в чем отличия С и С++, преподаватель задачу поставил, я кусками в интернете ищу, причем когда вставляю в компилятор С++ все работает.
|
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Цитата просто я не знаю в чем отличия С и С++ Вот это - больше похоже на С++, чем то, что было написано раньше. Насколько я понимаю (по использованию функций clrscr() и cprintf()), у тебя обычный dos-овский Turbo C++? Тогда мой код будет работать.#include <iostream.h> |
ninja |
![]()
Сообщение
#8
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
ага, у меня обычный dos-овский Turbo C++, Владимир спасибо Вам огромное все отлично работает, сейчас буду разбираться.
|
ninja |
![]()
Сообщение
#9
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Добавил еще 1 функцию Sort () которая должна сортировать значения в 1м списке, т.е если значения в 1м списке отрицательные их нужно из первого списка удалить и поместить в другой (по модулю), все вроде нормально работает, из 1го все нормально удаляется, только когда помещаю во второй, данные вроде заносятся, а когда считываю 2й список пуст. Объявил еще 1 класс для 2го списка.
#include <iostream.h> Сообщение отредактировано: ninja - 20.05.2010 16:54 |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Цитата Объявил еще 1 класс для 2го списка. Зачем? Достаточно было сделать:List myList;... А теперь поподробнее о сортировке. Как именно тебе надо отсортировать список, можно уточнить? |
ninja |
![]()
Сообщение
#11
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Отсортировать нужно следующим образом, в 1м списке например содержаться следующие элементы:
1 -2 -3 -4 5 6 -7 8 после сортировки должно получится следующее: в 1м списке должны остаться: 1 5 6 8 т.е все положительные, а второй список должен содержать отрицательные элементы, только взятые по модулю, т.е 2 3 4 7 Затем определить включает ли 1й список, 2й список, если включение имеет место, то объединить эти списки в один и упорядочить по возрастанию значений элементов. |
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
Ты постоянно что-то недоговариваешь... Ну, допустим, со списком <1, -2, -3, -4, 5, 6, -7, 8> все понятно. Он изначально упорядочен по модулю. А если так: <10, -2, -23, -4, 15, 6, -7, 8> , тогда как быть? Если просто "раскидать" список на 2 в зависимости от знака - то это никакая не сортировка, это просто разделение. Если сортировка - то говори, каков критерий. (Для информации: после сортировки списка в нем должно остаться ровно столько же элементов, сколько было до нее. У тебя это не выполняется.)
|
ninja |
![]()
Сообщение
#13
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Извиняюсь.... Необходимо сначала разделить 1й список на два , затем проверить включает ли 1й список, второй список, если включает, то объединить 1й и 2й список, и упорядочить элементы по возрастанию.
Например 1й список содержит элементы (1,-2,-5,-7,3) сначала мне нужно во 2й записать отрицательный элементы и взять их по модулю т.е получится (2,5,7) затем нужно удалить из 1го списка отрицательные т.е получится (1,3) и проверить вхождения 2го списка в первый в данном случае вхождения нет. А вот если например 1й список содержит, элементы (1,3,8) а второй содержит элементы (3,8), эти списки нужно объединить и упорядочить по возрастанию т.е получится (1,3,3,8,8). Сообщение отредактировано: ninja - 20.05.2010 18:35 |
volvo |
![]()
Сообщение
#14
|
Гость ![]() |
Значит, смотри что у меня получилось:
![]() Рассказываю: эта программа компилируется (с Warning-ами, но они не особо страшные, к тому же, если вынести реализацию методов с циклами for из определения класса, наружу, эти Warning-и пропадут) и работает. Вроде бы я ничего не упустил, тестируй программу на как можно большем числе тестов, если где-то работает не так, как должно - говори, на каких данных это происходит... Теперь о том, как именно оно работает. Я все повесил на пункт меню "Добавление". То есть, сразу вводится первый список, тут же он разделяется на 2 (по тому признаку, который ты указал), проверяется вхождение одного в другой, и если надо - то слияние и сортировка. Тестировал на списке <1, -3, 3, 8, -8, 11> - получается как и положено <1, 3, 3, 8, 8, 11>. Все, что надо, чтобы закончить - это дописать деструктор списка, чтобы выделенная память возвращалась назад... |
ninja |
![]()
Сообщение
#15
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Владимир, тестировал сегодня программу, получились следующие результаты: если ввести список (1, 2, 3, 4, 5, -2, -4, -3)
должно получится 1й список (1, 2, 2, 3, 3, 4, 4, 5) а во 2м (2, 4, 3), а программа выводит: 2 added ... 1, 2, 3, 4, 5, -4, -3, 2 first list = -4, -3, 1, 2, 2, 3, 4, 5 second list = 2 Пробовал ввести, то что Вы вводили т.е. вводил 1, -3, 3, 8, -8, 11 получилось 3 added 1, 3, 8, -8, 11, 3 first list = -8, 1, 3, 3, 8, 11 second list = 3 если добавить еще 1 элемент (5) выдает 3 added 1, 3, 3, 8, 11, 5, 3 8 added first list 1, 3, 3, 3, 5, 8, 8, 11 second list 3, 8 |
volvo |
![]()
Сообщение
#16
|
Гость ![]() |
|
ninja |
![]()
Сообщение
#17
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
|
volvo |
![]()
Сообщение
#18
|
Гость ![]() |
У меня GCC, там все нормально, вечером попробую проверить в Турбо С++, может действительно дело в компиляторе...
|
ninja |
![]()
Сообщение
#19
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 103 Пол: Мужской Реальное имя: Александр Репутация: ![]() ![]() ![]() |
Спасибо, попробовал по-другому ввел сначала положительные числа т.е 1, 3, 8, 11, а затем отдельно сначала -3, потом еще отдельно -8, вроде получилось, только почему-то получилось 3 тройки т.е 1, 3, 3, 3, 8, 8, 11
сейчас попробую тоже скачать GCC |
volvo |
![]()
Сообщение
#20
|
Гость ![]() |
Ну, скачай. Как скачаешь - на GCC (и на любом другом современном компиляторе) задача решается гораздо короче.
Вот так: (Показать/Скрыть)
|
![]() ![]() |
![]() |
Текстовая версия | 27.07.2025 13:23 |