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

suzy

porque da lixo?

14 mensagens neste tópico

viva! quero que um utilizador coloque um numero, por exemplo 27373 e me diga que o maior algarismo e o 7! fiz assim mas da me lixo ! pq?aonde ta o erro?

#include<stdio.h>

int maior(int n1, int n2)
    {
    if(n1>n2)
      return n1;
    else 
      return n2;
    }
    
    
    main()
    {
int vet[5], i,x=0;




for(i=0;i<5;i++)
{
printf(" introduza o numero\n");
scanf("%d",&vet[i]);



  x=maior(vet[i],vet[i+1]);
  
  }
  
  printf(" o maior valor e %d\n",x);
  
  
  fflush(stdin);
  getchar();
  }

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

da-te lixo por causa desta linha:

x = maior(vet[i], vet[i+1]);

Para além de ser incrivelmente perigoso. Como estás a declarar o i a seguir. Deve estar a usálo no fim em vez de estar a dar SIGSEGV

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim e não é a melhor forma de resolver isso. Tenta ler tudo de uma vez, ou seja, preencher o array de inteiros de uma vez e depois com outro ciclo verificar qual é o número maior. Não deve ser assim tão difícil, é só percorrer o array e comparar cada posição.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

assim da




#include<stdio.h>
main()
{
int vector[5],i,maior;

for(i=0;i<5;i++)
  {
  printf(" %d algarismo\n",i+1);
  scanf("%d",&vector[i]);
  
  if(vector[i]<vector[i+1])
     {
     maior=vector[i];
     }
     
  }
  
  printf(" o maior e %d\n",maior);
  fflush(stdin);
  getchar();
  }



mas eu quero usar a funcao maior, como posso a utilizar??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Assim à primeira vista, só por sorte é que isso funciona.

Estás a comparar vector[ i ] com vector[i+1] antes de teres introduzido o valor de vector[i+1]. Além disso, para i=4, i+1=5 e a posição 5 está fora do array.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim, nao tinah reparado nisso!

mas a minha duvida presiste, como faço para utilizar a funcao maior?????????????'

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

sim, nao tinah reparado nisso!

mas a minha duvida presiste, como faço para utilizar a funcao maior?????????????'

Tens que alterar a abordagem ao problema... A função maior dá problemas pela mesma razão... Por exemplo, fazendo x=maior(x,vector[ i ]).

PS: Estás a cometer outro erro nessa abordagem, pois o resultados final vai sempre ser o maior dos elementos das duas últimas posições e não de todo o array.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Viva!

Acho que devias começar por estruturar bem o que o teu código deve fazer: receber um número do utilizador, dividi-lo em algarismos e colocar no array e depois verificar um a um qual é o maior algarismo desse array.

Coloco aqui um código muito simples que espero que te ajude.

#include<stdio.h>
#include<string.h>

#define MAXSIZE 5

int maior(int n1, int n2){
if(n1>n2)
    return n1;
else return n2;
}

int main(void){

int vector[MAXSIZE], numero = 0, quociente = 0, i, maiorDig = 0;

/*opcional: cada inteiro do vector a 0*/
memset(vector, 0, MAXSIZE * sizeof(int));

/*receber o numero do utilizador (maximo de 5 algarismos)*/
printf("Insira um numero por favor: ");
fflush(stdout);
scanf("%d", &numero);

/*dividir o numero introduzido nos seus algarismos*/
/*e coloca-los no array vector*/
for(i=0; i<MAXSIZE; i++){
	quociente = numero /10;
	vector[i] = numero % 10;
	numero = quociente;
}

/*verificar qual e' o maior algarismo*/
for(i=0; i<MAXSIZE; i++){
	maiorDig = maior(vector[i], maiorDig);
}
printf("o maior e' %d\n", maiorDig);
fflush(stdout);
getchar();

return 0;
}

E nunca deves fazer fflush(stdin) uma vez que para streams de entrada o fflush não tem um comportamento definido.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A minha dúvida é: para quê guardar os digitos num array?

Se só queres saber qual é o maior digito, podes verificar isso, enquanto vais extraindo os digitos...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Extrai é uma string de caracteres.....

O que interessa é o tamanho relativo dos valores, e '0'< '1' < ... < '8' < '9'............

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Realmente a opção apresentada não faz muito sentido, visto não ser nem simples de perceber nem "curta".

Deixo aqui uma alternativa usando um dos métodos mais usados: extrair o algarismo das unidades, e dividir o número por 10. (de modo a que o algarismo das unidades do novo número seja o seguinte)

#include <stdio.h>

int main() {
  int k,maior=0;
  scanf("%d",&k);
  while (k>0) {
    if ((k%10)>maior) maior=k%10;
    k/=10;
  }
  printf("%d\n",maior);
  return 0;
}

O método mais simples para perceberes seria, sem dúvida, lendo uma string e percorrendo-a.

Consegues resolvê-lo, sem grandes dificuldades, em 4 ou 5 linhas, sem qualquer tipo de optimização ou truques manhosos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

eu faria isto...

#include <stdio.h>

int main()
{
    char c, max = '\0';

    printf("input number: ");
    while((c = getchar()) != '\n')
    {
        if(c > max && c >= '0' && c <= '9')
        {
            max = c;
        }
    }

    if(max)
    {
        printf("max: %c\n", max);
    }
    else
    {
        printf("No numbers entered\n");
    }
    return 0;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estão a fazer-lhe o trabalho... =P

Sou da mesma opinião. assim ela não vai aprender nada com isto. Acho que é melhor tentar dar-lhe dicas, sem lhe dar o código feito...

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