• XSS.stack #1 – первый литературный журнал от юзеров форума

Интересная Задача

MaFb14

CD-диск
Пользователь
Регистрация
04.05.2005
Сообщения
10
Реакции
0
"Зал"-концерт зал, в котором конечная расстановка мест не известна, известно, что максимум рядов 100, а мест в ряде 30.

Составить структуру данных, которая будет хранить план зала используя минимум памяти. Не обязательно реализация её в коде, можно только подробное описание. Логически каждое место в зале может имеет два состояние ЗАНЯТО и СВОБОДНО.

Понятно что 100*30=3000(байт) но как ещё меньше!! Как создать структуру в которой место в памяти занимают только нужные данные, а те которые не нужны просто NUll ...

Пример можно на Delphi\Vb.. да вообше хоть на чем)))
 
Пишет BUG(O)R:

Значит так, принцип таков:

1 байт = 8 бит
Наши места - это по сути true(занято) или false(свободно), другими словами 1 или 0, соответственно в один байт можно впихнуть 8 мест!

3000/8 = 375 байт!

Реализовать это на VB/Delphi я не знаю как... нужно прибегать к помощи ассемблера, лучше 16 битного и делать com приложение, тогда размер будет минимальный!
 
Пацаны спасибо!!
Но в чём прикол... я тока ша допёр!! Надо ведь структуру данных замутить!!

Не знаю как хранить-массивом, списком аля структурой..
и еще как будет определяться занято место или нет, а также как будут кодироваться не существующие места? Вотвка вот ботва!!!
Перцы выручайте!!)))
 
Ты ваще напиши как тебе прогу фофрмить надо? Тебе надо чтобы места могли динамически меняться т.е. чтобы можно было указывать какое занято какое нет? Я не пойму всей сути....
 
вам был выделен компьютер Intel 8088 c 8 Kb ОЗУ. Как что вам надо написать программу так чтобы план зала занимал наименьшее места. Но конечная расстановка мест не известна, известно, что максимум рядов 100, а мест в ряде 30.
Ваша задача:
Составить структуру данных, которая будет хранить план зала используя минимум памяти. Не обязательно реализация её в коде, можно только подробное описание. Логически каждое место в зале может имеет два состояние ЗАНЯТО и СВОБОДНО. Исходя из этого, вам стоит составить программу.

- вся абсолютно дословнаная задача!!!..
Добавлено [time]1115727383[/time]
Там же ведь ещё и неизвестно сколько именно в зале мест!!!
Но известно что их меньше 3000. Мене надо ети места както сформировать...
Как в коде их содержать экономичнее, двумерным массивом чёль? - по моему есть более экономичный вариант тока я его не знаю(..

"Ета задача дана в универе"- еслиф чё!))
Добавлено [time]1115727443[/time]
Там же ведь ещё и неизвестно сколько именно в зале мест!!!
Но известно что их меньше 3000. Мене надо ети места както сформировать...
Как в коде их содержать экономичнее, двумерным массивом чёль? - по моему есть более экономичный вариант тока я его не знаю(..
 
Садюги преподы... :angry2:
На 8088 не работал :blink: , но знаю, что есть команда "DEBUG"(ещё со времён ДОС и до сих пор существует) и вводить программу непосредственнов память в мнемокодах! :crazy:
Там есть только ДОС прерывания и прерывания БИОС... т.к. это досовская модель программирования + функции для выполнения этих прерываний...
Кароч, если те нужна только теория, то я могу помучиться и что-нить накатать :bang: , а вот реализовывать это в DEBUG - это просто самоубийство! :fool:
 
> Реализовать это на VB/Delphi я не знаю как...
> нужно прибегать к помощи ассемблера, лучше 16
> битного и делать com приложение, тогда размер
> будет минимальный!
ты понял, что сказал?

Для чайников, простейшее решение(через строку длиной 375 символов):

А. Добавление записи
1. получаем цифру (например место 13)
2. Находим позицию буквы(вычитаем 1, делим на 8 короче, прибавляем единицу) получаем 2
3. получаем порядковый номер буквы, которая находится на этой позиции(типа пробел - это тридцать два)
4. раскладываем полученное число на 8 (128, 64, 32, 16, 8, 4, 2, 1) единичек и нулей, определяем позицию бита(остаток при делении числа на 6 (13 ост 8 =5)), заменяем этот бит на 1, складываем в число.
5. По числу делаем букву
6. При необходимости добавление повторить :yes2:

Б. "Убиранее" записи

то же, что и добавление, но в пункте 4 "заменяем этот бит на 0"

Фсе

Добавлено [time]1115732235[/time]
Составить структуру данных, которая будет хранить план зала используя минимум памяти. Не обязательно реализация её в коде, можно только подробное описание. Логически каждое место в зале может имеет два состояние ЗАНЯТО и СВОБОДНО. Исходя из этого, вам стоит составить программу.
DONE ;)
 
nerezus
Дык я имел ввиду размер, который будет занимать приложения... поэтому и предложил ассемблер для дос, потому что меньше приложений com структуруы не найти!
Мож ты не та кпонял?
 
а структура?....
строка 375 символов... но если мест меньше, то ((места-1)дел_нацело_на 8)+1 символов
Добавлено [time]1115732969[/time]
про какую структуру-то речь?
Добавлено [time]1115733194[/time]
способ еще легче - создать массив типа boolean
однако такое чувство, что ибанутые компиляторы отводят на свбж не 1 бит, а 1-4 байта

так что способ отпадает
Добавлено [time]1115733402[/time]
а вообще можно заюзать еще что-то типа gzip() над строкой, но не в твоем случае =)))
 
Ну например тот же файл написанный на DOS ассемблере, но pe формата будет вешать гораздо больше свеого комовского аналога!
Добавлено [time]1115733487[/time]
Кароч, ему теория нужна, так что надо и идти в этом направлении!
 
а вообще 386 - очень мощная машинка(3 года сидел на такой) -поэтому нех*й извращаться =)
Добавлено [time]1115733746[/time]
ограничен ты в ней лишь 640 кб(т.к. дос) - притащи с собой драйвер расширенной памяти himem.sys, тогда сможешь все 8 метров юзать
Добавлено [time]1115733861[/time]
и, как говорится, ниипет...
 
Я за 386 года 2 сидел, потом за 486 ещё 3! =) Не 640, а 64! В win32 это пространство для каждого приложения расширено до 4 Гб.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх