24.01.2009, 11:35 | #21 (permalink) | |
Member
Регистрация: 24.12.2008
Сообщений: 419
Записей в дневнике: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1311
|
Цитата:
Есть 2 переменные: А и В. Поменять их местами можно за 3 действия. 1) А:=А+В; А:=А xor В; 2) В:=А-В; В:= А xor В; 3) А:=А-В; А:=А xor В; |
|
24.01.2009, 14:43 | #24 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Ах вы умницы оба - ну будет вам от Darkcosinus! Я, знаете ли, тоже с чего-то подобного начал - и понеслось: a+b - нельзя (вдруг числа в формате BYTE и оба в районе 250), a-b - тоже нельзя (а вдруг одно из чисел отрицательное) ну и т.п. Сплошной type mismatch. Короче говоря, никак нельзя, потому что всегда можно подобрать такой тип данных и значения, чтобы получился type mismatch! Всё жду, чтобы Darkcosinus выложил, наконец, абсолютно универсальное решение для всех типов данных и всех, даже самых немыслимых, значений параметров. Да вот что-то молчит.
|
24.01.2009, 14:51 | #25 (permalink) |
Member
Регистрация: 24.12.2008
Сообщений: 419
Записей в дневнике: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1311
|
Не, на курсах нам это объяснили с точки зрения подходов к программированию:
а) пространственный: есть место под дополнительную переменную, используют программисты Майкрософта б) временной: есть время подумать над задачей + можно сэкономить место на диске. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
24.01.2009, 15:31 | #26 (permalink) |
Member
Регистрация: 18.06.2008
Сообщений: 2,326
Записей в дневнике: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 211
|
Владимир, мне давали именно такой подход решения. Безусловно лучшим подходом будет использование дополнительной переменной, но так нельзя.
Про отрицательное число пожалуйста поподробнее, поскольку я только что проверил -- алгоритм работает как для положительных, так и для отрицательных чисел (естественно при соответствии типов данных). А подобрать числа в любой задаче можно так (или поставить условие), что она быстро становится нерешаемой. |
24.01.2009, 17:24 | #27 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
|
|
24.01.2009, 17:33 | #28 (permalink) |
Member
Регистрация: 18.06.2008
Сообщений: 2,326
Записей в дневнике: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 211
|
А-а-а ) Понял. В вашем решении изначально было одно усложнение, с которым я не согласен -- зачем присваивать х=y-2*x ?
Действительно, я понял, что данный алгоритм имеет свои ограничения, но какое его не имеет. ИМХО Darkcosinus не прав в одном -- он же не указал, какой именно тип данных использовался для переменных, а потом именно по типу данных и начал придираться ) Теперь осталось дождаться официального вердикта ) |
24.01.2009, 18:17 | #29 (permalink) | ||
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Цитата:
|
||
25.01.2009, 09:44 | #30 (permalink) |
Member
Регистрация: 24.12.2008
Сообщений: 419
Записей в дневнике: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1311
|
Вот еще одна задача из книжки: найти все натуральные числа a,b,c из интервала от 1 до 20, для которых выполняется равенство:а2+ b2 = c2
Program KR_2_Var1_2; Var a,b,c:integer; Begin For a:=1 to 20 do For b:=1 to 20 do For c:=1 to 20 do If sqr(a)+sqr(b)=sqr(c) then writeln(a,' ',b,' ',c); readln; end. Задача решается без всяких проблем, НО: в книжке вместо этого было а*а+b*b=с*с. И это "типа" квадраты чисел? Последний раз редактировалось ummasha; 25.01.2009 в 10:13 |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|