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

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

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

> 2 переменные по байту, Олимпиадная задача
сообщение
Сообщение #1


Новичок
*

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

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


Вводятся 4 числа:
1-е от 0 до 3
2-е от 4 до 10
3-е от 11 до 21
4-е от 0 до 255

используя только 2 переменных по байту
Вывести их в обратном порядке...

Сообщение отредактировано: Ipkis -


--------------------
Возможно ты всего лишь человек,
но для кого-то ты весь мир..........
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
Ответов(1 - 19)
сообщение
Сообщение #2


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

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


Схема.
1 переменная (байт) - 4-ое число (от 0 до 255).
2 переменная:

xxxxxxxx (1 байт, 8 бит, где x - i-тый бит).
первые 2 бита (0,1) юзаешь под 1 число
биты 2-4 под 2 число
и 4- 7 под 3 число. (нумерация битов уц меня с 0).


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


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

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


Вот программа:
uses wincrt;
var
a,c:byte;
begin
c:=0; a:=0;
writeln('enter 1 chislo');
readln©; a:=c shl 6; {1 add}
writeln('enter 2 chislo');
readln©; a:=a or (c shl 3); {2 add}
writeln('enter 3 chislo');
readln©; a:=a or (c-11);
writeln('enter 4 chislo');
readln©;
writeln('-------------------');
writeln(a,' ',c);
writeln('-------------------');
writeln©;
c:=0 or (a shl 5);
c:=c shr 5;
writeln(c+11);
c:=0 or (a shl 2);
c:=0 or (c shr 5);
writeln©;
c:=0 or (a shr 6);
writeln©;
readln;
end.


p.s. спасибо за задачу, давно не работал с битовыми операциями, интересно... good.gif


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


Новичок
*

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

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


Цитата(Altair @ 22.11.2005 3:25)
Схема.
1 переменная (байт) - 4-ое число (от 0 до 255).
2 переменная:

xxxxxxxx (1 байт, 8 бит, где x - i-тый бит).
первые 2 бита (0,1) юзаешь под 1 число
биты 2-4 под 2 число
и 4- 7 под 3 число. (нумерация битов уц меня с 0).


Спасиба за ответ...

Но вот почему 4й бит у тебя и во 2м числе и в 3м??????


--------------------
Возможно ты всего лишь человек,
но для кого-то ты весь мир..........
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Прогрессор
****

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

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


To: Altair
A действительно, странно: диапазон первого числа ровно 2 бита, второго числа - ровно три бита, третьего числа - больше трёх бит! Как же ты умудряешься засовывать их все в 8 бит? blink.gif {опять компилятора под рукой нет, но такое ощущение, что при некоторых значениях декодирование будет неправильным}
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Профи
****

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

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


Да - тут лажа!
0..3 - 4 числа
4..10 - 7 чисел
11..21 - 11 чисел
тогда имеем 4*7*11-1=307 вариантов, что больше 255! wacko.gif


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


Знаток
****

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

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


вот именно что там надо 9 бит уместить в 8.


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


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

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


Вч читать умеете ?
Цитата
третьего числа - больше трёх бит!

А вы видите -11 в программе ????
Вообще прогу-то запускали ? работатет ?
Тогда ПЕРЕД ТЕМ КАК ОРАТЬ, надо глаза открыть и почитать ПРОГРАММУ!!!!!!
Цитата
опять компилятора под рукой нет, но такое ощущение, что при некоторых значениях декодирование будет неправильным}

Всегда правильно! Ты что думаешь я не тестирую программы перед выкладыванием и нарушаю правила ?

Цитата
Да - тут лажа!

лажа у вас в посте , уважаемый ;)
что бы уместить 3 число, нужно диапазон на 11 сократить... тогда в 3 бита уместитмся.


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


Новичок
*

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

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


Цитата(Altair @ 23.11.2005 23:07)
Вч читать умеете ?

А вы видите -11 в программе ????
Вообще прогу-то запускали ? работатет ?
Тогда ПЕРЕД ТЕМ КАК ОРАТЬ, надо глаза открыть и почитать ПРОГРАММУ!!!!!!

Всегда правильно! Ты что думаешь я не тестирую программы перед выкладыванием и нарушаю правила ?
лажа у вас в посте , уважаемый ;)
что бы уместить 3 число, нужно диапазон на 11 сократить... тогда в 2 бита уместитмся.


По повду строчки readln©; a:=a or (c-11);
Максимальное значение 3го числа - 21
Если сокращаем на 11 полуаем максимальное значение 10
10 в двоичной 1010 т.е 4 бита....

Сообщение отредактировано: Ipkis -


--------------------
Возможно ты всего лишь человек,
но для кого-то ты весь мир..........
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

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

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


Еще не большое дополнение....
по поводу строчки
writeln('enter 2 chislo');
readln©; a:=a or (c shl 3); {2 add}\\

максимум 2го чмсла это 10 т.е 4 бита...
наверное нужно сократить на 3...
тогда получим максимум 7 а это уже 3 бита...


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


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

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


да чуть алгоритм я напутал но все равно несложно апрогу модифицируешь
так.


1 число 0-3 (2 бита)
2 число 4-10 -> 0-6 (3 бита)

3 число 11-21 -> 0-10

а что если записать в оставлиеся 3 бита ОСТАТОК от деления 3 числа (интервал от 0 до 10) НА 3 ? smile.gif
Остаток по любому будет НЕ больше 2...
? или я опять что то просмотрел ?

тогда выходит что у нас вообще 1 бит лишний при такой архивации, и обратно все востановимо


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


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

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


нет не то smile.gif


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


Знаток
****

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

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


Цитата
enter 1 chislo
3
enter 2 chislo
10
enter 3 chislo
21
enter 4 chislo
255
-------------------
218 255
-------------------
255
13
3
3

самый простой тест.


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


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

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


Вирт читаем книгу по тестированию и понимаем что это не самый простой тест.. тиесты такого типа называютсчя тестами на граничные условия.. ты меня все равно не переспоришь ;)

кстати к чему пост ?
уже выше разобрались что допущенна ошибка...


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


Знаток
****

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

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


я книжек по тестированию не писал ,я просто 3 года в школе на олимпиадах составлял полные системы тестов для проверки своего решения. Простой тест это тот который пришел в голову с первого взгляда на решение. Само собой это граничный тест. Простые тесты в твоей терминологии на этой проге бы прошли.

я когда открыл тему твоего последнего еще не было. unsure.gif


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


Новичок
*

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

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


Всем спасибо... Особенная благодарность wink.gif
2altair
2hiv

Я уже сам решил эту интересную задачку...
Вот код...

uses crt;
var
a,c:byte;

Procedure Main;
begin
writeln('enter 2');
readln©; a:=a or (c shl 4);

writeln('enter 3');
readln©; a:=a or (c-11);

writeln('enter 4');
readln©;
{-----------------------------------------------}
writeln('-----------------');
writeln©; {-4}
c:=0;

c:=0 or (a shl 4);
c:=c shr 4; {-3}
writeln(c+11);

c:=0 or (a shr 4); {-2}
writeln©;
end; {main}


{==================================================}
begin
ClrScr;
c:=0; a:=0;
writeln('enter 1');
readln©;

case c of
0:begin
main;
writeln('0');
end;
1: begin
main;
writeln('1');
end;
2: begin
main;
writeln('2');
end;
3: begin
main;
writeln('3');
end;
end;{case}

Readln;
end.


--------------------
Возможно ты всего лишь человек,
но для кого-то ты весь мир..........
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #17


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

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


ха-ха-ха smile.gif) круто smile.gif
Вот что значит олимипиадная... глдавное результат и условия..
а я все мучался над тем как в 8 бит впизнуть 9... а это вовсе и не надо! lol.gif
Ipkis, молодец! good.gif


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


Знаток
****

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

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


все гениальное просто..


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


Новичок
*

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

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


УГУ... Все генитальное просто.... yes2.gif

А вообще была еще другая идея,
но не совсем честная...

Использовать служебные переменные...
Ведь
- я их не объявляю!!!
-память для них уже выделена
-они существуют независимо от того использую я их или нет...

В начале думал использовать SetBkColor (из Graph)
а потом вернуть значение через GetBkColor...
но не подходит(появляются траблы)...
но все-равно можно найти другую служебную переменную...

Счас нет времени на поиски...
но если есть идеи,то это только приветствуется.. cool.gif .


--------------------
Возможно ты всего лишь человек,
но для кого-то ты весь мир..........
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #20


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


Цитата(Ipkis @ 24.11.2005 23:23)
служебные переменные...


Цитата(Ipkis)
В начале думал использовать SetBkColor (из Graph)


Ну во первых SetBkColor - это всетаки процедура ... а во вторых идея конечно интересная, но имхо это может привести к дичайшим ошибкам и неразберихе ...


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





- Текстовая версия 7.09.2025 13:29
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name