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( "\nMédia=%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 = "); continuar = getch(); printf( "%c\n", toupper( continuar ) ); 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. A leitura da variável de nome continuar é feita utilizando a função getch que lê um char sem mostrá-lo na tela. Logo depois, o caractere lido é impresso na tela junto de um pula linha.

Em resumo, o programa acima solicita que o usuário digite números (para o programa armazenar em um vetor de números rais) 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.