Форум: "Основная";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
ВнизPascal Найти похожие ветки
← →
******* (2004-11-12 20:48) [0]В одной книге вопрос?
Записать группу команд
First:=First+1;
if First>max then
First:=1
одной командой на языке Pascal. Кто знает?
← →
uny © (2004-11-12 20:52) [1]first:=(inc first) and max; ?
← →
heady (2004-11-12 20:54) [2]робко пробую: if inc(First)>max then First:=1;
← →
******* (2004-11-12 20:57) [3]uny ©
попробовал не хочет работать.
Сам думал как, не получается.
← →
******* (2004-11-12 20:58) [4]heady
подрозумевается что first постоянно изменяется.
← →
uny © (2004-11-12 21:05) [5]first:=(inc first) mod max;
в [1] не верно, от маx зависит, а так?
← →
Verg © (2004-11-12 21:07) [6]F := ( F + 1 ) mod max;
← →
******* (2004-11-12 21:10) [7]uny ©
first должно быть равно потом 1, то я думаю
что сначала нужно mod, а потом как то изменить
значение first, в Delphi проверяю на (inc first)
выдает ошибку.
← →
******* (2004-11-12 21:14) [8]Что приходит на ум только
first:=first mod max;
inc(first)
но это две команды.
← →
GuAV © (2004-11-12 21:17) [9]******* (12.11.04 20:48)
одной командой
что есть одна комманда ?
← →
uny © (2004-11-12 21:17) [10]*******
[6] разве не верен? на дельфи и правда ошибка где Вы указываете, (я использую другую среду)
← →
******* (2004-11-12 21:20) [11]Guav сам незнаю, такие вопросы вот в книгах без звездочки (*)
← →
GuAV © (2004-11-12 21:23) [12]if First > max + 1 then first:=1 else First := First + 1 ?
← →
Тестировщица © (2004-11-12 21:26) [13]Verg © (12.11.04 21:07) [6] Может, лучше так:
First:=(First mod max)+1;
← →
******* (2004-11-12 21:27) [14]GuAV © Возможно, скорее всего это и будет правильно.
← →
******* (2004-11-12 21:29) [15]Тестировщица Очень благодарен, теперь буду знать!
← →
GuAV © (2004-11-12 21:29) [16]Тестировщица © (12.11.04 21:26) [13]
Гениально. Наверное это оно и есть.
← →
Torin (2004-11-12 21:30) [17]if First > max + 1 then first:=1 else First := First + 1
Это не одна команда, а одна строчка в которой, по логике, 5 команд.
← →
uny © (2004-11-12 21:34) [18]условие не понел, отвечал ошибочно. извинения.
← →
pasha_golub © (2004-11-15 18:03) [19]Torin (12.11.04 21:30) [17]
Под коммандой подразумевается оператор. А это и есть оператор ветвления. один-единственный
← →
palva © (2004-11-15 18:11) [20]
first := first mod max + 1;
← →
Gloomer © (2004-11-16 09:54) [21]2 palva [20]
при first=max в результате выполнения получим first=2 :-(
← →
REA (2004-11-16 10:22) [22]неа
← →
begin...end © (2004-11-16 10:26) [23]
> [21] Gloomer © (16.11.04 09:54)
Очень сомневаюсь; результатом first mod max будет остаток от деления first на max; поскольку first = max, то остаток будет равен нулю, а 0 + 1 = 1.
← →
SergP. (2004-11-16 13:07) [24]
> begin...end © (16.11.04 10:26) [23]
>
> > [21] Gloomer © (16.11.04 09:54)
>
> Очень сомневаюсь; результатом first mod max будет остаток
> от деления first на max; поскольку first = max, то остаток
> будет равен нулю, а 0 + 1 = 1.
Ну тогда:
first := first mod (max+1) + 1
← →
Abel (2004-11-16 14:41) [25]Только не спрашивайте, как ЭТО работает %))
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
r1, r2: Integer;
f, max: Integer;
i: Integer;
begin
Randomize;
for i := 1 to 1000000 do
begin
f := Random(1000);
max := Random(1000);
r1 := f;
r1 := r1+1;
if r1>max then
r1 := 1;
r2 := ((max div (f+1))*(f div (max+1))*max + (max div (f+1))*(f mod (max+1)))
div
((max div (f+1)) + ((f+1) div (max+1))) + 1;
if r1 <> r2 then
begin
Writeln("f=",f," max=",max);
Writeln("r1=",r1," r2=",r2);
end;
end;
Writeln("Ready!");
Readln;
end.
← →
palva © (2004-11-16 14:55) [26]> Abel (16.11.04 14:41) [25]
> Только не спрашивайте, как ЭТО работает %))
и что ОНО делает.
← →
Pavia © (2004-11-16 19:33) [27]if succ(First)>max then First:=1
← →
Defunct © (2004-11-16 19:40) [28]pasha_golub © (15.11.04 18:03) [19]
> А это и есть оператор ветвления. один-единственный
Вы не правы.
Опрератор ветвления:
If <условие> then <оператор> else <оператор>
итого 3 оператора.
← →
Defunct © (2004-11-16 19:45) [29]> palva © (16.11.04 14:55) [26]
> и что ОНО делает.
Какую-то не относящуюся к теме ерунду. Видимо автор поста увидел знакомое слово max ;>
← →
Pat © (2004-11-16 21:14) [30]А есть ли у кого еще такие же прикольные задания? Типа поменять местами два числа без использования дополниетельной переменной...и т.д.
← →
SergP © (2004-11-16 22:21) [31]
> [30] Pat © (16.11.04 21:14)
> А есть ли у кого еще такие же прикольные задания? Типа поменять
> местами два числа без использования дополниетельной переменной...и
> т.д.
:-)
Специально для тебя: как насчет поменять местами две строки не используя дополнительной переменной?
← →
Pat © (2004-11-16 23:20) [32]>SergP © (16.11.04 22:21) [31]
Строки одинаковой длины? :-)
← →
Pat © (2004-11-16 23:43) [33]Ладно, напишем для общего случая :-))
procedure ChangeStrings(var s1,s2:string);
procedure LetsDoIt(var MinS,MaxS:string);
var i,len1,len2:integer;
begin
len1:=length(MinS);
len2:=length(MaxS);
SetLength(MinS,length(MaxS));
for i:=1 to len2 do
begin
MinS[i]:=chr(ord(MinS[i]) xor ord(MaxS[i]));
MaxS[i]:=chr(ord(MinS[i]) xor ord(MaxS[i]));
MinS[i]:=chr(ord(MinS[i]) xor ord(MaxS[i]));
end;
SetLength(MaxS,len1);
end;
begin
if length(s1)<length(s2)
then LetsDoIt(s1,s2)
else LetsDoIt(s2,s1)
end;
procedure TForm1.Button1Click(Sender: TObject);
var s1,s2:string;
begin
s1:="Hello World!!!";
s2:="Hello MSWord";
showmessage(s1+#13#10+s2);
ChangeStrings(s1,s2);
showmessage(s1+#13#10+s2)
end;
← →
Pat © (2004-11-16 23:45) [34]Хотя, насчет дополнительных переменных я бы промолчал :-))) var i,len1,len2:integer
С другой стороны сравним размеры integer"а и string :-)
← →
Pat © (2004-11-16 23:57) [35]Начитался help"а на ночь:
SetLength procedure
Sets the length of a string or dynamic-array variable.
Existing characters in the string or elements in the array are preserved, but the content of newly allocated space is undefined
Всвязи с этим после строчки
SetLength(MinS,length(MaxS));
добавить
move(StringOfChar(#0,len2-len1)[1],MinS[len1+1],len2-len1);
← →
Defunct © (2004-11-17 00:30) [36]Pat © (16.11.04 21:14) [30]
Pat, я тут нашел интересную задачку для вас (думаю вы не справитесь с ней так быстро как с перестановкой строк).
Имеется 17 дорожных контрольных пунктов (КП) пронумерованных от 1 до 17, каждый КП располагается на перекрестке дорог. Найти такое расположение КП чтобы путь от любого i-го КП до любого другого j-го КП проходил максимум через один КП. Решением должен быть текстовый файл, в котором должно быть 17 строк, порядковый номер строки соответствует номеру КП, в каждой строке должны находиться 4 цифры - номера КП с которыми связан данный КП.
← →
jack128 © (2004-11-17 01:53) [37]Pat © (16.11.04 23:43) [33], [35]
все гораздо проще (и быстрее!!!) если использовать знание того, что строки - это ССЫЛОЧНЫЕ типы ;-)
← →
Кто---то © (2004-11-17 04:05) [38]
> Pat © (16.11.04 21:14) [30]
> А есть ли у кого еще такие же прикольные задания?
Тоже самое, но чтобы
if First > max then First := 0
← →
Defunct © (2004-11-17 04:16) [39]> Тоже самое, но чтобы
> if First > max then First := 0
First := (First mod (max + 1)) * byte((First div (max + 1))=0 );
← →
Defunct © (2004-11-17 04:22) [40]> Тоже самое, но чтобы
> if First > max then First := 0
или еще тупее:
First := First * byte( First <= Max );
← →
Defunct © (2004-11-17 04:33) [41]> First:=First+1;
> if First>max then
> First:=1
First := 1+(First * byte(First < Max));
← →
Pat © (2004-11-18 12:06) [42]Defunct © (17.11.04 0:30) [36]
Это уже олимпиадная задачка. Больше интересуют задачи на формат данных, хранение в памяти (например то, что в памяти вначале записываются младшие байты для word, integer) и т.д.
>jack128 © (17.11.04 1:53) [37]
Напиши как.. :)
← →
_Lucky_ (2004-11-18 23:35) [43]Pas
First := (byte (Not ((First + 1) > Max))) * (First + 1) + (byte (((First + 1) > Max)));
- хрен разберешь, предидущие решения куда приятнее :-)
C++nFirst = (((nFirst+1) > nMax) ? (1) : (nFirst+1));
← →
Defunct © (2004-11-19 01:16) [44]_Lucky_
А [40] видели.
First := First * byte( First <= Max );
Pas все таки лучше.
← →
Кто---то © (2004-11-19 03:09) [45]
> Тестировщица © (12.11.04 21:26) [13]
> Verg © (12.11.04 21:07) [6] Может, лучше так:
> First:=(First mod max)+1;
Между прочим на ассемблере это шесть команд, а вариант со сложением и условием только пять. Кроме того понятность и читаемость кода с условием и прибавлением единицы куда выше, чем этой формулы.
← →
SergP © (2004-11-19 05:13) [46]
> [32] Pat © (16.11.04 23:20)
> >SergP © (16.11.04 22:21) [31]
> Строки одинаковой длины? :-)
Допустим имеются две нуль-терминальных строки (pchar) одинаковой длины.
Дополнительных переменных не использовать совсем.
← →
Pat © (2004-11-20 00:32) [47]Извините за долгое отсутствие - жена, работа.. :)
>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;
← →
default © (2004-11-20 00:50) [48]First := Byte(First + 1 <= max) * First + 1
← →
Defunct © (2004-11-20 01:28) [49]default © (20.11.04 00:50) [48]
[41]
на одно сложение меньше
← →
default © (2004-11-20 01:36) [50]Defunct © (20.11.04 01:28) [49]
да, не принципиально
но вряд-ли в книге такой изврат имелся ввиду скорее просто if
← →
Кто---то © (2004-11-21 02:39) [51]А такое задание.
Можно ли одной формулой сделать следующее :if v > 77 then v := 77
else if v < -77 then v := -77;
← →
GuAV © (2004-11-21 02:44) [52]Кто---то © (21.11.04 2:39) [51]
:)
v := v * ord(abs(V) < 77) + ord(abs(v) >= 77) * 77 * sign(v);
← →
Кто---то © (2004-11-21 03:17) [53]
> 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);
С логическими операторами и дурак сделает.
← →
KilkennyCat © (2004-11-21 03:26) [54]
> Кто---то © (21.11.04 03:17) [53]
> С логическими операторами и дурак сделает.
то есть, если я не смогу, я - вообще даун?
нафига спрашивали, если такой умный.
← →
Кто---то © (2004-11-21 04:19) [55]Ну, чего никто не может ?
А используя всякие and or xor и т п ?
← →
jack128 © (2004-11-21 12:36) [56]Pat © (18.11.04 12:06) [42]
вот примерно так:
Pat © (20.11.04 0:32) [47]
;-)
Страницы: 1 2 вся ветка
Форум: "Основная";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];
Память: 0.57 MB
Время: 0.036 c