![]() |
|
||||
![]() Diga adeus às planilhas do Excel e tenha 100% de controle sobre suas contas a pagar e a receber, gestão de receitas e despesas, cadastro de clientes e fornecedores com fotos e histórico de atendimentos. Código fonte completo e funcional, com instruções para instalação e configuração do banco de dados MySQL. Fácil de modificar e adicionar novas funcionalidades. Clique aqui e saiba mais |
Você está aqui: C++ ::: Dicas & Truques ::: MIDI Musical Instrument Digital Interface, Mapeamento e sequenciamento MIDI, Entrada e saída MIDI |
||||||||
Usando a função midiOutShortMsg() da API do Windows para enviar uma mensagem MIDI para o dispositivo de saída MIDIQuantidade de visualizações: 1087 vezes |
||||||||
A função midiOutShortMsg() da API Win32 do Windows nos permite enviar uma mensagem MIDI para o dispositivo de saída MIDI. Esta função possui a seguinte assinatura:
O parâmetro HMIDIOUT é um handle para o dispositivo de saída MIDI, obtido a partir de uma chamada midiOutOpen(). O parâmetro dwMsg é do tipo DWORD, um inteiro sem sinal de 32 bits que pode armazenar valores na faixa de 0 até 4.294.967.295. Vamos ver um exemplo de como tocar uma única nota MIDI, a nota dó central no piano. Para isso precisamos entender como tal mensagem é enviada. Sabendo que um DWORD possui quatro bytes, o último byte ( o byte de ordem mais baixa) é o byte de status MIDI. Os valores de status mais comuns são "Note on", com o valor hexadecimal 90 e "Note off", com valor hexadecimal 80. O segundo byte de ordem mais baixa é o número da nota MIDI a ser tocada. O dó central no piano possui o valor decimal 48. Convertendo para hexadecimal temos 3C. Então, para tocar essa nota, já temos os dois últimos bytes com seus respectivos valores: 3C90 Vamos ao terceiro byte de order mais baixa. Este, no caso dos eventos "Note on" e "Note off", representa a velocidade (a força com a qual a nota é tocada no instrumento). Este valor pode ser na faixa de 0 a 127. Assim, para atacarmos a nota com a velocidade (ou volume) de 100, podemos fornecer o valor hexadecimal 64. Agora, o nosso valor fica: 643C90 Finalmente, para nosso alívio, o byte de mais alta ordem não é usado. Então temos: 00643C90 Agora só precisamos fornecer este valor para a função midiOutShortMsg(). Veja:
Execute esse código e você ouvirá uma linda nota dó nos auto-falantes do seu PC ou Notebook. |
||||||||
![]() |
||||||||
C++ ::: Desafios e Lista de Exercícios Resolvidos ::: Operadores de Manipulação de Bits (Bitwise Operators) |
||||
Exercícios Resolvidos de C++ - Como converter de decimal para binário usando os operadores de bits em C++Quantidade de visualizações: 711 vezes |
||||
Aprenda a programar com a nossa lista de exercícios de C++ e desafios de programação. Pergunta/Tarefa: Escreva um programa C++ para pede para o usuário informar um número decimal e faça a conversão para binário usando os operadores de bits. Sua saída deverá ser parecida com: Informe um número decimal: 9 O número binário é: 00000000000000000000000000001001 Veja a resolução completa para o exercício em C++, comentada linha a linha:
| ||||
C++ ::: Dicas & Truques ::: Matemática e Estatística |
||||
Como calcular desvio padrão em C++ - C++ para Matemática e EstatísticaQuantidade de visualizações: 776 vezes |
||||
Em Matemática e Estatística, o Desvio padrão (em inglês: Standard Deviation) é uma medida de dispersão, ou seja, é uma medida que indica o quanto um conjunto de dados é uniforme. Quando o desvio padrão é baixo, isso quer dizer que os dados do conjunto estão mais próximos da média. Como calcular o desvio padrão de um conjunto de dados? Vamos começar analisando a fórmula mais difundida na matemática e na estatística: \[\sigma = \sqrt{ \frac{\sum_{i=1}^N (x_i -\mu)^2}{N}}\] Onde: a) __$\sigma__$ é o desvio; b) __$x_i__$ é um valor qualquer no conjunto de dados na posição i; c) __$\mu__$ é a média aritmética dos valores do conjunto de dados; d) N é a quantidade de valores no conjunto. O somatório dentro da raiz quadrada nos diz que devemos somar todos os elementos do conjunto, desde a posição 1 até a posição n, subtrair cada valor pela média do conjunto e elevar ao quadrado. Obtida a soma, nós a dividimos pelo tamanho do conjunto. Veja o código C++ completo que obtém o desvio padrão a partir de um conjunto de dados contendo quatro valores:
Ao executar este código C++ nós teremos o seguinte resultado: Desvio Padrão Populacional: 30.0 Desvio Padrão Amostral: 34.64101615137755 Veja que, para calcular o Desvio Padrão Populacional, nós dividimos o somatório pela quantidade de elementos no conjunto, enquanto, para calcular o Desvio Padrão Amostral, nós dividimos o somatório pela quantidade de elementos - 1 (cuidado com a divisão por zero no caso de um conjunto com apenas um elemento). | ||||
C++ ::: STL (Standard Template Library) ::: Vector C++ |
||||||||||||||||||||||||
Como retornar uma referência ao último elemento de um vector C++ usando a função back()Quantidade de visualizações: 7036 vezes |
||||||||||||||||||||||||
O último elemento de um contêiner STL vector pode ser acessado por meio da função back(). Como esta função é sobrecarregada, temos duas opções:reference back(); const_reference back() const;
Ao executar este código C++ nós teremos o seguinte resultado: Último elemento: 87 Último elemento: 102 Note que aqui nós usamos:
para guardar o valor do último elemento na variável valor. Poderíamos também usar:
Agora valor é uma referência direta ao último elemento do vector. Desta forma, qualquer alteração no valor da variável valor afetará também o último elemento do vector. Observe agora o seguinte trecho de código:
Aqui nós acessamos o valor do último elemento, guardarmos-o na variável valor e atribuímos o valor 20 à valores.back(). Porém, ao imprimirmos a variável valor o seu conteúdo ainda é 87. De fato, o que gostaríamos é que uma alteração em valores.back() afetasse também a variável valor. Assim:
Mas, como evitar alterações diretas na variável valor? Podemos declarar valor como uma referência constante, ou seja, usar a segunda versão da função back(), a saber const T&, que retorna uma referência constante. Veja:
Agora o efeito que queríamos é alcançado. Alterações em valores.back() afetam a variável valor, mas, não podemos alterar valor diretamente, já que esta variável é uma referência constante agora. | ||||||||||||||||||||||||
Desafios, Exercícios e Algoritmos Resolvidos de C++ |
Veja mais Dicas e truques de C++ |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
1º lugar: Java |