Hoe kan ik C leren? (was Computerproject)

Kun je me helpen met het schrijven van een code voor deze vraag jongens ?? Je hebt een Arduino Uno met 8 LED's aangesloten op digitale pinnen 2 tot 9. Maak een array van 8 elementen. Vul het met willekeurige getallen tussen 2 en 9 (alles inbegrepen) Schrijf een programma dat het grootste aantal onder hen bepaalt. Bewaar dit nummer in een variabele met de naam max. Druk dit nummer af op een seriële monitor. Knipper de LED aangesloten op dit nummer. Laat de vertragingstijd 0,5 seconde zijn.

Merk op dat de willekeurige functie kan resulteren in gegenereerde dubbele nummers. De gegenereerde array kan bijvoorbeeld {3,4, 4, 7,6, 2,5,7} zijn

Het maximale aantal is 7. Omdat het twee keer voorkomt in de array, moet u het twee keer knipperen ^ _ ^ Het maximale aantal is 3 keer in de array opgetreden, dan moet je het 3 keer knipperen, en dus voor een willekeurig aantal keren

Ik heb dit tot nu toe geschreven, maar ik weet zeker dat het allemaal verkeerd is

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
Dat is slecht gezegd huiswerk, omdat ze maar één vertraging geven maar knipperende patronen verwachten. Hoe dan ook, benader dit door je voor te stellen dat je een robot bent die de nummers één voor één wordt getoond. Welke zeer efficiënte notities zou je kunnen gebruiken voor een herschrijfbare kladblok (dat wil zeggen, een minimaal aantal variabelen) Het zal helpen bij het vinden van de beste oplossing als je aanneemt dat de lijst met nummers willekeurig lang kan zijn ...
toegevoegd de auteur rossp, de bron
Eerlijk gezegd is er geen goede reden om de pinnen in een array te plaatsen, omdat hun bereik continu is. De enige benodigde array is de invoergegevens. En slechts twee lokale variabelen plus de iteratorvariabele zijn vereist om het probleem op te lossen. Kortom, schrijven is voorbarig. Zoek het algoritme uit .
toegevoegd de auteur rossp, de bron
Het spijt me, maar een vraag "Hoe leer ik C" is een beetje breed voor deze site. Om te beginnen kun je vragen stellen over Stack Overflow , een programmeersite. Maar zelfs daar zullen ze je waarschijnlijk vertellen een boek te lezen of een zelfstudie te doen. Stack Exchange is ontworpen om specifieke vragen te beantwoorden, niet "leer C" (of leer hoe te vliegen, of leer hoe te koken). Ik ga deze vraag afsluiten. Voel je vrij om het te bewerken met nieuwe informatie. Bedankt voor uw begrip en medewerking!
toegevoegd de auteur Nick Gammon, de bron
@JRobert Ik zit vast in de if-instructie en arrays Ik kan ze echt niet begrijpen, er is ook een for-lus
toegevoegd de auteur athanassis, de bron
Hoe zou je dit op papier/fysiek simuleren? Bijvoorbeeld met kop-staartmunten van N als LED's .....
toegevoegd de auteur Dave X, de bron
Nou voor één verbetering zijn pinnen [8] niet gedefinieerd, omdat C-indices beginnen met 0, dus er zijn alleen pinnen [0] ... pinnen [7] gedefinieerd in uw code. Misschien zou u uw voor (;;) lus daar kunnen gebruiken? Probeer ook uw code te compileren - als de compiler fouten detecteert en meldt, kan dit u helpen uw logica te verfijnen.
toegevoegd de auteur Dave X, de bron
@Chris Stratton. Ja Ja. Het uitzoeken van een algoritme vóór het coderen zou het beste zijn. Maar aangezien OP al code had zonder algoritme, dacht ik dat ik ze naar stap twee van de edit-compile-testcyclus zou verwijzen. Misschien geven de syntaxisfouten voldoende aanwijzingen.
toegevoegd de auteur Dave X, de bron
Dit antwoord is voor C, wat vergelijkbaar is met Arduino. Lees het aandachtig, het leert over arrays: dummies.com/how-to/content/…
toegevoegd de auteur Nayt Grochowski, de bron

1 antwoord

Eerste hint: pinMode() geldt slechts voor één pin tegelijk. U moet het 8 keer uitvoeren om de 8 I/O pinnenmodi te initialiseren.

Tweede hint: zoals @ChrisStratton probeerde te suggereren, genereer eerst het willekeurige nummer ingesteld; vervolgens "uitzoeken" (stel een aantal variabelen in het geheugen in die u zullen vertellen) wat doen met de terminaluitgang en de digitale I/O's; doe dan elk van die dingen. Het helpt om een ​​groter probleem in kleinere te verdelen.

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

Ten tweede, sloeg op de voorbeeldprogramma's die bij de ArduinoIDE horen: klik op de knop "Openen" [extra icoon op de IDE-werkbalk; niet het bestand | Open menu] en je ziet een menu met je huidige schetsen en, onder de pauze, categorieën van voorbeeldprogramma's. Kies een van de voorbeelden, lees het en probeer te begrijpen wat het doet en waarom het is geschreven zoals het is. Wijzig vervolgens de ### p - om te begrijpen hoe het zich anders gedraagt ​​en om het te onderbreken . Je leert veel door a) interpreteren van foutmeldingen van de compiler, en b) het vinden en herstellen van je fouten. Als je je programma's niet minstens twee keer zo vaak breekt als je lukt, probeer je niet hard genoeg!

2
toegevoegd