elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  Mostrar Temas
Páginas: 1 2 3 4 5 6 7 [8] 9 10
71  Programación / Programación C/C++ / Salir de un bucle while sin pulsar Ctrl + d [getchar -Lenguaje C] en: 29 Noviembre 2015, 15:31 pm
Hola a todos y que tengan un muy buen día,

Código
  1. #include <stdio.h>
  2.  
  3. int main(int argc, char **argv){
  4. int c;
  5.  
  6. printf("\n Para finalizar ==> Ctrl + d (linux) == Ctrl + c (Windows)");
  7. printf("\n\n Por favor introduzca una numero entero...: ");
  8.  
  9. while(EOF != (c = getchar())){
  10. if( c >= 48 && c <= 57 )
  11. putchar(c);
  12. }
  13.  
  14. printf("\n EOF == %d\n", EOF);
  15.  
  16. return 0;
  17. }

Creo que no es necesario que comente demasiado sobre lo que quiero lograr que es finalizar el bucle de una forma autómatica sin tener que apretar Ctrl + d, tengo muchas horas leyendo y practicando sobre el tema pero no logro solucionarlo,-

Saludos.
Daniel
72  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.

Código:
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
73  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. -

Código
  1. #include <stdio.h>
  2. #include <limits.h>  
  3. #include <float.h>
  4. #include <stdlib.h>
  5. #include <string.h>
  6.  
  7. void sumar(float, float);
  8. void restar(float, float);
  9. void dividir(float, float);
  10. void multiplicar(float, float);
  11. void porcentaje(float, float);
  12. void binario(float, float);
  13. void decimal(float, float);
  14. void hexadecimal(float, float);
  15.  
  16. int main(void){
  17. void ( * calc[] ) (float, float) = { sumar, restar, dividir, multiplicar, porcentaje, binario, decimal, hexadecimal };
  18. float opUno, opDos;
  19. int  operador, ch, ok, opc;
  20.  
  21. while( opc != 1 ){
  22. system( "clear" );
  23. opUno = 0.00;
  24. do{
  25. printf( "\n Introduzca un numero..........:" );
  26. ok = scanf("%f",&opUno) == 1 && opUno > 0.00 && opUno <= FLT_MAX;  
  27. while ((ch = getchar()) != EOF && ch != '\n');
  28. }while(!ok);
  29.  
  30. do{
  31. printf( "\n 1 - Sumar\n 2 - Restar\n 3 - Dividir\n 4 - Multiplicar\n 5 - Porcentaje" );
  32. printf( "\n 6 - Binario\n 7 - Decimal\n 8 - Hexadecimal\n\n Introduzca opcion..............:" );
  33. ok = scanf("%d",&operador) == 1 && operador >= 1 && operador <= 7;  
  34. while ((ch = getchar()) != EOF && ch != '\n');
  35. }while(!ok);
  36.  
  37. if( operador >= 6 ){
  38. (* calc[ operador-1 ]) (opUno, opDos);
  39. }
  40. else{
  41. if( operador == 5){
  42. printf( "\n Introduzca el porcentual.......:" );
  43. }
  44. else{
  45. printf( "\n Introduzca segundo operando....:" );
  46. }
  47. do{
  48. ok = scanf("%f",&opDos) == 1 && opDos > 0.00 && opDos <= FLT_MAX;  
  49. while ((ch = getchar()) != EOF && ch != '\n');
  50. }while(!ok);
  51.  
  52. (* calc[ operador-1 ]) (opUno, opDos);
  53. }
  54.  
  55. do{
  56. printf( "\n\n 1 - para finalizar \n 2 - Otra operacion\n\n Introduzca opcion....:" );
  57. ok = scanf("%d",&opc) == 1 && opc >= 1 && opc <= 2;  
  58. while ((ch = getchar()) != EOF && ch != '\n');
  59. }while(!ok);
  60. }
  61.  
  62. return 0;
  63. }
  64.  
  65. void sumar( float opUno, float opDos ){
  66. printf( "\n resultado ==> %5.3f\n", opUno + opDos );
  67. }
  68.  
  69. void restar( float opUno, float opDos ){
  70. printf( "\n resultado ==> %5.3f\n", opUno - opDos );
  71. }
  72.  
  73. void dividir( float opUno, float opDos ){
  74. printf( "\n resultado ==> %5.3f\n", opUno / opDos );
  75. }
  76.  
  77. void multiplicar( float opUno, float opDos ){
  78. printf( "\n resultado ==> %5.3f\n", opUno * opDos );
  79. }
  80.  
  81. void porcentaje(float opUno, float opDos){
  82. float porc, restado, sumado;
  83. porc = (opUno * opDos)/100;
  84. restado = opUno - porc;
  85. sumado  = opUno + porc;
  86.  
  87. printf( "\n Porcentual = %5.3f  Restado = %5.3f  Sumado = %5.3f", porc, restado, sumado );
  88. }
  89.  
  90. void binario( float opUno, float opDos ){
  91. int entero, i, bits=sizeof(int)*8;
  92. entero=(int)opUno;
  93.  
  94. printf("\n El numero %d en binario es: ", entero);
  95. for(i=0;i<bits;++i)
  96. if (((entero>>(bits-i-1))&1)==1) printf("1"); else printf("0");
  97. }
  98.  
  99. void decimal( float opUno, float opDos ){
  100. char cadena[33];
  101. int elementos, decimal = 0, operando = 1, i;
  102.  
  103. elementos = sprintf(cadena,"%1.0f",opUno);
  104.  
  105. for( i = 0; i < elementos; i++){
  106. printf("\n %c", cadena[i]);
  107. if( cadena[i] > '1' ){
  108. printf( "\n El numero ingresado es incorrecto para esta operacion" );
  109. printf( "\n Pulse [Enter] para continuar... " ); getchar();
  110. return;
  111. }
  112. }
  113.  
  114. for( --elementos; elementos >= 0; elementos-- ){
  115. if( cadena[elementos] == '1' ){
  116. decimal += operando;
  117. }
  118. operando *= 2;
  119. }
  120.  
  121. printf( "\n Decimal %d", decimal );
  122. }
  123.  
  124. void hexadecimal( float opUno, float opDos ){
  125. int entero;
  126. entero=(int)opUno;
  127. printf("\n El numero %d en hexadecimal es: %X\n", entero, entero);
  128. }

Saludos y muchas gracias desde ya.-
Daniel
74  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.-

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main(void){
  5. char cadena[33];
  6. float binario = 1100110;
  7. int elementos, decimal = 0, operando = 1;
  8.  
  9. sprintf(cadena,"%1.0f",binario);
  10. elementos = strlen(cadena) ;
  11.  
  12. for(--elementos; elementos >= 0; elementos-- ){
  13. if( cadena[elementos] == '1' ){
  14. decimal += operando;
  15. }
  16. operando *= 2;
  17. }
  18.  
  19. printf( "En binario %s  ==> en decimal %d", cadena, decimal );
  20.  
  21. return 0;
  22. }
Bueno es todo.-
Saludos.
Daniel
75  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.
76  Programación / Programación C/C++ / Multiplicar 2 cedenas y poner el resultado en otra cadena (lenguaje C) en: 29 Septiembre 2014, 00:09 am
Hola y que tengan un muy buen día.
Como verán me estoy poniendo un poco pesado pero prometo que después de esto y por un tiempo voy a exponer mis dudas en otro foro, prometido.-
Al grano, esta operación no es factible en c:
Código
  1. unsigned a = 2147483648, b = 2, c = a * b;
 
Tengo conocimiento de las variable con más capacidad pero no importa en este caso, lo que quiero hacer es multiplicaciones realmente grandes y para ello quiero hacerlo con 2 variables char, también sé que esto si se puede hacer:
Código
  1. char a[] = "2147483647", b[] = "2";
  2. unsigned int c = atoi(a) * atoi(b);
pero me limita al valor máximo que puede contener una variable unsigned int.-
Alguien sabe de alguna curiosidad matemática, algo a nivel de bist, algo que me dé el inicio para multiplicar 2 números alojados en variables char y poner el resultado  en otra del mismo tipo?, Cualquier ayuda será bien venida.-

Saludos.
Daniel   
77  Programación / Programación C/C++ / Números perfectos (lenguaje C) en: 25 Septiembre 2014, 20:05 pm
Hola a todos.

Código
  1. #include <stdio.h>
  2.  
  3. #define MAX 10000
  4. void numerosPerfectos();
  5.  
  6. int main(void){
  7.  
  8. numerosPerfectos();
  9.  
  10. return 0;
  11. }
  12.  
  13. void numerosPerfectos(){
  14. int acumulador=0, i, j=1;
  15.  
  16. printf("\n\n N%cmeros perfectos...: ", 163);
  17.  
  18. for(i=1; i<MAX; i++){
  19. acumulador = 0;
  20. for(j=1; j<i; j++){
  21. if(i % j == 0){
  22. acumulador += j;
  23. }
  24. }
  25. if(i == acumulador){
  26. printf(" %d ", i);
  27. }
  28. }
  29. }

El inconveniente es que si pongo #define MAX 10000 el resultado lo muestra en un periodo de tiempo aceptable, pero si deseo saber del 1 al 100000 muestra ==> 6- 28 – 496 – 8128 y de aquí en más tarda en términos de computación una eternidad (para terminar el programa).-
La consulta es, ¿sabe alguien otra manera de hacerlo?, mi computadora si bien es un poco vieja (2gb de ram) me parecería que tendría que mostrarlo al instante, pero no es así.-

Desde ya muchas gracias.-
   
Saludos.
Daniel   
78  Programación / Programación C/C++ / Generar 6 números y ordenarlos en el mismo bucle(lenguaje C) en: 18 Septiembre 2014, 00:40 am
Hola a todos.
El asunto es simple por lo menos para explicarlo, sólo que no se si se puede hacer, lo que quisiera saber es si en cada iteración además de generar los número ir ordenándolos, me parece que no quedaría del todo ordenado pero por lo menos ir intercambiando los posibles.-
El juego es de Argentina y se llama Quini6, los números a asertar son 6 y van del 0 al 45.-
En este caso no tiene mucho sentido porque el bucle se realiza sólo 6 veces, pero en el caso de generar por ejemplo 500.000 números tal vez acelere el tiempo que tardaría una manera y la otra.-
Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>
  4.  
  5. void generar();
  6.  
  7. int main(void){
  8. generar();
  9.  
  10. return 0;
  11. }
  12.  
  13. void generar(){
  14. int guardar[6], numero=0, i=0, hora = time(NULL);
  15. srand(hora);
  16.  
  17. for(; i<6; i++){
  18. numero = rand()%46;
  19. guardar[i] = numero;
  20. }
  21. }
   


Desde ya muchas gracias y muchos saludos.-
Daniel
79  Programación / Programación C/C++ / cifrar un entero de 4 cifras en lenguaje C. en: 9 Septiembre 2014, 21:40 pm
Hola a todos y que tengan un muy buen día.-

Citar
El programa debe leer un entero de cuatro dígitos y cifrar la información de la siguiente manera: reemplace cada dígito con residuo de la división entre 10 de la suma de dicho dígito mas 7. Posteriormente, intercambie el primer digito con el tercero, e intercambie el segundo dígito con el cuarto. Luego despliegue el entero cifrado.

Bueno con el enunciado tan bien explicado no me queda mucho para agregar, sólo decirles que estoy trabado con la última parte la de intercambio de dígitos, lo he intentado de varias manera pero no me funciono.-

Código
  1. #include <stdio.h>
  2.  
  3. int main(void){
  4. int numero=5724, digito=0, div=1000, auxiliar=0, cifrado=0;
  5. while(numero>0){
  6. digito = numero/div;
  7. numero = numero-(div*digito);
  8. auxiliar = (digito+7)%10*div;
  9. cifrado += auxiliar;
  10. div /= 10;
  11. }
  12.  
  13.  
  14. printf("\n El n%cmero cifrado es...: %d\n", 163, cifrado);
  15.  
  16. return 0;
  17. }

Una cosita más, no tengan reparos en postear código que sea totalmente distinto al mío, el código es de mi propia idea y seguramente Uds. lo sabrán hacer de una manera más eficiente.-       

Saludos.
Daniel
80  Programación / Programación C/C++ / Medir el tiempo de una rutina en lenguaje C. en: 3 Septiembre 2014, 16:17 pm
Hola Amigos.
El enunciado del manual es el siguiente.-



Código
  1. //http://dacap.com.ar/blog/cpp/medir-el-tiempo-de-una-rutina/
  2. #include <stdio.h>
  3. #include <windows.h>
  4.  
  5. /* retorna "a - b" en segundos */
  6. double performancecounter_diff(LARGE_INTEGER *a, LARGE_INTEGER *b){
  7. LARGE_INTEGER freq;
  8. QueryPerformanceFrequency(&freq);
  9. return (double)(a->QuadPart - b->QuadPart) / (double)freq.QuadPart;
  10. }
  11.  
  12. int main(int argc, char *argv[]){
  13. int contador=0;
  14. LARGE_INTEGER t_ini, t_fin;
  15. double secs;
  16.  
  17. QueryPerformanceCounter(&t_ini);
  18. while(contador <= 300000000){
  19. contador++;
  20. if(contador % 100000000 == 0){
  21. QueryPerformanceCounter(&t_fin);
  22. secs = performancecounter_diff(&t_fin, &t_ini);
  23. printf("%.16g milliseconds\n", secs * 1000.0);
  24. QueryPerformanceCounter(&t_ini);
  25. }
  26. }
  27.  
  28. return 0;
  29. }


El programa que logré a partir de los ejemplos de la página me funciona correctamente (por lo menos es lo que a mí me parece) lo que pasa es que no entiendo casi ninguna línea (creo que tiene que ver con las API’s de windows), la pregunta es ¿alguien me puede decir si se puede lograr lo mismo con con un programa en C puro?, de ser así ¿podrian poner algún ejemplo?.-

Saludos.
Daniel
Páginas: 1 2 3 4 5 6 7 [8] 9 10
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines