Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.12.05;
Скачать: CL | DM;

Вниз

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 );



Страницы: 1 2 вся ветка

Текущий архив: 2004.12.05;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.105 c
3-1099813051
Dell3r
2004-11-07 10:37
2004.12.05
Remove Data Module


14-1100534252
Drakon
2004-11-15 18:57
2004.12.05
Разработки Winamp прекращены


1-1100860387
TankMan
2004-11-19 13:33
2004.12.05
Как запускать с параметрами так это легко, а как возвращать...


4-1098087730
DelphiLexx
2004-10-18 12:22
2004.12.05
Мониторинг процессора


14-1099793434
Думкин
2004-11-07 05:10
2004.12.05
С днем рождения! 7 ноября