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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


  Mostrar Mensajes
Páginas: 1 2 3 4 [5] 6 7 8 9 10 11
41  Programación / Programación C/C++ / Re: [C] Decimal a base n, con n<10 en: 24 Octubre 2013, 00:22 am
... otra cosa es que el código resultante sea robusto,  reutilizable y fácil de mantener.

entiendo, entonces esto se resuelve en el diseño del algoritmo, no en la códificación  :o

deberías quitar las funciones "input". No quitarlas, sino meterlas todas en una.

Se me ocurren condiciones para los tres casos
     1) ( numero a convertir > 0 )
     2) ( 1 < base tecleada < 10 )
     3) ( respuesta para repetir el programa == 'S' || 'N' )

Si la tercera funcion regresa dato tipo entero puedo usar los numeros 110, 115 para las letras N, S?
es decir leo un caracter (%c) en scanf() pero lo trato como entero en las condiciones

Código
  1. int input_general(int condicion)
  2. {
  3.    int respuesta;
  4.    switch(condicion)
  5.    {
  6.    case 1:
  7.        {
  8.            // Entrada de numero a convertir
  9.            break;
  10.        }
  11.    case 2:
  12.        {
  13.            //Entrada de base
  14.            break;
  15.        }
  16.    case 3:
  17.        {
  18.            //Quieres repetir el programa: SI, NO?
  19.        }
  20.    }
  21.    return (respuesta);
  22. }

es solo una dea, no la he probado y no se si funcione la parte de tener una variable tipo entero y leer en scanf (%c).
42  Programación / Programación C/C++ / Re: [C] Decimal a base n, con n<10 en: 22 Octubre 2013, 02:21 am
Todo diseño que hagas debería tener como uno de sus fundamentos la reutilización del código. Si el núcleo de un algoritmo está ubicado en el main mal empezamos.

La representación de los datos, así como el proceso para que el usuario introduzca la información pedida, deberían estar también aislados del núcleo del algoritmo, de esa forma te va a resultar bastante más sencillo reutilizar el algoritmo y adaptarlo a diferentes situaciones.

Gracias, nunca habia pensado en esto, ahora que lo mencionas entiendo la portabilidad de un programa. (y revisando varios de mis códigos el nucleo nunca esta bien definido o se encuentra disperso en main)

Saludos!
43  Programación / Programación C/C++ / Re: Presentación y dudas en: 21 Octubre 2013, 18:58 pm
Te dejo mas bibliografia para C:

1. Garcia Bermejo Giner Jose R, Programación estructurada en C, Ed Pearson Educacion SA, 2008.

2. Augie Hansen, C Programming A complete guide to mastering the C language, Ed Addison-Wesley, 1989

3. Van Wyk, Christopher J, Data structures and C programs, Ed Addison-Wesley, 1988

4. Deitel, Harvey M, Como programar en C/C++, Ed Prentice Hall Hispanoamericana SA, 1995

5. Darnell Peter A, C a software engineering approach

6. Himmel David, Certified course in C

7. Swan Tom, Type and Learn C

Para los ultimos no tengo el dato completo de la editorial, edicion y año

Saludos!
44  Programación / Programación C/C++ / Re: [C] Decimal a base n, con n<10 en: 21 Octubre 2013, 18:46 pm
No se si te has dado cuenta que la usabilidad del código fuera de tu programa es 0.
No se exactamente a que te refieres pero yo tampoco le veo gran uso a este código, nunca he trabajado con otras bases y en todo caso las direcciones de memoria estan en hexadecimal, que este programa no convierte El objetivo principal es implementar una lista ligada, el caso particular es convertir un numero de una base a otra.

para este caso concreto, se pudiese hacer la conversión con un main propio sin tener que "copiar y pegar".
Entonces la conversion debe estar fuera de main? imagino que la impresion de digitos tambien así la estructura de main puede cambiar dando el mismo resultado, o no?

A mi, personalmente, me parece estupendo que se publiquen códigos como este, ya que los que están aprendiendo pueden ver códigos de gente más madura. Pero creo que si se hacen cosas así hay que hacerlo con un poco más de cariño.
Te entiendo, trato de hacer las cosas lo mejor posible aunque el código refleje lo contrario para usuarios avanzados, en todo caso revela que el proceso de aprendizaje no ha concluido y falta mucho por aprender.

Además, tu programa está limitado a un uso con consola de comandos... portarla para ser utilizada en una aplicación con interfaz gráfica requeriría otro esfuerzo adicional.
He abogado mucho por los temas de interfaz gráfica pero los profesores insisten que el verdadero poder lo tiene la consola y el GUI es solo la cara bonita del programa que carece de importancia para el curso.  :-\

Saludos!
45  Programación / Programación General / Re: ¿ A la hora de leer un libro de programación ( aprender en ordenador o en papel) en: 20 Octubre 2013, 23:10 pm
Yo estoy comenzando a programar y no tenia idea que las antigüas generaciónes trabajaban en papel, ahora llevo un curso en C y no hemos tocado la computadora ni una sola vez.

En lo personal me parece ridiculo aprender a patinar sin usar patines, andar en bicicleta sin tener una o programar sin escribir codigos en una computadora. Una hoja de papel no reconoce errores de sintaxis o elementos mal declarados.

La mayoria de los temas los reviso por mi cuenta, ya sea preguntando en el foro, buscando en la red o en libros e insisto mucho en que debe haber practica, creando y compilando los temas visto, asi uno tiene la certeza de haber entendido y que todo va bien.

Yo siempre paso los códigos de libros para poder modificarlos, agregar cosas y jugar con ellos, es la unica manera en que aprendo.

Si vas a ser programador si o si necesitas el PC mas que el profe diga misa.

Saludos!!
46  Programación / Programación C/C++ / [C] Decimal a base n, con n<10 en: 20 Octubre 2013, 22:51 pm
Hola, de nuevo posteando códigos de nivel básico-intermedio, uso una lista simple para ir almacenando cada digito del numero convertido:

Comentarios y sugerencias bienvenidas! :)
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4. #define MAXBASE 9
  5. struct numeroB10
  6. {
  7.    int num;
  8.    struct numeroB10 *next;
  9. };
  10. typedef struct numeroB10 BASE;
  11. typedef BASE *BASE_PTR;
  12.  
  13. int input_numero_natural();
  14. int input_mayor_base();
  15. BASE_PTR add_to_list(int residuo, BASE_PTR prev_rec);
  16. char input_error_sino();
  17. void liberar_espacio(BASE_PTR ultimo);
  18.  
  19. int main()
  20. {
  21.    int numero=0,aux=0,cociente=0,residuo=0,base=0;
  22.    char bucle='0';
  23.    BASE_PTR digit_addr=NULL;
  24.    BASE_PTR impresor=NULL;
  25.    do
  26.    {
  27.        system("CLS");
  28.        printf("Conversor de base 10 a base n\n\nInstrucciones: Ingresa un numero natural en base 10: ");
  29.        numero = input_numero_natural(); //Se valida que sea un dato entero y positivo
  30.        printf("\nAhora elige una base entre 1 y 9 para convertir el numero: ");
  31.        base = input_mayor_base(); //Validacion de base
  32.            if(numero<base)
  33.                puts("\nEl numero a convetir es el mismo!");
  34.            else
  35.            {
  36.                aux = numero;
  37.                    while(aux>=base)
  38.                    {
  39.                        cociente = aux/base;
  40.                        residuo = aux%base;
  41.                        digit_addr = add_to_list(residuo,digit_addr);
  42.                        aux = cociente;
  43.                    }
  44.                digit_addr = add_to_list(aux,digit_addr);
  45.                impresor = digit_addr;
  46.                printf("\nEl numero %d en base 10 es igual a ",numero);
  47.                    while(impresor!=NULL)
  48.                    {
  49.                        printf("%d",impresor->num);
  50.                        impresor = impresor->next;
  51.                    }
  52.                printf(" en base %d",base);
  53.                liberar_espacio(digit_addr);
  54.                digit_addr=NULL;
  55.                impresor=NULL;
  56.            }
  57.        printf("\n\nQuieres convertir otro numero? ( S/N ): ");
  58.        bucle = input_error_sino();
  59.    }while(bucle=='S');
  60.    return (0);
  61. }
  62.  
  63. /*Funcion: input_mayor_base
  64.   Proposito: Valida que los datos de entrada del usuario sean numeros y evita que se procesen letras, signos o
  65.              numeros negativos, se usa al pedir la base a convertir.*/
  66. int input_mayor_base()
  67. {
  68.    int respuesta;
  69.    while((scanf("%d",&respuesta) != 1)||respuesta<=1||respuesta>MAXBASE) //en caso de ñ y datos raros.
  70.        {
  71.            while (getchar() != '\n');
  72.            if(respuesta>MAXBASE)
  73.            {
  74.                printf("\nSolo puedes convertir hasta base 9: ");
  75.            }
  76.            else
  77.            {
  78.                printf ("\nDato no valido intenta de nuevo: ");
  79.            }
  80.        }
  81.    return respuesta;
  82. }
  83. /*Funcion: input_numero_natural()
  84.   Proposito: Valida que los datos de entrada del usuario sean numeros y evita que se procesen letras, signos o
  85.              numeros negativos, se usa al pedir la base a convertir.*/
  86. int input_numero_natural()
  87. {
  88.    int respuesta;
  89.    while((scanf("%d",&respuesta) != 1)||respuesta<=0) //en caso de ñ y datos raros.
  90.        {
  91.            while (getchar() != '\n');
  92.            if(respuesta==0)
  93.            {
  94.                printf("\nEl numero 0 es el mismo para todas las bases: ");
  95.            }
  96.            else
  97.            {
  98.                printf ("\nDato no valido intenta de nuevo: ");
  99.            }
  100.        }
  101.    return respuesta;
  102. }
  103. /*Funcion: BASE_PTR add_to_list()
  104.   Proposito: Crear un bloque en memoria para el numero a convertir*/
  105. BASE_PTR add_to_list(int residuo, BASE_PTR prev_rec)
  106. {
  107.    BASE_PTR new_rec = NULL;
  108.    new_rec = (BASE_PTR) malloc(sizeof(BASE)); // Crear jugador
  109.    if(!new_rec)
  110.    {   //Validacion de malloc
  111.        printf("Error al reservar memoria");
  112.        exit(1);
  113.    }
  114.    new_rec->num= residuo;
  115.    new_rec->next = NULL;
  116.    if(prev_rec) //Si hay un elemento antes
  117.    {
  118.        new_rec->next = prev_rec;
  119.  
  120.    }
  121.    return(new_rec);
  122. }
  123. /*Funcion:input_error_sino
  124.   Proposito: Valida que la respuesta sea el caracter S o N,
  125.   se usa en la ultima pregunta para volver a correr el programa */
  126. char input_error_sino()
  127. {
  128.    char respuesta;
  129.    respuesta = getche();
  130.    respuesta = toupper(respuesta);
  131.    printf("\n\n");
  132.        while(respuesta!='S'&&respuesta!='N') //Error si teclea otra cosa
  133.            {
  134.                printf("Opcion invalida, intenta de nuevo: ");
  135.                respuesta = getche();
  136.                puts("");
  137.                respuesta = toupper(respuesta);
  138.            }//Fin mensaje error
  139.    return (respuesta);
  140. }
  141. /*Funcion:liberar_espacio()
  142.   Proposito: borrar numeros generados.*/
  143. void liberar_espacio(BASE_PTR ultimo)
  144.  {
  145.      BASE_PTR aux = NULL;
  146.      aux = ultimo;
  147.      while(aux->next!=NULL)
  148.      {
  149.          ultimo = ultimo->next;
  150.          free(aux);
  151.          aux = ultimo;
  152.      }
  153.      free(aux);
  154.  }
47  Informática / Software / Re: [Excel] Deshabilitar redondeo version 2007 en: 17 Octubre 2013, 01:36 am

Intenta desactivando la siguiente casilla.


La casilla esta desactivada, olvidé mencionar que no estoy haciendo la operacion explicitamente, hago referencia a las celdas que tienen los valores, es decir

B7*J7 = Xi * Yi = 6 *-1.033333
48  Informática / Software / Re: [Excel] Deshabilitar redondeo version 2007 en: 16 Octubre 2013, 23:28 pm
lo unico que sucede es que aumenta el numero de ceros pero el calculo sigue como 6.2
49  Programación / Programación C/C++ / Re: esta pregunta es para conocedores de "C" en: 16 Octubre 2013, 23:13 pm
Esta pregunta va en la sección de C no?
por regresar entiendo que quieres borrar lineas  :huh: en tal caso si imprimo una cadena de caracteres, la elimino con:

Código
  1. for(i=0;i<longitud de texto;i++)
  2. printf("\b");
50  Informática / Software / [Excel] Deshabilitar redondeo version 2007 en: 16 Octubre 2013, 22:58 pm
Hola, alguien sabe como deshabilitar el redondeo en operaciones.

Ejemplo: 6*(-1.033333) = -6.199998

Excel muestra -6.200000

El tamaño de la celda es lo suficientemente grande
El formato numero despliega varias cifras significativas

 :huh: a alguien le ha pasado?
Páginas: 1 2 3 4 [5] 6 7 8 9 10 11
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines