Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2006.12.31;
Скачать: [xml.tar.bz2];

Вниз

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

 
Галинка ©   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.048 c
1-1163360090
RASkov
2006-11-12 22:34
2006.12.31
"Всплывающее окно"


2-1165751400
dasha
2006-12-10 14:50
2006.12.31
как добавить запись в таблицу


2-1165870656
serko
2006-12-11 23:57
2006.12.31
Базы Access на др. компах!


3-1161322590
DelphiN!
2006-10-20 09:36
2006.12.31
SQL запрос


4-1156198352
h8394E
2006-08-22 02:12
2006.12.31
Перехват метода интерфейса...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский