• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

M.offspring.R

[Resolvido][Duvida] Preenchimento de um vector

10 mensagens neste tópico

Bem este é o primeiro post nesta secção e espero te-lo feito da melhor maneira... A minha duvida é a seguinte: No seguinte código tenho um ciclo for para me encher um vector de 20 posições, mas o que acontece é que este só preenche 10 em vez dos ditos 20... qual será o erro??

O código é este:

#include <stdio.h>
int main ()
{
  int i,vector[20];
  float SomaPar,SomaImpar;

  for (i=0; i<=19; i++){
     printf("Digite um valor: ");
     scanf("%d",&vector[i]);
  }                               


  SomaPar=0;
  SomaImpar=0;

  for (i=0; i<=19; i++){
    if ( (vector[i] % 2 = 0) )
    {
      printf("\nA Soma dos numeros pares e': %f.",SomaPar+vector[i]);
    }
    else
    {
      printf("\nSoma dos numeros impares e': %f.",SomaImpar+vector[i]);
    }
    i=i+1;
  }


   return 0;
}

Resumidamente o programa pede 20 valores e calcula o nº pares e impares... Agra no 1º ciclo for é que reside o problema, so me regista 10 valores.

Aguardo uma ajuda.

Cump.

M.offspring.R

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Assim logo na 1ª linha, nem olhei para o resto do código.

int i,vector;

O i não inicializado, não deve ser usado logo na definição de vector.

Esta linha está a mais, no ciclo for.

i=i+1;

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:-[ Troquei os files com o mesmo código LOOOL

não e vector, mas sim vector[20].

Mas mesmo assim deve estar mal... sou um zero a esquerda no C.

PS: Ja editei o código.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O erro agora surge em:

for (i=0; i<=19; i++){
    if ( (vector[i] / 2 = 0) )  
    {
      printf("\nA Soma dos numeros pares e': %f.",SomaPar+vector[i]);
    }
    else
    {
      printf("\nSoma dos numeros impares e': %f.",SomaImpar+vector[i]);
    }
    i=i+1;
  }

Mais propriamente na conta, pois não sei se devo usar o / ou o %.

Nem sei se o i=i+1 está ali fazendo algum efeito....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se queres saber se o número é par ou ímpar deves usar % em vez de /

Exemplo: 3 a dividir por 2 dá 1,5 ou seja 3/2 = 1 e 3%2 = 5

Mas há mais...

num teste usa-se == e não =

Se queres fazer a soma de todos os pares e todos os ímpares no array, não deves usar esse for assim, no for deves só ir fazendo a soma e depois sim, fazer UM printf para mostrar a soma dos números pares e outro para os números ímpares. (Da maneira como tens, as variáveis SomaPar e SomaImpar NUNCA são alteradas, pelo que nos printfs o que te vai aparecer é sempre zero + o valor de cada posição do array).

O i=i+1 está lá a fazer qualquer coisa, sim, está a fazer com que andes de 2 em 2 no vector. Porquê? Porque só ao teres for(i=0;i<=19;i++) automaticamente no final de cada iteração o i já é incrementado, porque isto é o mesmo que ter:

int i = 0;
while(i<=19){

//...

i=i+1;
}

Se no fim de cada iteração ainda voltas a fazer i = i+1 então o i anda de 2 em 2.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

#include <stdio.h>
int main ()
{
  int i,vector[20];
  float SomaPar,SomaImpar;

  for (i=0; i<20; i++){
     printf("\nDigite um valor: ");
     scanf("%d",&vector[i]);
  }                               


  SomaPar=0;
  SomaImpar=0;

  for (i=0; i<20; i++){
    if ( (vector[i] % 2 == 0) )
    {
      SomaPar=SomaPar+vector[i];
    }
    else
    {
      SomaImpar=SomaImpar+vector[i];
    }
  }

printf("\nA soma dos números pares: %f", SomaPar);
printf("\nA soma dos números impares: %f", SomaImpar);

   return 0;
}

Isto deve funcionar. ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

É isso mesmo.

Obrigado pelas respostas. Eu comecei mesmo há pouco tempo e há coisas que ainda escapam... eu tinha o código +/- parecido, não tinha era as coisas no sitio certo.

Isto de aprender C sem acesso a net, só a tutoriais sacados há algum tempo é um bocadinho complicado... nada que não se resolva com o tempo.

Cump.

M.offspring.R

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isto não requer propriamente conhecimentos específicos de C, isto é igual em PHP ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

3%2 = 5

??????

3%2 = 1

% retorna o resto, não a parte decimal.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

3%2 = 5

??????

3%2 = 1

% retorna o resto, não a parte decimal.

Na minha matemática em 1.5 a parte inteira é 1 e o resto é 5...

EDIT: erm... 3 a dividir por 2 é uma má escolha e induziu-me em erro...  :wallbash:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora