Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - marsicobetre

#1
Programación C/C++ / Re: numero odioso NUEVO!
23 Octubre 2015, 05:08 AM
hola! gracias por los consejos

había entendido mal el enunciado, pero ya logre hacer lo que me pedían

gracias, feliz día :)
#2
Programación C/C++ / numero odioso NUEVO!
22 Octubre 2015, 20:49 PM
hola,

tengo una tranca realizando un programa en devc++ y quisiera saber si me pueden ayudar. Tengo el programa casi finalizado pero me falta una cosa, y no lo logro dar

Este es el enunciado
Un número odioso es un número que, cuando se convierte a base 2, tiene un número impar de unos. Por ejemplo, son números odiosos: el 1, el 2 (10), el 4 (100), el 7 (111), el 8 (1000), el 11 (1011). Realice un programa que dado un valor entero K, devuelva la cantidad de números odiosos que hay entre 1 y K

ESTO ES LO QUE HE HECHO.. PERO ME TRANQUE..

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int k;

void pedirInfo()
{
   do{
      printf("\n\n-Ingrese un numero entero positivo cualquiera: "); scanf("%d",&k);
      if(k<=0)//validacion del dato de entrada
      {
         printf("\a\n\t\t\tERROR: Ingrese un <numero entero positivo>\n");
      }
   }while(k<=0);
}

int main()
{
   printf("\t\t\tNUMERO ODIOSO\n");
   char resp;
   
   do{
      int x;
      pedirInfo();
   
      char cadena[1000];//primero calculo la cadena
      itoa(k,cadena,2); //genero la cadena
      printf("\nNumero <%d> convertido a base 2: %s\n" ,k,cadena); //muestro la cadena para comprobar que el calculo ha sido correcto
      
      //...
      
      int i, cantidad_de_1=0, cantidad_de_odiosos=0;
      for(i=1; i<=1000; i++)//calculo la cantidad de '1' que tiene la cadena, revisando posicion por posicion
      {
         if(cadena=='1') //revisa si la cadena en la posicion "i" tiene un '1'
         {
            cantidad_de_1++;
            /*
            si la cadena tiene un "1" lo cuenta
      
            los numeros odiosos son los que tiene una cantidad impar de numeros '1' dentro de la
            cadena
            */
         }
      }
      
      if(cantidad_de_1%2!=0)              
      {
         //calcula si la cantidad de '1' dentro del vector es impar, si es asi, es un numero odioso
         cantidad_de_odiosos++; // si la condicion del if es verdadera, cuento la cantidad de numeros odioso
         printf("\nCantidad de numeros odiosos: %d\n\n",cantidad_de_odiosos);
      }
      else
      {
         printf("\nEl numero %d no es un numero odioso\n\n",k);
      }
      
      //...
      
      do{
         printf("\n-Ingrese (s) si desea calcular otra cantidad de numeros odiosos, o (n) si desea finalizar el programa: "); scanf(" %c",&resp);
         if((resp!='s' && resp!='S') && (resp!='n' && resp!='N'))//validacion de los datos de entrada
         {
            printf("\a\n\t\t\tERROR: Ingrese (s)  o  (n)\n");
         }
      }while((resp!='s' && resp!='S') && (resp!='n' && resp!='N'));
      
   }while(resp=='s' || resp=='S');
   system("pause");
   return 0;
}