2013-03-24 14 views
8

W mojej klasie programistycznej mamy testy i quizy oparte na próbkach kodu, które musimy przejść i określić ostateczny wynik. Zwykle są to skomplikowane fragmenty kodu i zanim zdaję sobie sprawę, utknąłem w jakiejś przypadkowej funkcji i nie mam pojęcia, co robię.Przechodzenie przez kod C++ na papierze, jak by to zrobić?

Jak prawidłowo przebiega się przez kod na papierze? Śledzenie pętli, zmiennych, funkcji, wszystkiego, jest dla mnie mylące.

Na przykład o to przeszłość quizu mieliśmy, co mam na 100%, ale zajęło mi wieki był bardzo brudny:

#include <iostream> 
#include <cstring> 
using namespace std; 

class foo { 
    char word[20]; 
    int qty; 

public: 
    foo() { set(3, 5); } 

    foo(int m, const char * s) { set(m, m+1); 
            strcpy(word, s);  } 

    foo( const foo& a) { cout << "... hahaha.1" << endl; 
       qty = 3 + a.qty; 
       strcpy(word, a.word); 
       strcat(word, ".5.6.7"); 
       cout << "... hahah.2" << endl; } 

    ~foo() { cout << qty << "," << word << "!!!" << endl; } 

    void set(int a, int b){ qty = a + b; 
          strcpy(word, "summer"); } 
    void wow(); 

    void output(){ cout << word << "," << qty << endl; } 
}; 

void hello(foo&); 
void greet(foo); 

int main() { 

    foo x, y(100, "QUIZ"); 

    greet(y); 
    cout << "a.b.c.d.e." << endl; 

    hello(x); 
    x.output(); 
    y.output(); 

    cout << "...the end" << endl; 
    return 0; 
} 

void foo::wow() { strcat(word,".1.2.3"); 
        qty += 4;  } 

void greet(foo g) { cout << "...HI.1\n"; 
         g.wow(); 
         g.output(); 
         cout << "...HI.2\n"; } 


void hello(foo & h) { cout << "...hello.1" << endl; 
       foo e; 

       e = h; 
       h.wow(); 
       h.output(); 
       e.output(); 
       cout << "...hello.2\n"; } 
+8

Trudno wiem co powiedzieć poza „ją przeczytać i zrozumieć.” –

+5

Ćwicz, ćwicz, ćwicz ... – jalf

+1

Rób notatki, bezpośrednio dodawaj fragmenty kodu, dziel się na mniejsze fragmenty, rysuj drzewa/wykresy połączeń, rysuj maszyny stanów, rozwiń/zwiń drzewa wywołań/poziom szczegółów wykresów, aby zobaczyć, co jest istotne i nie widzą tego, czego nie ma. Śledź swoje postępy, aby nie popaść w niekończącą się pętlę, powtarzając tę ​​samą pracę w kółko. :) A tak, ćwicz, ćwicz i ćwicz. –

Odpowiedz

0

Praktyka jest najlepszym sposobem, aby zrozumieć kod. Kiedy próbuję wykonywać takie ćwiczenia, nie staram się zrozumieć wszystkich funkcji na początku. Zaczynam od głównego i po prostu idę jak linia debuggera po linii oglądając wszystkie zmienne. Jeśli coś cię mylą, po prostu napisz wszystkie zmienne na papierze i zaznacz ich każdą zmianę. Jednak nie ma sposobu, aby nauczyć się czytania i rozumienia kodu lepiej i szybciej niż szkolenie.

0

„Myśl jak komputer”

masz program i danych program jest używany.

Musisz wiedzieć, gdzie znajdują się informacje o programie, w którym jesteś. To naprawdę musi być stos, ponieważ kiedy wywołujesz metodę, musisz wiedzieć, gdzie powrócić, gdy metoda się zakończy.

Musisz śledzić każdą zmienną - oczywiście zmienne mogą być lokalne dla wywołania metody, więc są to również stosy, i to jest, gdzie musisz być naprawdę ostrożny, aby upewnić się, że zmieniasz prawo instancja zmiennej lokalnej. Zmienne globalne są łatwe, ponieważ istnieje tylko jedna kopia, więc możesz umieścić je w stosie, ale tylko w dolnej części.

Do pracy na papierze najłatwiej jest umieścić dolną część stosu u góry strony i ułożyć stos w dół. Pamiętaj, że gdy metoda zwraca, to zmienne lokalne już nie istnieją, więc wytrzyj je lub zaznacz w pewien sposób wierzchołek stosu.

Robi się jeszcze więcej zabawy, jeśli robi żadnej wielu wątków ...

Powiązane problemy