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

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

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

2 страниц V  1 2 >  
 Ответить  Открыть новую тему 
> 2 переменные по байту, Олимпиадная задача
Ipkis
сообщение 22.11.2005 0:20
Сообщение #1


Новичок
*

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

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


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

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

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


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


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

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

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


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

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


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


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

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

Репутация: -  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 
 К началу страницы 
+ Ответить 
Ipkis
сообщение 23.11.2005 13:23
Сообщение #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 
 К началу страницы 
+ Ответить 
Atos
сообщение 23.11.2005 14:07
Сообщение #5


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

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

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


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


Профи
****

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

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


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


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


Знаток
****

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

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


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


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


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

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

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


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

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

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

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

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


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ipkis
сообщение 23.11.2005 21:06
Сообщение #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 - 23.11.2005 21:11


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


Новичок
*

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

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


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

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


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


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

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

Репутация: -  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 
 К началу страницы 
+ Ответить 
Altair
сообщение 23.11.2005 21:52
Сообщение #12


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

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

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


нет не то smile.gif


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
virt
сообщение 23.11.2005 21:59
Сообщение #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 
 К началу страницы 
+ Ответить 
Altair
сообщение 23.11.2005 22:00
Сообщение #14


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

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

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


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

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


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


Знаток
****

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

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


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

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


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Ipkis
сообщение 24.11.2005 20:34
Сообщение #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 
 К началу страницы 
+ Ответить 
Altair
сообщение 24.11.2005 20:40
Сообщение #17


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

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

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


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


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


Знаток
****

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

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


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


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


Новичок
*

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

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


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

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

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

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

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


--------------------
Возможно ты всего лишь человек,
но для кого-то ты весь мир..........
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 25.11.2005 7:52
Сообщение #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

 



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