IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> Задача на связанные списки
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 44
Пол: Мужской

Репутация: -  0  +


Здравствуйте! Помогите, пожалуйста, решить задачу!
Вот текст:
Фирма по хранению и сбыту бытовых инструментов получает грузы с оборудованием по различным ценам и продает их затем с 20%-ной надбавкой, причем товары, полученные позднее, продаются в первую очередь. Нужно написать программу, считывающую записи о торговых операциях двух типов: операции по закупке и операции по продаже. Запись о закупке содержит префикс "R", количество товара, стоимость одного изделия и общую стоимость всей партии. Запись о продаже содержит префикс "S" и количество товара, а также стоимость данной партии. После считывания записи о закупке нужно вывести её на экран, например, если фирмой было продано 200 единиц оборудования, в которые входили 50 единиц с закупочной ценой 1,25$ и 150 единиц с закупочной ценой 1,1$, то должны быть напечатаны 3 строки:
50 штук по 1,50$ каждый на сумму 75.00$
150 штук по 1.32$ каждый на сумму 198.00$
Всего продано на сумму 273.00$
Если на складе отсутствует требуемое в заказе число изделий, то нужно продать все имеющиеся и напечатать сообщение об отсутствии остальной части на складе.

Как подойти к решению? Как здесь использовать связанные списки? Пожалуйста, проконсультируйте!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Связанные списки или ...связные списки? Если второе, то просто вместо массивов или файлов для хранения информации использовать списки (лучше - двухсвязные)...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 44
Пол: Мужской

Репутация: -  0  +


Задание на связанные списки.. На стеки..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
Задание на связанные списки.. На стеки..
mad.gif Так на списки или на стеки??? То же самое будет, если я тебе скажу: программу надо написать на Паскале. На Дельфи. На С++, разумеется... Выбери что-то одно, и иди в "FAQ: Все о динамических структурах данных".
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 44
Пол: Мужской

Репутация: -  0  +


Сорри, СВЯЗАННЫЕ СПИСКИ. Пошел учить матчасть.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


нифига не поняла sad.gif
на что в итоге задание?
Цитата
Стек— это линейный список с определенной дисциплиной обслуживания, которая заключается в том, что элементы списка всегда включаются, выбираются и удаляются с одного конца, называемого вершиной стека. Доступ к элементам здесь происходит по принципу “последним пришел — первым ушел” (LIFO — last in first out), т.е. последний включенный в стек элемент первым из него удаляется.

Цитата
Фирма по хранению и сбыту бытовых инструментов получает грузы с оборудованием по различным ценам и продает их затем с 20%-ной надбавкой, причем товары, полученные позднее, продаются в первую очередь.

так что ты это... уточни.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 44
Пол: Мужской

Репутация: -  0  +


Узнал у препода: решать задачу можно любым удобным способом, смысл задачи заключается в использовании динамической памяти. Значит, удобнее всего использовать стек?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






Ты сначала расскажи, как именно должен происходить процесс покупки/продажи, а потом будем смотреть. Что, ты вводишь несколько итемов подряд с префиксом R, они записываются куда-то (намеренно не говорю, куда, пока не разьяснишь процесс - никаких предположений делать нельзя), а потом идет запрос на покупку?

КАК это все происходит? Что ТЫ вводишь, в какой последовательности? Приведи пример ВСЕЙ последовательности (что именно ты хочешь чтоб появлялось на экране ОТ и ДО, а не "как-то вот так", "просто вводим". НЕ БЫВАЕТ "просто вводим", нужно идеально точно знать, в какой последовательности и ЧТО ИМЕННО ты будешь вводить, и как должна реагировать система...)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 44
Пол: Мужской

Репутация: -  0  +


Программа работает как терминал. Объявляются две записи, на покупку и продажу. Пользователь с клавиатуры вводит то, что ему нужно: выступает в роли либо покупателя у терминала, либо продавца терминалу. Записи о поступлении товара на терминал заносятся в стек..
Цитата
После считывания записи о закупке нужно вывести её на экран
Скорее всего не о закупке, а о продаже, наверно смысловая опечатка, как думаете? Не спросил... unsure.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


а вот такой вопрос - тип товара не задается?
как мы узнаем, ЧТО человеку нужно - только по цене ориентируемся, что ли?
*представила. приходит покупатель: "дайте мне что-нибудь по 17 рублей!" - " у нас ничего такого нет, есть по 15 и 19" - "нет, мне нужно именно по 17" - "но они раньше стоили 17, а теперь подорожали!"


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 44
Пол: Мужской

Репутация: -  0  +


Да, видимо так. Посмотри задание, в записи не указан тип товара. Значит, продаем одно и то же, только от разных поставщиков.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


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


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

Группа: Пользователи
Сообщений: 44
Пол: Мужской

Репутация: -  0  +


Я уже написал.. smile.gif
Посмотрите, пожалуйста, есть ошибки? По-моему, есть в сторках очистки памяти.. Может что-то можно упростить?

Программа (Показать/Скрыть)


Прикрепленные файлы
Прикрепленный файл  DIN2.PAS ( 4.34 килобайт ) Кол-во скачиваний: 92
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Гость






Цитата
Посмотрите, пожалуйста, есть ошибки?
Мне так нравится этот вопрос... "Прогоните и отладьте эту программу" - его второй смысл. ТЫ же ее писал, так отлаживай. Добейся сначала 100% правильного функционирования, а уж потом будешь гоняться за оптимальностью.

Я еще раз повторяю - программа должна прежде всего выдавать правильный результат, если она этого не делает - грош ей цена.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #15


Новичок
*

Группа: Пользователи
Сообщений: 44
Пол: Мужской

Репутация: -  0  +


Опять ты неправильно понял..... nea.gif Программа работает правильно, есть даже некоторая защита от дурака. Я хочу, чтобы вы мне помогли её оптимизировать. Я написал так, насколько мне хватило опыта. У вас опыт больше, поэтому я и прошу мне помочь.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #16


Гость






     a:=#0
Until a='z';
blink.gif blink.gif И как выходим из программы?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Новичок
*

Группа: Пользователи
Сообщений: 44
Пол: Мужской

Репутация: -  0  +


Это первое, что я исправил smile.gif Спасибо)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #18


Гость






Кстати, у меня есть смутные подозрения, что если просто сделать выход по нажатию 'z', скажем, так:

Case a of
...
'z': Break; { <-- Выходим из Repeat ... Until }
end;

, выбрать 2 раза пополнение, а потом, не производя покупок выйти из программы через 'z', то программа завершится аварийно (скорее всего - с 'invalid pointer operation' yes2.gif ). Я не прав?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #19


Новичок
*

Группа: Пользователи
Сообщений: 44
Пол: Мужской

Репутация: -  0  +


Прав.. А в чем дело?( Неполная очистка стека?

a:=#0;
a:=ReadKey;
Until a=#27;
If B<>Nil Then Dispose(B);
If TopB<>Nil Then TopB:=Nil;
If S<>Nil Then Dispose(S);
If TopS<>Nil Then TopS:=Nil;

Так ошибка не выскакивает
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Гость






Наоборот, ты пытаешься неоднократно применить Dispose к одному и тому же указателю, как результат - второй раз Dispose применяется к Nil, и ты видишь то, что видишь...

Что называется, "Вы глюков хотите - их есть у меня" (С) smile.gif

Хы... Хитрый. А теперь попробуй сделать так:

Begin { <--- Начало основной части программы }
WriteLn('Перед началом: ', MemAvail); { <-- Запиши это число }
ReadLn;

{ ... Вся твоя программа ... }

WriteLn('Перед завершением', MemAvail); { <-- Сравни с тем, что записал выше }
ReadLn;
End.


Эти 2 числа как пить дать не совпадут, а это означает, что у тебя есть утечка памяти... blum.gif
 К началу страницы 
+ Ответить 

2 страниц V  1 2 >
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 22.11.2017 17:55
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"