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"; }
Trudno wiem co powiedzieć poza „ją przeczytać i zrozumieć.” –
Ćwicz, ćwicz, ćwicz ... – jalf
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. –