Jump to content
calvin

Contador de Zeros e Uns [ajuda]

Recommended Posts

calvin

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?

Edited by Rui Carlos
GeSHi

Share this post


Link to post
Share on other sites
pwseo

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.

Share this post


Link to post
Share on other sites
thoga31

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!

Share this post


Link to post
Share on other sites
HappyHippyHippo

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 by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
calvin

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

Share this post


Link to post
Share on other sites
pwseo

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.

Share this post


Link to post
Share on other sites
calvin

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

Share this post


Link to post
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

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