Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Pascal


Страницы:   1 2 3

******* ©   (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 команд.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо