Curso C – Aula 05

Por Guilherme Farias em 15 de novembro de 2011

Nesta quinta aula vamos aprender como criar e utilizar os arrays.

Antes de aprender o que é um array, vamos pensar na seguinte situação, eu tenho anotado no caderno uma lista com 50 números de telefone e quero passar todos para meu programa em C, se a gente fosse fazer isso com o que aprendemos, teriamos que criar 50 variáveis e preencher todas, dava pra fazer, mas seria um pouco trabalhoso.

Há uma maneira MUITO mais eficiente para fazer isso, é usando um arrays.

ARRAY

O Array, também conhecido como vector, é básicamente um “conjunto” de váriaveis do mesmo tipo, agrupadas de forma sequencial como se fosse uma “fila”, e ordenado por um indice. É através do indice que acessamos nossa “variavel”.

A declaração do array é feita deste jeito:

(tipo do array) (nome do array)[(quantidade de posições do array)]

Exemplo:

int guiky[10];

Isso quer dizer que eu estou criando um array chamado guiky, que vai armazenar 10 números inteiros. Se preferir também é possível criar um array já com valores, exemplo:

int guiky[10] = {7,8,4,6,9,10,5,1,2,3};

“Fisicamente” ficaria algo assim:

Preenchendo um array

Você vai preencher o array do mesmo jeito que preenche uma variável, é só adicionar o valor na posição do array que você queira receber o valor.

guiky[5]=4350;

isso quer dizer que o valor 4350 vai ser inserido na sexta posição do array (isso mesmo, na sexta posição, porque a primeira posição do array é o indice 0).
Agora vamos voltar ao exemplo dado no começo da aula, como vamos armazenar 50 números dentro de um array? temos que atribuir um por um? a resposta é “mais ou menos”, na verdade os valores vão ser inseridos 50 vezes pelo usuário do programa (afinal de contas o programa não vai adivinha o número das pessoas), mas você programador vai digitar quase nada, apenas um “FOR” e uma variavel para trocar o indice, veja como vai ficar:

int i;
int numeros[50];
for(i=0;i<50;i++){
    printf("Digite o numero do telefone: n");
    scanf("%i", &numeros[i]);
}

Veja com apenas essas linhas o programa vai armazenar tudo, isso porque o for vai repetir esse código 50 vezes, o "i" será a variável de controle que vai corresponder a posição do array que será inserido o número. Repare que na primeira vez que o loop for executado, "i" terá o valor 0, e vai adicionar no indice "0", depois vai ter o valor "1" e vai adicionar no indice "1", assim até chegar ao ultimo loop, quando "i" terá o valor 49, e adicionará na posição de indice 49.

LEMBRE-SE: O array tem uma quantidade fixa de posições, cuidado para o "for" não tentar adicionar numa posição que não existe.

E como a gente faz pra exibir todos os números do meu array? veja como é simples:

int i;
int numeros[50];
for(i=0;i<50;i++){
    printf("Digite o numero do telefone: n");
    scanf("%i", &numeros[i]);
}
for(i=0;i<50;i++){
    printf("%i n", numeros[i]);
}

O "for" vai passar por todas as posições e vai imprimir na tela todas elas.

Como trocar as posições do array?

Caso eu queira trocar as posições, como faz? neste caso você tem que saber qual posição quer trocar, por exemplo, quero trocar a posição 20 pela 30, neste caso, vamos utilizar uma variável auxiliar para que o valor não seja perdido no momento da troca, ficaria assim:

int i, aux;
int numeros[50];
for(i=0;i<50;i++){
    printf("Digite o numero do telefone: n");
    scanf("%i", &numeros[i]);
}
aux = numeros[20];
numeros[20] = numeros[30];
numeros[30] = aux;

A variável "aux" foi usada para armazenar temporariamente o valor da posição 20, para que ele não seja perdido durante a troca.

Como ordenar o array em números crescente?

há diversas maneiras para ordenar um array, umas eficientes e outras nem tanto, a que vamos aprender aqui é uma das mas simples, ela vai pegar um número do array e comparar com todos os outros números, se ele for maior que o da posição seguinte, ele vai trocar de posição, até que todos os números maiores fiquem no fim do array e os menores fiquem na frente, fazendo assim a ordenação ordem crescente, o algoritimo de ordenação ficaria assim:

for(i=0;i<10;i++){
    for(j=i+1;j<10;j++){
        if(numeros[i]>numeros[j]){
            aux=numeros[i];
            numeros[i]=numeros[j];
            numeros[j]=aux;
        }
    }
}

Para ordenar de maneira decrescente, basta inverter a comparação, fazendo com que se o primeiro número for menor que o segundo, ele seja trocado e assim sucessivamente.
Criamos um algoritmo para vocês entederem melhor, confira:

//declarando as variáveis
int numeros[10];
int aux;
int i;
int j;

//recebendo todos os números
for(i=0;i<10;i++){
    printf("Digite um numero n");
    scanf("%i", &numeros[i]);
}

//mostrando como ficou o array
printf("Array desordenado: ");
for(i=0;i<10;i++){
    printf("%i ", numeros[i]);
}

//ordenando
for(i=0;i<10;i++){
     for(j=i+1;j<10;j++){
          if(numeros[i]>numeros[j]){
          aux=numeros[i];
          numeros[i]=numeros[j];
          numeros[j]=aux;
          }
     }
}

//mostrando o array ordenado
printf("nArray ordenado: ");
for(i=0;i<10;i++){
    printf("%i ", numeros[i]);
}
printf("n");


Exercicio:

Vamos deixar mais um exercício para você treinar sua programação, e caso você tenha alguma duvida, é só deixar um comentário ou entrar em contato.

1) Crie um programa que armazene 10 números em um array, organize em ordem decrescente e depois imprima todos os números.

2) Crie um programa que receba 10 números e imprima o dobro de todos os números armazenados

3) Crie dois arrays de 10 posições, receba 20 números (10 em cada) depois armazene todos em ordem crescente em um terceiro vetor de 20 posições.

Veja também:
Aula 01
Aula 02
Aula 03
Aula 04
Aula 05
Aula 06
Aula 07
Aula 08

1 comentário

  • Anderson disse:

    Massa sua explicação, também sou aluno de BSI e estou estudando C a parte de Array (Suposto Vector) e achei interessante sua iniciativa de criar esse curso, falou.

Deixe uma resposta

O seu endereço de email não será publicado

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>