- プログラミング言語: C
- プラットフォーム: PIC マイクロコントローラ 8 ビット
- 問題数: 2
数字表示には4桁の7セグメントディスプレイを使用しています。次のような7セグメントに文字/数字を表示する関数がいくつかあります。
zero() // displays 0 on the 7-segment.
one() // displays 1 on the 7-segment.
two() // displays 2 on the 7-segment.
...
これで、7 セグメント ディスプレイに表示する数字 (1435 など) ができました。私の現在のアルゴリズムは次のとおりです。
数値 1435 から個々の数字を抽出します (数字を 1、4、3、5 に分けます)。SDDS
- 7セグのdigit1に1が表示されます。
- 7 セグの digit2 に 4 が表示されます。
- 7 セグの digit3 に 3 が表示されます。
- 7セグの4桁目に5が表示されます。
これらの個々の数字を表示するために、次のように「10」の if-else 条件を使用しています。
- 表示する桁 == 0 の場合 -> 関数 zero() を実行します。そうしないと
- 表示する桁 == 1 の場合 -> 関数 one() を実行します。そうしないと
- 表示する桁 == 2 の場合 -> 関数 two() を実行します。
- ...
- ...
- ...
したがって、この実装 (番号 1435 の場合) を出力すると、いくつかの if-else チェックが実行されます。
- 数字1を表示するための2つのチェック
- 数字 4 を表示するための 5 つのチェック
- 数字 3 を表示するための 4 つのチェック
- 数字 5 を表示するための 6 つのチェック
- 数が変更されていなくても、 loop() 関数で「定期的かつ不必要に」実行される合計17のチェック(これが問題番号1です)。
問題番号 2 : この実装は、その数値をインクリメント/デクリメントする必要がある場合 (1435 から 1436、次に 1437 など)、if-else チェックの数も変更されるため、非効率的です。数値の変化は滑らかではありません。これは、「0」が if-else チェックの最初であるため、すばやく表示されることを意味します。一方、'9' は if-else チェックの最後なので、表示されるまでに 10 回のチェックを行う必要があります。これにより、表示される桁が 0 から 9 に向かって増加するにつれて、実装が大幅に遅くなります。2 つの問題を解決するには、どのように実装すればよいでしょうか?
前もって感謝します。