Enviar um café pro programador

Pode me ajudar a transformar cafeína em código?

O que são vetores, como declarar e quando usar

Dando início a mais uma importante unidade em nosso curso online e gratuito de C, vamos iniciar nossos estudos sobre as estruturas de dados.


Neste artigo inicial da seção de vetores de nossa apostila, vamos estudar o tipo de estrutura de dado mais simples: os vetores, também conhecidos por arrays.

 O que é um vetor em C... E para quê serve?

Imagine que você foi contratado para criar um programa em C para uma escola.
Nesse programa você tem que armazenar as notas dos alunos, nomes, médias, nome dos pais, faltas e tudo mais.

E aí? Vai declarar quantos inteiros pra armazenar as notas? Centenas? Milhares?
E quantos caracteres para armazenar esses nomes?
E quantos floats para armazenar as notas e médias, de cada matéria, para cada aluno?

É quase que humanamente impossível fazer isso. Mas não se preocupe, pois você programa em C e tem total domínio de sua máquina, você não perderá tempo declarando inúmeras variáveis, fará com que o computador faça isso pra você.

E é disso que se trata estrutura de dados: estudar, manipular, organizar, salvar e extrair informações de uma grande quantidade de dados. Automatizar esse processo para que não precisemos declarar, inicializar e fazer outras operações em nossas variáveis de um modo manual.

Como declarar um vetor em C

Agora que já sabe para que serve e como são importantes, vamos começar a usar os vetores/arrays em linguagem C.

A sintaxe é a seguinte:
tipo nome[numero_de_elementos];

Ou seja, a sintaxe é a mesma de declarar uma variável normal, mas não vamos declarar somente uma, vamos declarar várias. E o par de colchetes ao lado do nome da variável serve para isso: especificar quantas daquelas variáveis estamos declarando.

Por exemplo, vamos declarar 10 inteiros que vão representar a idade de 10 pessoas:
int idade[10];

Agora 50 floats que vão representar a nota de 50 alunos:
float notas[50];

Bem simples.





A contagem dos índices começa sempre do 0

Embora tenhamos declarado as variáveis com um nome, elas não podem ter um mesmo nome. Por isso, um número é associado ao seu nome.

No caso da idade[10], as variáveis inteira são:
idade[0], idade[1], idade[2], ..., idade[9]
Isso mesmo, o primeiro elemento é sempre o zero.
Por isso as lições do curso C Progressivo começam do número 0.
Por isso as questões começam da questão de número 0.

Mais uma vez, isso é muito básico e importante: a contagem, em linguagem C, começa do 0.

No caso das notas[50], as variáveis do tipo float são:
notas[0], notas[1], notas[2], ... , notas[48] e notas[49]

Então, se uma variável tem ‘n’ elementos, seus índices variam, sempre, de 0 até n-1, totalizando ‘n’ elementos.

Como usar acessar os elementos de um vetor em C

Declaramos várias variáveis com o mesmo nome, mas como se referir, individualmente, a cada uma delas?
A resposta é simples: usando números, ou índices.

'notas' é um vetor de floats.
Se quiser usar um tipo float, use a seguinte sintaxe: nome[indice]

Então, suas variáveis, de forma independente, são chamadas de: notas[0]. notas[1], notas[10] etc.
Esses serão seus nomes. Você pode usar como usaria as variáveis (na verdade elas são variáveis, como se tivessem sido declaradas manualmente), por exemplo:

Armazenar a nota de um aluno que tirou 10
nota[10]= 10.0 //esse programa em C

Somar a nota de dois alunos:
float soma = nota[3] + nota[4];

Incrementar:
nota[5]++;

Enfim, pode fazer tudo. São variáveis do tipo float normais.
A diferença é que os nomes das variáveis têm números, que são chamados, em programação, de índice, que são criados automaticamente quando você declara um bloco de vários elementos (vulgo vetores, ou arrays).

Como de costume, para fixar melhor, vamos aos exemplos de código!

Exemplo 1: Faça um programa que peça 3 números inteiros ao usuário, armazene em um vetor, depois mostre o valor de cada elemento do vetor, assim como seu índice.

Primeiro declaramos um vetor de inteiros, contendo 3 elementos:
int numbers[3];

Agora vamos pedir pro usuário preencher esses três números.

Lembre-se que você é programador e sabe que os índices vão de 0 até 2.
Mas o usuário não. Pro leigo, é número 1, número 2 e número 3, não inicia no 0.

No laço for, o nosso 'indice' vai de 0 até 2.
Porém, ao recebermos o valor de índice 'indice', estamos pedindo ao usuário o valor do número 'indice+1'.

Por exemplo, para armazenar um valor no 'number[0]', vamos pedir o número '0+1' ao usuário.
Para armazenar um valor no 'number[1]', vamos pedir o número '1+1' ao usuário.
Para armazenar um valor no 'number[2]', vamos pedir o número '2+1' ao usuário.

Usaremos outro laço for para exibir o valor dos números, através dos índices, que variam de 0 até 2.
Porém, novamente, temos que mostrar 1 ao 3 pro cliente, pois pra ele não faz sentido 'número 0 -> valor 10 ' e sim 'número 1 -> valor 10'.

Então, nosso código em C fica:

#include <stdio.h>
 
int main()
{
    int number[3],
        indice;
 
        for(indice=0 ; indice <= 2 ; indice++)
        {
            printf("Entre com o numero %d: ", indice+1);
            scanf("%d", &number[indice]);
        }
 
        for(indice=0 ; indice <= 2 ; indice++)
            printf("Numero %d = %d\n", indice+1, number[indice]);
 
}


Exemplo: Faça um programa em C que peça ao usuário duas notas que ele tirou e mostre a média.
Use vetores! Aliás, use somente um vetor para essas três variáveis.

Se não fosse pelo uso do vetor, você faria esse exemplo com o pé nas costas e dançando salsa.
Mas tem que usar um vetor.

Vamos declarar um vetor de float de três elementos.
Nas duas primeiras posições armazenamos as notas do usuário (nota[0] e nota[1]), e na terceira posição (nota[2])  armazenaremos a média (nota[0] + nota[1])/2.

Veja como ficou nosso código C:
#include <stdio.h>

int main()
{
    float notas[3];

    printf("Insira sua primeira nota: ");
    scanf("%f", &notas[0]);

    printf("Insira sua segunda nota: ");
    scanf("%f", &notas[1]);

    notas[2] = (notas[0] + notas[1])/2;

    printf("Sua media e: %.2f\n", notas[2]);
}

Sim, muito simples. São simplesmente variáveis normais, a diferença é que são várias delas.
É até mais fácil trabalhar com vetores do que com variáveis declaradas manualmente, por conta dos índices.
Afinal, números tem uma ordem lógica, já os nomes que damos as variáveis não.

Até fazemos uma ressalva, evite usar variáveis como: a, b, c, x, y, i, j... ou a primeira letra que você encontrou.

Use 'linha', 'coluna', 'indice', 'contador', 'count', 'media', 'nota', 'continuar' etc, como fizemos aqui.
Pode parecer perda de tempo usar uma variável com nome tão grande. Mas é porque ainda estamos estudando.

Quando você for profissional e já tiver feito programa com milhares de linhas de código, ficará impossível entender o que é sopa de letras que você usou como nome de variáveis.
Mas se tiver usado nomes que façam sentido, você e outros programadores também entenderão de maneira mais simples.

Não é um conselho, é um diferencial.

33 comentários:

Unknown disse...

Gostei da explicação. Estou vendo vetores na faculdade e esse post me ajudou bastante.
Obrigado.

Douglas Mathias disse...

Muito Obrigado !!!!

Felipe disse...

Também estou vendo na faculdade, e está chegando a semana de provas, seu post foi MUITO BOM, ajudou MUITO.

Apesar de talvez ser simples para alguns somente com metodologias como esta que se tornam compreensíveis para todos (ou quase).

PS: Você que está lendo isso, não desista do seu sonho!!!

Diogo Henrique S Guilhen disse...

Sim muito bom, eu tbm estou na faculdade tentando fazer um triangulo de pascal em c, usando vetor, esse post esta me ajudando, se souber de algo q posssa me ajudar mais ! :)

Anônimo disse...

Olá achei Ótima a explicação, é um ótimo material, no entanto tenho uma duvida: porque no primeiro programa foi necessário declarar o índice e no segundo não?

Unknown disse...

Muito bom!!

Suzy Brenda disse...

Muito bom. Me ajudou bastante.

Anônimo disse...

Boas, estou a criar um jogo de blackjack(21), tenho que usar arrays(vetores) mas não estou a conseguir fazer que as cartas saiam no máximo 4 vezes, eu sei que tenho que os verificar para poder fazer isso mas não sei como o fazer, será que você poderia me dar uma luz?

Stefan disse...

Este site me ajuda muito. Parabéns pelo site tão bom. Tanto conteúdo e tão bem explicado.
Muito obrigado.

Tina disse...

Muito bom! Obrigada.

Felipe disse...

Ótimo post, ajudou bastante, valeu!

Anônimo disse...

Gostaria de saber como fazer para ficar incrementando o valor do vetor, tipo v[i], sendo que i++; No caso sempre vai dar um brake. Tento resolver assim quando em uma questão diz que ele vai ficar digitando numeros até ele digitar um certo número e parar. Como fazer?

Marcos Felipe disse...

Gostaria de saber como fazer para ficar incrementando o valor do vetor, tipo v[i], sendo que i++; No caso sempre vai dar um brake. Tento resolver assim quando em uma questão diz que ele vai ficar digitando numeros até ele digitar um certo número e parar. Como fazer?

Você pode utilizar seu i como o identificador da posição sentro de um FOR por exemplo. o mesmo i que controla o loop vc coloca vetor[i] que o proprio for se encarrega de incrementar e assim vai pegando os elementos seguintes.

Tiago C. Santos disse...

Como faço pra declarar um vetor de diferentes tipos de dados nele ?

Anônimo disse...

Show de bola comandante.

Hebert Alves disse...

Ficou muito bom

monia tavares disse...

o meu ultimo ficou assim :D
#include

int main()
{
int nota[2],i,soma;

for (i=0;i<=1;i++)
{
printf("informe a %i nota:",i+1);
scanf("%i",&nota[i]);

soma = soma + nota[i];
}

soma = soma/2;

printf("a media eh de: %i",soma);


}

se bem que gostei muito dessa ultima forma , armazena logo direto, sem laços e nada, bem pratico e limpo :D
adoro esse site!

Anônimo disse...

ótima aula!

Anônimo disse...

Muito boa esta aula, ajudou imenso.

Unknown disse...

Estou com duvida poderia me ajudar?
#include

int main()
{
int number[3],
indice;

for(indice=0 ; indice <= 2 ; indice++)
{
printf("Entre com o numero %d: ", indice+1);
scanf("%d", &number[indice]);
//por que usando o indice par adicionar o numero digitado dentro do numbeR?
}

for(indice=0 ; indice <= 2 ; indice++)
printf("Numero %d = %d\n", indice+1, number[indice]);

}

Unknown disse...

Um botão deve somar 1 no display.
Outro botão deve subtrair 1 no display.
O terceiro botão vai armazenar o elemento em um vetor.
O quarto botão vai apresentar todos os números em ordem crescente.

Neste caso, como armazenar o valor em um vetor (em C)?
E como apresentar os valores salvos em ordem crescente?

Ulysses disse...

O meu ficou assim.

#include
#include
#include

using namespace std;

int main(){

int nota[2];
double media;

for (int i=0; i<2; i++){
printf("Digite o valor da nota %d que voce tirou: ",i+1);
scanf("%d",&nota[i]);
}

media=(nota[0]+nota[1])/2.0;
printf("A média das notas tiradas foram %f",media);
return 0;
}

Unknown disse...

Hello, thank you for your post appreciat to much keep like this send poste to help the beginner...

Cíntia Socorro disse...

Excelente blogger, sempre venho aqui tirar minhas duvidas. muito obrigada, Suas postagens me ajudam imensuravelmente :)

Anônimo disse...

adorei. Mas queria saber como é que encontra a posição de um vetor? Alguém poderia me ajudar com essa duvida! A quem responder, muito obrigada!

:)

Anônimo disse...

isso ai

Unknown disse...

Gente, alguém me ajuda com uma programação. Eu não tenho ideia de como fazer. Ta aí:

Faça um programa que carregue 3 vetores com 5 posições cada um. O 1º vetor receberá os nomes de 5 funcionários. o 2º vetor receberá os salários dos 5 funcionários. Já o 3º vetor receberá a quantidade de anos que cada funcionário trabalha na empresa. Mostre um 1º relatório apenas com os nomes dos funcionários que não terão aumento. Mostre um 2º relatório apenas com os nomes e os novos salários dos funcionários que terão aumento. Sabe-se que os funcionários que terão direito ao aumento são aqueles que possuem tempo de serviço superior a 5 anos ou salário inferior a 200 reais. Sabe-se, ainda, que se o funcionário satisfizer as 2 condições acima (tempo de serviço e salário) o aumento será de 35%; para o funcionário que satisfizer apenas a condição de tempo de serviço, terá um aumento de 25%; e para o funcionário que satisfizer apenas a condição de salário, o aumento será de 15%.

Preciso muito de uma ajuda!!!

Unknown disse...

cara, show de bola sua explicação, em 20 minutos estudando em sua page entendi o que em 2 meses de aula na facul na havia entendido. obg e parabens!!

Luis disse...

E qual e como é o caracter da ultima posição?

Lloyd disse...

Como usar os vetores em uma função ?

wagner disse...

ola'poderia me dar uma luz nesta situação.

Por exemplo: Um numero composto pelos dígitos 1735135-5 são dividido da seguinte forma para atender aos requisitos da atividade: 12 para o valor de X, 34 como tamanho do vetor, e 5 como sendo a quantidade de valores do vetor a serem exibidos. O programa deve utilizar basicamente laços de repetição para preencher e exibir os valores do vetor,Após o vetor estar preenchido, o programa deve permitir que uma quantidade de valores do vetor preenchido seja exibida na tela, sendo esta quantidade determinada pelo quinto dígito de seu numero.

poderia me ajudar nesta duvida


wagner

Unknown disse...

Parabéns. Bom trabalho!

Lucas de Lima disse...

Muito bom, Parabéns!