calvin Posted October 13, 2013 at 07:23 PM Report #528790 Posted October 13, 2013 at 07:23 PM Boa noite preciso de ajuda com este enunciado que me anda a dar a volta a cabeça. Contador de Uns e Zeros Fazerum algoritmo que leia um valor numérico apenas constituído por zeros e/ou uns. O programa deve determinar quantos zeros e quantos uns esse valor possui. Exemplo do algoritmo ao ser executado: Introduza um número (Unicamente 0’s e 1’s): 00101100 Resultado: Tem 3 zeros e 3 uns. O que consegui fazer ate agora foi contar todos os digitos como podem ver: #include<stdio.h> int main (void) { int contadigitos = 0, valor; scanf("%d", &valor); while(valor!=0) { contadigitos=contadigitos+1; valor=valor/10; } printf("Numero de digitos: %d\n", contadigitos); return 0; } Podem me dar uma ajudinha?
pwseo Posted October 13, 2013 at 08:18 PM Report #528795 Posted October 13, 2013 at 08:18 PM Não seria mais simples leres o número como uma string para um buffer temporário? Depois, com a ajuda de um ciclo for, iterar por todos os dígitos do número (caracteres da string) e ir aumentando os contadores de um e zero, quando aparecesse cada um.
thoga31 Posted October 13, 2013 at 08:21 PM Report #528796 Posted October 13, 2013 at 08:21 PM Lá por estar a dizer no enunciado "ler um número" não quer dizer que o tipo de dados de entrada seja numérico. Neste caso deverá ser uma string, como o @pwseo indicou. Torna-se deveras mais simples. Knowledge is free!
HappyHippyHippo Posted October 13, 2013 at 10:17 PM Report #528816 Posted October 13, 2013 at 10:17 PM (edited) Lá por estar a dizer no enunciado "ler um número" não quer dizer que o tipo de dados de entrada seja numérico. Neste caso deverá ser uma string, como o @pwseo indicou. Torna-se deveras mais simples. na realidade a complexidade e número de linhas na resolução de uma forma ou outra é exactamente a mesma. desculpa, é mais complicado a solução com string porque é necessário descartar os zeros iniciais. a única vantagem do uso do método da string é o limite de número de dígitos que se pode usar/ler. // com leitura de um número int i; scanf("%d", &i); while (i != 0) { // contar i /= 10; } // com leitura de string char string[MAX]; int i; scanf("%s", string); /* complexidade extra para ignorar os caracteres zeros iniciais */ i = 0; while (string[i] == '0') i++; while (string[i] != '\0') { // contar i++; } edit : correcção da estúpidez do copy-paste no segundo exemplo onde tinha "i /= 10" em vez do agora "i++" Edited October 13, 2013 at 10:29 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
calvin Posted October 13, 2013 at 10:22 PM Author Report #528819 Posted October 13, 2013 at 10:22 PM Agora baralharam me todo qual é a opção mais facil? Strings ou números? tipo a unica coisa era saber como conto os 1 e os zeros e descratar os zeros iniciais... pois a unica coisa que consegui fazer foi contar todos os numeros -.-
pwseo Posted October 13, 2013 at 10:24 PM Report #528820 Posted October 13, 2013 at 10:24 PM desculpa, é mais complicado a solução com string porque é necessário descartar os zeros iniciais. a única vantagem do uso do método da string é o limite de número de dígitos que se pode usar/ler. Tens razão, não tinha sequer reparado que os zeros iniciais eram descartados, e como o OP não se pronunciou sobre o tipo de números que serão introduzidos (números binários facilmente têm imensos dígitos), não vale a pena considerarmos limitações relativas ao número de dígitos a ler, pelo menos para já. calvin, À medida que divides um número por 10, ficas com o seu resto... e ali o resto será sempre 0 ou 1 (porque só tens 0s e 1s). Isso chega para conseguires contar.
calvin Posted October 14, 2013 at 12:52 AM Author Report #528836 Posted October 14, 2013 at 12:52 AM tipo atraves de outros codigos cheguei a isto mas se eu colocar por exemplo o numero 11111000001 da um bug... podem me corregir esse erro sff... o codigo é este: #include <stdio.h> #include <stdlib.h> int main() { int num,zeros=0, conta=0,uns=0; printf("Introduza um numero (Unicamente 0's e 1's):"); scanf(" %d", &num); while(num!=0) { num = num/10; conta++; if(num%10==0) { zeros++; } else { uns++; } } printf("Numero de zeros: %d\n", zeros); printf("Numero de uns: %d\n",uns); return 0; }
HappyHippyHippo Posted October 14, 2013 at 01:54 AM Report #528838 Posted October 14, 2013 at 01:54 AM pensa no que acontece quando inseres o valor de 1 IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
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