segunda-feira, 14 de maio de 2012

Vetores - Valor dinâmico

Como usar valor dinâmico em vetores


Fui alertado por nosso colega Fernando Paiva de que quando usamos vetores(array) não é recomendado usar valores fixos para comandos de laço como o for. Isso porque o vetor pode mudar seus valores e até mesmo seus índices conforme o laço. Como o vetor inicia-se sempre em 0, usar uma referência igual ou maior a seu índice pode criar erros e travamentos no programa.

Função sizeof()


Para usar valores dinâmicos deve-se criar uma variável len (de lengh, tamanho em inglês) que recebe o valor exato do vetor através da função sizeof. A função sizeof(vetor) pega o tamanho do vetor e sizeof(int) retorna esse valor em inteiro atribuindo o tamanho à variável len. Veja o exemplo e compare com o post Vetores - Exemplo 1:

#include <iostream>
#include <cstdlib>
#include <stdio.h>

using namespace std;

int main()
{
      float vetor[10];                                    //vetor de valores fixos com 10 posições de memoria.
      int i;                                                  //índice do laço.
      int aluno = 0;                                     //contador para número do aluno.
      float soma;
      int len = sizeof(vetor) / sizeof(int);       //pega o tamanho do vetor.
      for (i = 0; i < len; i++)                        //for usando o tamanho do vetor armazenado em len.
            {  
            aluno = aluno + 1;                       //incrementa o número do aluno.
            cout << "Digite a nota do aluno " << aluno << " : ";
            cin >> vetor[i];
            }
      soma = 0;
      aluno = 0;                                        //zera o número do aluno.
      cout << "\n";
      for (i = 0; i < len; i++)                        //for usando o tamanho do vetor armazenado em len.
            {
            aluno = aluno + 1;                      //incrementa o numero do aluno.
            cout << "A nota lida para o aluno " << aluno << " foi: " << vetor[i];
            cout << "\n";
            }    
      system("PAUSE");
}

Nenhum comentário:

Postar um comentário