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

#281
Hola a todos y que tengan un muy buen día.

int (*a)[35]; //declara un apuntador a un arreglo de 35 enteros.

int *a[35]; //declara un arreglo de 35 apuntadores a enteros.


Estudiando apuntadores en c me encontré con estas 2 declaraciones pero no las entiendo, alguien seria tan amable de poner algunas líneas de código para comenzar a entender algo del tema?.-
Es todo, intenté hacer un poco de práctica pero no logro hacer que el programa corra y no tengo nada para mostrar.-

Saludos.
Daniel
#282
Hola ivancea96 .-
Muchas gracias por ocuparte, hice la prueba de esta manera entero=(int)opUno; y me da el mismo resultado, si no tienen una sugerencia más sencilla tendré que hacer que se muestre primero la elección de las operaciones y luego utilizar float o int según sea la misma.- 

Saludos.
Daniel
#283
Hola a todos.
Como lo dice el enunciado, no logro ingresar más de 8 dígitos para pasar de binario a decimal, si ingreso 8 o menos dígitos el resultado es correcto, pero si por Ej. ingreso 110011001 me aparece un número mayor a 1 en el noveno dígito y de la manera que está validado regresa a la función principal,-
Cómo he buscado y buscado en la web y no ayo la manera de solucionarlo recurro una vez más a Uds.
El error está en la función decimal que se encuentra en la línea 99, dejo todo el programa por si a alguien se le ocurre alguna sugerencia para mejorarlo, me parece que error de lógica no tiene, me parece. -

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

void sumar(float, float);
void restar(float, float);
void dividir(float, float);
void multiplicar(float, float);
void porcentaje(float, float);
void binario(float, float);
void decimal(float, float);
void hexadecimal(float, float);

int main(void){
void ( * calc[] ) (float, float) = { sumar, restar, dividir, multiplicar, porcentaje, binario, decimal, hexadecimal };
float opUno, opDos;
int  operador, ch, ok, opc;

while( opc != 1 ){
system( "clear" );
opUno = 0.00;
do{
printf( "\n Introduzca un numero..........:" );
ok = scanf("%f",&opUno) == 1 && opUno > 0.00 && opUno <= FLT_MAX; 
while ((ch = getchar()) != EOF && ch != '\n');
}while(!ok);

do{
printf( "\n 1 - Sumar\n 2 - Restar\n 3 - Dividir\n 4 - Multiplicar\n 5 - Porcentaje" );
printf( "\n 6 - Binario\n 7 - Decimal\n 8 - Hexadecimal\n\n Introduzca opcion..............:" );
ok = scanf("%d",&operador) == 1 && operador >= 1 && operador <= 7; 
while ((ch = getchar()) != EOF && ch != '\n');
}while(!ok);

if( operador >= 6 ){
(* calc[ operador-1 ]) (opUno, opDos);
}
else{
if( operador == 5){
printf( "\n Introduzca el porcentual.......:" );
}
else{
printf( "\n Introduzca segundo operando....:" );
}
do{
ok = scanf("%f",&opDos) == 1 && opDos > 0.00 && opDos <= FLT_MAX; 
while ((ch = getchar()) != EOF && ch != '\n');
}while(!ok);

(* calc[ operador-1 ]) (opUno, opDos);
}

do{
printf( "\n\n 1 - para finalizar \n 2 - Otra operacion\n\n Introduzca opcion....:" );
ok = scanf("%d",&opc) == 1 && opc >= 1 && opc <= 2; 
while ((ch = getchar()) != EOF && ch != '\n');
}while(!ok);
}

return 0;
}

void sumar( float opUno, float opDos ){
printf( "\n resultado ==> %5.3f\n", opUno + opDos );
}

void restar( float opUno, float opDos ){
printf( "\n resultado ==> %5.3f\n", opUno - opDos );
}

void dividir( float opUno, float opDos ){
printf( "\n resultado ==> %5.3f\n", opUno / opDos );
}

void multiplicar( float opUno, float opDos ){
printf( "\n resultado ==> %5.3f\n", opUno * opDos );
}

void porcentaje(float opUno, float opDos){
float porc, restado, sumado;
porc = (opUno * opDos)/100;
restado = opUno - porc;
sumado  = opUno + porc;

printf( "\n Porcentual = %5.3f  Restado = %5.3f  Sumado = %5.3f", porc, restado, sumado );
}

void binario( float opUno, float opDos ){
int entero, i, bits=sizeof(int)*8;
entero=(int)opUno;

printf("\n El numero %d en binario es: ", entero);
for(i=0;i<bits;++i)
if (((entero>>(bits-i-1))&1)==1) printf("1"); else printf("0");
}

void decimal( float opUno, float opDos ){
char cadena[33];
int elementos, decimal = 0, operando = 1, i;

elementos = sprintf(cadena,"%1.0f",opUno);

for( i = 0; i < elementos; i++){
printf("\n %c", cadena[i]);
if( cadena[i] > '1' ){
printf( "\n El numero ingresado es incorrecto para esta operacion" );
printf( "\n Pulse [Enter] para continuar... " ); getchar();
return;
}
}

for( --elementos; elementos >= 0; elementos-- ){
if( cadena[elementos] == '1' ){
decimal += operando;
}
operando *= 2;
}

printf( "\n Decimal %d", decimal );
}

void hexadecimal( float opUno, float opDos ){
int entero;
entero=(int)opUno;
printf("\n El numero %d en hexadecimal es: %X\n", entero, entero);
}


Saludos y muchas gracias desde ya.-
Daniel
#284
Hola furciorifa.
Gracias por ocuparte, me gustaría que me digas que modificar para hacerlo más legible, pero si no me lo comentas de una es evidente que no te place hacerlo.-

Saludos.
Daniel
#285
Hola, gente, que tengan un muy buen día.-
Les dejo este código para que me digan de que otra manera se puede lograr lo mismo, los consulto porque siempre los expertos como Uds. tienen una manera distinta de lo que yo me pude imaginar, no realice muchas pruebas pero las que realice me dan el resultado correcto, la lógica me parece que es coherente.-
En cuanto al float es porque forma parte de una calculadora que además de sumar, restar, etc., transforma un decimal en binario, en hexadecimal y viceversa.-

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

int main(void){
char cadena[33];
float binario = 1100110;
int elementos, decimal = 0, operando = 1;

sprintf(cadena,"%1.0f",binario);
elementos = strlen(cadena) ;

for(--elementos; elementos >= 0; elementos-- ){
if( cadena[elementos] == '1' ){
decimal += operando;
}
operando *= 2;
}

printf( "En binario %s  ==> en decimal %d", cadena, decimal );

return 0;
}

Bueno es todo.-
Saludos.
Daniel
#286
Hola gente, que tengan un muy buen día.
Paso a explicarles lo que me pasa, soy nuevo en Linux y si no encuentro la solución en un tiempo prudencial tengo miedo de acobardarme (espero que eso no ocurra) el caso es que instalé Ubuntu 15.04, si lo uso desde el DVD todo funciona normalmente, pero si lo utilizo desde el rígido pasan pocos minutos y queda todo congelado, principalmente si abro el navegador,
tengo 2 GB de RAM y comparto Ubuntu con W7.-       

Espero que puedan darme alguna idea del porque me pasa esto.-
Un fuerte abrazo para todos.-
Daniel.
#287
Hola Blaster.
Le encontré 2 cosas que se deben cambiar.
Si el operando más a la izquierda tiene menos cifras que el de la derecha, el resultado es erróneo.
456 x 1234
La otra, si el operando más a la derecha tiene más de una cifra, el resultado también falla.-   
456 x 12
T. Collins gracias por colaborar, el inglés no es mi fuerte.-
Bueno seguiré picando código para ver si lo logro.-

Saludos.
Daniel   
#288
Hola Blaster.
Genial amigo gracias funciona perfecto, pero ahora necesito algo más, hay alguna fórmula matemática para establecer las cifras totales que tendrá el resultado de una multiplicación.-
Por ejemplo el programa siguiente tuve que hacer la cuenta en un papel para establecer los elementos de mult[11] y otra cosita, que asegura que el último elemento de multi tendrá el '\0' no encuentro esa parte.-

#include<stdio.h>

int main(void){
char a[] = "4294967295", b[] = "2", mult[11];
int i, j, result = 0, resto = 0, operUno = 0, operDos = 0;

for(i = j = 10; i >= 0; i--, j--){
operUno = a[i] - '0', operDos = b[0] - '0';
result = operUno * operDos + resto;
if (result >= 10){
resto = result / 10;
result -= resto * 10;
}
else
resto = 0;
mult[j] = result;
    }
if(resto){
for( i = 10; i > 0; i--)
mult[i] = mult[i - 1];
mult[0] = resto;
}
for(i = 0,j = 10; i < 10 ; i++, j--)
if(j % 3 == 0)
printf(".%d", mult[i]);
else
printf("%d", mult[i]);

return 0;
}


Lo último que hice es para que quedara más paquete, lo que pasa es que  con 9 cifras el resultado me lo muestra así .000.000.000, luego lo arreglo.-       

Saludos.
Daniel   
#289
Hola a todos.
Gracias a ivancea96 pude arrancar con la idea, es obvio que me faltan un montón de detalles, pero lo que me trae en este momento y sin ello no puedo seguir es que sintaxis debo utilizar para copiar resultadoInt en resultadoChar[j] y si me pudieran decir si estoy bien rumbeado.-

#include<stdio.h>

int main(void){
char a[] = "214", b[] = "3", resultadoChar[3];
int i, j, resultadoInt=0, resto=0, operUno=0, operDos=0;
for(i=2; i>=0; i--, j++){
operUno = a[i] - '0';
operDos = b[0] - '0';
resultadoInt = (operUno * operDos) + resto;
resto = 0;
if(resultadoInt > 9){
resultadoInt -= 10;
resto++;
}
//copiar resultadoInt en resultadoChar[j];
}

for(i=0; i<3; i++){
printf("%c", resultadoChar[i]);
}

return 0;
}


Saludos.
Daniel  
#290
Hola ivancea96.
Por lo que tengo visto no te debe gustar postear códigos por lo menos en los que yo te he leído parece una constante, podrías ponerme algún ejemplo con código (una acepción) o un poco más de teoría.-
Desde ya muchas gracias.-


Saludos.
Daniel