Ofereço ajuda em Java, C/C++, Python, C#, LISP, AutoLisp, AutoCAD
+55 (062) 98553-6711
Ofereço ajuda em PHP, Python, C#, JavaScript, Laravel, Google Ads e SEO
+55 (062) 98243-1195

Você está aqui: C++ ::: STL (Standard Template Library) ::: Vector C++

Como retornar uma referência ao primeiro elemento de um vector C++ usando a função front()

Quantidade de visualizações: 6644 vezes
O primeiro elemento em um contêiner STL vector do C++ pode ser acessado por meio da função front(). Como esta função é sobrecarregada, temos duas opções:

reference front();
const_reference front() const;  
A primeira versão é do tipo T&, ou seja, retorna uma referência ao primeiro elemento. Veja:

----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)

Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

#include <iostream>
#include <vector>

using namespace std;

int main(int argc, char *argv[]){
  // um vector vazio que conterá inteiros
  vector<int> valores;

  // vamos inserir três elementos
  valores.push_back(54);
  valores.push_back(13);
  valores.push_back(87);

  // vamos obter o valor do primeiro elemento do vector
  // Note que front() pode ser usada dos dois lados
  // de uma operação de atribuição
  int valor = valores.front();
  cout << "Primeiro elemento: " << valor << endl;

  // vamos alterar o valor do primeiro elemento
  valores.front() = 102;

  // vamos testar o resultado
  cout << "Primeiro elemento: " << valores.front() << endl;

  system("PAUSE"); // pausa o programa
  return EXIT_SUCCESS;
}

Note que aqui nós usamos:

int valor = valores.front();
para guardar o valor do primeiro elemento na variável valor. Poderíamos também usar:

int& valor = valores.front();
valor = 102;
Agora valor é uma referência direta ao primeiro elemento do vector. Desta forma, qualquer alteração no valor da variável valor afetará também o primeiro elemento do vector.

Observe agora o seguinte trecho de código:

----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)

Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

int valor = valores.front(); // o primeiro elemento é 54
valores.front() = 20;
cout << "Primeiro elemento: " << valor << endl;

Aqui nós acessamos o valor do primeiro elemento, guardarmos-o na variável valor e atribuímos o valor 20 à valores.front(). Porém, ao imprimirmos a variável valor o seu conteúdo ainda é 54. De fato, o que gostaríamos é que uma alteração em valores.front() afetasse também a variável valor. Assim:

int& valor = valores.front(); // o primeiro elemento é 54
valores.front() = 20;
cout << "Primeiro elemento: " << valor << endl;
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 front(), a saber const T&, que retorna uma referência constante. Veja:

----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)

Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

const int& valor = valores.front(); // o primeiro elemento é 54
valores.front() = 20;
valor = 300; // esta linha não compila
cout << "Primeiro elemento: " << valor << endl;

Agora o efeito que queríamos é alcançado. Alterações em valores.front() afetam a variável valor, mas, não podemos alterar valor diretamente, já que esta variável é uma referência constante agora.

Link para compartilhar na Internet ou com seus amigos:

C++ ::: Fundamentos da Linguagem ::: Estruturas de Controle

Como usar ponteiros para controlar um laço while em C++

Quantidade de visualizações: 9298 vezes
É possível usar ponteiros para controlar a execução de um laço while em C++. Comece analisando o seguinte trecho de código:

----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)

Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

// uma matriz de caracteres
char nome[] = "Arquivo";

// aponta para a primeira letra
char *letra = nome;

if(*letra)
  cout << "True";
else
  cout << "False";

Aqui o valor "True" será exibido, visto que o ponteiro *letra está apontando para um local da matriz de caracteres nome[] que é diferente de NULL. Veja agora:

----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)

Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

// uma matriz de caracteres
char nome[] = "Arquivo";

// aponta para a primeira letra
char *letra = nome; // posição 0

// vamos atingir o final da matriz
// de caracteres
letra++; // posição 1
letra++; // posição 2
letra++; // posição 3
letra++; // posição 4
letra++; // posição 5
letra++; // posição 6
letra++; // NULL

if(*letra)
  cout << "True";
else
  cout << "False";

Como sabemos que a matriz de caracteres nome[] contém sete caracteres (de 0 a 6), incrementamos o ponteiro *letra até que este aponte para o caractere que marca o fim da matriz. Assim, o valor "False" é exibido.

Veja agora um laço while que tira proveito do que vimos aqui para exibir as letras da palavra "Arquivo" separadamente usando um ponteiro:

----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)

Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

#include <string>
#include <iostream>

using namespace std;

int main(int argc, char *argv[]){
  // uma matriz de caracteres
  char nome[] = "Arquivo";

  // aponta para a primeira letra
  char *letra = nome;

  // vamos usar o laço while para
  // imprimir as letras separadamente
  while(*letra){
    cout << *letra << " ";
    letra++;
  }

  cout << "\n\n";

  system("PAUSE"); // pausa o programa
  return EXIT_SUCCESS;
}



C++ ::: Desafios e Lista de Exercícios Resolvidos ::: Métodos, Procedimentos e Funções

Exercício Resolvido de C++ - Escreva uma função C++ que recebe três números inteiros e retorna o menor deles

Quantidade de visualizações: 467 vezes
Pergunta/Tarefa:

Escreva um programa C++ que contenha uma função, método ou procedimento que recebe três números inteiros e retorne o menor deles como um inteiro. Seu método não deve produzir nenhuma saída, apenas retornar o menor número entre os três argumentos fornecidos.

Sua saída deverá ser parecida com:

Informe o primeiro número: 8
Informe o segundo número: 10
Informe o terceiro número: 7
O menor número é: 7
Resposta/Solução:

Veja a resolução comentada deste exercício em C++:

----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)

Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

#include <iostream>
#include <algorithm>

using namespace std;

// função que recebe três números e retorna o menor deles
int menor(int a, int b, int c){
  return min(min(a, b), c);
}

// função principal do programa
int main(int argc, char *argv[]){
  int n1, n2, n3, menor_numero;
	
  // vamos pedir para o usuário informar três
  // números inteiros
  cout << "Informe o primeiro número: ";
  cin >> n1;
  cout << "Informe o segundo número: ";
  cin >> n2;
  cout << "Informe o terceiro número: ";
  cin >> n3;
    
  // agora vamos calcular o menor número
  menor_numero = menor(n1, n2, n3);
    
  // e mostramos o resultado
  cout << "O menor numero é: " << menor_numero << endl;
    
  cout << "\n" << endl;
  system("PAUSE"); // pausa o programa
  return EXIT_SUCCESS;
}



C++ ::: C++ para Engenharia ::: Física - Mecânica

Como calcular a Energia Potencial Gravitacional de um corpo dado a sua massa e altura em C++

Quantidade de visualizações: 332 vezes
A Energia Potencial Gravitacional ou Energia Gravitacional é a energia potencial que um objeto massivo tem em relação a outro objeto massivo devido à gravidade. É a energia potencial associada ao campo gravitacional, que é parcialmente convertida em energia cinética quando os objetos caem uns contra os outros. A energia potencial gravitacional aumenta quando dois objetos são separados.

A fórmula para obtenção da Energia Potencial Gravitacional de um corpo em relação à sua massa e distância do chão, ou seja, da superfície terrestre, é:

\[ E_\text{pg} = \text{m} \cdot \text{g} \cdot \text{h} \]

Onde:

Epg ? energia potencial gravitacional (em joule, J).

m ? massa do corpo (em kg).

g ? aceleração da gravidade (m/s2).

h ? altura do objeto em relação ao chão (em metros).

Como podemos ver, a Energia Potencial Gravitacional está diretamente relacionada à distância do corpo em relação à superfície terrestre. Dessa forma, quanto mais distante da terra o objeto estiver, maior a sua energia gravitacional. Isso nós diz também que, um objeto de altura zero possui Energia Potencial Gravitacional nula.

Vamos ver um exemplo agora? Observe o seguinte enunciado:

1) Uma pessoa levanta um tijolo com peso de 2 quilogramas à distância de 1,5 metros do chão. Qual é a Energia Potencial Gravitacional deste corpo?

Como o exercício nos dá a massa do objeto em kg e a distância dele em relação ao chão já está em metros, tudo que temos a fazer é jogar na fórmula. Veja o código C++ completo para o cálculo:

----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)

Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

#include <iostream>

using namespace std;

// função principal do programa
int main(int argc, char *argv[]){
  // gravidade terrestre em m/s2
  double gravidade = 9.80665;
  // massa do corpo
  double massa = 2; // em kg
  // altura do corpo em relação ao chão
  double altura = 1.5; // em metros
  
  // vamos calcular a energia potencial gravitacional
  double epg = massa * gravidade * altura;
  
  // mostramos o resultado
  cout << "A Energia Potencial Gravitacional é: " << epg << "J";
		
  cout << "\n" << endl;
  system("PAUSE"); // pausa o programa
  return EXIT_SUCCESS;
}

Ao executar este código C++ nós teremos o seguinte resultado:

A Energia Potencial Gravitacional é: 29.419950J


C++ ::: C++ para Engenharia ::: Geometria Analítica e Álgebra Linear

Como calcular a norma ou módulo de vetores nos espaços R2 e R3 usando C++ - Geometria Analítica e Álgebra Linear usando C++

Quantidade de visualizações: 2038 vezes
Em Geometria Analítica e Álgebra Linear, a magnitude, norma, comprimento, tamanho ou módulo (também chamado de intensidade na Física) de um vetor é o seu comprimento, que pode ser calculado por meio da distância de seu ponto final a partir da origem, no nosso caso (0,0).

Considere o seguinte vetor no plano, ou seja, no espaço bidimensional, ou R2:

\[\vec{v} = \left(7, 6\right)\]

Aqui este vetor se inicia na origem (0, 0) e vai até as coordenadas (x = 7) e (y = 6). Veja sua plotagem no plano 2D:



Note que na imagem já temos todas as informações que precisamos, ou seja, o tamanho desse vetor é 9 (arredondado) e ele faz um ângulo de 41º (graus) com o eixo x positivo. Em linguagem mais adequada da trigonometria, podemos dizer que a medida do cateto oposto é 6, a medida do cateto adjacente é 7 e a medida da hipotenusa (que já calculei para você) é 9.

Note que já mostrei também o ângulo theta (__$\theta__$) entre a hipotenusa e o cateto adjacente, o que nos dá a inclinação da reta representada pelos pontos (0, 0) e (7, 6).

Relembrando nossas aulas de trigonometria nos tempos do colegial, temos que o quadrado da hipotenusa é a soma dos quadrados dos catetos, ou seja, o Teorema de Pitágoras:

\[a^2 = b^2 + c^2\]

Como sabemos que a potenciação é o inverso da radiciação, podemos escrever essa fórmula da seguinte maneira:

\[a = \sqrt{b^2 + c^2}\]

Passando para os valores x e y que já temos:

\[a = \sqrt{7^2 + 6^2}\]

Podemos comprovar que o resultado é 9,21 (que arredondei para 9). Não se esqueça da notação de módulo ao apresentar o resultado final:

\[\left|\vec{v}\right| = \sqrt{7^2 + 6^2}\]

E aqui está o código C++ que nos permite informar os valores x e y do vetor e obter o seu comprimento, tamanho ou módulo:

----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)

Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

#include <string>
#include <iostream>
#include <math.h>
 
using namespace std;
  
int main(int argc, char *argv[]){
  float x, y, norma;
  // vamos ler os valores x e y
  cout << "Informe o valor de x: ";
  cin >> x;
  cout << "Informe o valor de y: ";
  cin >> y;
  
  // vamos calcular a norma do vetor
  norma = sqrt(pow(x, 2) + pow(y, 2));
    
  // mostra o resultado
  cout << "A norma do vetor é: " << norma; 
 
  cout << "\n\n";
  system("PAUSE");
  return 0;
}

Ao executar este código C++ nós teremos o seguinte resultado:

Informe o valor de x: 7
Informe o valor de y: 6
A norma do vetor é: 9.219544457292887

Novamente note que arredondei o comprimento do vetor para melhor visualização no gráfico. Para calcular a norma de um vetor no espaço, ou seja, no R3, basta acrescentar o componente z no cálculo.


C++ ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes)

Como somar os elementos de um vetor de inteiros em C++

Quantidade de visualizações: 16938 vezes
Esta dica mostra a você como usar um laço for do C++ para somar todos os valores dos elementos de um vetor de inteiros. Observe que aqui nós declaramos e inicializamos o vetor (array) em apenas uma instrução:

----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)

Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
  // declara e inicializa um array de
  // 5 inteiros
  int valores[] = {2, 7, 1, 5, 6};
  int soma = 0;

  // soma os valores dos elementos
  for(int i = 0; i < 5; i++){
    soma += valores[i];
    // o mesmo que
    // soma = soma + valores[i];
  }

  // exibe o resultado
  cout << "Soma: " << soma << endl;

  system("PAUSE"); // pausa o programa
  return EXIT_SUCCESS;
}

Ao executar este código C++ nós teremos o seguinte resultado:

Soma: 21


C++ ::: Dicas & Truques ::: Arquivos e Diretórios

Como criar diretórios em C++ usando a função mkdir()

Quantidade de visualizações: 10408 vezes
Em algumas situações nossos códigos C++ precisam criar diretórios. Isso pode ser feito com o auxílio da função mkdir(), disponível no header direct.h (trazido da linguagem C). Veja a assinatura desta função:

int _mkdir(const char *pathname);
Se o diretório for criado com sucesso a função retornará o valor 0. O retorno será -1 se um erro ocorrer. Neste caso a variável global errno será definido como EACCES (diretório não criado; nome informado já existe) ou ENOENT (caminho não encontrado).

Veja um trecho de código C++ no qual criamos um diretório no mesmo diretório do executável.

----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)

Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

#include <iostream>
#include <direct.h>

using namespace std;

int main(int argc, char *argv[]){
  // vamos criar o diretório
  char diretorio[] = "estudos";

  // vamos testar se houve erro na criação do diretório
  if(mkdir(diretorio) == -1){
    cout << "Erro: " << strerror(errno) << endl;
  }
  else{
    cout << "Diretório criado com sucesso" << endl;
  }

  system("PAUSE"); // pausa o programa
  return EXIT_SUCCESS;
}

É possível usar a versão Unicode de mkdir(), ou _mkdir(). O método _wmkdir(), também presente em direct.h é útil quando precisamos internacionalizar nossas aplicações. Veja o exemplo:

----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)

Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

#include <iostream>
#include <direct.h>

using namespace std;

int main(int argc, char *argv[]){
  // vamos criar o diretório
  wchar_t diretorio[] = L"C:\\Dev-Cpp\\estudos";

  // vamos testar se houve erro na criação do diretório
  if(_wmkdir(diretorio) == -1){
    cout << "Erro: " << strerror(errno) << endl;
  }
  else{
    cout << "Diretório criado com sucesso" << endl;
  }

  system("PAUSE"); // pausa o programa
  return EXIT_SUCCESS;
}

Note que agora eu troquei o tipo char por wchar_t e usei o sinalizado L antes da atribuição da string.


C++ ::: Dicas & Truques ::: Trigonometria - Funções Trigonométricas

Como calcular o cateto oposto dadas as medidas da hipotenusa e do cateto adjascente em C++

Quantidade de visualizações: 982 vezes
Todos estamos acostumados com o Teorema de Pitágoras, que diz que "o quadrado da hipotenusa é igual à soma dos quadrados dos catetos". Baseado nessa informação, fica fácil retornar a medida do cateto oposto quando temos as medidas da hipotenusa e do cateto adjascente. Isso, claro, via programação em linguagem C++.

Comece observando a imagem a seguir:



Veja que, nessa imagem, eu já coloquei os comprimentos da hipotenusa, do cateto oposto e do cateto adjascente. Para facilitar a conferência dos cálculos, eu coloquei também os ângulos theta (que alguns livros chamam de alfa) e beta já devidamente calculados. A medida da hipotenusa é, sem arredondamentos, 36.056 metros.

Então, sabendo que o quadrado da hipotenusa é igual à soma dos quadrados dos catetos (Teorema de Pitógoras):

\[c^2 = a^2 + b^2\]

Tudo que temos que fazer é mudar a fórmula para:

\[a^2 = c^2 - b^2\]

Veja que agora o quadrado do cateto oposto é igual ao quadrado da hipotenusa menos o quadrado do cateto adjascente. Não se esqueça de que a hipotenusa é o maior lado do triângulo retângulo.

Veja agora como esse cálculo é feito em linguagem C++:

----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)

Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

#include <iostream>
#include <math.h>
#include <cstdlib>
 
using namespace std;
 
int main(int argc, char *argv[]){
  float c = 36.056; // medida da hipotenusa
  float b = 30; // medida do cateto adjascente
  
  // agora vamos calcular o comprimento da cateto oposto
  float a = sqrt(pow(c, 2) - pow(b, 2));
 
  // e mostramos o resultado
  cout << "A medida do cateto oposto é: " << a << "\n\n";
	 
  system("PAUSE"); // pausa o programa
  return EXIT_SUCCESS;
}

Ao executar este código C++ nós teremos o seguinte resultado:

A medida do cateto oposto é: 20.0009

Como podemos ver, o resultado retornado com o código C++ confere com os valores da imagem apresentada.


C++ ::: Dicas & Truques ::: MIDI Musical Instrument Digital Interface, Mapeamento e sequenciamento MIDI, Entrada e saída MIDI

Como definir o tipo de instrumento (programa) em um evento MIDI e enviar a mensagem para a função midiOutShortMsg() da API Win32 do Windows

Quantidade de visualizações: 1018 vezes
Vimos em dicas nessa seção como usar a função midiOutShortMsg() da API Win32 do Windows para tocar notas musicais no dispositivo de saída MIDI. No entanto, nos exemplos anteriores, a nota tocada foi no instrumento padrão, ou seja, Acoustic Grand Piano, e no canal 1.

Nesta dica mostrarei como definir o instrumento e também falarei um pouco mais sobre como tocar as notas em canais diferentes. Vamos então, com muita atenção.

Analisando a documentação MIDI, encontramos que uma mudança de programa (instrumento musical) no canal 1 é representada pelo código de status 192 (hexadecimal C0), seguido pelo código do instrumento a ser usado (um valor inteiro que vai de 0 a 127, e que deverá ser convertido em hexadecimal). Assim, é bom dar uma olhada nessa lista:

Piano Timbres:

 1	Acoustic Grand Piano
 2	Bright Acoustic Piano
 3	Electric Grand Piano
 4	Honky-tonk Piano
 5	Rhodes Piano
 6	Chorused Piano
 7	Harpsichord
 8	Clavinet

Chromatic Percussion:
 9	Celesta
10	Glockenspiel
11	Music Box
12	Vibraphone
13	Marimba
14	Xylophone
15	Tubular Bells
16	Dulcimer

Organ Timbres:
17	Hammond Organ
18	Percussive Organ
19	Rock Organ
20	Church Organ
21	Reed Organ
22	Accordion
23	Harmonica
24	Tango Accordion
 
Guitar Timbres:
25	Acoustic Nylon Guitar
26	Acoustic Steel Guitar
27	Electric Jazz Guitar
28	Electric Clean Guitar
29	Electric Muted Guitar
30	Overdriven Guitar
31	Distortion Guitar
32	Guitar Harmonics

Bass Timbres:
33	Acoustic Bass
34	Fingered Electric Bass
35	Plucked Electric Bass
36	Fretless Bass
37	Slap Bass 1
38	Slap Bass 2
39	Synth Bass 1
40	Synth Bass 2

String Timbres:
41	Violin
42	Viola
43	Cello
44	Contrabass
45	Tremolo Strings
46	Pizzicato Strings
47	Orchestral Harp
48	Timpani
 
Ensemble Timbres:
49	String Ensemble 1
50	String Ensemble 2
51	Synth Strings 1
52	Synth Strings 2
53	Choir "Aah"
54	Choir "Ooh"
55	Synth Voice
56	Orchestral Hit

Brass Timbres:
57	Trumpet
58	Trombone
59	Tuba
60	Muted Trumpet
61	French Horn
62	Brass Section
63	Synth Brass 1
64	Synth Brass 2

Reed Timbres:
65	Soprano Sax
66	Alto Sax
67	Tenor Sax
68	Baritone Sax
69	Oboe
70	English Horn
71	Bassoon
72	Clarinet
 
Pipe Timbres:
73	Piccolo
74	Flute
75	Recorder
76	Pan Flute
77	Bottle Blow
78	Shakuhachi
79	Whistle
80	Ocarina

Synth Lead:
81	Square Wave Lead
82	Sawtooth Wave Lead
83	Calliope Lead
84	Chiff Lead
85	Charang Lead
86	Voice Lead
87	Fifths Lead
88	Bass Lead

Synth Pad:
89	New Age Pad
90	Warm Pad
91	Polysynth Pad
92	Choir Pad
93	Bowed Pad
94	Metallic Pad
95	Halo Pad
96	Sweep Pad
 
Synth Effects:
 97	Rain Effect
 98	Soundtrack Effect
 99	Crystal Effect
100	Atmosphere Effect
101	Brightness Effect
102	Goblins Effect
103	Echoes Effect
104	Sci-Fi Effect

Ethnic Timbres:
105	Sitar
106	Banjo
107	Shamisen
108	Koto
109	Kalimba
110	Bagpipe
111	Fiddle
112	Shanai

Sound Effects:
113	Tinkle Bell
114	Agogo
115	Steel Drums
116	Woodblock
117	Taiko Drum
118	Melodic Tom
119	Synth Drum
120	Reverse Cymbal
 
Sound Effects:
121	Guitar Fret Noise
122	Breath Noise
123	Seashore
124	Bird Tweet
125	Telephone Ring
126	Helicopter
127	Applause
128	Gun Shot

A especificação MIDI define que o canal 10 seja reservado
para os kits de percussão. Os instrumentos abaixo possuem
os números de notas a serem enviados neste canal.

35	Acoustic Bass Drum
36	Bass Drum 1
37	Side Stick
38	Acoustic Snare
39	Hand Clap
40	Electric Snare
41	Low Floor Tom
42	Closed High Hat
43	High Floor Tom
44	Pedal High Hat
45	Low Tom
46	Open High Hat
47	Low Mid Tom
48	High Mid Tom
49	Crash Cymbal 1
50	High Tom
51	Ride Cymbal 1
52	Chinese Cymbal
53	Ride Bell
54	Tambourine
55	Splash Cymbal
56	Cowbell
57	Crash Cymbal 2
58	Vibraslap
59	Ride Cymbal 2
60	High Bongo
61	Low Bongo
62	Mute High Conga
63	Open High Conga
64	Low Conga
65	High Timbale
66	Low Timbale
67	High Agogo
68	Low Agogo
69	Cabasa
70	Maracas
71	Short Whistle
72	Long Whistle
73	Short Guiro
74	Long Guiro
75	Claves
76	High Wood Block
77	Low Wood Block
78	Mute Cuica
79	Open Cuica
80	Mute Triangle
81	Open Triangle


É uma lista bem longa e ficará a ser cargo estudá-la ou usá-la como referência. Meu interesse maior é o código C/C++. Assim, vamos ver logo como definir o instrumento no canal 1 como Overdriven Guitar. Este instrumento possui o código 30 mas, na programação, devemos diminuí-lo em 1, ficando 29, e, ao passarmos para hexadecimal teremos 1D.

A mudança de programa no canal 1 é representada pelo código 192, o que em hexadecimal é C0. Pronto, agora basta construirmos o DWORD da forma que fizemos nas dicas anteriores e chamar a função midiOutShortMsg(). Veja:

----------------------------------------------------------------------
Se precisar de ajuda para ajustar o código abaixo de acordo com as
suas necessidades, chama a gente no WhatsApp +55 (62) 98553-6711 (Osmar)

Ah, e se puder, faça uma DOAÇÃO de qualquer valor para nos ajudar
a manter o site livre de anúncios. Ficaremos eternamente gratos ;-)
Nosso PIX é: osmar@arquivodecodigos.com.br 
----------------------------------------------------------------------

#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");
  }

  // vamos definir o instrumento como Overdriven Guitar
  // no canal 1
  midiOutShortMsg(saida, 0x00001DC0);

  // vamos tocar o dó central com velocidade 100
  midiOutShortMsg(saida, 0x00643C90);
  Sleep(1000); // a nota vai durar 1 segundo
  // dispara a mensagem Note-off
  midiOutShortMsg(saida, 0x00643C80);

  // agora vamos fechar o dispositivo de saída MIDI
  midiOutClose(saida);

  system("PAUSE");
  return EXIT_SUCCESS;
}


Execute esse código e ouça um nota dó sendo tocada na guitarra com uma linda distorção. Se você quiser tocar a nota nó no canal 2 ou canal 3, basta usar C1, C2, e assim por diante. Uma última observação é você ficar atento ao fato de que os códigos de Note-on e Note-off para o canal 1 é 90 e 80 (em hexadecimal). Se for no canal 2, os códigos correspondentes serão 91 e 81 (sempre em hexadecimal).


Vamos testar seus conhecimentos em JavaScript

Qual das instruções JavaScript abaixo envolve um array?

A) var a = b ^ i;

B) var a = b(i);

C) var a = b[i];

D) var a = b >> i;
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em

Dimensionamento de pilares intermediários

O projeto estrutural é conduzido por várias normas, sendo uma delas a NBR 6118 (projetos de estrutura de concreto), que define prescrições a serem obedecidas durante as etapas de dimensionamento e detalhamento de pilares com o intuito de considerar diversos fatores com influência direta nessas etapas de projeto e execução.

Nos pilares, a armadura mínima é necessária para absorver esforços de flexão não considerados no dimensionamento que podem surgir na sua vida útil.

No projeto das estruturas de um hotel feito de concreto armado, foram dimensionados pilares intermediários de seção retangular 30 x 30cm, com aço CA-50, para suportar uma carga vertical de cálculo de 800kN.

Como parte do dimensionamento, deve-se verificar a área mínima de armadura longitudinal, cujo valor é:

A) 3,6cm2.

B) 2,76cm2.

C) 5cm2.

D) 4,2cm2.

E) 2,74cm2.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em

Vigas a flexão simples: seções retangulares

Além da preocupação com segurança e economia, o projetista estrutural precisa também se preocupar com a execução da obra. Vigas super armadas dificultam a concretagem, podendo resultar nos vazios do concreto, popularmente chamadas de bicheiras.

Tendo isso em mente, qual é a largura mínima para uma viga com 3 barras de 16mm de armadura principal, dispostas na mesma camada, e estribo de 6,3mm? Considere que não há parede apoiada sobre a viga, a agressividade ambiental é classe III e o concreto tem brita 1.

A) 12cm.

B) 14cm.

C) 19cm.

D) 15cm.

E) 20cm.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Fenômeno de Transportes e Hidráulica

Classificação de turbinas

O processo de conversão de energia hidráulica em energia mecânica em uma turbina pode também ser utilizado para uma classificação em turbinas de ação ou de reação.

Considerando as turbinas de reação, qual afirmativa está correta?

A) As turbinas de reação são similares às de ação e operam com pressão variável.

B) As turbinas de reação são as turbinas que têm pressão constante no sistema.

C) Nas turbinas de reação, a água tem pressão variando desde a entrada até a saída.

D) As turbinas de ação correspondem a um subgrupo das turbinas de reação mista.

E) Nas turbinas de reação, o fluido converte energia mecânica em energia hidráulica.
Verificar Resposta Estudar Cards Todas as Questões

Vamos testar seus conhecimentos em Hidrostática

Princípios da Hidrostática

Uma prensa hidráulica possui pistões com diâmetros de 5cm e 10cm. Se uma força de 120N atua sobre o pistão menor, pode-se afirmar que essa prensa estará em equilíbrio quando, sobre o pistão maior, atuar uma força de:

A) 480N.

B) 120N.

C) 240N.

D) 60N.

E) 1.200N.
Verificar Resposta Estudar Cards Todas as Questões

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

E-Book 650 Dicas, Truques e Exercícios Resolvidos de Python - PDF com 1.200 páginas
Domine lógica de programação e a linguagem Python com o nosso E-Book 650 Dicas, Truques e Exercícios Exercícios de Python, para você estudar onde e quando quiser.

Este e-book contém dicas, truques e exercícios resolvidos abrangendo os tópicos: Python básico, matemática e estatística, banco de dados, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book
E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser.

Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 26 usuários muito felizes estudando em nosso site.