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

M.offspring.R

[Resolvido][Duvida] Achar o nº da posição num vector

15 mensagens neste tópico

Boas.

Preciso de achar a posição do ultimo dado inserido num vector... Criei este codigo, mas não sei se está correcto ou nao, por isso, vim aqui perguntar aos mestres se esta correcto ou não.

Este é o código:

  for(i=1; i<=20; i++)
    {
      printf("Digite o valor (vec[%d]): ",i);
      scanf("%d",&vec[i]);
      soma+=vec[i];
      if (vec[i]==0)
{
  printf("\t\t\t\tDados registados com sucesso.\n\n\n\n");
  break;
  nposicao=vec[i]-1;
}
    }

Aguardo uma resposta.

Cump.

M.offspring.R

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o 'break' podia ser evitado... usa antes uma flag no for.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu tenho que usar o break, porque o exercício pede para quando o utilizador digitar o 0 (zero), deixe de inserir valores.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nposicao=vec[i]-1;

Assim não estás a obter a posição do valor, mas o próprio valor menos 1.

Tens é que subtrair ao i.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então o código tem que ficar assim:

nposicao=vec[i]-i;

Estava contente de ter resolvido o problema quase sem problemas, vi logo que alguma coisa tinha que surgir para estragar tudo...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu tenho que usar o break, porque o exercício pede para quando o utilizador digitar o 0 (zero), deixe de inserir valores.

usar o 'break' é uma forma de fazer isso, mas também podias ter uma flag.

for(..., flag=1; ... && flag; ...)
{
  ...
  if(...)
  {
    ...
    flag=0;
  }
}

PS: qual o tamanho de 'vec'? não te estás a esquecer que os arrays em C começam no 0?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O vector tem 20 posições, e o qual pode ser totalmente preenchido ou não, consoante os valores digitados.

Resumindo, vamos inserindo valores, mas ao digitar o 0 (zero) não é possível adicionar mais. Com os valores depois vamos calcular a média, para isso preciso de uma variável que me diga quantas "casas" do vector foram preenchidas... É isso que não estou conseguindo fazer.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pois, estás a preencher as posições 1 a 20 do array, quando devias estar preencher as posições 0 a 19.

podes saber quantos elementos inseriste no array pelo valor da variável 'i', quando inseres o valor 0, esta deixa de ser incrementada. a variável 'nposicao' dava-te o último valor inserido e não o número de valores inseridos.

já agora, a linha 'nposicao=vec[ i ]-1;' ainda ia se executada? pergunto isto porque esta depois do 'break'.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Agora surgiu mais umas pequenas dúvidas:

-> tenho que alterar o vector (no lugar das declarações de variáveis) de vec[20] para vec[19]

-> alterar o ciclo for de modo começar a preencher o vector da "casa" zero até a 19

Realmente o resultado da média alterou-se quando coloquei o 'nposicao=vec[ i ]-1;' antes do break... Depois de resolver este problema (o de achar o numero de casas preenchidas) tenho outra dúvida que fica para mais tarde.

Para já se resolver este problema já fico feliz  ;)

Cump.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

se declara 'vec[20]' tens um array de 20 posições, só que as posições começam no 0, ou seja, tens que alterar o 'for' para for(i=0;i<20;i++), por exemplo.

como é que estás a calcular a média?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já resolvi esse problema. Obrigado Rui Carlos pela ajuda prestada.

Agora tenho uma questãozinha... para aproveitar este topic aberto pergunto logo:

por exemplo, eu coloco estes valores: 1, 2, 3, 4, 5.  A média era para dar 3, mas dá -3... O que o programa está fazendo é, quando inserimos valores positivos ele devolve um valor negativo, ou então se nos digitarmos valores negativos, o programa devolve o resultado positivo... "Aqui há gato"  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

coloca aqui o código, sem isso é difícil ver qual é o problema.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Então cá vai o código:

#include <stdio.h>

int main ()
{
  int vec[20],soma,i,nposicao;
  float media;

  printf("\n");
  soma=0;

  //registar valores
  for(i=0; i<=20; i++)
    {
      printf("Digite o valor (vec[%d]): ",i);
      scanf("%d",&vec[i]);
      soma+=vec[i];
      if (vec[i]==0)
{
  printf("\t\t\t\tDados registados com sucesso.\n\n\n\n");
  nposicao=vec[i]-i;
  break;
}
    }

  //fazer media
  printf("\nA media e: %.2f",media=soma/nposicao);


  return 0;
}

Não sei se é a maneira mais correcta de o fazer...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

tal como já referi, a soma dos valores não vai ser dividida pelo último elemento, mas sim pelo número de elementos inseridos (valor que te é dado pela variável 'i' e não por 'vec[ i ]-1').

printf("\nA media e: %.2f",(float)soma/i);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok.

Obrigado pelas dicas Rui Carlos  ;)

sendo assim, a linha 

nposicao=vec[i]-i;

não está ali fazendo nada.

Agora sim, o resultado já bate certo...  :)  Eu estava a pensar correctamente, mas o código estava errado.

Por agora é tudo....

Cump.

M.offspring.R

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