Italo Info


Vetores unidimensionais (Arrays)

Quando desenvolvemos software, muitas vezes surge a necessidade de armazenar uma quantidade de valores em uma única variável. Isso é possível em linguagem C através da definição e manipulação de arrays que têm semelhança com uma lista de variáveis de mesmo tipo. Por exemplo:


#include <stdio.h>

int main() {
    int vetor[3];
    int a, b, c, soma1, soma2;  
    
    vetor[0] = 3;
    vetor[1] = 4;
    vetor[2] = 1;
    
    printf( "Primeiro valor: %d", vetor[0] );
    printf( "Segundo valor : %d", vetor[1] );
    printf( "Terceiro valor: %d", vetor[2] );
    
    a = vetor[0];
    b = vetor[1];
    c = vetor[2];
    
    soma1 = a + b + c;
    
    vetor[0] = b;
    vetor[1] = a;
    vetor[2] = c;
    
    soma2 = vetor[0] + vetor[1] + vetor[2];
    
    printf( "Soma1 : %d", soma1 );
    printf( "Soma2 : %d", soma2 );
}

O programa acima mostra a declaração de um array (Ou vetor) de inteiros de 3 posições. Preste atenção a compatibilidade entre as variáveis do tipo inteiro e cada posição do array. As posições do array podem ser utilizadas como variáveis comuns. Por exemplo, no exemplo acima, a variável (a) recebe como valor o valor armazenado em vetor[0] e, depois, a variável vetor[2] recebe o valor armazenado na variável (c). Claro, é possível declarar um vetor de floats, ints, chars, strings, etc. Estude bem o programa acima, coloque-o no Dev-C++, faça alterações e visualize os resultados! Por exemplo: e se o vetor do programa acima fosse do tipo float e tivesse espaço para 5 valores reais?

Atenção: os vetores têm suas posições indexadas começando de zero (não de um). Exemplo: um vetor de 5 elementos tem seus valores armazenados nas posições 0, 1, 2, 3, 4. O primeiro elemento fica na posição 0, o segundo na posição 1 e, assim, sucessivamente. O índice da posição do vetor fica entre colquetes na utilização da variável array.

Abaixo um exemplo que calcula a média aritmética de 5 valores lidos do teclado:


#include <stdio.h>

int main() {
    int lista[5];
    int i, soma, media;
    
    for( i = 0; i < 5; i++ ) {
        printf( "\nInforme o numero(%d): ", (i+1) );
        scanf( "%d", &lista[i] );
    }
    
    soma = 0;
    for( i = 0; i < 5; i++ )
        soma += lista[i];
    
    media = soma / 5;
    
    printf( "\nMedia=%d", media );
    
    return 0;
}

O programa acima, primeiro, armazena os valores lidos em um vetor e, depois, os imprime. Mas, é possível fazer a funcionalidade do programa acima sem o uso de vetores, coforme mostrado a seguir:


#include <stdio.h>

int main() {
    int num;
    int i, soma, media;
    
    soma = 0;
    for( i = 0; i < 5; i++ ) {
        printf( "Informe o numero(%d): ", (i+1) );
        scanf( "%d", &num );        
        soma += num;
    }       
    media = soma / 5;
    
    printf( "\nMedia = %d", media );    
    return 0;
}

Abaixo, um exemplo um pouco mais complexo:


#include <stdio.h>

#define CAPACIDADE 10

int main() {
    float vetor[CAPACIDADE];
    char continuar = 'S';
    int i, quant;
    
    quant = 0;
    do {        
        if ( quant < CAPACIDADE ) {
            printf( "\nInforme o numero(%d)..: ", (quant+1) );
            scanf( "%f", &vetor[quant] );
            
            printf( "\nDeseja ler outro numero?" );
            printf( "\n(S) para sim" );
            printf( "\n(N) para nao" );
            printf( "\nOpcao = ");                       
                
            fflush( stdin );
            fflush( stdout );
            continuar = getchar();                    
            
            quant++;
        } else {
            printf( "\nNao ha mais espaco para armazenar mais numeros!" );
            continuar = 'N';
        }
    } while ( toupper( continuar ) == 'S' );
    
    printf( "\n\nNumeros lidos: " );
    for( i = 0; i < quant; i++ )
        printf( "%.2f ", vetor[i] );
    
    return 0;
}

No programa acima, é utilizada a função toupper que converte um caractere para maiusculo. Do mesmo modo, existe a função tolower que converte para minusculo. Repare também na chamada a fflush antes da utilização da função getchar. Isto é necessário para limpar os bufferes de entrada e saída padrões e a leitura funcionar corretamente.

Em resumo, o programa acima solicita que o usuário digite números (para o programa armazenar em um vetor de números reais - ponto flutuante) enquanto o usuário não escolhe não ler mais números e a capacidade máxima do vetor não for extrapolada. Depois da leitura, o programa percorre a lista de números para imprimi-los.

Exercícios

1) Experimente alterar o programa acima para que o vetor de números reais tenha como capacidade máxima 5 e, no final do programa, seja mostrada também, a média aritmética dos números digitados.

2) Altere o programa acima para que sejam impressos apenas os números menores ou iguais a 10.5.

3) Altere o programa acima para que, no final, os números sejam impressos com 4 casas após a vírgula.