2 for or not 2 for (way of the single break)
От: old Dutchman Беларусь http://blogs.rsdn.org/ikemefula
Дата: 17.09.02 11:21
Оценка:
Привет !

Писал я както на Си давным давно, обработки исключений и всякой дряни небыло
Частенько нужен способ выхода из двух циклов культурно. Если двумерный массив обходить одним циклом, то получается весьма неплохо, налабал примерно так:


int i = 0,j = 0;
int bFount = 0;

int arr[10][100];
int l;


for(;j<10;i++)
{
    if (i == 100)
    {
        j++;
        i = 0;
        continue;
    }
    if(arr[j][i] == l)
    {
        bFound = 1;
        break;
    }
}
Re: 2 for or not 2 for (way of the single break)
От: Vasiliy_Krasnokutsky Россия  
Дата: 17.09.02 11:30
Оценка:
Здравствуйте old Dutchman,
Вопрос то в чем состоит ?
Re[2]: 2 for or not 2 for (way of the single break)
От: old Dutchman Беларусь http://blogs.rsdn.org/ikemefula
Дата: 17.09.02 11:36
Оценка:
Здравствуйте Vasiliy_Krasnokutsky, Вы писали:

VK>Здравствуйте old Dutchman,

VK>Вопрос то в чем состоит ?

Да ни в чем. Просто запостил фишку интересную, на мой взгляд
Re[3]: 2 for or not 2 for (way of the single break)
От: Esef Украина  
Дата: 17.09.02 12:36
Оценка:
IMHO, все-таки в такой ситуации лучше метки использовать.
Re: 2 for or not 2 for (way of the single break)
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 17.09.02 12:40
Оценка:
Здравствуйте old Dutchman, Вы писали:

OD>Привет !


OD>Писал я както на Си давным давно, обработки исключений и всякой дряни небыло

OD>Частенько нужен способ выхода из двух циклов культурно. Если двумерный массив обходить одним циклом, то получается весьма неплохо, налабал примерно так:

OD>

OD>
OD>int i = 0,j = 0;
OD>int bFount = 0;

OD>int arr[10][100];
OD>int l;

OD>
OD>for(;j<10;i++)
OD>{
OD>    if (i == 100)
OD>    {
OD>        j++;
OD>        i = 0;
OD>        continue;
OD>    }
OD>    if(arr[j][i] == l)
OD>    {
OD>        bFound = 1;
OD>        break;
OD>    }
OD>}
OD>



Undeclared identifier "bFound"... Апшипка
Re[2]: 2 for or not 2 for (way of the single break)
От: old Dutchman Беларусь http://blogs.rsdn.org/ikemefula
Дата: 17.09.02 12:45
Оценка:
Здравствуйте Flamer, Вы писали:


:-P


OD>>

OD>>
OD>>int i = 0,j = 0;
OD>>int bFount = 0;

OD>>int arr[10][100];
OD>>int l;

OD>>
OD>>for(;j<10;i++)
OD>>{
OD>>    if (i == 100)
OD>>    {
OD>>        j++;
OD>>        i = 0;
OD>>        continue;
OD>>    }
OD>>    if(arr[j][i] == l)
OD>>    {
OD>>        bFound = 1;
OD>>        break;
OD>>    }
OD>>}
OD>>


F>

F>Undeclared identifier "bFound"... Апшипка
Re: 2 for or not 2 for (way of the single break)
От: WolfHound  
Дата: 17.09.02 18:50
Оценка:
Здравствуйте old Dutchman, Вы писали:

Ну если извращаться то так:
    enum{X=10, Y=100};
    union
    {
        int arr[X][Y];
        int larr[X*Y];
    };
    int Found = -1;
    int l=34;
    for(int i=0;i<X*Y;i++)
        if(larr[i]==l)
        {
            Found = i;
            break;
        }
    int fx=Found%X;
    int fy=Found/X;

а зачем если можно так:
    enum{X=10, Y=100};
    int arr[X][Y];
    bool Found = false;
    int l=34;
    int fx;
    int fy;
    for(fx=0;fx<X;fx++)
        for(fy=0;fy<Y;fy++)
            if(arr[fx][fy]==l)
            {
                Found = true;
                goto end_found;
            }
end_found:

ну если так не любишь goto то так:
    enum{X=10, Y=100};
    int arr[X][Y];
    bool Found = false;
    int l=34;
    int _fx;
    int fx;
    int fy;
    for(_fx=0;_fx<X;_fx++)
        for(fy=0;fy<Y;fy++)
            if(arr[_fx][fy]==l)
            {
                Found = true;
                fx=_fx;
                _fx=X;
                break;
            }


И вообще С++ это большой набор мощных инструментов один из которых goto его как и любой другой инструмент можно использовать не по назначению к сожалению редко кто может им (goto) грамотно воспользоваться.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[2]: 2 for or not 2 for (way of the single break)
От: old Dutchman Беларусь http://blogs.rsdn.org/ikemefula
Дата: 18.09.02 07:16
Оценка:
Здравствуйте WolfHound, Вы писали:

Это уж слишком. И юнионы вовсе не нужно использовать. С массивами можно попроще. А если нужно пробежаться в массиве 100х100 начиная с [50][50] как у тебя это получится ? Твой пример годится только для полной проверки массива.

Дело не в извращениях. у меня просто вложенный цикл заменяется на if. Кода получается столько же, сколько и просто в двух циклах.

WH>Ну если извращаться то так:

WH>
WH>    enum{X=10, Y=100};
WH>    union
WH>    {
WH>        int arr[X][Y];
WH>        int larr[X*Y];
WH>    };
WH>    int Found = -1;
WH>    int l=34;
WH>    for(int i=0;i<X*Y;i++)
WH>        if(larr[i]==l)
WH>        {
WH>            Found = i;
WH>            break;
WH>        }
WH>    int fx=Found%X;
WH>    int fy=Found/X;
WH>

WH>а зачем если можно так:
WH>
WH>    enum{X=10, Y=100};
WH>    int arr[X][Y];
WH>    bool Found = false;
WH>    int l=34;
WH>    int fx;
WH>    int fy;
WH>    for(fx=0;fx<X;fx++)
WH>        for(fy=0;fy<Y;fy++)
WH>            if(arr[fx][fy]==l)
WH>            {
WH>                Found = true;
WH>                goto end_found;
WH>            }
WH>end_found:
WH>

WH>ну если так не любишь goto то так:
WH>
WH>    enum{X=10, Y=100};
WH>    int arr[X][Y];
WH>    bool Found = false;
WH>    int l=34;
WH>    int _fx;
WH>    int fx;
WH>    int fy;
WH>    for(_fx=0;_fx<X;_fx++)
WH>        for(fy=0;fy<Y;fy++)
WH>            if(arr[_fx][fy]==l)
WH>            {
WH>                Found = true;
WH>                fx=_fx;
WH>                _fx=X;
WH>                break;
WH>            }
WH>


WH>И вообще С++ это большой набор мощных инструментов один из которых goto его как и любой другой инструмент можно использовать не по назначению к сожалению редко кто может им (goto) грамотно воспользоваться.
Re[2]: Здравствуйте оверквотеры, Вы писали
От: Kaa Украина http://blog.meta.ua/users/kaa/
Дата: 18.09.02 08:37
Оценка:
Если когда-нибудь кто-нибудь из вас будет потом жаловаться на поиск, я вам это припомню
Алексей Кирдин
Re: 2 for or not 2 for (way of the single break)
От: Chorkov Россия  
Дата: 18.09.02 13:45
Оценка:
Здравствуйте old Dutchman, Вы писали:

OD>Привет !


OD>Писал я както на Си давным давно, обработки исключений и всякой дряни небыло

OD>Частенько нужен способ выхода из двух циклов культурно. Если двумерный массив обходить одним циклом, то получается весьма неплохо, налабал примерно так:

OD> [Sciped]



Что-то похожее обсуждалось сдесь ...
http://rsdn.ru/forum/MsgList.aspx?group=philosophy&amp;mid=57977
Автор: LeonGorbachev
Дата: 27.05.02

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.