Wątek przeniesiony 2014-03-19 17:10 z C/C++ przez ŁF.

wychodzenie z pętli

2014-03-18 10:36
0

witam, jak w temacie mam pytanie czy da się wyjść z 10 pętli na raz używając jednego polecenia(coś jak break), nie używająć goto?

edit: mam na myśli zagnieżdżoną pętlę :)

no na przykład mam tablice 10 wymiarową i ją przeszukuje pętlami for i jak wartość zostanie znaleziona to chcę wyjść z pętli, żeby nie szukał do końca i wygodne by było mieć break wychodzący ze wszystkich pętli :)

edytowany 1x, ostatnio: Mikolaj54321, 2014-03-18 10:38
nie. (chyba, że return ale to wychodzi też z funkcji). na co komu 10 zagnieżdżeń pętli. lepiej napraw swój program. - karolinaa 2014-03-18 10:41
Jesli masz gdzieś 10 pętli w jednej funkcji to znaczy że powinieneś wyjść ze swojego IDE (alt+f4) i juz nigdy do niego nie wracać. - Shalom 2014-03-18 10:49
dziękuję za pomoc -.- - Mikolaj54321 2014-03-18 10:53
pokaż swój kod to się naprawi. - karolinaa 2014-03-18 10:55

Pozostało 580 znaków

2014-03-18 11:15
0

Jednym z rozwiązań może być umieszczenie przed pętlami try, w momencie w którym chcesz wyjść rzucić wyjątek i złapać go za pętlami.

try{
  for..
    for ..
      throw wyjatek;
}
catch(...){
  ....
}

edytowany 1x, ostatnio: visembler, 2014-03-18 11:20
serio? to ja już goto wolę - krwq 2014-03-18 11:25
Stwierdzam tylko że jest to możliwe, nie oceniam czy to dobre czy złe rozwiązanie. - visembler 2014-03-18 11:33
Ty nawet takich rozwiązań nie proponuj bo jeszcze ktoś poważnie z tego skorzysta... - Shalom 2014-03-18 13:25
wsrod doswiadczonych osob mozna to potraktowac jako zart, ale w przypadku newbies to bym uwazal, bo nie kazdy zrozumie - krwq 2014-03-18 14:58

Pozostało 580 znaków

2014-03-18 11:26
1

return - wychodzisz z całej funkcji, ale fakt, masz zepsuty algorytm jeśli coś takiego masz.


░█░█░█░█░█░█░█░█░█░█░█░
edytowany 1x, ostatnio: krwq, 2014-03-18 11:27

Pozostało 580 znaków

2014-03-18 11:31
0

Do tego służy właśnie goto, a jak cię tak bardzo to swędzi, to wyciągnij całą pętlę do osobnej funkcji i użyj return.

Wyjątki służą do obsługi sytuacji wyjątkowych (błędów) i w normalnie działającym programie nie powinno być żadnego.

Pozostało 580 znaków

2014-03-18 12:24
0
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

main()
{
    srand( time( NULL ) );
    int N=10;
    int tab[N][N][N][N][N];
    for(int i=0;i<N;++i)
        for(int j=0;j<N;++j)
            for(int k=0;k<N;++k)
                for(int l=0;l<N;++l)
                    for(int m=0;m<N;++m)
                        {
                            tab[i][j][k][l][m]=rand()%1000;
                        }
    for(int i=0;i<N;++i)
        for(int j=0;j<N;++j)
            for(int k=0;k<N;++k)
                for(int l=0;l<N;++l)
                    for(int m=0;m<N;++m)
                        {
                            if(10==tab[i][j][k][l][m])
                            {
                                cout<<"\nposzukiwany element znajduje sie w tab["<<i<<"]["<<j<<"]["<<k<<"]["<<l<<"]["<<m<<"]";
                                //tu chcialbym dac ten break
                            }
                        }

}
edytowany 1x, ostatnio: Mikolaj54321, 2014-03-18 12:24

Pozostało 580 znaków

2014-03-18 12:38
1

wstaw tam: return 0;
lub: i=j=k=l=m=N;


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon, 2014-03-18 12:39
i=j=k=l=m=N; :D - krwq 2014-03-18 13:13
Chce - to ma ;P - _13th_Dragon 2014-03-18 13:15
najlepsze rozwiązanie dla upartych newbie - krwq 2014-03-18 13:16
Właściwe rozwiązanie podałem niżej. - _13th_Dragon 2014-03-18 13:16

Pozostało 580 znaków

2014-03-18 13:00
0

dziękuję Dragon właśnie o coś takiego mi chodziło :)

Pozostało 580 znaków

2014-03-18 13:10
4

Z tym że jak już ci powiedziano - to jest skopany projekt.
Zastanów się nad:

const size_t N=10;
int tab[N*N*N*N*N];
for(int i=0;i<N*N*N*N*N;++i) tab[i]=rand()%1000;
for(int i=0;i<N*N*N*N*N;++i)
  {
   if(tab[i]==10)
     {
      cout<<"poszukiwany element znajduje sie w tab["<<(i/N*N*N*N)<<"]["<<(i/N*N*N)%N<<"]["<<(i/N*N)%N<<"]["<<(i/N)%N<<"]["<<i%N<<"]"<<endl;
      break;
     }
  }

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0