Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

brunex_1026

Dúvida exercício

Mensagens Recomendadas

brunex_1026

Boas, tenho estado a tentar resolver uns exercícios e deparei-me com um que não consigo terminar. O enunciado é o seguinte: "Escreva um programa que lê números até ser introduzido o zero. Apresenta a quantidade de números positivos e os respectivos números, a quantidade de números negativos e os respectivos números. (Ajuda: defina uma quantidade máxima de números lidos)."

As partes que me faltam são: pedir os números até à quantidade máxima e no fim imprimir os números introduzidos, tanto negativos como positivos.

Este é o código que tenho até agora:

#include <stdio.h>

int main(void)
{
    int num, positivos = 0, negativos = 0;

    num=-1;

    while (num!=0)
    {
        printf("Indique um numero: ");
        scanf("%i", &num);
        if (num > 0)
        {
            positivos++;
        }
        else
        {
            if(num<0)
            {
                negativos++;
            }
            else
            {
                printf("Foi introduzido %i.\n\n", num);
            }
        }
    }

    printf("TOTAIS ------------\n");
    printf("Negativos: %i\n", negativos);
    printf("Positivos: %i\n", positivos);
    printf("FIM!!!\n\n");

    return 0;
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Cr4zYPT

Para apresentar os nº positivos e negativos sugiro usar vetores.

Vou comentar as partes que alterei no teu codigo.

#include <stdio.h>
//definir nº maixmo de numero
#define MAX 100
int main(void)
{
    int num, positivos = 0, negativos = 0;
    //criar aqui 2 vetores e crias 1counter.
    int pos[MAX],neg[MAX], ct=0;

    num=-1;
   //alteras condiçao de paragem devera ser diferente de 0 e menor que MAX

    while (num!=0 && ct<MAX)
    {
        printf("Indique um numero: ");
        //alterei aqui o %i para %d o %i estava mal
        scanf("%d", &num);
        if (num > 0)
        {      
            //guarda para vetor o nº
            pos[positivos]=num;
           positivos++;
        }
        else
        {   
                //guarda para vetor o nº
                neg[negativos]=num;
                negativos++;
          }
       ct++;
    }
    //Agora imprimes vetor e alterie tambem o %i para %d
    printf("TOTAIS ------------\n");
    printf("Negativos: %d\n", negativos);
    for(ct=0;ct<negativos;ct++)
       printf("%d ",neg[ct]);
    printf("\nPositivos: %d\n", positivos);
    for(ct=0;ct<positivos;ct++)
       printf("%d ",pos[ct]);
    printf("\nFIM!!!\n\n");

    return 0;
}

Atenção que escrevi aqui o codigo nao testei

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
brunex_1026

tá a funcionar, só faltava um else para o caso de ser 0 não contar como positivo ou negativo e simplesmente terminar o programa, obrigado :P

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
EmySoares

Olá!

Aproveito o seu código para simplificar o programa e alterei alguns código, espero bem que funcionar na mesma! :cheesygrin:

É melhor exprimenta!


#include<stdio.h>
#include<stdlib.h>// bibilioteca para definir o system("pause");
#define MAX 5 // defini com MAX 5 é só para simplificar..mas pode substituir com 100
int main()
{

int num, positivos, negativos;
int pos[MAX],neg[MAX], ct=0;

positivos = 0;
negativos = 0;
do
{
  printf("Indique um numero: ");
        //alterei aqui o %i para %d o %i estava mal
      scanf("%d", &num);

  if (num > 0)
        {      
            //guarda para vetor o nº
            pos[positivos]=num;
           positivos++;
        }
        else
        {   
                //guarda para vetor o nº
                neg[negativos]=num;
                negativos++;
          }
  ct++;
  
}
while (num!=0 && ct<MAX);

printf("\nTotais negativos: %d\n",negativos);
printf("Positivos: %d\n", positivos);

   	for(ct=0;ct<negativos;ct++)
 {
       
   printf("\n o numero negativo introduzido e: %d\n",neg[ct]);
 }

   	for(ct=0;ct<positivos;ct++)
{	
       printf("\n o numero positivo introduzido e: %d\n",pos[ct]);
  
}

    //
printf("\nFIM!!!!!!\n\n");
    //return 0;

system("pause");// Quando termina a execução, o console mostra o resultado
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

        //alterei aqui o %i para %d o %i estava mal
      scanf("%d", &num);

Em C (estamos no quadro de C, mas a linguagem escolhida para o teu código é C++ (??????)) tanto o "%i" como o "%d" funcionam. A diferença para "números normais" (17, -387, 6931023, ...) não existe; só existe diferença para "números anormais" (números em bases diferentes de 10, tais como 0xf00d = 61453 ou 072 = 58).


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pikax

EmySoares não te quero desanimar, mas devias indentar melhor o código, em C a main tem que ter um return, o system("pause") não é aconcelhado a utilizar.

Em C (estamos no quadro de C, mas a linguagem escolhida para o teu código é C++ (??????))....

devo tar enferrujado em C, porque não estou a conseguir distinguir as 2 linguagem(sem ser o que meti em cima) :S


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

EmySoares não te quero desanimar, mas devias indentar melhor o código, em C a main tem que ter um return, o system("pause") não é aconcelhado a utilizar.

devo tar enferrujado em C, porque não estou a conseguir distinguir as 2 linguagem(sem ser o que meti em cima) :S

Se alguém me diz que "%i" é inválido em C++ (ou que em C++ há inicializações parciais) eu não tenho razões para duvidar ...

Em C é válido (e não há inicializações parciais).


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pikax

Se alguém me diz que "%i" é inválido em C++ (ou que em C++ há inicializações parciais) eu não tenho razões para duvidar ...

Eu raramente inicializo um array( :cheesygrin: ), crio o array estático(ou dinâmicamente) e vou preenchendo.

O %i e o %d são a mesma coisa, são para signed interger.


Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender.

A beleza de um código está em decompor problemas complexos em pequenos blocos simples.

"learn how to do it manually first, then use the wizzy tool to save time."

"Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
EmySoares

Muito Obrigada por sugestões de todos!

Mas neste caso, sem o system("pause")  o console não consegue mostrar o resultado que eu queria, ele fechou logo.

E ainda no caso de "return 0;" ..sei que no main declarei com "int main()" mas depois não dá para executar por isso deixei ficar com comentários..

Gosto muito de ter muitas ideas sobre o programação.

  :cheesygrin:

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Joao brandao

Mas neste caso, sem o system("pause")  o console não consegue mostrar o resultado que eu queria, ele fechou logo.

uma sugestão para quem nao sabe ou para quem não pensar nisto

Como estas a programar em C podes fazer

getchar();
getchar();

em vez de teres de colocar o

system("Pause");

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.