![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Pascal
******* © (2004-11-12 20:48:00)В одной книге вопрос?
Записать группу команд
First:=First+1;
if First>max then
First:=1
одной командой на языке Pascal. Кто знает?
jack128 (2004-11-21 12:36:00) [1]Pat © (18.11.04 12:06) [42]
вот примерно так:
Pat © (20.11.04 0:32) [47]
;-)
Кто---то (2004-11-21 04:19:00) [2]Ну, чего никто не может ?
А используя всякие and or xor и т п ?
KilkennyCat (2004-11-21 03:26:00) [3]
> Кто---то © (21.11.04 03:17) [53]
> С логическими операторами и дурак сделает.
то есть, если я не смогу, я - вообще даун?
нафига спрашивали, если такой умный.
Кто---то (2004-11-21 03:17:00) [4]
> GuAV © (21.11.04 02:44) [52]
> Кто---то © (21.11.04 2:39) [51]
> :)
> v := v * ord(abs(V) < 77) + ord(abs(v) >= 77) * 77 * sign(v);
С логическими операторами и дурак сделает.
GuAV (2004-11-21 02:44:00) [5]Кто---то © (21.11.04 2:39) [51]
:)
v := v * ord(abs(V) < 77) + ord(abs(v) >= 77) * 77 * sign(v);
Кто---то (2004-11-21 02:39:00) [6]А такое задание.
Можно ли одной формулой сделать следующее :
if v > 77 then v := 77
else if v < -77 then v := -77;
default (2004-11-20 01:36:00) [7]Defunct © (20.11.04 01:28) [49]
да, не принципиально
но вряд-ли в книге такой изврат имелся ввиду скорее просто if
Defunct (2004-11-20 01:28:00) [8]default © (20.11.04 00:50) [48]
[41]
на одно сложение меньше
default (2004-11-20 00:50:00) [9]First := Byte(First + 1 <= max) * First + 1
Pat (2004-11-20 00:32:00) [10]Извините за долгое отсутствие - жена, работа.. :)
>SergP © (19.11.04 5:13) [46]
var p1,p2:PChar;
begin
p1:='В лесу родилась елочка';
p2:='В лесу она росла';
showmessage(p1+#13+p2);
p1:=pointer(integer(p1) xor integer(p2));
p2:=pointer(integer(p1) xor integer(p2));
p1:=pointer(integer(p1) xor integer(p2));
showmessage(p1+#13+p2);
end;
SergP (2004-11-19 05:13:00) [11]
> [32] Pat © (16.11.04 23:20)
> >SergP © (16.11.04 22:21) [31]
> Строки одинаковой длины? :-)
Допустим имеются две нуль-терминальных строки (pchar) одинаковой длины.
Дополнительных переменных не использовать совсем.
Кто---то (2004-11-19 03:09:00) [12]
> Тестировщица © (12.11.04 21:26) [13]
> Verg © (12.11.04 21:07) [6] Может, лучше так:
> First:=(First mod max)+1;
Между прочим на ассемблере это шесть команд, а вариант со сложением и условием только пять. Кроме того понятность и читаемость кода с условием и прибавлением единицы куда выше, чем этой формулы.
Defunct (2004-11-19 01:16:00) [13]_Lucky_
А [40] видели.
First := First * byte( First <= Max );
Pas все таки лучше.
_Lucky_ (2004-11-18 23:35:00) [14]Pas
First := (byte (Not ((First + 1) > Max))) * (First + 1) + (byte (((First + 1) > Max)));
- хрен разберешь, предидущие решения куда приятнее :-)
C++
nFirst = (((nFirst+1) > nMax) ? (1) : (nFirst+1));
Pat (2004-11-18 12:06:00) [15]Defunct © (17.11.04 0:30) [36]
Это уже олимпиадная задачка. Больше интересуют задачи на формат данных, хранение в памяти (например то, что в памяти вначале записываются младшие байты для word, integer) и т.д.
>jack128 © (17.11.04 1:53) [37]
Напиши как.. :)
Defunct (2004-11-17 04:33:00) [16]> First:=First+1;
> if First>max then
> First:=1
First := 1+(First * byte(First < Max));
Defunct (2004-11-17 04:22:00) [17]> Тоже самое, но чтобы
> if First > max then First := 0
или еще тупее:
First := First * byte( First <= Max );
Defunct (2004-11-17 04:16:00) [18]> Тоже самое, но чтобы
> if First > max then First := 0
First := (First mod (max + 1)) * byte((First div (max + 1))=0 );
Кто---то (2004-11-17 04:05:00) [19]
> Pat © (16.11.04 21:14) [30]
> А есть ли у кого еще такие же прикольные задания?
Тоже самое, но чтобы
if First > max then First := 0
jack128 (2004-11-17 01:53:00) [20]Pat © (16.11.04 23:43) [33], [35]
все гораздо проще (и быстрее!!!) если использовать знание того, что строки - это ССЫЛОЧНЫЕ типы ;-)