Писал я както на Си давным давно, обработки исключений и всякой дряни небыло
Частенько нужен способ выхода из двух циклов культурно. Если двумерный массив обходить одним циклом, то получается весьма неплохо, налабал примерно так:
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;
}
}
Здравствуйте old Dutchman, Вы писали:
OD>Привет !
OD>Писал я както на Си давным давно, обработки исключений и всякой дряни небыло OD>Частенько нужен способ выхода из двух циклов культурно. Если двумерный массив обходить одним циклом, то получается весьма неплохо, налабал примерно так:
OD> OD>
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)
Это уж слишком. И юнионы вовсе не нужно использовать. С массивами можно попроще. А если нужно пробежаться в массиве 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) грамотно воспользоваться.
Здравствуйте old Dutchman, Вы писали:
OD>Привет !
OD>Писал я както на Си давным давно, обработки исключений и всякой дряни небыло OD>Частенько нужен способ выхода из двух циклов культурно. Если двумерный массив обходить одним циклом, то получается весьма неплохо, налабал примерно так:
OD> [Sciped]