Cをどうやって学びますか? (コンピュータプロジェクト)

あなたはこの質問の男のためのコードを書いて私を助けることができますか? 8ピンのLEDがデジタルピン2〜9に接続されたArduino Unoがあります。 8要素の配列を作成します。 2と9の間の乱数で入力してください(すべてを含む) その中で最大の数を決定するプログラムを書く。この番号をmaxという名前の変数に保存します。この番号をシリアルモニタに表示します。この番号に接続されているLEDを点滅させます。遅延時間を0.5秒とする。

ランダム関数は重複した数値を生成する可能性があることに注意してください。例えば、生成される配列は、{3,4,4,7,6,2,5,7}

最大数は7です。配列内で2回発生したので、2回点滅する必要があります^ _ ^ 配列内で最大の回数が3回発生した場合、それを3回点滅させる必要があります。したがって、任意の発生回数

私はこれまでこれを書いているが、私はそれがすべて間違っていると確信している

int pins[8]={2, 3, 4, 5, 6, 7, 8,9};

void setup() 
{
   pinMode(pins[8], OUTPUT);
}

void loop() 
{
    x=random(0, 8);
    digitalWrite(pins[x], HIGH);
    delay(1000)
    digitalWrite(pins[x], LOW);
    delay(1000)
}
3
追加された 編集された
ビュー: 4
それは1つの遅れだけを与えるが、パターン化された点滅を期待するので、宿題は不十分である。とにかく、あなたが一度に1つずつ番号が表示されているロボットだと想像してこれにアプローチしてください。あなたが書き換え可能なスクラッチパッド(つまり、最小限の変数)で非常に効率的なメモを取ることができます。数字のリストが任意に長くなる可能性があると仮定すると、最良のソリューションを見つけるのに役立ちます...
追加された 著者 rossp,
率直に言えば、ピンを配列に入れる理由はまったくありません。その範囲は連続しているからです。必要な配列は入力データのみです。この問題を解決するには、2つのローカル変数とイテレータ変数が必要です。基本的にコードを書くのは時期尚早です。 アルゴリズムを解説します。
追加された 著者 rossp,
申し訳ありませんが、「Cを学ぶにはどうすればよいですか」という質問は、このサイトでは少し幅があります。プログラミングサイトである Stack Overflow について尋ねるかもしれません。しかし、そこにさえ、彼らはたぶんあなたに本を読んだり、チュートリアルをするように伝えます。 Stack Exchangeは、「教えるC」ではない特定の質問に答えるために設計されています(または飛行する方法やその方法について学習する方法を学ぶ)。私はこの質問を閉じるつもりです。新しい情報で自由に編集してください。ご理解とご協力ありがとうございます!
追加された 著者 Nick Gammon,
@JRobert私はifステートメントと配列にこだわっていますが、私も実際にそれらを理解することはできませんが、forループと思われています
追加された 著者 athanassis,
これを紙で/物理的にどのようにシミュレートしますか?たとえば、LEDとしてNヘッドテールコインを使用すると.....
追加された 著者 Dave X,
1つの改善のために、Cのインデックスは0から始まるので、[8]のピンは未定義です。したがって、あなたのコードで定義されているピン[0] ...ピン[7]だけです。たぶんあなたのfor(;;)ループを使用することができますか?また、コードをコンパイルしてみてください。コンパイラがエラーを検出して報告すると、ロジックを洗練させるのに役立ちます。
追加された 著者 Dave X,
@クリス・ストラットン。はいはい。コーディングする前にアルゴリズムを理解することが最適です。しかし、OPにはアルゴリズムがないコードがすでにあるので、編集コンパイルテストサイクルの2歩に向かうと思いました。たぶん、構文エラーが十分な手掛かりを提供します。
追加された 著者 Dave X,
この答えはArduinoにかなり似ているCです。注意深く読んで、配列について教えてください: dummies.com/how-to/content/&hellip
追加された 著者 Nayt Grochowski,

1 答え

最初のヒント:pinMode()は一度に1つのピンにのみ適用されます。 8つのI/Oピンのモードを初期化するには、それを8回実行する必要があります。

2番目のヒント:@ChrisStrattonが示唆したように、まず乱数セットを生成します。ターミナル出力とデジタルI/Oとは何をするのでしょうか?これらのことをそれぞれ行います。より大きな問題を小さな問題に分割するのに役立ちます。

Update: Considering your updated title, How do I learn C?, and since the question reads like a homework assignment, aren't you already taking a class in C or C++? If so, how do you find it lacking, i.e., what additional resources or direction would be most helpful to you? There are a number of good books on the C language, and one of those would be a good place to start. If you don't already have a favorite one, you can't go wrong with The C Programming Language, by Brian Kernighan & Dennis Ritchie, the authors/designers of the C language and its early compilers. It is book on the C language, not on programming per-se, so if you are new to programming as well, a programming tutorial would be an excellent additional choice (sorry I don't have one to recommend).

次に、ArduinoIDEに付属しているサンプルプログラムを叩きます:IDEツールバーの「開く」ボタンをクリックします。ファイルではない|開いているメニュー]をクリックすると、現在のスケッチのメニューが表示され、ブレークの下にサンプルプログラムのカテゴリが表示されます。例をひとつ選び、それを読んで、それが何をしているのか、なぜそれが書かれているのか理解しようとする。それから### pを微調整して、それがどのように異なって振る舞うかを理解し、それを壊す。 a)コンパイラからのエラーメッセージを解釈し、b)間違いを見つけて修正することで、多くのことを学びます。あなたが成功している時間の少なくとも2倍の時間であなたのプログラムを壊していないならば、あなたは十分な努力をしていません!

2
追加された