|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Июн 10, 2004 20:33:39 Чего-то у мя башка сегодня совсем плохо с утра соображает :((( Блин. Значит так, имеем цикл: for(i = 0; i < 100; i++) { //делаем чего-нибудь } Надо раскрутить на цикл с постусловием. Делаем так: i = ??? do { //делаем чего-нибудь }while(i--); Это аналог? И как бы мне в бесконечный цикл не свалится, ведь проверка-то только на ноль. Может, надо на >= 0? Блииин... |
|
|
Дата: Июн 10, 2004 20:40:35 · Поправил: Funbit ну если во втором случае i = 101 то тоже самое (только внутри i-1 надо будет использовать) т.е. 101-i :) |
|
|
Дата: Июн 10, 2004 20:44:49 Не понял! Клинит меня! Ведь, скажем, если i используется в качестве индекса в массиве, то надо, вероятно так: i = 100; do { }while(i--); Или нет? |
|
|
Дата: Июн 10, 2004 20:47:29 А как на счет: i = 100; do { }while(--i); |
|
|
Дата: Июн 10, 2004 20:50:14 · Поправил: Funbit я тоже туплю, кто с утра, кто к вечеру :) твой вариант не совсем верный, т.к. нулевой элемент он не обработает. когда i будет равно 1 - цикл завершится. нужно (i--)>=0 на счет оптимизации не знаю, надо компиленый вариант смотреть |
|
|
Дата: Июн 10, 2004 20:51:17 Нужно всего-лишь помнить, что цикл с постусловием выполняется хотя бы один раз. В бесконечный он уйдет только в том случае, когда исходный вариант не выполняется ни разу. А вообще... Зачем эти преобразования делать вручную? Такое умеют делать даже слабые оптимизаторы. Ты вот и сам относительно недавно цитировал бинарники линукса для крутых. Там было именно это... |
|
|
Дата: Июн 10, 2004 20:53:04 · Поправил: Funbit гы, выполнит :) короче i = 99; do { }while(i--); |
|
|
Дата: Июн 10, 2004 21:00:40 · Поправил: volodya Funbit
#include <stdio.h>
#include <stdlib.h>
void main()
{
int i = 0;
char arr[10];
for(; i < 10; i++)
{
arr[i] = i;
printf("%u\n", arr[i]);
}
i = 9;
do
{
arr[i] = i;
printf("%u\n", arr[i]);
}while(i--);
}
Короче, но я не понимаю, почему 9 :(((( >Нужно всего-лишь помнить, что цикл с постусловием выполняется хотя бы один раз. А это я и так знаю. Я почему "9" не понимаю :((( |
|
|
Дата: Июн 10, 2004 21:03:14 потому что цикл с for имеет условие for(i = 0; i < 100; i++) последний элемент будет 99, когда i будет == 100, выход. ну а do надо с 99ти начинать, если хочется точно такой же цикл. а еще можно не с 99ти :) i = 0; do { //do smth } while ((++i)<100); |
|
|
Дата: Июн 10, 2004 21:04:27 Вот теперь понял :) Спасибо :) А тот цикл, что ты последним написал - это попса, т.к. счетчик должен декреметироваться - тогда с нулем будет сравниваться, что короче. Спасибо! |
|
|
Дата: Июн 10, 2004 21:05:30 while(i=100;i>=0;i--) { } Это будет выполнено 101 раз. Если я понял правильно. Если не правильно понял - объясните по русски что нужно. Т.е. делать пока на конце блока (постусловие?) не будет то то при этом i используется и должно на каждом цикле (инкриминироваться:декриминироваться?) |
|
|
Дата: Июн 10, 2004 21:08:24 Я хотел быстрый цикл с постусловием, чтобы он был точным аналогом того for, что я написал в начале. Проблема решена. Да ее бы и не было изначально, если бы у мя башка варила. |
|
|
Дата: Июн 10, 2004 21:09:28 нормальный компилятор всегда транслирует for в цикл с пост-условием. счетчик (если у тебя действительно чиста счетчик) лучше сделать стремящимся к нулю, естественно, что при i-- кол-во итераций на одну больше, чем при --i. или можно сказать, что при --i кол-во итераций на одну меньше ;) |
|
|
Дата: Июн 10, 2004 21:13:40 Да, у мя действительно чиста счетчик :)
do
{
if (u_ptr[bait].hash == bobject[i].hash)
{
bait_index = i;
break;
}
}while(i--);
|
|
|
Дата: Июн 10, 2004 21:37:29 Уж проще в асм листинге было бы разобраться чем в этом C'шном ;-) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.112 |