![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Pascal
******* © (2004-11-12 20:48:00)В одной книге вопрос?
Записать группу команд
First:=First+1;
if First>max then
First:=1
одной командой на языке Pascal. Кто знает?
Defunct (2004-11-17 00:30:00) [21]Pat © (16.11.04 21:14) [30]
Pat, я тут нашел интересную задачку для вас (думаю вы не справитесь с ней так быстро как с перестановкой строк).
Имеется 17 дорожных контрольных пунктов (КП) пронумерованных от 1 до 17, каждый КП располагается на перекрестке дорог. Найти такое расположение КП чтобы путь от любого i-го КП до любого другого j-го КП проходил максимум через один КП. Решением должен быть текстовый файл, в котором должно быть 17 строк, порядковый номер строки соответствует номеру КП, в каждой строке должны находиться 4 цифры - номера КП с которыми связан данный КП.
Pat (2004-11-16 23:57:00) [22]Начитался 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);
Pat (2004-11-16 23:45:00) [23]Хотя, насчет дополнительных переменных я бы промолчал :-))) var i,len1,len2:integer
С другой стороны сравним размеры integer'а и string :-)
Pat (2004-11-16 23:43:00) [24]Ладно, напишем для общего случая :-))
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:20:00) [25]>SergP © (16.11.04 22:21) [31]
Строки одинаковой длины? :-)
SergP (2004-11-16 22:21:00) [26]
> [30] Pat © (16.11.04 21:14)
> А есть ли у кого еще такие же прикольные задания? Типа поменять
> местами два числа без использования дополниетельной переменной...и
> т.д.
:-)
Специально для тебя: как насчет поменять местами две строки не используя дополнительной переменной?
Pat (2004-11-16 21:14:00) [27]А есть ли у кого еще такие же прикольные задания? Типа поменять местами два числа без использования дополниетельной переменной...и т.д.
Defunct (2004-11-16 19:45:00) [28]> palva © (16.11.04 14:55) [26]
> и что ОНО делает.
Какую-то не относящуюся к теме ерунду. Видимо автор поста увидел знакомое слово max ;>
Defunct (2004-11-16 19:40:00) [29]pasha_golub © (15.11.04 18:03) [19]
> А это и есть оператор ветвления. один-единственный
Вы не правы.
Опрератор ветвления:
If <условие> then <оператор> else <оператор>
итого 3 оператора.
Pavia (2004-11-16 19:33:00) [30]if succ(First)>max then First:=1
palva (2004-11-16 14:55:00) [31]> Abel (16.11.04 14:41) [25]
> Только не спрашивайте, как ЭТО работает %))
и что ОНО делает.
Abel (2004-11-16 14:41:00) [32]Только не спрашивайте, как ЭТО работает %))
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.
SergP. (2004-11-16 13:07:00) [33]
> 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
begin...end (2004-11-16 10:26:00) [34]
> [21] Gloomer © (16.11.04 09:54)
Очень сомневаюсь; результатом first mod max будет остаток от деления first на max; поскольку first = max, то остаток будет равен нулю, а 0 + 1 = 1.
REA (2004-11-16 10:22:00) [35]неа
Gloomer (2004-11-16 09:54:00) [36]2 palva [20]
при first=max в результате выполнения получим first=2 :-(
palva (2004-11-15 18:11:00) [37]
first := first mod max + 1;
pasha_golub (2004-11-15 18:03:00) [38]Torin (12.11.04 21:30) [17]
Под коммандой подразумевается оператор. А это и есть оператор ветвления. один-единственный
uny (2004-11-12 21:34:00) [39]условие не понел, отвечал ошибочно. извинения.
Torin (2004-11-12 21:30:00) [40]if First > max + 1 then first:=1 else First := First + 1
Это не одна команда, а одна строчка в которой, по логике, 5 команд.