|
281
|
Programación / Programación C/C++ / Lenguaje C:apuntador a arreglo de enteros y arreglo de apuntadores a enteros.
|
en: 26 Noviembre 2015, 21:25 pm
|
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
|
|
|
283
|
Programación / Programación C/C++ / De binario a decimal -> sprintf no da el resultado esperado (lenguaje c)
|
en: 11 Noviembre 2015, 03:15 am
|
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 ){ 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++){ if( cadena[i] > '1' ){ printf( "\n El numero ingresado es incorrecto para esta operacion" ); 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
|
|
|
285
|
Programación / Programación C/C++ / De binario a decimal en lenguaje C.
|
en: 7 Noviembre 2015, 18:14 pm
|
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; 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
|
Sistemas Operativos / GNU/Linux / Ubuntu 15.04 funciona desde el DVD pero no desde el rígido.
|
en: 25 Agosto 2015, 18:44 pm
|
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
|
Programación / Programación C/C++ / Re: Multiplicar 2 cedenas y poner el resultado en otra cadena (lenguaje C)
|
en: 1 Octubre 2014, 04:18 am
|
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
|
Programación / Programación C/C++ / Re: Multiplicar 2 cedenas y poner el resultado en otra cadena (lenguaje C)
|
en: 1 Octubre 2014, 00:33 am
|
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) else 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
|
Programación / Programación C/C++ / Re: Multiplicar 2 cedenas y poner el resultado en otra cadena (lenguaje C)
|
en: 30 Septiembre 2014, 04:22 am
|
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
|
|
|
|
|
|
|