C'yi nasıl öğrenirim? (Bilgisayar projesi idi)

Bu soru için bir kod yazmama yardım eder misiniz? 2 ila 9 dijital pinlere bağlı 8 LED'li bir Arduino Uno'nuz var. 8 elementten oluşan bir dizi oluşturun. 2 ile 9 arasında rasgele sayılarla doldurun (her şey dahil) Aralarındaki en büyük sayıyı belirleyen bir program yazın. Bu numarayı max adında bir değişkene kaydedin. Bu numarayı seri monitöre yazdırın. Bu numaraya bağlı olan LED'i yanıp söner. Gecikme süresi 0,5 saniye olsun.

Rastgele fonksiyonun, üretilen yinelenen sayılarla sonuçlanabileceğini unutmayın. Örneğin, oluşturulan dizi {3,4, 4, 7,6, 2,5,7} olabilir

Maksimum sayı 7. Dizide iki kez meydana geldiğinden beri, iki kez yanıp sönmeniz gerekir ^ _ ^ Dizide 3 kez en fazla sayı oluştu, daha sonra 3 kez göz atmanız gerekir;

Bunu şimdiye kadar yazdım ama hepsinin yanlış olduğuna eminim.

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
Bu, kötü bir şekilde ifade edilmiş bir ev ödevi çünkü yalnızca bir gecikme veriyor, ancak desenlerin yanıp sönmesini bekliyorlar. Her neyse, bu yaklaşıma, bir defada sayıları gösteren bir robot olduğunuzu hayal edin. Yeniden yazılabilir bir karalama defteri üzerinde ne kadar etkili notlar alabiliyorsunuz (yani, minimum sayıda değişken) Sayı listesinin keyfi olarak uzun olabileceğini varsayarsanız, en iyi çözümü bulmada yardımcı olacaktır
katma yazar rossp, kaynak
Açıkçası, aralıklarının sürekli olması nedeniyle pimleri bir diziye koymak için sağlam bir neden yoktur. Gereken tek dizi giriş verisidir. Sorunu çözmek için yalnızca iki yerel değişken artı yineleyici değişkeni gerekir. Temel olarak, kod yazmak erken. Algoritmayı çöz. .
katma yazar rossp, kaynak
Üzgünüm, ama "C'yi nasıl öğrenirim" sorusu bu site için biraz geniş. Bir şey için, bir programlama sitesi olan Yığın Taşması hakkında sorabilirsiniz. Ama orada bile onlar muhtemelen bir kitap okumanı veya bir öğretici yapmanı söyleyecekler. Yığın Değişimi, "C öğret" değil (veya nasıl uçulacağını ya da yemek pişirmeyi öğrenerek) belirli soruları cevaplamak için tasarlanmıştır. Bu soruyu kapatacağım. Yeni bilgilerle düzenlemek için çekinmeyin. Anlayışınız ve işbirliğiniz için teşekkür ederiz!
katma yazar Nick Gammon, kaynak
@Jobert if deyimi ve dizileri takılıyorum Gerçekten onları anlayamıyorum da bir döngü için olması gerekiyordu
katma yazar athanassis, kaynak
Bunu kağıt üzerinde/fiziksel olarak nasıl simüle ederdiniz? Örneğin, LED'ler olarak N başı kuyruklu para kullanarak .....
katma yazar Dave X, kaynak
Bir gelişme için, pinler [8] tanımsızdır, çünkü C endeksleri 0 ile başlar, bu yüzden kodunuzda tanımlanmış pinler [0] ... pinler [7] vardır. Belki de for (;;) döngüsünü orada kullanabilirsin? Ayrıca, kodunuzu derlemeyi deneyin - derleyici hataları algılar ve raporlarsa, mantığınızı daraltmanıza yardımcı olabilir.
katma yazar Dave X, kaynak
@ Chris Stratton. Evet evet. Kodlamadan önce bir algoritma bulmak en iyisidir. Ancak OP'nin algoritması olmayan bir kodu zaten olduğundan, onları düzenleme-derleme-test döngüsünün iki aşamasına yönlendireceğimi düşündüm. Belki de sözdizimi hataları yeterince ipucu sağlayacaktır.
katma yazar Dave X, kaynak
Bu cevap, Arduino'ya çok benzeyen C içindir. Lütfen dikkatlice okuyunuz, diziler hakkında bilgi vermektedir: dummies.com/how-to/content/…
katma yazar Nayt Grochowski, kaynak

1 cevap

İlk ipucu: pinMode() bir seferde yalnızca bir pin için geçerlidir. 8 G/Ç pininin modunu intialize etmek için 8 defa çalıştırmanız gerekecektir.

İkinci ipucu: @ChrisStratton'ın önermeye çalıştığı gibi, ilk önce rastgele sayıyı oluşturun; daha sonra "anlamaya" (size anlatacak bazı değişkenleri ayarlayın) terminal çıkışı ve dijital giriş/çıkışlarla ne yapılacağını; sonra bunların hepsini yapın. Daha büyük bir problemin daha küçük problemlere bölünmesine yardımcı olur.

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).

İkincisi, ArduinoIDE ile gelen örnek programları yenmek: IDE araç çubuğundaki "Aç" düğmesine [yukarı simgesi); Dosya değil | Menüyü aç] ve mevcut çizimlerinizin ve araların altında örnek program kategorilerinin bir menüsünü göreceksiniz. Örneklerden birini seçin, okuyun ve ne yaptığını ve neden olduğu gibi yazıldığını anlamaya çalışın. Ardından ### p’yi çimdikleyin - hem nasıl farklı davrandığını anlamak hem de kırmak . A) derleyiciden hata mesajlarını yorumlayarak ve b) hatalarınızı bulup düzelterek çok şey öğreneceksiniz. Programlarınızı başarılı olduğunuzdan en az iki kez kırmıyorsanız, yeterince çaba harcamazsınız!

2
katma