Você está aqui: C ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes)

Como retornar a quantidade de elementos em uma matriz C

Quantidade de visualizações: 8885 vezes


Muitas vezes precisamos saber a quantidade de elementos em uma matriz. Isso pode ser feito com o uso da função sizeof(). O que fazemos é obter a quantidade de bytes contidos em toda a matriz e depois dividimos pela quantidade de bytes no primeiro elemento. Veja o código:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, char *argv[])
{
  // declara e inicializa um array de 5 inteiros
  int valores[5] = {43, 12, 8, 4, 102};
 
  // obtém a quantidade de elementos na matriz
  int quant = sizeof(valores) / sizeof(valores[0]);
 
  printf("A matriz contem %d elementos.\n", quant);
 
  system("PAUSE");
  return 0;
}


Link para compartilhar na Internet ou com seus amigos:

C ::: Dicas & Truques ::: Ponteiros, Referências e Memória

Como usar ponteiros void na linguagem C - Curso de Linguagem C para iniciantes

Quantidade de visualizações: 16644 vezes
Em dicas desta seção você aprendeu que é possível criar ponteiros para os mais diferentes tipos. Veja:

1
2
3
4
5
6
7
8
----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
 
int *ponteiro_int;
float *ponteiro_float;
double *ponteiro_double;

Existe, porém, um tipo de ponteiro que pode ser usado com todos os tipos de dados existentes ou ainda a serem criados. Este tipo é conhecido como void, ou seja, um ponteiro genérico e pode ser declarado da seguinte forma:

1
2
3
4
5
6
----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
 
void *ponteiro; // ponteiro genérico

Veja um trecho de código no qual usamos um ponteiro genéríco para apontar para variáveis de diferentes tipos:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
 
#include <stdio.h>
#include <stdlib.h>
 
int main(int argc, char *argv[])
{
  int valor = 20;
  float valor2 = 5.23;
 
  void *ponteiro; // ponteiro genérico
 
  ponteiro = &valor; // aponta para um inteiro
  printf("%d\n", *(int *)ponteiro);
 
  ponteiro = &valor2; // aponta para um float
  printf("%0.2f\n", *(float *)ponteiro);
 
  system("PAUSE");
  return 0;
}

Uma observação importante é a necessidade de uma conversão explícita (cast) no momento de desreferenciar um ponteiro genéríco. Neste caso ele precisa ser convertido para o tipo de ponteiro sendo usado no momento. Veja:

1
2
3
4
5
6
----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
 
printf("%d\n", *(int *)ponteiro);

A parte (int *)ponteiro converte o ponteiro genérico em um ponteiro do tipo int e o símbolo * externo é usado para desreferenciar. Se essa conversão não for feita teremos um aviso e erro na maioria dos compiladores. Veja:

1
2
3
4
5
6
7
8
9
----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
 
printf("%d\n", *ponteiro);
 
[Warning] dereferencing 'void *' pointer
invalid use of void expression 

Embora essa conversão seja necessária quando estamos desreferenciando um ponteiro genérico, podemos abrir mão dela na atribuição de um ponteiro genérico a um ponteiro de um tipo específico:

1
2
3
4
5
6
7
8
----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
 
ponteiro = &valor; // aponta para um inteiro
int *ponteiro_int = ponteiro;
printf("%d\n", *ponteiro_int);

Para finalizar, saiba que as funções malloc() e calloc() retornam ponteiros void, ou seja, ponteiros genéricos que podem ser atribuídos a ponteiros de qualquer tipos. Neste caso, o ponteiro retornado por estas funções aponta para a primeira posição do bloco de memória requisitada.


C ::: Dicas & Truques ::: Ordenação e Pesquisa (Busca)

Ordenação e pesquisa em C - Como ordenar um vetor de inteiros usando a ordenação Insertion Sort (Ordenação por Inserção)

Quantidade de visualizações: 2624 vezes
A ordenação Insertion Sort, ou Ordenação por Inserção, possui uma complexidade de tempo de execução igual à ordenação Bubble Sort (Ordenação da Bolha), ou seja, O(n2). Embora mais rápido que o Bubble Sort, e ser um algorítmo de ordenação quadrática, a ordenação Insertion Sort é bastante eficiente para problemas com pequenas entradas, sendo o mais eficiente entre os algoritmos desta ordem de classificação, porém, nunca recomendada para um grande conjunto de dados.

A forma mais comum para o entendimento da ordenação Insertion Sort é compará-la com forma pela qual algumas pessoas organizam um baralho num jogo de cartas. Imagine que você está jogando as cartas. Você está com as cartas na mão e elas estão ordenadas. Você recebe uma nova carta e deve colocá-la na posição correta da sua mão de cartas, de forma que as cartas obedeçam à ordenação.

A cada nova carta adicionada à sua mão de cartas, a nova carta pode ser menor que algumas das cartas que você já tem na mão ou maior, e assim, você começa a comparar a nova carta com todas as cartas na sua mão até encontrar sua posição correta. Você insere a nova carta na posição correta, e, novamente, a sua mão é composta de cartas totalmente ordenadas. Então, você recebe outra carta e repete o mesmo procedimento. Então outra carta, e outra, e assim em diante, até não receber mais cartas.

Esta é a ideia por trás da ordenação por inserção. Percorra as posições do vetor (array), começando com o índice 1 (um). Cada nova posição é como a nova carta que você recebeu, e você precisa inseri-la no lugar correto no sub-vetor ordenado à esquerda daquela posição.

Vamos ver a implementação na linguagem C agora? Observe o seguinte código, no qual temos um vetor de inteiros com os elementos {4, 6, 2, 8, 1, 9, 3, 0, 11}:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
 
#include <stdio.h>
#include <stdlib.h>
  
// função que permite ordenar um vetor de inteiros
// usando a ordenação Insertion Sort
void insertionSort(int vetor[], int tam){
  int i, temp, j;
   
  // este laço varre os elementos a partir do segundo
  // elemento, ou seja, o índice 1
  for(i = 1; i < tam; i++){
    // guardamos o elemento atual em temp
    temp = vetor[i];
         
    for(j = i; ((j > 0) && (vetor[j - 1] > temp)); j--){
      vetor[j] = vetor[j - 1]; // houve uma troca
    }
     
    vetor[j] = temp; // colocamos temp em seu devido lugar
  }
  
int main(int argc, char *argv[]){
  int valores[] = {4, 6, 2, 8, 1, 9, 3, 0, 11};
  int i, tamanho = 9;
  
  // imprime a matriz sem a ordenação
  puts("Sem ordenação:\n");
  for(i = 0; i < 9; i++){
    printf("%d ", valores[i]);
  }
  
  // vamos ordenar a matriz
  insertionSort(valores, tamanho);
  
  // imprime a matriz ordenada
  puts("\n\nOrdenada usando Insertion Sort:\n");
  for(i = 0; i < 9; i++){
    printf("%d ", valores[i]);
  }  
   
  printf("\n\n");
  system("PAUSE");
  return 0;
}

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

Sem ordenação:

4 6 2 8 1 9 3 0 11

Ordenada usando Insertion Sort:

0 1 2 3 4 6 8 9 11


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

Como calcular Velocidade Vetorial Média usando a linguagem C - C para Engenharia - Física - Mecânica - Cinemática

Quantidade de visualizações: 2805 vezes
Como calcular Velocidade Vetorial Média usando a linguagem C

Na Física, mais especificamente na Mecânica e Cinemática, nós estamos o tempo todo interessados em medir a "rapidez" com que uma partícula se move de um ponto para outro ponto. Por partícula podemos entender qualquer móvel: um carro, um avião, uma bola, uma pessoa, etc.

No caso de um movimento bidimensional ou tridimensional nós devemos considerar a grandeza velocidade média como vetores e usar a notação vetorial. Em outras dicas do site você encontrará cálculos envolvendo vetores e até mesmo calculadoras com as operações vetoriais mais comuns.

Dessa forma, a fórmula para obtenção da Velocidade Vetorial Média é:

vméd=ΔrΔt

Onde Δr é a variação da posição da partícula e Δt é a variação do tempo entre os dois deslocamentos cuja velocidade vetorial média querermos medir.

Antes de vermos o código C, dê uma boa olhada na imagem a seguir:



Nosso objetivo será calcular a velocidade vetorial média da partícula saindo da posição r1 = 10ı^ + 7ȷ^ m (10, 7), no instante t1 = 2s, e indo para a posição r2 = 12ı^ + 2ȷ^ m (12, 2) em t2 = 7s. Note que o trajeto da partícula foi marcado de verde na imagem.

E agora, finalmente, vamos ao código C que lê os valores das coordenadas x e y dos dois vetores de posições (inicial e final), o tempo de deslocamento inicial e final e mostra o vetor velocidade média:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
 
#include <stdio.h>
#include <stdlib.h>
     
int main(int argc, char *argv[]){
  // coordenadas dos dois vetores de posições
  float x1, y1, x2, y2;
  // guarda o vetor delta r (variação do deslocamento)
  float delta_r_x, delta_r_y;
  // guarda o tempo inicial, tempo final e variacao (em segundos)
  float tempo_inicial, tempo_final, delta_t;
  // guarda as coordenadas do vetor velocidade
  float vetor_vm_x, vetor_vm_y;
         
  // x e y do primeiro vetor
  printf("Coordenada x do primeiro vetor: ");
  scanf("%f", &x1);
  printf("Coordenada y do primeiro vetor: ");
  scanf("%f", &y1);
       
  // x e y do segundo vetor
  printf("Coordenada x do segundo vetor: ");
  scanf("%f", &x2);
  printf("Coordenada y do segundo vetor: ");
  scanf("%f", &y2);  
       
  // vamos ler o tempo inicial e tempo final   
  printf("Tempo inicial em segundos: ");
  scanf("%f", &tempo_inicial);
  printf("Tempo final em segundos: ");
  scanf("%f", &tempo_final);
         
  // vamos calcular o vetor delta r
  delta_r_x = x2 - x1;
  delta_r_y = y2 - y1;
   
  // vamos calcular o delta t (variação do tempo)
  delta_t = tempo_final - tempo_inicial;
       
  // finalmente calculamos o vetor velocidade média
  vetor_vm_x = delta_r_x / delta_t;   
  vetor_vm_y = delta_r_y / delta_t;
         
  // mostramos o resultado
  printf("O Vetor Velocidade Média é: (%.2f, %.2f)m/s",
   vetor_vm_x, vetor_vm_y);
    
  printf("\n\n");
  system("PAUSE");
  return 0;
}

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

Coordenada x do primeiro vetor: 10
Coordenada y do primeiro vetor: 7
Coordenada x do segundo vetor: 12
Coordenada y do segundo vetor: 2
Tempo inicial em segundos: 2
Tempo final em segundos: 7
O Vetor Velocidade Média é: (0.40, -1.00)m/s

Pressione qualquer tecla para continuar. . .

Note que aqui nós estamos usando vetores do R2, mas o processo é o mesmo para vetores do R3.


Desafios, Exercícios e Algoritmos Resolvidos de C

Veja mais Dicas e truques de C

Dicas e truques de outras linguagens

Códigos Fonte

Programa de Gestão Financeira Controle de Contas a Pagar e a Receber com Cadastro de Clientes e FornecedoresSoftware de Gestão Financeira com código fonte em PHP, MySQL, Bootstrap, jQuery - Inclui cadastro de clientes, fornecedores e ticket de atendimento
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
Controle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidadesControle de Estoque completo com código fonte em PHP, MySQL, Bootstrap, jQuery - 100% funcional e fácil de modificar e implementar novas funcionalidades
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
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á 38 usuários muito felizes estudando em nosso site.