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

Program przestaje działać po dodaniu funkcji

Ostatnio zmodyfikowano 2016-11-19 22:06
Autor Wiadomość
jasiekkm
Temat założony przez niniejszego użytkownika
Program przestaje działać po dodaniu funkcji
» 2016-11-18 22:06:34
Witam, mam zrobic projekt z programowania, mysle ze tresc projektu nie gra tutaj roli.
Program przestaje działać po dodaniu nastepujacej funkcji:

 
C/C++
void operacje_na_dniach( przedmiot T[], int macierz[][ max_lp ], int lp ) {
    int spr = 0;
    int n = 3; /// weekend
    int x, y;
    int przesuniecie_temp = 0;
    bool sprawdzone = false;
    int dni_w_miesiacu[ 12 ] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
   
    for( int i = 0; i < lp; i++ ) {
       
        y =( T[ i ].p_miesiac - 1 );
        for( int j = 0; j < lp; j++ ) {
            do {
                if( spr == T[ i ].dni_realizacji )
                     sprawdzone = true;
               
                for( x = T[ i ].p_dzien; x < dni_w_miesiacu[ y ]; x = x + 5 ) {
                    while( n-- ) {
                        przesuniecie_temp =( x + 5 ) - dni_w_miesiacu[ y - 1 ];
                        spr++;
                        x++;
                        if( przesuniecie_temp > 0 ) {
                            y++;
                            x = przesuniecie_temp; }
                       
                    }
                }
                T[ i ].k_miesiac = y;
                T[ i ].k_dzien = x;
            } while( sprawdzone != true );
           
        } } }

Gdzie popełniam błąd?
P-153906
karambaHZP
» 2016-11-18 22:20:22
Program przestaje działać po dodaniu nastepujacej funkcji:
Co to znaczy?
Nie kompiluje się? Podaj treść błędów.
Zawisza w trakcie? Korzystaj z debuggera.
Wyrzuca błąd w trakcje pracy programu? Podaj treść wyjątku.

Do funkcji przekazujesz macierz, a nigdzie jej nie używasz.
Czy wartość zmiennej lp na pewno dotyczy rozmiaru tablicy T?
P-153908
jasiekkm
Temat założony przez niniejszego użytkownika
» 2016-11-18 22:26:11
To znaczy ze wykonuje tresc kodu do momentu napotkania owej funkcji, po czym nic nie wykonuje dalej i zawiesza sie.
Nie wyswietla zadnego bledu, w tym rzecz. W trakcie pracy programu wyrzuca jedynie okno " program przestal dzialac".
Funkcje z parametrem tablicy macierz deklaruje zanim uzytkownik wprowadzi wartosc zmiennej lp, zatem nadaje tablicy rozmiar maksymalny staly juz na poczatku. Z tego co wiem nie jest to błędem.
P-153910
czaffik
» 2016-11-18 22:41:48
Pomyślałbym że masz błąd kompilacji przez tą tablicę tablic, ale skoro mówisz że się kompiluje a potem zawiesza to sprawdź czy pętle w funkcji nie wykonują się w nieskończoność. Gdy zmienna sprawdzone będzie miała cały czas wartość false to pętla do while nigdy się nie zakończy.
P-153912
jasiekkm
Temat założony przez niniejszego użytkownika
» 2016-11-18 22:44:35
Dobra, masz racje, najbardziej wewnetrzna petla wykonuje sie nieskonczenie wiele razy, to pytanie jakie sie nasuwa, jak temu zapobiec nie zmieniajac zbyt programu? Petla ma sie konczyc tylko wtedy kiedt spr przyjmie konkretna wartosc
P-153913
michal11
» 2016-11-18 23:39:08
Zaczynasz funkcje i inicjalizujesz n = 3. Później w pętli
while( n-- )
 zmieniasz wartość aż do n = 0, wychodzisz z tej pętli, przechodzisz do następnego obiegu
for( x = T[ i ].p_dzien; x < dni_w_miesiacu[ y ]; x = x + 5 )
 ale twój while zaczyna z n = -1 więc wchodzisz w pętlę while, i wtedy się ona zapętla w nieskończoność ponieważ ciągle zmniejszasz n o jeden, w związku z czym nigdy nie osiągniesz zera aby wyjść z tej pętli (pomijam tu przekręcenia się inta po przekroczeniu min wartości).
P-153915
czaffik
» 2016-11-18 23:50:10
Nie będę próbował odgadywać jakie wartości w kolejnych obiegach pętli przyjmuje wartość spr, ale musisz zagwarantować żeby spr przyjęło którąś z wartości T.dni_realizacji. Najlepiej posprawdzać sobie jakie wartości przyjmuje zmienna spr, chociażby wypisując ją w pętli.
No i przedmówca dobrze zwrócił uwagę, nie przypisujesz do zmiennej n dodatniej wartości po każdym obiegu pętli, być może tylko w tym tkwi błąd.
P-153916
jasiekkm
Temat założony przez niniejszego użytkownika
» 2016-11-19 17:41:49
Pętla while sie nie zapętla, wrzucilem couta w srodku i wyswietla sie tylko 3 razy, dalej na zmiane wartosci x i y oraz cout wrzucony na koncu
C/C++
do {
    cout << "do while" << endl;
} while( sprawdzone != true );
P-153924
« 1 » 2
  Strona 1 z 2 Następna strona