8

私のプログラミングのクラスでは、コード サンプルに基づいたテストとクイズを行い、最終的な出力を決定する必要があります。通常、それらはトリッキーなコードであり、気が付く頃には、ランダムな機能に行き詰まっており、自分が何をしているのかわかりません。

紙の上でコードを正しく実行するにはどうすればよいでしょうか? ループ、変数、関数、すべてを追跡していると、混乱します。

たとえば、これは私たちが過去に行ったクイズで、100% 正解しましたが、永遠に時間がかかり、非常に厄介でした。

#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"; }
4

2 に答える 2

0

練習はコードを理解するための最良の方法です。このような運動をしようとするとき、最初からすべての機能を理解しようとしているわけではありません。私はメインから始めて、すべての変数を監視する行ごとにデバッガーのように行きます。sth で混乱する場合は、すべての変数を紙に書き、すべての変更に印を付けてください。ただし、トレーニングよりも速くコードを読んで理解することを学ぶ方法はありません。

于 2013-03-24T23:25:50.170 に答える
0

「コンピューターのように考える」

プログラムと、プログラムが使用しているデータがあります。

プログラムのどこにいるのかを知る必要があります。メソッドを呼び出すときは、メソッドが終了したときにどこに戻るかを知る必要があるため、これは実際にはスタックである必要があります。

各変数を追跡する必要があります - もちろん、変数はメソッド呼び出しに対してローカルである可能性があるため、これらは実際にはスタックでもあり、ローカルの正しいインスタンスを変更していることを確認するために本当に注意する必要があります。変数。グローバル変数は、コピーが 1 つしかないため簡単です。スタックの一番下に置くことができます。

紙で作業するには、スタックの一番下をページの一番上に置き、スタックを下に向けて成長させるのが最も簡単です。メソッドが戻ると、そのローカル変数は存在しなくなるので、それらを削除するか、何らかの方法でスタックの一番上にマークを付けます。

マルチスレッドを実行している場合、物事はさらに楽しくなります...

于 2013-03-24T23:31:54.783 に答える