Function is zeroing the last value of the vector

1
#include <stdio.h>
#include <stdlib.h>


/**
2. Faça um programa que, a partir de um vetor de 12 posições, crie funções para: 

A. Digitar valores no vetor; 
B. Imprimir o valor somatório de seus itens; 
C. Imprimir a média dos valores fornecidos;
D. Substituir por 0 todos os números negativos; 
E. Substituir por 0 todos os números repetidos (maiores que 0). 
**/

float SomarVetor(float vet[]){
  float soma=0;
  for(int i=0; i < 12; i++){
    soma += vet[i]; //Somar valores do vetor
  }
  return soma; //Irá retornar a soma total
}


float media(float vet[]){
  float media =0;
  for(int i=0; i < 12; i++){
    media += vet[i]; //Soma os valores
  }
  return media/12;
}


float negativos(float vet[]){
  for(int i=0; i < 12; i++){
    if(vet[i] < 0){
      vet[i] = 0.0; //Substituir valores negativos por 0
    }
  }
}


float repetidos(float vet[]){

  for(int i=0; i < 12; i++){
    for(int j=0; j < 12; j++){
      if(vet[i] == vet[j+1]){
        vet[i] = 0.00;
        j++;
      }else{
        for(int k=11; k > 0; k--){
          if(vet[i] == vet[k]){
            vet[i] = 0.00;
            k--;
          }
        }
      }
    }
  }
}


main(){

  float vet[11];// Vetor de 12 posicoes
  int i; 

  for(i=0; i < 12; i++){//Preenchimento do vetor 
    printf("Digite o %d do vetor: ", i);
    scanf("%f", &vet[i]);
  }


  //Respostas
  printf("Soma dos itens do vetor é %.2f\n", SomarVetor(vet));
  printf("Media: %.2f\n", media(vet));
  negativos(vet);
  //repetidos(vet);

  for(i=0; i < 12; i++){
    printf("%.2f | ", vet[i]);
  }
}

Why does the negativos() function make the last position of the vector stay zero as well? Is the condition for zeroing to be negative?

    
asked by anonymous 19.06.2017 / 05:06

1 answer

1

The declaration of an array should include the number of elements expected to use it. Since the elements start at 0, the last one will be the size minus one. But the amount of elements is the amount of elements, has no displacement, counts normally.

Just be careful because in C there is not much protection, if you try to access outside this range, it leaves and corrupts memory.

    
19.06.2017 / 05:13