Como eu aprendo C? (foi projeto de computador)

Você pode me ajudar a escrever um código para essa questão? Você tem um Arduino Uno com 8 LEDs conectados aos pinos digitais 2 a 9. Crie uma matriz de 8 elementos. Preencha com números aleatórios entre 2 e 9 (tudo incluído) Escreva um programa que determine o maior número entre eles. Salve esse número em uma variável chamada max. Imprima este número no monitor serial. Pisca o LED conectado a este número. Deixe o tempo de atraso ser de 0,5 segundo.

Note que a função aleatória pode resultar em números duplicados gerados. Por exemplo, a matriz gerada pode ser {3,4, 4, 7,6, 2,5,7}

O número máximo será 7. Uma vez que ocorreu duas vezes na matriz, então você deve piscar duas vezes ^ _ ^ O número máximo ocorreu 3 vezes na matriz, então você deve piscar 3 vezes, e assim para qualquer número de ocorrências

Eu escrevi isso até agora, mas tenho certeza que está tudo errado

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
Isso é um trabalho de casa mal declarado, pois eles só dão um atraso, mas esperam piscar padronizado. Enfim, abordar isso imaginando que você é um robô sendo mostrado os números um de cada vez. O que notas muito eficientes você poderia ter em um bloco de rascunho regravável (ou seja, um número mínimo de variáveis) Ele ajudará a encontrar a melhor solução se você assumir que a lista de números poderia ser arbitrariamente longa ...
adicionado o autor rossp, fonte
Francamente, não há razão para colocar os pinos em um array, já que o alcance deles é contínuo. O único array necessário é os dados de entrada. E apenas duas variáveis ​​locais mais a variável iteradora são necessárias para resolver o problema. Basicamente, escrever código é prematuro. Descobrir o algoritmo .
adicionado o autor rossp, fonte
Me desculpe, mas uma pergunta "Como eu aprendo C" é um pouco ampla para este site. Por um lado, você pode perguntar em Stack Overflow , que é um site de programação. Mas até lá eles provavelmente dirão para você ler um livro ou fazer um tutorial. O Stack Exchange foi desenvolvido para responder a perguntas específicas que não "ensinam C" (ou aprender a voar ou aprender a cozinhar). Eu vou fechar essa questão. Sinta-se à vontade para editá-lo com novas informações. Obrigado pela sua compreensão e cooperação!
adicionado o autor Nick Gammon, fonte
@JRobert Eu estou preso na instrução if e arrays Eu realmente não consigo entendê-los também deve haver um loop for
adicionado o autor athanassis, fonte
Como você simularia isso no papel/fisicamente? Por exemplo, usando N moedas de cabeça como LEDs .....
adicionado o autor Dave X, fonte
Bem, para uma melhoria, os pinos [8] são indefinidos, já que os índices C começam com 0, portanto, existem apenas pinos [0] ... pinos [7] definidos em seu código. Talvez você possa usar o seu loop (;;) lá? Além disso, tente compilar seu código - se o compilador detectar e relatar erros, isso poderá ajudá-lo a refinar sua lógica.
adicionado o autor Dave X, fonte
@ Chris Stratton. Sim Sim. Descobrir um algoritmo antes de codificar seria melhor. Mas como o OP já tinha código sem um algoritmo, imaginei que apontá-los para o segundo passo do ciclo de edição-compilação-teste. Talvez os erros de sintaxe forneçam pistas suficientes.
adicionado o autor Dave X, fonte
Esta resposta é para o C, que é bem parecido com o Arduino. Por favor, leia com atenção, ensine sobre matrizes: dummies.com/how-to/content/…
adicionado o autor Nayt Grochowski, fonte

1 Respostas

Primeiro dica: o pinMode() aplica-se apenas a um pino de cada vez. Você precisará executá-lo 8 vezes para inicializar os 8 modos de pinos de E/S.

Segunda dica: Como @ChrisStratton tentou sugerir, gere o número aleatório definido primeiro; em seguida, "descobrir" (defina algumas variáveis ​​na memória que lhe dirão) o que fazer com a saída do terminal e as E/Ss digitais; então faça cada uma dessas coisas. Isso ajuda a particionar um problema maior em problemas menores.

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

Em segundo lugar, bata nos programas de exemplo que vêm com o ArduinoIDE: clique no botão "Abrir" [uparrow icon na barra de ferramentas do IDE; não o arquivo | Abra o menu] e você verá um menu de seus esboços atuais e, abaixo do intervalo, categorias de programas de exemplo. Escolha um dos exemplos, leia-o e tente entender o que ele faz e por que está escrito do jeito que está. Em seguida, ajuste o ### p dele - para entender como se comportar de maneira diferente e para quebrar . Você aprenderá muito a) interpretando mensagens de erro do compilador eb) encontrando e corrigindo seus erros. Se você não está quebrando seus programas pelo menos duas vezes mais do que consegue, você não está se esforçando o suficiente!

2
adicionado