Ir ao conteúdo
  • Cadastre-se

Jarlisson

Membro Pleno
  • Posts

    103
  • Cadastrado em

  • Última visita

Reputação

28
  1. O que o debugger disse? Tem que ficar atento. Geralmente ele aponta bem os erros, até a linha. No code blocks apareceu iss: 24 error: expected expression before ‘;’ token Ou seja, a linha 24: y=++ tira esse '='. É só y++ mesmo. E você não está armazenando nas posições certas do vetor 'num': scanf("%d",&num) Outro detalhe é que voce alocou só um espaço de 10 inteiros pros pares e 10 pros ímpares. E se eu digitar 11 pares? ou 20 ímpares? Tem que ser 20 pra cada E poderia economizar um laço for também, colocando o scanf dentro do laço que vai preencher os vetores pares e ímpares: for (i=0; i<20; i++) { scanf("%d",&num[i]); if(num[i]%2 == 0)//verificação se o número é par { par[x]=num[i];//Armazenamento dos numeros pares no vetor par x++; //incremento do índice do vetor par } else //se o numeto inteiro não é par, é ímpar! { impar[y]=num[i];//Armazenamento dos numeros ímpares no vetor ímpar y++; //incremento do índice do vetor ímpar } } Não sei se faz por costume, mas como pode ver, pra comentar uma linha no código, só precisa começar com '//', não precisa terminar com '//' também.
  2. O problema maior é que, primeiro a condição do while é testada, só depois ocorre o que está entre {}, ou seja, só depois de testada é que os dados são pedidos. Você poderia pedir esses dados uma vez, antes de testar (o teste continuará no while, só o pedido, por scanf, que será antes). Por exemplo, você pede os dados e checa eles com um 'if'. Caso um dele seja 0, o while nem executa. Outro meio seria repetir o que acontece dentro do while, mas antes do while. Só pra pedir os dados e garantir que não chegue lixo no teste do while: printf ("\nInforme o primeiro numero: "); scanf ("%f", &n1); printf ("\nInforme o segundo numero: "); scanf ("%f", &n2); media=(n1+n2)/2; printf ("\nA media destes numeros é %2.1f \n", media); while( (n1!=0 && n2 !=0) && (n1 %2 ==0 && n2 %2== 0) ) { printf ("\nInforme o primeiro numero: "); scanf ("%f", &n1); printf ("\nInforme o segundo numero: "); scanf ("%f", &n2); media=(n1+n2)/2; printf ("\nA media destes numeros é %2.1f \n", media); } Os scanf do while continuam a existir lá...isso de pedir antes, colocar valores inicias nas variáveis, repetir o código etc, são só meios que encontrei pra não ir lixo pro teste(sabia que, por azar, o lixo poderia ser 0 e 0 ?). Eu usaria o 'do...while', ele executa o código uma vez e só depois que realiza o primeiro teste no while. Ficaria perfeito no seu exemplo, mas não fiz porque acho que está estudando while e tentei criar soluções só com ele mesmo, mas ficaria assim: do { printf ("\nInforme o primeiro numero: "); scanf ("%f", &n1); printf ("\nInforme o segundo numero: "); scanf ("%f", &n2); media=(n1+n2)/2; printf ("\nA media destes numeros é %2.1f \n", media); }while( (n1!=0 && n2 !=0) && (n1 %2 ==0 && n2 %2== 0) );
  3. (n1!=0 && n1%2=0) && (n2!=0 && n2%2=0) Note que essa expressão é um 'teste', pra sabr se o while vai executar. Mas você está testando os valores de n1 e n2. Mas que valores são estes? O usuário nem entrou com os dados ainda e você já fez esse teste! Quando você inicia uma variável e não atribui valor a elas, ela inicia com um valor aleatório, um 'lixo'. Primeiro faça os scanf, só depois teste no while. O jeito que você fez poderia ser feito se usasse o do ...while. Mas como falou em while, vamos fazer só com while. 1. Testando se os dois são diferentes de 0: (n1!=0 && n2 !=0) 2. Testando se os dois são pares: (n1 %2 ==0 && n2%== 0) Tem que acontecer a condição 1 E a condição 2: while( (n1!=0 && n2 !=0) && (n1 %2 ==0 && n2 %2== 0) )
  4. Nao testei mas, vi que voce nao inicializou suas variaveis...elas podem aparecer com qualquer valor (lixo). Tambem fez algumas coisas estranhas como 'num;' e 'num=!1' e caso queira usar o teste de diferença, use !=

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...