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

Вниз

Как реализовать кратность в цикле?   Найти похожие ветки 

 
Галинка ©   (2006-12-05 16:28) [0]

Имеется массив, количество эдементов которого кратно 3. Надо в цикле вытаскивать по три элемента за один проход цикла. Подскажите формулу/ы пожайлуста


 
Котик Б   (2006-12-05 16:31) [1]

i+0, i+1, i+2 :)


 
Eraser ©   (2006-12-05 16:31) [2]

> [0] Галинка ©   (05.12.06 16:28)

примерно так

i := 0;
while i < iCount do
begin
...
 matrix[i] := 777;
 matrix[i + 1] := 666;
 matrix[i + 2] := 13;
 inc(i, 3);  
end;


 
Sha ©   (2006-12-05 16:32) [3]

как-то так :)
f
or i:=0 to length(a) div 3 - 1 do begin
 a[3*i]:=
 a[3*i+1]:=
 a[3*i+2]:=
 end;


 
clickmaker ©   (2006-12-05 16:48) [4]

i := 0;
 while i <=  High(arr)-2 do begin
   v1 := arr[i];
   Inc(i);
   v2 := arr[i];
   Inc(i);
   v3 := arr[i];
   Inc(i);
 end;

who more?


 
Котик Б   (2006-12-05 16:49) [5]

... я первый успел :))))


 
Галинка ©   (2006-12-05 16:52) [6]

Sha совершенно прав... "Тихо шифером шурша"...


 
Sha ©   (2006-12-05 18:29) [7]

> Котик Б   (05.12.06 16:49) [5]
> ... я первый успел :))))

зато я больше понравился )))


 
k2 ©   (2006-12-05 18:32) [8]

Sha ©   (05.12.06 18:29) [7]
это задел на будущее :)


 
ProgRAMmer Dimonych ©   (2006-12-05 18:35) [9]

А вот, кстати говоря, в Бейсике в своё время (ещё под ДОСом) это очень классно записывалось и компилировалось:

FOR I=1 TO 16 STEP 3
..........
Ля-ля, тополя
..........
NEXT I

С тех пор Гейтс очень серьёзно сдал позиции :(


 
Sha ©   (2006-12-05 18:58) [10]

> clickmaker ©   (05.12.06 16:48) [4]
> who more?
I am

i := Length(arr);
while i >0 do begin
  v1 := arr[i-1];
  v2 := arr[i-2];
  v3 := arr[i-3];
  dec(i,3);
end;

чуть быстрее будет, т.к.:
- High реализована через Length
- Length вызывается 1 раз
- индекс, участвующий в адресе, изменяется 1 раз за проход


 
Sha ©   (2006-12-05 19:10) [11]

> Галинка

Кстати, если речь идет об обработке bmp,
то для ускорения можно еще использовать то,
что строки имеют одинаковую длину и
лежат на одинаковом расстоянии друг от друга.


 
default ©   (2006-12-05 21:16) [12]

пипец вопрос, я бы постеснялся такой задавать
Галинка, Вы же вроде на C# пишите?
так циклом for такое сделать на раз два.... вместо шаблонного i++ у индекса цикла написать i+=3 и внутри цикла array[i], array[i+1],array[i+2] использовать


 
Gero ©   (2006-12-06 00:24) [13]

> [10] Sha ©   (05.12.06 18:58)
> i := Length(arr);
> while i >0 do begin
>  v1 := arr[i-1];
>  v2 := arr[i-2];
>  v3 := arr[i-3];
>  dec(i,3);
> end;

А если Length(arr) = 4?


 
Думкин ©   (2006-12-06 05:51) [14]

> Gero ©   (06.12.06 00:24) [13]


> Галинка ©   (05.12.06 16:28)  
> Имеется массив, количество эдементов которого кратно 3.


 
0x07BBh   (2006-12-06 06:23) [15]

Думкин ©   (06.12.06 05:51) [14]
проверки никто не отменял...
var
 arr:array of integer;
...
if (Length(arr) mod 3) = 0 then
begin
 for i:=0 to length(a) div 3 - 1 do
  begin
   a[3*i]:= 1;
   a[3*i+1]:=2;
   a[3*i+2]:=3;
end;
end;


 
0x07BBh   (2006-12-06 06:30) [16]

Может так?
var
 count,len,kratnost:integer;
 arr:array of integer;
begin
len := Length(arr);
kratnost := 3;
count := len - 1;
while(count < len)do
  begin
   for kratnost := 0 to kratnost -1 do
    if(count < len)then
     begin
        arr[count] := 1;
        inc(count);
     end;
  end;
end;


 
MBo ©   (2006-12-06 06:50) [17]

>Sha ©   (05.12.06 18:58) [10]

а не будет ли при прямом обходе некоторого выигрыша за счет упреждающего кэширования?


 
Думкин ©   (2006-12-06 06:51) [18]

> 0x07BBh   (06.12.06 06:23) [15]

деЦкий сад - штаны на лямках. В ТЗ четко описано что кратно.


 
0x07BBh   (2006-12-06 06:59) [19]

Думкин ©   (06.12.06 06:51) [18]
а какнибудь аргументировать нормально кроме "хыыы дэбил", к сожелению программы используют в повседневной жизни совсем не ТЗ, а пользователи эти точно ТЗ и ТРП не читают им надо "чтобы работало"


 
Думкин ©   (2006-12-06 07:03) [20]


> 0x07BBh   (06.12.06 06:59) [19]

1. Данная программа - задание для двоечников в ВУЗе.
2. Может и используются, но давай таки придерживаьться того, что написано. А иначе - паранойя и к врачу.
3. Про дебила - это ваши домыслы. Впрочем вам виднее.
4. Будут вопросы - спрашивай не стесняйся.


 
0x07BBh   (2006-12-06 07:06) [21]

Думкин ©   (06.12.06 07:03) [20]
1. это не причина для того чтобы писать как попало и без проверок на ошибки
2. ну тебе повезло, на грамотных пользователей
3. Деццкий сад выглядет не много лучше
4. Я уж лучше мастеров спрошу


 
Думкин ©   (2006-12-06 07:10) [22]


> 0x07BBh   (06.12.06 07:06) [21]

Писал я как раз на массового пользователя и со всевозможными проверками, при этом проводилось разнообразное тестирование.
Речь не об этом. Если хочется тупо попридираться - то пока. Паранойя - это соседний кабинет.


 
Anatoly Podgoretsky ©   (2006-12-06 09:37) [23]

> Думкин  (06.12.2006 05:51:14)  [14]

Так и проверка должна быть, не только I > 0, но м I mod 3 = 0


 
Думкин ©   (2006-12-06 10:29) [24]

> Anatoly Podgoretsky ©   (06.12.06 09:37) [23]

ну тогда и такую возможность курить можно и нужно:
var
   a : array[talaha] of integer;

где
type
  talpha = 5..62;

или
type
  talpha = "a".."z";


Чего же на полпути останавливаться? Причем про кратность 3 описано в ТЗ, а вот описание о другом - отсутствует.


 
clickmaker ©   (2006-12-06 10:30) [25]

type
 T3IntArray = array[0..2] of integer;

 TThreeIntegers = packed record
  v1: integer;
  v2: integer;
  v3: integer;
end;

var
 arr: array[0..5] of integer;
 p, pEnd: ^T3IntArray;
 v: TThreeIntegers;
begin
 p := @arr[0];
 pEnd := @arr[High(arr)];
 while integer(p) < integer(pEnd) do begin
   CopyMemory(@v, p, sizeof(v));
   Inc(p);
 end;


я жгу ))


 
Sha ©   (2006-12-06 10:49) [26]

> MBo ©   (06.12.06 06:50) [17]
> а не будет ли при прямом обходе некоторого выигрыша за счет упреждающего кэширования?

Точно не знаю, может где-то и будет.

В свое время проверял это на пентиуме-4 и амд-к6.
На них скорость от направления обхода не зависит.


 
SpellCaster   (2006-12-06 10:55) [27]

> [25] clickmaker ©   (06.12.06 10:30)


type
T3IntArray = class(TStream)
private
 fArr: array of Integer;
public
 function Read(var Int1,Int2,Int3: Integer): Longint; override;
 ...
end;

=))


 
Sha ©   (2006-12-06 10:56) [28]

> MBo ©   (06.12.06 06:50) [17]

Имеется ввиду конечно не специальный случай "быстрого копирования"


 
Anatoly Podgoretsky ©   (2006-12-06 12:13) [29]

> Думкин  (06.12.2006 10:29:24)  [24]

talpha не кратно трем


 
Думкин ©   (2006-12-06 12:15) [30]


> Anatoly Podgoretsky ©   (06.12.06 12:13) [29]

Сделаем кратно - добавиви или убрав. Количество элементов в легкую делается кратным трем.


 
Галинка ©   (2006-12-06 12:47) [31]

Да пишу на шарпе. default, я честно не знала, что можно как ы бэйсике шаг задавать... это классно. Спасибо, просветили.



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

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

Наверх




Память: 0.54 MB
Время: 0.052 c
2-1165761948
Flood_control
2006-12-10 17:45
2006.12.31
Отправить окно в трэй с помощью ShowWindow


2-1165921849
max999
2006-12-12 14:10
2006.12.31
Вопрос по TTable


5-1146130114
denison
2006-04-27 13:28
2006.12.31
Circular Reference


2-1165930015
oleglu
2006-12-12 16:26
2006.12.31
DBGrid


15-1165830392
Kolan
2006-12-11 12:46
2006.12.31
Есть ли встроеный рефакторинг изменить продедуру на функцию?