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

Rozdzial 21 zadanie domowe

Ostatnio zmodyfikowano 2018-04-08 18:46
Autor Wiadomość
Pawełek
Temat założony przez niniejszego użytkownika
» 2018-04-08 15:07:57
W którym oknie i dlaczego print a nie int? Nie wiedzieć tez czemu breakpoint u mnie nie działa prawidłowo (chyba), tzn. według poradników na yt, to działanie programu zatrzymuje się na breakpoincie i wszystkie zmienne wypisywane są w samoistnie pojawiającym się oknie 'watches'(U mnie program zatrzymuje się na breakpoincie ale nie wyświetla zmiennych) żeby się dowiedzieć która zmienna w którym momencie ma jaką wartość muszę obsługiwać debuggera krokowo (wciskając ciągle 'next line') a żeby podejrzeć wartości zmiennych wchodzę w Debugging windows -> watches
P-170541
jankowalski25
» 2018-04-08 15:41:38
Debugowanie w Code::Blocks
Debugowanie w Code::Blocks

Dopisano:
dlaczego print a nie int?
Dlatego, że zmienna, którą wypisujesz, nie musi być zawsze typu
int
.

U mnie program zatrzymuje się na breakpoincie
Czyli działa prawidłowo (chyba że widzisz w którymś oknie jakieś błędy).

ale nie wyświetla zmiennych
Z tym czasami różnie bywa w różnych wersjach Code::Blocks. Wpisanie komendy powinno pokazać to, co trzeba.

żeby się dowiedzieć która zmienna w którym momencie ma jaką wartość muszę obsługiwać debuggera krokowo (wciskając ciągle 'next line')
Nie musisz, wystarczy na przykład postawić breakpointa w innym miejscu i nacisnąć czerwoną strzałkę (lub F8 przy domyślnych ustawieniach).

a żeby podejrzeć wartości zmiennych wchodzę w Debugging windows -> watches
Można i tak, a nawet to jest lepszy pomysł, bo dzięki temu nie musisz ciągle pisać print zmienna dla wszystkich zmiennych, tylko od razu widzisz ich wartości w oddzielnym oknie (które możesz sobie przypiąć, jeśli chcesz). Mimo tego znajomość komend bywa przydatna, choćby po to, aby sprawdzać, czy jakieś wyrażenia są prawdziwe albo żeby zmieniać wartości zmiennych czy wywoływać funkcje.
P-170542
Pawełek
Temat założony przez niniejszego użytkownika
» 2018-04-08 16:06:27
Trochę nie rozumiem tego, bo komenda ciągle pokazuje mi false (niezależnie od tego czy liczba się powtórzyłą czy nie) a if działa normalnie jakby tam była prawda :/
P-170543
jankowalski25
» 2018-04-08 16:11:14
if działa normalnie jakby tam była prawda
Na pewno? Postaw breakpointa na tym ifie i sprawdź, jaka jest wartość tego wyrażenia.

komenda ciągle pokazuje mi false (niezależnie od tego czy liczba się powtórzyłą czy nie)
Spójrz na te dwie zmienne, popatrz na warunek, w którym są użyte i zastanów się, czy nie ma tu jakiegoś błędu w kodzie.
P-170545
Pawełek
Temat założony przez niniejszego użytkownika
» 2018-04-08 18:07:36
Dziwnie mi ten program wyszedł, niektóre powtórzenia wyłapuje inne nie, zostawiam go tutaj narazie w wersji finalnej
C/C++
#include <conio.h>
#include <ctime>
#include <cstdlib>
#include <iostream>
using namespace std;

void wpisz( int tablica[] ) {
    int i = 0;
    do {
        cout << "Podaj " << i + 1 << " liczbe: ";
        cin >> tablica[ i ];
        i++;
    } while( i < 10 );
   
}

bool sprawdzenie( int tablica2[], int c, int ile, int a, int tablica[] ) {
   
    if( ile == 0 )
         return true;
   
    do {
        if( tablica[ a ] == tablica2[ c ] ) //dlaczego tutaj gdy wylosowana liczba się powtorzy funckja if (..) nie zwraca mi fałszu?
             return false;
       
        c++;
       
    } while( c == ile );
   
    return true;
}


int main() {
    srand( time( NULL ) );
    int tablica[ 10 ];
    int tablica2[ 8 ];
    int wylosowanych = 0;
    wpisz( tablica );
    int a;
    int b = 0;
    int c = 0;
   
   
   
    do
   
    {
       
        a = rand() % 10;
       
        if( sprawdzenie( tablica2, c, wylosowanych, a, tablica ) == true )
        { wylosowanych++;
            tablica2[ b ] = tablica[ a ];
            b++;
            cout << "Wylosowano " << b << "liczbe: " << tablica[ a ] << endl;
        }
       
    } while( b < 8 );
   
    return 0;
}

Powrócę do niego za miesiąc albo dwa gdy moje umiejętności kodowania będą znacznie większe to może wtedy znajdę powód jego dziwnego zachowania :)
P-170553
jankowalski25
» 2018-04-08 18:32:25
} while( c == ile );
Dlaczego ta pętla ma działać dopóki indeks tablicy jest równy jej zapełnieniu (czyli zawsze tylko raz)?

Powrócę do niego za miesiąc albo dwa
Jeśli zamierzasz odpuścić sobie to zadanie i przerabiać dalej kurs, to nie wiem, czy to jest dobry pomysł. Skoro już zacząłeś uczyć się korzystać z debuggera, to może lepiej to dokończyć na tym przykładzie?

C/C++
//dlaczego tutaj gdy wylosowana liczba się powtorzy funckja if (..) nie zwraca mi fałszu?
Może dlatego, że wspomniana pętla jest wykonywana co najwyżej jeden raz, więc sprawdzasz tylko jedną liczbę, a nie całą zapełnioną część tablicy?
P-170555
Pawełek
Temat założony przez niniejszego użytkownika
» 2018-04-08 18:46:48
Właśnie rozwiązując już zadanie z rozdziału 22 zauważyłem swój błąd powinno być "c<ile" w pierwotnej wersji programu było "c>ile" a później zmieniłem na "c==ile". Nie wiem dlaczego ale myślałem że jak warunek z while oddaje fałsz to pętla zostaje powtórzona, a przecież pętla się właśnie wtedy kończy gdy warunek w while jest fałszywy. Temat zamykam, dzięki za pomoc, zresztą pewnie jeszcze z niejednym problemem tu zawitam ale obym jak najwięcej rozwiązał sam :)
P-170556
1 « 2 »
Poprzednia strona Strona 2 z 2