Jump to content

Contador de Zeros e Uns [ajuda]


Recommended Posts

Posted

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?

Posted

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.

Posted

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!

Posted (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 by HappyHippyHippo
IRC : sim, é algo que ainda existe >> #p@p
Posted

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

Posted

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.

Posted

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

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.