Você está aqui: C++ ::: Dicas & Truques ::: MIDI Musical Instrument Digital Interface, Mapeamento e sequenciamento MIDI, Entrada e saída MIDI |
Aprenda a usar a função midiOutOpen() do Windows para abrir o dispositivo de saída MIDIQuantidade de visualizações: 1134 vezes |
Antes de tocarmos uma nota MIDI ou até mesmo um grupo de eventos MIDI, precisamos entender como abrir o dispositivo de saída MIDI. Para isso podemos usar a função midiOutOpen() da API do Windows. Essa função possui a seguinte assinatura:---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- MMRESULT midiOutOpen( LPHMIDIOUT phmo, UINT uDeviceID, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD fdwOpen ); O parâmetro LPHMIDIOUT aponta para um handle do tipo HMIDIOUT, o qual nos permite identificar o dispositivo MIDI aberto. O parâmetro uDeviceID identifica a saída MIDI que vai ser aberta. O parâmetro dwCallback representa uma função de callback ou um gerenciador de eventos. O parâmtro dwInstance representa dados de instância do usuário para a função de callback. O parâmetro fdwOpen é uma flag de callback para abrir o dispositivo. Os valores válidos são: CALLBACK_EVENT, CALLBACK_FUNCTION, CALLBACK_NULL, CALLBACK_THREAD e CALLBACK_WINDOW. Veja um trecho de código no qual usamos a função midiOutOpen() para abrir o dispositivo de saída MIDI e então usamos midiOutClose() para fechá-lo. Não se esqueça que você precisa do Windows SDK instalado. Para este exemplo eu usei o Visual Studio 2017 (com a biblioteca winmm.lib referenciada nas dependências adicionais de entrada do veiculador - linker). ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <cstdlib> #include <iostream> #include <windows.h> using namespace std; int main(int argc, char *argv[]) { unsigned int erro; // guarda o erro caso algo dê errado HMIDIOUT saida; // handle para o dispositivo de saída MIDI. // vamos abrir o dispositivo de saída MIDI erro = midiOutOpen(&saida, MIDI_MAPPER, 0, 0, CALLBACK_NULL); if (erro != MMSYSERR_NOERROR) { printf("Não foi possível abrir o mapeador MIDI: %d\n", erro); } else { printf("Mapeador MIDI aberto com sucesso\n"); } // agora vamos fechar o dispositivo de saída MIDI midiOutClose(saida); system("PAUSE"); return EXIT_SUCCESS; } Veja que aqui eu forneci o valor MIDI_MAPPER para o parâmetro uDeviceID. MIDI_MAPPER representa o dispositivo padrão. Porém, se você tiver mais de um dispositivo de saída MIDI instalado, poderá referenciá-los pelos valores 0, 1, 2, 3, etc. Execute o código e veja o resultado. Se você vir a mensagem "Mapeador MIDI aberto com sucesso" então seu dispositivo de saída MIDI foi acessado e está pronto para receber mensagens. |
![]() |
C++ ::: Fundamentos da Linguagem ::: Estruturas de Controle |
C++ para iniciantes - Como usar o laço for em C++Quantidade de visualizações: 22837 vezes |
O laço for é usado quando queremos executar um bloco de códigos um determinado número de vezes. Este laço é composto de três partes:---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- for(início; condição; incremento/decremento){ bloco de instruções } A parte início é executada uma única vez (na entrada do laço). Geralmente é nesta parte que declaramos e inicializamos a variável de controle. Na parte condição nós testamos a condição atual da variável de controle, para verificar se o laço pode continuar sua execução. Na parte do incremento/decremento nós alteramos o valor da variável de controle. Finalmente o bloco de instruções representa as instruções que serão executadas no laço. Veja um exemplo de laço for no qual exibimos os números de 0 a 10: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <string> #include <iostream> using namespace std; int main(int argc, char *argv[]){ // um laço for que conta de 0 a 10 for(int i = 0; i <= 10; i++){ cout << i << "\n"; } cout << "\n\n"; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } Veja agora um laço for usado para exibir os números de 10 a 0: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <string> #include <iostream> using namespace std; int main(int argc, char *argv[]){ // um laço for que conta de 10 a 0 for(int i = 10; i >= 0; i--){ cout << i << "\n"; } cout << "\n\n"; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } É importante observar que mais de uma expressão podem ser executadas nas partes início e incremento/decremento de um laço for. Veja um exemplo: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <string> #include <iostream> using namespace std; int main(int argc, char *argv[]) { // um laço for que conta de 10 a 0 for(int i = 0, x = 4; i <= 10; i++, x += 2){ cout << (i * x) << "\n"; } cout << "\n\n"; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } |
C++ ::: Fundamentos da Linguagem ::: Estruturas de Controle |
Como usar o laço while da linguagem C++ - C++ para iniciantesQuantidade de visualizações: 19346 vezes |
O laço while é usado quando queremos executar um bloco de instruções repetidamente ENQUANTO uma condição for satisfeita. Veja a sintáxe deste laço:---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- while(expressão){ bloco de instruções } A parte expressão deve sempre resultar em um valor true ou false quando avaliada. Veja um trecho de código no qual temos um laço while que conta de 0 a 10: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <string> #include <iostream> using namespace std; int main(int argc, char *argv[]){ // um laço while que permite contar de 0 a 10 int valor = 0; while(valor <= 10){ cout << valor << "\n"; valor++; } cout << "\n\n"; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } É importante lembrar que o C++, ao contrário do C, possui um tipo booleano. Este tipo é chamado bool e pode ser usado em um laço while da seguinte forma: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <string> #include <iostream> using namespace std; int main(int argc, char *argv[]){ // um laço while que mostra como usar o tipo // bool bool pode = true; int valor = 0; while(pode){ cout << valor << "\n"; valor++; // vamos parar o laço aqui if(valor > 10) pode = false; } cout << "\n\n"; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } Lembre-se de que um laço while pode nunca ser executado, ou seja, se a condição testada for sempre insatisfatória, o fluxo de código passará para a próxima instrução após o laço. Veja: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <string> #include <iostream> using namespace std; int main(int argc, char *argv[]){ // um laço while que nunca é executado int valor = 0; while(valor > 10){ cout << valor << "\n"; valor++; } cout << "\n\n"; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } |
C++ ::: Dicas & Truques ::: Geometria, Trigonometria e Figuras Geométricas |
Como calcular o coeficiente angular de uma reta em C++ dados dois pontos no plano cartesianoQuantidade de visualizações: 1319 vezes |
O Coeficiente Angular de uma reta é a variação, na vertical, ou seja, no eixo y, pela variação horizontal, no eixo x. Sim, isso mesmo. O coeficiente angular de uma reta tem tudo a ver com a derivada, que nada mais é que a taxa de variação de y em relação a x. Vamos começar analisando o seguinte gráfico, no qual temos dois pontos distintos no plano cartesiano: ![]() Veja que o segmento de reta AB passa pelos pontos A (x=3, y=6) e B (x=9, y=10). Dessa forma, a fórmula para obtenção do coeficiente angular m dessa reta é: \[\ \text{m} = \frac{y_2 - y_1}{x_2 - x_1} = \frac{\Delta y}{\Delta x} = tg \theta \] Note que __$\Delta y__$ e __$\Delta x__$ são as variações dos valores no eixo das abscissas e no eixo das ordenadas. No triângulo retângulo que desenhei acima, a variação __$\Delta y__$ se refere ao comprimento do cateto oposto e a variação __$\Delta y__$ se refere ao comprimento do cateto adjascente. Veja agora o trecho de código na linguagem C++ que solicita as coordenadas x e y dos dois pontos, efetua o cálculo e mostra o coeficiente angular m da reta que passa pelos dois pontos: ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <iostream> #include <cstdlib> using namespace std; int main(int argc, char *argv[]){ // coordenadas dos dois pontos float x1, y1, x2, y2; // guarda o coeficiente angular float m; // x e y do primeiro ponto cout << "Coordenada x do primeiro ponto: "; cin >> x1; cout << "Coordenada y do primeiro ponto: "; cin >> y1; // x e y do segundo ponto cout << "Coordenada x do segundo ponto: "; cin >> x2; cout << "Coordenada y do segundo ponto: "; cin >> y2; // vamos calcular o coeficiente angular m = (y2 - y1) / (x2 - x1); // mostramos o resultado cout << "O coeficiente angular é: " << m << "\n\n"; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } Ao executar este código C++ nós teremos o seguinte resultado: Coordenada x do primeiro ponto: 3 Coordenada y do primeiro ponto: 6 Coordenada x do segundo ponto: 9 Coordenada y do segundo ponto: 10 O coeficiente angular é: 0.666667 Pressione qualquer tecla para continuar... Veja agora como podemos calcular o coeficiente angular da reta que passa pelos dois pontos usando o Teorema de Pitágoras. Note que agora nós estamos tirando proveito da tangente do ângulo Theta (__$\theta__$), também chamado de ângulo Alfa ou Alpha (__$\alpha__$): ---------------------------------------------------------------------- Se precisar de ajuda com o código abaixo, pode me chamar no WhatsApp +55 (62) 98553-6711 (Osmar) ---------------------------------------------------------------------- #include <iostream> #include <cstdlib> #include <math.h> using namespace std; int main(int argc, char *argv[]){ // coordenadas dos dois pontos float x1, y1, x2, y2; // guarda os comprimentos dos catetos oposto e adjascente float cateto_oposto, cateto_adjascente; // guarda o ângulo tetha (em radianos) e a tangente float tetha, tangente; // x e y do primeiro ponto cout << "Coordenada x do primeiro ponto: "; cin >> x1; cout << "Coordenada y do primeiro ponto: "; cin >> y1; // x e y do segundo ponto cout << "Coordenada x do segundo ponto: "; cin >> x2; cout << "Coordenada y do segundo ponto: "; cin >> y2; // vamos obter o comprimento do cateto oposto cateto_oposto = y2 - y1; // e agora o cateto adjascente cateto_adjascente = x2 - x1; // vamos obter o ângulo tetha, ou seja, a inclinação da hipetunesa // (em radianos, não se esqueça) tetha = atan2(cateto_oposto, cateto_adjascente); // e finalmente usamos a tangente desse ângulo para calcular // o coeficiente angular tangente = tan(tetha); // mostramos o resultado cout << "O coeficiente angular é: " << tangente << "\n\n"; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } Ao executar este código você verá que o resultado é o mesmo. No entanto, fique atento às propriedades do coeficiente angular da reta: 1) O coeficiente angular é positivo quando a reta for crescente, ou seja, m > 0; 2) O coeficiente angular é negativo quando a reta for decrescente, ou seja, m < 0; 3) Se a reta estiver na horizontal, ou seja, paralela ao eixo x, seu coeficiente angular é zero (0). 4) Se a reta estiver na vertical, ou seja, paralela ao eixo y, o coeficiente angular não existe. |
Desafios, Exercícios e Algoritmos Resolvidos de C++ |
Veja mais Dicas e truques de C++ |
Dicas e truques de outras linguagens |
Java - Como carregar uma imagem em um BufferedImage do Java usando o método read() da classe ImageIO |
Códigos Fonte |
![]() 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 |
![]() Tenha o seu próprio sistema de controle de estoque web. com cadastro de produtos, categorias, fornecedores, entradas e saídas de produtos, com relatórios por data, margem de lucro e muito mais. Código simples e fácil de modificar. Acompanha instruções para instalação e criação do banco de dados MySQL. Clique aqui e saiba mais |
Linguagens Mais Populares |
1º lugar: Java |