Ir ao conteúdo
  • Cadastre-se

Duvida no funcionamento de um vetor


AloneSmile
Ir à solução Resolvido por AloneSmile,

Posts recomendados

Estou fazendo um algoritmo que lê um vetor de 5  elementos inteiros e no  final  exibe  os  valores do  vetor  que  são  maiores  do  que  a média dos valores digitados. Okay. A duvida é a seguinte como armazeno em um variável ou em um vetor, apenas alguns dados, por exemplo: Armazenar 3 valores em um vetor de 5 posições e deixar os outros valores nulos, e mostrar na tela apenas os 3 valores?
 
 
Segue o que fiz até o momento:

 

#include <stdio.h>#include <stdlib.h>#define tam 5float media, soma;main(){    int vetor[tam], maior[0];    int i;    for(i=0; i<tam; i++){        printf("Informe numeros inteiros: ");        scanf("%d", &vetor[i]);        soma = soma + vetor[i];    }    maior[0] = vetor[0];//Maiores        media = soma / tam;        printf("Soma dos numeros informados = %g", soma);        printf("\nMedia = %g", media);        printf("\nValores informados maior que a media: ");//Maiores        for(i=0; i<tam; i++){//Maioresif(vetor[i]>media){maior[i] = vetor[i];}printf(" %d", maior[i]);}//Maiores}
Link para o comentário
Compartilhar em outros sites

Você pode criar uma variável só pra guardar o tamanho atual do vetor.

Por exemplo, se o vetor tiver tamanho 5, mas nenhum valor desse vetor tiver sido inicializado ainda, o tamanho atual dele será zero.

Daí cada vez que você adicionar um elemento a esse vetor, você aumenta o tamanho atual em 1.

int tamanhoTotal = 5;int tamanhoAtual = 0;int vetor[tamanhoTotal];vetor[tamanhoAtual++] = 123; // adicionou um número na posição zero e atualizou a posição atual de 0 pra 1.// tamanhoTotal continua sendo 5// tamanhoAtual agora é 1
Na hora de mostrar esses valores, basta usar a variável tamanhoAtual como índice, em vez de tamanhoTotal.

Outro modo de fazer isso é inicializar seu vetor antes com valores fora do escopo do seu problema.

Por exemplo, digamos que seu vetor irá guardar apenas valores entre 1 e 200. Então antes de começar a usar seu vetor, você inicializa todas as posições dele em 0. Ou 201.

Então na hora de imprimir esses valores, basta testar se eles são maiores que zero (ou menores que 201).

int tamanhoTotal = 5;int vetor[tamanhoTotal];for (x=0; x < tamanhoTotal; x++)    vetor[x] = 0;vetor[1] = 123;vetor[3] = 456;for (x=0; x < tamanhoTotal; x++)    if (vetor[x] > 0)              // imprime apenas os valores diferentes de zero        printf (vetor[x]); 
Link para o comentário
Compartilhar em outros sites

Entendi, porém onde deveria modificar em meu código?

 

 


#include <stdio.h>#include <stdlib.h>#define tam 5float media, soma;int tamanhoAtual = 0;main(){    int vetor[tam], maior[tamanhoAtual];    int i, arm;    for(i=0; i<tam; i++){        printf("Informe numeros inteiros: ");        scanf("%d", &vetor[i]);        soma = soma + vetor[i];    }        media = soma / tam;        printf("\nSoma dos numeros informados = %g", soma);        printf("\nMedia = %g\n", media);        for(i=0; i<tam; i++){            if(vetor[i]>media){                tamanhoAtual++;            }            maior[tamanhoAtual] = vetor[i];                printf(" %d", maior[tamanhoAtual]);        }}
Link para o comentário
Compartilhar em outros sites

Acho que você não entendeu.

float media, soma;int tamanhoAtual = 0; main() {    int vetor[tam];    float maior[tamanhoAtual]; // você tá criando aqui um vetor com 0 elementos. É isso que você quer?
Vou dar outro exemplo:

int main() {    int x;    int indice = 0;    float vetor[10];    // vetor tem tamanho 10    // indice é igual a 0    vetor[indice] = 274;    indice++;    // adicionei um número em vetor[indice], como índice era igual a zero, a posição que eu adicionei foi vetor[0]    // logo em seguida eu passei o valor de indice pra 1.    vetor[indice] = 2 + 2;    indice++;    // adicionei outro número no vetor. Como o indice era igual a 1, o número foi pra posição vetor[1]    // em seguida passei o valor de indice pra 2.    vetor[indice] = 346;    indice++;    vetor[indice] = 964;    indice++;    for (x = 0; x < indice; x++)        printf ("%d \n", vetor[x]);    // Agora se eu quiser imprimir todos os valores do vetor, basta usar o indice pra saber quantos numeros eu adicionei nele    // Esse FOR vai imprimir todos os números, de vetor[0] até vetor[3], pois o índice era igual a 4 (ou seja, quatro elementos no vetor).    return 0;}
Link para o comentário
Compartilhar em outros sites

Okay 

Mauro Britivaldo

O exercício é o seguinte:

Escrever um algoritmo  que leia um vetor de 5  elementos inteiros e  no  final  mostre  os  valores  do  vetor  que  são maiores  do  que  a média dos valores digitados. Faça este procedimento usando uma função para calcular a média.

 
O que fiz até o momento é isso:
 
#include <stdio.h>#include <stdlib.h>#define tam 5float media, soma;int cal_med (float media);main(){    int vetor[tam], maior[tam];    int i, arm;    for(i=0; i<tam; i++){        printf("Informe numeros inteiros: ");        scanf("%d", &vetor[i]);        soma = soma + vetor[i];    }    cal_med(media);}int cal_med (float media){        media = soma / tam;        printf("\nSoma dos numeros informados = %g", soma);        printf("\nMedia = %g\n", media);}
 

Ele esta pegando os 5 valores informados pelo usuário, somando eles e fazendo a média e mostrando o resultado na tela.

 

Agora só esta faltando: mostrar na tela  os  valores  do  vetor  que  são  maiores  do  que  a média dos valores digitados, entende, é isso que não estou conseguindo fazer, não estou conseguindo pensar em uma maneira de como fazer isso, desde já, Obrigado pela atenção.

Link para o comentário
Compartilhar em outros sites

  • Solução

Consegui:

#include <stdio.h>#include <stdlib.h>float media=0;int vetor[5];int i;float cal_med();int main(){    cal_med();    printf("Nota(s) maior que a media: ");    for(i=0;i<5;i++){        if(vetor[i]>media){            printf("%d ",vetor[i]);        }    }}float cal_med(){    for(i=0; i<5; i++){        printf("Informe numeros inteiros: ");        scanf("%d", &vetor[i]);        media = media + vetor[i];    }    media=media/5;    printf("\nMedia = %g\n", media);}
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...