Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

warunek w pętli while

Ostatnio zmodyfikowano 2016-06-02 09:31
Autor Wiadomość
pawellgawell
Temat założony przez niniejszego użytkownika
warunek w pętli while
» 2016-05-31 17:55:04
Witam, stworzyłem sobie taki prosty program liczący iteracyjne temperaturę w płytce. wszystko działa ok, ale chciałbym, żeby ilość przebiegów pętli z ilością iteracji nie była narzucona odgórnie, tylko zależała od np dwóch poprzednich wartości w środkowym punkcie płyty. byłby wdzięczny za sugestie lub podopowiedzi jak to zrobić.

C/C++
#include <iostream>

using namespace std;

int main() {
   
    int wymiar = 11;
    int T = 100;
    int sr;
    sr = wymiar / 2;
    double spr;
    spr = 0;
   
    double ** tab = new double *[ wymiar ]; //alokacja pamieci
    for( int i = 0; i < wymiar; ++i ) {
        tab[ i ] = new double[ wymiar ]; //alokacja pamieci
        for( int j = 0; j < wymiar; ++j ) { //wpisanie wartosci do tablicy
            tab[ i ][ j ] = 0;
        }
    }
    for( int k = 0; k < wymiar; k++ ) {
        tab[ 0 ][ k ] = T;
       
    }
    for( int z = 0; z < 50; z++ ) { //tą pętle chcę zastąpić pętlą while
        for( int k = 1; k < wymiar - 1; k++ ) {
            for( int l = 1; l < wymiar - 1; l++ ) {
                tab[ k ][ l ] = 0.25 *( tab[ k + 1 ][ l ] + tab[ k - 1 ][ l ] + tab[ k ][ l + 1 ] + tab[ k ][ l - 1 ] );
            }
        }
        spr = tab[ wymiar - sr ][ wymiar - sr ];
    }
    for( int k = 0; k < wymiar; k++ ) {
        for( int l = 0; l < wymiar; l++ ) {
            cout << tab[ k ][ l ] << " ";
        }
        cout << endl;
    }
   
    for( int i( 0 ); i < wymiar; ++i )
         delete[] tab[ i ]; //uwolnienie pamieci
   
    delete[] tab; //uwolnienie pamieci
    tab = NULL;
   
    cout << "temp w srodku: " << spr << endl;
   
    system( "PAUSE" );
   
    return 0;
}
P-148772
darko202
» 2016-06-02 08:02:21
1.
mylisz się że pętla FOR {} ściśle określa ilość przebiegów tej pętli bo :
ilość przebiegów określa sprawdzany warunek (i tak jest dla każdej pętli)

np.
C/C++
//petla
czy_kontynuowac = true;
for(; czy_kontynuowac; )
{
    ...
    // i jeśli gdzieś w jakimś miejscu kiedyś zmienimy
    czy_kontynuowac = false;
    // to przerwiemy pętle
    ...
}

ile będzie przebiegów tej pętli ? 


2.
jak mamy Ci doradzić, gdy nie wiemy co jest Ci potrzebne

! najważniejszy jest warunek
pętle różnią się od siebie, ale tych różnic wcale nie tak wiele :-)



P-148795
mateczek
» 2016-06-02 09:31:58
np taka sugestia
C/C++
while( true ) { //tą pętle chcę zastąpić pętlą while
    for( int k = 1; k < wymiar - 1; k++ ) {
        for( int l = 1; l < wymiar - 1; l++ ) {
            tab[ k ][ l ] = 0.25 *( tab[ k + 1 ][ l ] + tab[ k - 1 ][ l ] + tab[ k ][ l + 1 ] + tab[ k ][ l - 1 ] );
        }
    }
    if(( tab[ wymiar - sr ][ wymiar - sr ] - spr ) < 0.01 ) break; // np. przerwanie gdy w kolejnej iteracji uchyb będzie dopuszczalny
   
    spr = tab[ wymiar - sr ][ wymiar - sr ];
}
P-148796
« 1 »
  Strona 1 z 1