Jump to content

Dúvida exercício


brunex_1026
 Share

Recommended Posts

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;
}

Link to comment
Share on other sites

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

Link to comment
Share on other sites

Olá!

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

É 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
}
Link to comment
Share on other sites

        //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!

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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!

Link to comment
Share on other sites

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( 😁 ), 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."

Link to comment
Share on other sites

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.

  😁

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.