1

私がやろうとしているのは、正の整数のみを持つファイルから読み取り、整数をソートして出力することです。

問題は、読み込もうとしているファイルの行数 (各行に番号が付いている) がわからないことです。

数字がいくつあるかわからなくても、アドレス/データレジスタに数字を格納する方法はありますか?

編集:もう少し説明します。データ ファイルには、おそらく 14 未満の入力が含まれます。問題は、個々のレジスタをハード コーディングせずに、14 未満の数値を異なるレジスタに配置するにはどうすればよいかということです。

4

1 に答える 1

1

ファイルから読み取っている場合、OS は「End of File チェック」を提供します。行ごとに読むと、行を数えるのは簡単です。EndOfFile チェックが true になったときに行カウンターが示す総行数。

この一連の数値を格納するには、おそらく十分な大きさの連続したストレージ ブロックが必要です。事前に最大サイズを決定し、十分な大きさのバッファーを静的に宣言するだけです。

別の方法として、メモリを動的に割り当て (Malloc の呼び出しまたは OS が提供する同様のものを参照)、予想よりも大きな量を保持し、その領域がいっぱいになるまで値を入力することもできます。ファイルにさらにある場合は、より大きなチャンクを割り当て、これまでに収集された値を古いチャンクからコピーし、古いチャンクを解放して続行します。簡単なルールは、予想される値の平均数の 2 シグマ倍と思われる値を最初に割り当てることです (たとえば、ファイルに通常 100 個の値が含まれていると思われる場合は、最初に 150 スロットのバッファーを割り当てることができます)。初期割り当て。再割り当てが必要な場合は、最後に割り当てたバッファーのサイズを 2 倍にします (たとえば、300、600、... に切り替えます)。これにより、再割り当てのオーバーヘッドが非常に低く抑えられます。

3 番目の選択肢は、一連の固定サイズのバッファーに値を収集することです (たとえば、新しいブロックごとに 100 スロットを割り当てます)。読み取り時に値を入力します。これでバッファーのセットができました (それらを線形リストにリンクするか、前の段落の手法を使用してそれらを追跡する配列を構築できます)。これにはソートが複雑になるという欠点があるため、これが最善の方法だとは思いません。

于 2013-03-04T18:46:51.020 に答える