Форум портала г. Королёва :: Просмотр темы - Помогите с алгоритмами
 ФотоальбомФотоальбом FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация   Доска объявленийДоска объявлений    ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Помогите с алгоритмами
На страницу Пред.  1, 2, 3, 4  След.
Начать новую тему   Ответить на тему    Список форумов Форум портала г. Королёва -> Наука и Жизнь
Предыдущая тема :: Следующая тема  
Автор Сообщение
Igel_B_TyMaHe



Зарегистрирован: 21.09.2005
Сообщения: 53

СообщениеДобавлено: 16 Июн 2006, 21:58    Заголовок сообщения: Ответить с цитатой

Eldaron писал(а):
cmp и jne,je,jb итд...вот где правда!

точно Smile ООП придумал дьявол, чтобы искусить системных программистов.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
БагиRA



Зарегистрирован: 08.07.2004
Сообщения: 4

СообщениеДобавлено: 18 Июн 2006, 01:23    Заголовок сообщения: Ответить с цитатой

зачем в школе ООП изучать? у нас, помнится, были какие-то элементарные программки на бэйсике, что гордо именовалось программированием =)
_________________
http://bestiathebest.livejournal.com
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Igel_B_TyMaHe



Зарегистрирован: 21.09.2005
Сообщения: 53

СообщениеДобавлено: 18 Июн 2006, 10:00    Заголовок сообщения: Ответить с цитатой

Бамжара писал(а):

Как раз IF всегда и для любого языка актуален, без условий-то как программировать можно.

Вот, кстати, задачка. Сможете придумать алгоритм, например, поиска max из трех чисел, без использования условий?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Nouzui



Зарегистрирован: 07.06.2005
Сообщения: 310

СообщениеДобавлено: 18 Июн 2006, 17:47    Заголовок сообщения: Ответить с цитатой

Igel_B_TyMaHe писал(а):
Бамжара писал(а):

Как раз IF всегда и для любого языка актуален, без условий-то как программировать можно.

Вот, кстати, задачка. Сможете придумать алгоритм, например, поиска max из трех чисел, без использования условий?


int array[3]= {a, b, c};
int max= a;

while(max<a || max<b || max<c) max= array[(int)rnd(3)];

))
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Igel_B_TyMaHe



Зарегистрирован: 21.09.2005
Сообщения: 53

СообщениеДобавлено: 18 Июн 2006, 19:37    Заголовок сообщения: Ответить с цитатой

while безусловный оператор? Smile В общем, любые операторы сравнения недопустимы.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Nouzui



Зарегистрирован: 07.06.2005
Сообщения: 310

СообщениеДобавлено: 19 Июн 2006, 00:19    Заголовок сообщения: Ответить с цитатой

это была шутка в своем роде \

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

max(a,b)= (a+b+abs(a-b))/2
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Igel_B_TyMaHe



Зарегистрирован: 21.09.2005
Сообщения: 53

СообщениеДобавлено: 19 Июн 2006, 19:56    Заголовок сообщения: Ответить с цитатой

Имеем три числа a, b и c

забиваем адреса от const до Addr пустыми операторами

прописываем по адресу Addr-k*a:
вывод числа a
выход

прописываем по адресу Addr-k*b:
вывод числа b
выход

прописываем по адресу Addr-k*c:
вывод числа c
выход

Addr = k*(максимально допустимое число)+const
k=размеру кода (вывод числа; выход)
const=размер кода записи, записывающий код вывода чисел.

При выполнении программы будет выведено максимальное из трех чисел. И никаких условий Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Nouzui



Зарегистрирован: 07.06.2005
Сообщения: 310

СообщениеДобавлено: 20 Июн 2006, 20:06    Заголовок сообщения: Ответить с цитатой

((a+b)>>sizeof(int)*8-1)*(a-b)+b
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Igel_B_TyMaHe



Зарегистрирован: 21.09.2005
Сообщения: 53

СообщениеДобавлено: 20 Июн 2006, 20:09    Заголовок сообщения: Ответить с цитатой

Nouzui писал(а):
((a+b)>>sizeof(int)*8-1)*(a-b)+b

Слабо понимаю запись, но верю Smile А говорил - невозможно Wink
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Nouzui



Зарегистрирован: 07.06.2005
Сообщения: 310

СообщениеДобавлено: 20 Июн 2006, 21:12    Заголовок сообщения: Ответить с цитатой

Igel_B_TyMaHe писал(а):
Nouzui писал(а):
((a+b)>>sizeof(int)*8-1)*(a-b)+b

Слабо понимаю запись, но верю Smile А говорил - невозможно Wink

согласен, погорячился )) просто числа не абстрактные, а реальные машинные, поэтому и удается..
кстати, твой способ тооже основан на сравнении, только происходит оно не в процессоре, а в памяти
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
PGM



Зарегистрирован: 24.10.2003
Сообщения: 68
Откуда: Королев

СообщениеДобавлено: 21 Июн 2006, 00:46    Заголовок сообщения: Ответить с цитатой

Nouzui писал(а):
((a+b)>>sizeof(int)*8-1)*(a-b)+b

a=1
b=2
sizeof(int) = 4

(3 >> 4 * 8 - 1)*(-1) + 2 = 3 -- и это максимум? или я чего не понял? может поясните? или ">>" это не сдвиг?

А по поводу словесной программы Igel_B_TyMaHe - она как раз практически-то не очень применима - достаточно прикинуть сколько памяти для кода надо чтобы сравнить любые целые (4-байтовые например) числа. А идея занятная - нельзя ли как-то ее использовать, но не поедать столько памяти? Используя скажем сдвиги и выясняя чей бит дальше сдвинется Smile - того и шапка.

А как такой вариант решения:
Код:
max = sign(a-b) * b + sign(b-a) * a
(sign - возвращает значение первого бита - ну там можно сдвигом его и "and 1" - имея ввиду "машинные" операции с целыми знаковыми естественно)

Правда с равными числами не сработает. Но это условие можно тоже попытаться перекрыть при помощи sign от других разностей.
_________________
"Не ботфортом консомэ хлебаем"
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Nouzui



Зарегистрирован: 07.06.2005
Сообщения: 310

СообщениеДобавлено: 21 Июн 2006, 01:07    Заголовок сообщения: Ответить с цитатой

PGM писал(а):
Код:
max = sign(a-b) * b + sign(b-a) * a
(sign - возвращает значение первого бита - ну там можно сдвигом его и "and 1" - имея ввиду "машинные" операции с целыми знаковыми естественно)

Правда с равными числами не сработает. Но это условие можно тоже попытаться перекрыть при помощи sign от других разностей.


А я именно это и предложил ))
(a+b)>>sizeof(int)*8-1 - это старший бит (a-b) - у вычитания приоритет выше, чем у сдвига, то есть, если расставить скобки, получится вот что:
Код:
((a+b)>>(sizeof(int)*8-1))
работает, вроде, и для одинаковых чисел, но не учитывает переполнения...

гм.. а решение с памятью - это, если присмотреться, фактически что-то вроде вот этого:

for(int i= MAX_INT; ; i--)
{
if(i==a) return a;
if(i==b) return b;
if(i==c) return c;
}

только сравнения осуществляются микросхемой памяти..
такая вот фишка ))
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
PGM



Зарегистрирован: 24.10.2003
Сообщения: 68
Откуда: Королев

СообщениеДобавлено: 21 Июн 2006, 01:38    Заголовок сообщения: Ответить с цитатой

Nouzui писал(а):
А я именно это и предложил ))
(a+b)>>sizeof(int)*8-1 - это старший бит (a-b) - у вычитания приоритет выше, чем у сдвига, то есть, если расставить скобки, получится вот что:
Код:
((a+b)>>(sizeof(int)*8-1))
работает, вроде, и для одинаковых чисел, но не учитывает переполнения...


Ну тогда может все-таки (a-b), а не (a+b) в первой скобке?

Nouzui писал(а):

гм.. а решение с памятью - это, если присмотреться, фактически что-то вроде вот этого:

for(int i= MAX_INT; ; i--)
{
if(i==a) return a;
if(i==b) return b;
if(i==c) return c;
}

только сравнения осуществляются микросхемой памяти..
такая вот фишка ))

Ну да, только сколько памяти потребуется. Да и вовсе не микросхемой памяти, а процессором тогда уж, когда он по виртуальным адресам "топает".
_________________
"Не ботфортом консомэ хлебаем"
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Nouzui



Зарегистрирован: 07.06.2005
Сообщения: 310

СообщениеДобавлено: 22 Июн 2006, 00:05    Заголовок сообщения: Ответить с цитатой

PGM писал(а):

Ну тогда может все-таки (a-b), а не (a+b) в первой скобке?

ну да, минус
так вот они, баги, и берутся ))

PGM писал(а):

Да и вовсе не микросхемой памяти, а процессором тогда уж, когда он по виртуальным адресам "топает".

а по-моему - памятью. это ведь она дешифрует адрес и возвращает при совпадении другой код операции...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Dwarflord



Зарегистрирован: 16.05.2004
Сообщения: 383

СообщениеДобавлено: 24 Дек 2006, 17:07    Заголовок сообщения: Ответить с цитатой

Кому не лень подумать, просьба помочь.
Подумать тут требуется.

Задан шаблон, состоящий из круглых скобок и знаков вопроса. Требуется определить, сколькими способами можно заменить знаки вопроса круглыми скобками так, чтобы получилось правильное скобочное выражение.

Формат входных данных
Первая строка входного файла содержит заданный шаблон длиной не более 80 символов.

Формат выходных данных
Выведите в выходной файл искомое количество способов. Исходные данные будут таковы, что это количество не превзойдет 2*10^9.

Пример
input.txt output.txt

????(? 2
_________________
С уважением, Пётр
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Форум портала г. Королёва -> Наука и Жизнь Часовой пояс: GMT + 4
На страницу Пред.  1, 2, 3, 4  След.
Страница 2 из 4

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах