Nella mia classe di programmazione, abbiamo test e quiz basati su esempi di codice che dobbiamo esaminare e determinare l'output finale. Di solito sono ingannevoli pezzi di codice e quando realizzo, sono bloccato in qualche funzione casuale e non ho idea di cosa sto facendo.Camminando attraverso il codice C++ su carta, come faresti?
Come si esegue correttamente il codice su carta? Tenere traccia di loop, variabili, funzioni, tutto, mi confonde.
Per esempio, ecco un quiz passato abbiamo avuto, che ho ottenuto al 100% su, ma mi ci sono voluti per sempre ed era molto disordinato:
#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"; }
E 'difficile sapere cosa dire al di là di "leggerlo e capirlo." –
Pratica, pratica, pratica ... – jalf
Prendere appunti, annotare parti di codice direttamente, dividere il codice in parti più piccole, disegnare alberi di chiamata/grafici, disegnare macchine a stati, espandere/comprimere i livelli di alberi di chiamata/livello di grafici in modo da poter vedere cosa rilevante e non può vedere cosa non lo è. Tieni traccia dei tuoi progressi in modo da non cadere in un ciclo infinito te stesso ripetendo lo stesso lavoro più e più volte. :) E sì, pratica, pratica e pratica. –