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

#361
Hola.
Bueno al fin puedo demostrar con este programa lo quería lograr.-

#include <stdio.h>
#include <limits.h>
#include <stdlib.h>
#include <string.h>

void charAint(const char[], int* ,int);
void intAbinario(int, int*);


int main(){
char numeroChar[11] = "";
unsigned int ok=0, i=0, longitud=0, numero, *ptrNumero = &numero;


do{
system("CLS");
ok=0;
printf("\n Introduce el numero que deseas convertir a binario\n maximo [%d]...:", INT_MAX);
fflush(stdout);
fgets(numeroChar, 12, stdin);
longitud = strlen(numeroChar);
numeroChar[longitud-1] = '\0';
if(numeroChar[0] == '\0' || numeroChar[0] == '0'){
ok=1;
printf("\n El numero ingresado debe ser mayor a cero\n\n Pulse una tecla para intentarlo nuevamente..."); getchar();
}
else{
for(i=0;numeroChar[i] != '\0'; i++){
if(numeroChar[i] <=47 || numeroChar[i] >=58){
ok=1;
printf("\n Debe ingresar solo numeros\n\n Pulse una tecla para intentarlo nuevamente..."); getchar();
break;
}
}
if(ok==0){
i=0;
if(longitud-1 == 10 && numeroChar[0] >= 2){
i=1;
}
else{
charAint(numeroChar, ptrNumero, longitud);
if(*ptrNumero > INT_MAX){
i=1;
}
}
if(i == 1){
ok=1;
*ptrNumero = 0;
printf("\n El numero ingresado supero el maximo permitido\n\n Pulse una tecla para intentarlo nuevamente..."); getchar();
}
}
}
}while(ok == 1);

intAbinario(numero, ptrNumero);

return 0;
}

void charAint(const char numeroChar[], int *ptrNumero, int longitud){
unsigned auxiliar=0, i=0;

while(i < longitud-1){
auxiliar = numeroChar[i]-48;
*ptrNumero=10* *ptrNumero+auxiliar;
i++;
}
}

void intAbinario(int numero, int *ptrNumero){
char binario[33] = "";
unsigned int i=0, j=0, k=0, temp=0;
do{
binario[i] = '0' + numero%2;
numero = numero/2;
i++;
}while (numero != 0);

binario[i] = '\0';

for (j = 0, k = strlen(binario)-1; j < k; j++, k--){
temp = binario[j];
binario[j] = binario[k];
binario[k] = temp;
}
printf("\n\n En decimal %u --> en binario = %s\n\n", *ptrNumero, binario);
}


No acepta los siguientes ingresos:
- 0  o vacio
- s25 o 25s
- número mayor a INT_MAX

En cuanto a la función charAint se que existe atoi pero en este caso es para practicar con punteros y funciones.-
Espero sugerencias para optimizarlo, muchas gracias a todos los que participaron para ayudarme a lograrlo.-

Saludos
#362
Hola.-
Simplemente es una práctica y una consulta para saber si mi idea tenía algún error y de hecho lo tiene, si se ingresa 10 cifras verificar que la primera sea =< a 2 porque si se ingresa 4294967296 tampoco cabe en un int sin signo.-
Cuando termine el código lo posteo para que algún recién iniciado como yo lo analice.-

Saludos
#363
Hola.-
A ver qué les parece.-

- Si el numero tiene más de 10 cifras, entonces no cabe.
- Si el numero tiene menos de 10 cifras, entonces cabe.
- Si el número tiene 10 cifras y es mayor a 2.147.483.648  no cabe. 

Las 2 primeras son simples de verificar como si se ingresa 0, Enter sin haber ingresado nada o si se ingresó algo distinto a un número.-
La última lo haría de esta manera, sólo que tengo que elevar el resultado a la potencia correspondiente y desconozco como se hace, luego verifico si num es igual o menor a INT_MAX y estaría concluido (me parece).- 


#include <stdio.h>

int main(void){

char a[] = {2,1,4,7,4,8,3,6,4,9};
int i = 0;
unsigned int num=0;

while(i<=9){
num = num + a[i];
i++;
}

return 0;
}


Saludos
#364
Hola.
Por el momento estoy aprendiendo C y ya la respuesta de rir3760 me resulta un tanto difícil de interpretar pero lo voy a intentar.-

Saludos.
#365
Hola.-
CitarSi el número tiene 10 cifras y la primera cifra es 3 o más, entonces cabe.
Me parece que deberia ser hací.-
CitarSi el número tiene 10 cifras y la primera cifra es 3 o más, entonces NO cabe.
Bien la idea la capte, sólo que tengo 2 problemas.-
Qué pasa si el número ingresado es 2.247.483.648 tampoco cabe.-
La otra es que tengo que apretar Enter después de limpiar el buffer de teclado.-
Te aclaro que le hice otras validaciones.-

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

int main(){
char numero[11] = "", ch=0;
int ok=0, i=0;

do{
system("CLS");
ok=0;
printf("\n Introduce el numero que deseas convertir a binario\n maximo [%d]...:", INT_MAX);
fgets(numero, 10, stdin);
numero[strlen(numero)-1]='\0';
//while((ch = getchar()) != EOF && ch != '\n');

if(numero[0] == '0' || strlen(numero) == 0){
ok=1;
printf("\n Error, Pulse una tecla para intentarlo nuevamente..."); getchar();
}
else{
for(i=0;numero[i] != '\0'; i++){
if(numero[i] <=47 || numero[i] >=58){
ok=1;
printf("\n Solo debe ingresar numeros, Pulse una tecla para intentarlo nuevamente..."); getchar();
}
}
}
}while(ok == 1);


printf("\n %s", numero);
return 0;
}

Saludos
#366
Hola.-
Les dejo un pequeño programa que luego voy a seguir completando, lo que quiero saber es si se puede antes de convertir la cadena a entero verificar si el número ingresado sobrepasa el máximo permitido por el tipo int.-

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

int main(){
char numero[10] = "";
int ok=0, i=0;

do{
system("CLS");
ok=0;
printf("\n Introduce el numero que deseas convertir a binario\n maximo [%d]...:", INT_MAX);
fgets(numero, 10, stdin);
numero[strlen(numero)-1]='\0';

for(i=0;numero[i] != '\0'; i++){
if(numero[i] <=47 || numero[i] >=58){
ok=1;
printf("\n Solo debe ingresar numeros, Pulse una tecla para intentarlo nuevamente..."); getchar();
}
}
}while(ok == 1);

printf("\n %s", numero);
return 0;
}


Bueno es todo.-
Saludos.