brunex_1026 Posted February 21, 2012 at 11:09 AM Report Share #440535 Posted February 21, 2012 at 11:09 AM 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 More sharing options...
Cr4zYPT Posted February 21, 2012 at 11:52 AM Report Share #440538 Posted February 21, 2012 at 11:52 AM 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 More sharing options...
brunex_1026 Posted February 21, 2012 at 12:33 PM Author Report Share #440543 Posted February 21, 2012 at 12:33 PM 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 😛 Link to comment Share on other sites More sharing options...
EmySoares Posted February 22, 2012 at 04:42 PM Report Share #440743 Posted February 22, 2012 at 04:42 PM 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 More sharing options...
pmg Posted February 22, 2012 at 04:50 PM Report Share #440745 Posted February 22, 2012 at 04:50 PM //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 More sharing options...
pikax Posted February 22, 2012 at 05:00 PM Report Share #440750 Posted February 22, 2012 at 05:00 PM 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 More sharing options...
pmg Posted February 22, 2012 at 05:04 PM Report Share #440751 Posted February 22, 2012 at 05:04 PM 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 More sharing options...
pikax Posted February 22, 2012 at 05:15 PM Report Share #440753 Posted February 22, 2012 at 05:15 PM 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 More sharing options...
EmySoares Posted February 22, 2012 at 08:29 PM Report Share #440777 Posted February 22, 2012 at 08:29 PM 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 More sharing options...
Joao brandao Posted February 22, 2012 at 11:26 PM Report Share #440792 Posted February 22, 2012 at 11:26 PM 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"); Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now