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

 

 


Tema destacado: Introducción a Git (Primera Parte)


  Mostrar Temas
Páginas: [1] 2
1  Programación / Java / ayuda con algoritmo divide and conquer en: 29 Abril 2015, 00:47 am
Hola amigos,

me he dispuesto a resolver algoritmos de este tipo, concretamente comparar dos vectores y mostrar en que posición difiere un dato el uno del otro.

Primero me he dispuesto a comparar si los dos son iguales o no con el siguiente código:

Código
  1.  
  2.    public static boolean sonIgualesDyV(int[] a, int[] b, int ini, int fin) {
  3.        if(fin - ini <= 1) {
  4.            if((a[ini] != b[ini]) || (a[fin] != b[fin])) {
  5.                return false;
  6.            } else {
  7.                return true;
  8.            }
  9.        } else {
  10.            int medio = (ini + fin)/2;
  11.            boolean resultadoAux = sonIgualesDyV(a,b, ini, medio);
  12.            boolean resultadoAux2 = sonIgualesDyV(a, b, medio+1, fin);
  13.            return (resultadoAux && resultadoAux2);
  14.        }
  15.    }
  16.  
  17.    public static void main(String[] args) {
  18.        // TODO code application logic here
  19.  
  20.        int a[]={1,2,7,8,9,10};
  21.        int b[]={1,2,7,8,9,10};
  22.  
  23.        if (sonIgualesDyV(a,b,0, a.length-1))
  24.            System.out.println("Los vectores son iguales");
  25.         else
  26.            System.out.println("Los vectores no son iguales");
  27.    }
  28.  
  29.  

A partir de aquí y viendo que discurre la lógica implementada he querido modificarlo para devolver un entero con la posición donde difiere un dato de un vector de otro, ejemplo:

a[]={0,1,2,3,4}
b[]={0,1,2,3,6}

Ambos difieren en la posición 4 con un valor distinto por arreglo.

El problema lo tengo con las llamadas recursivas para llamarse a sí mismas y resolver el problema, antes devolvía dos resultados con un boolean(resultadoAux y resultadoAux2), ahora para devolver dos datos int no se como hacerlo... supongo que tendré que crear una condición para evaluar una llamada recursiva u otra o devolver con un arreglo los dos resultados a la llamada de la función...

Código
  1.  
  2.    public static int sonIgualesDyV(int[] a, int[] b, int ini, int fin) {
  3.        if(fin - ini <= 1) {
  4.            if((a[ini] != b[ini])){
  5.                return ini;
  6.            } else if ((a[fin] != b[fin])){
  7.                return fin;
  8.            }
  9.        } else {
  10.            int medio = (ini + fin)/2;
  11.            int resultadoAux = sonIgualesDyV(a,b, ini, medio);
  12.            int resultadoAux2 = sonIgualesDyV(a, b, medio+1, fin);
  13.  
  14.        }
  15.        return 0;
  16.    }
  17.  
  18.    public static void main(String[] args) {
  19.        // TODO code application logic here
  20.        int a[]={1,2,7,8,9,10};
  21.        int b[]={1,2,7,8,6,10};
  22.        System.out.println("Difiere en la posición: "+sonIgualesDyV(a, b, 0, a.length-1));
  23.    }
  24.  
  25.  

Saludos y muchas Gracias

2  Programación / Java / Uso de try-catch en Java en: 9 Octubre 2014, 22:08 pm
Hola acabo de hacer mi primer programa en Java y de utilizar igualmente por vez primera el uso de excepciones try-catch. Mi duda es si cuando se genera la excepción, en este caso el introducir un carácter en lugar de un dígito, se puede evitar que pare o rompa la secuencia del programa. Es decir deseo que genere el aviso de "No se puede introducir caracteres" y posteriormente vuelva al menú de inicio. Dejo el código:

Código
  1. package paquete;
  2.  
  3. import java.util.Scanner;
  4. import java.util.InputMismatchException;
  5.  
  6. public class Main {
  7.  
  8. public static void main(String[] args) {
  9. // TODO Auto-generated method stub
  10. Scanner teclado=new Scanner(System.in);
  11. int opcion,opcion2;
  12. float numero,numero2;
  13. try{
  14. do{
  15.  
  16. System.out.println("******** CALCULADORA  ********");
  17.                        System.out.println("\n1- Realizar una operación");
  18.                        System.out.println("2- Salir");
  19.                        System.out.print("\nIntroduzca su opción: ");
  20.                        opcion=teclado.nextInt();
  21.                     if(opcion==1){
  22.  
  23.             System.out.print("\nIntroduzca el primer argumento: ");
  24.             numero=teclado.nextInt();
  25.             System.out.print("\nIntroduzca el segundo argumento: ");
  26.             numero2=teclado.nextInt();
  27.  
  28.             System.out.println("\n1- Sumar");
  29.             System.out.println("2- Restar");
  30.                System.out.println("3- Multiplicar");
  31.                System.out.println("4- Dividir");
  32.                System.out.print("Opcion: ");
  33.                opcion2=teclado.nextInt();
  34.  
  35.             switch(opcion2){
  36.  
  37.             case 1:
  38.             System.out.println("El resultado de la operacion es: "+  (numero+numero2));
  39.             break;
  40.  
  41.             case 2:
  42.             System.out.println("El resultado de la operacion es: "+ (numero-numero2));
  43.             break;
  44.  
  45.             case 3:
  46.             System.out.println("El resultado de la operacion es: "+ (numero*numero2));
  47.             break;
  48.  
  49.             case 4:
  50.             if(numero2>0)
  51.             System.out.println("El resultado de la operacion es: "+ (numero/numero2));
  52.             else{
  53.             System.out.println("\nEl divisor debe ser mayor de 0");
  54.             }
  55.             break;
  56.  
  57.             default:
  58.             System.out.println("## Gracias por usar la Calculadora ##");
  59.             }
  60.            }
  61.  
  62. }while(opcion==1);
  63. }catch (InputMismatchException ime){
  64. System.out.println("No se puede introducir caracteres");
  65. }
  66. System.out.println("\nHasta Pronto!!");
  67. }
  68. }
  69.  
  70.  

Gracias!!
3  Programación / Programación C/C++ / Opciones de la línea de comandos--> parámetros de main en: 2 Octubre 2014, 23:49 pm
Hola amigos tengo una duda creando una calculadora a través de la línea de comandos.

El problema es que nunca se me cumple el parámetro argc[] como número entero indicando el valor del total de argumentos que he introducido por teclado.

Por consola introduzco por ejemplo:

Citar
.\main 4+2

Citar
Pienso introduzco 4 parámetros:

- argv[0] --> main
- argv[1] --> 4
- argv[2] --> +
- argv[3] --> 2


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. int main (int argc, char *argv[]) {
  6. int a,b,c;
  7. printf("\nargc vale %d",argc);
  8. if(argc==4){
  9.        sscanf(argv[1],"%d",&a);
  10. sscanf(argv[2],"%d",&b);
  11. sscanf(argv[3],"%d",&c);
  12.  
  13.            switch(b){
  14.  
  15.                case '+':
  16.                    printf("La suma de %d+%d = %d\n",a,c,a+c);
  17.                break;
  18.  
  19.                case '-':
  20.                    printf("La resta de %d-%d = %d\n",a,c,a-c);
  21.                break;
  22.  
  23.                 case '/':
  24.                    printf("La division de %d/%d = %d",a,c,a/c);
  25.                break;
  26.  
  27.                case '*':
  28.                    printf("La multiplicacion de %d*%d = %d",a,c,a*c);
  29.                break;
  30.  
  31.                default:
  32.                    printf("Introduzca una opcion valida\n");
  33.            }
  34. }
  35.  
  36. else
  37.        printf("No hay suficientes datos\n");
  38.  
  39.    return 0;
  40. }
  41.  
  42.  

Gracias!!
4  Programación / Programación C/C++ / Ayuda con este codigo recursivo en: 24 Septiembre 2014, 22:47 pm
Hola me estoy iniciando en la recursividad y me encuentro estancado en este código para arrojar de forma recursiva la devolución de una frase al revés.

Había pensado en guardar la frase en un array, seguidamente con un índice ir moviendome por este array recursivamente, pero me encuentro que no se como devolver el retorno de la función a la función principal, independientemente de que esté bien ideado el código......

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. void alreves (char vector[],int posicion);
  6.  
  7. void main(int argc, char *argv[]){
  8.  
  9.    char cadena[50];
  10.    int n;
  11.    printf("\nIntroduzca frase: ");
  12.    gets(cadena);
  13.    n=strlen(cadena);
  14. alreves(cadena,n);
  15. }
  16.  
  17. void alreves (char vector[],int posicion){
  18.  
  19.    if(posicion=='\0')
  20.        return 0 ;
  21.    else
  22.        alreves(vector,posicion-1);
  23. }
  24.  

Gracias!!
5  Programación / Programación C/C++ / Escritura y lectura de archivos binarios en: 3 Septiembre 2014, 19:04 pm
Hola amigos, estoy tratando de hacer un código de archivo binario con array de estructuras pero no encuentro como hallar adecuadamente la lectura de los registros que introduzco con fread.

Si introduzco dos personas como en el ejemplo necesita de tres ocasiones para leerlas hasta llegar a final de archivo. No encuentro la manera sencilla de que haga las lecturas correctas de las personas que solicito a través de un número.

Dejo el código para conocer en que puedo estar fallando, gracias!!

Código
  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5. #define N 2
  6.  
  7. struct{
  8.    char nombre[20];
  9.    char ciudad[20];
  10.    int edad;
  11. }persona[N];
  12.  
  13. int main(void)
  14. {
  15.    char temporal[20];
  16.    char name[15]="gente.dat";
  17.    int i,numero,leo;
  18.    FILE *fichero;
  19.    if((fichero=fopen(name,"ab"))!=NULL){
  20.        do{
  21.            for(i=0;i<N;i++){
  22.                printf("\nIntroduzca nombre: ");
  23.                gets(persona[i].nombre);
  24.                if(strcmp(persona[i].nombre,"")!=0){
  25.                    printf("\nIntroduzca ciudad: ");
  26.                    gets(persona[i].ciudad);
  27.                    printf("\nIntroduzca edad: ");
  28.                    fgets(temporal,19,stdin);
  29.                    sscanf(temporal,"%d",&persona[i].edad);
  30.                    fwrite(&persona[i],sizeof(persona),1,fichero);
  31.                }
  32.            }
  33.        }while(strcmp(persona[i].nombre,"")!=0);
  34.        fclose(fichero);
  35.    }
  36.    else{
  37.        printf("\nError en apertura fichero");
  38.        exit(1);
  39.    }
  40.    if((fichero=fopen(name,"rb"))!=NULL){
  41.        do{
  42.                printf("\nIntroduzca numero de persona a visualizar: ");
  43.                fgets(temporal,19,stdin);
  44.                sscanf(temporal,"%d",&numero);
  45.                for(i=0;i<N;i++){
  46.                     if(numero==i){
  47.                        printf("\nNombre: %s",persona[i].nombre);
  48.                        printf("\nCiudad: %s\n",persona[i].ciudad);
  49.                        printf("Edad: %d",persona[i].edad);
  50.                        leo=fread(&persona[i],1,sizeof(persona),fichero);
  51.                    }
  52.                }
  53.        }while(leo!=0);
  54.        fclose(fichero);
  55.    }else{
  56.        printf("\nError en apertura fichero");
  57.        exit(1);
  58.    }
  59.    return 0;
  60. }
  61.  
  62.  
6  Programación / Programación C/C++ / Ayuda con este código de archivos en: 25 Agosto 2014, 22:49 pm
Hola amigos,
tengo un problema con este código basado en archivos y no entiendo porque
en esta parte del programa me lee toda la cadena, cuando esperaba solo leyera y me mostrara por pantalla el nombre de la persona y no toda la cadena seguida de nombre, ciudad y edad.

Código
  1.  
  2.        fgets(persona.nombre,40,fichero);
  3.        puts(persona.nombre);
  4.  
  5.  

Este es el código completo:

Código
  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. struct informe{
  6.    char nombre[40];
  7.    char ciudad[40];
  8.    int edad;
  9. }persona;
  10.  
  11. int main()
  12. {
  13.    char name[20]="gente.dat";
  14.    FILE *fichero;
  15.    fichero=fopen(name,"w");
  16.    if(fichero==NULL){
  17.        printf("\nEl archivo no existe\n");
  18.        exit(1);
  19.    }
  20.    else{
  21.        /*Escribo el archivo*/
  22.        printf("Introduzca nombre: ");
  23.        gets(persona.nombre);
  24.        fprintf(fichero,"%s",persona.nombre);
  25.        printf("Introduzca ciudad: ");
  26.        gets(persona.ciudad);
  27.        fprintf(fichero,"%s",persona.ciudad);
  28.        printf("Introduzca edad: ");
  29.        scanf("%d",&persona.edad);
  30.        fprintf(fichero,"%d",persona.edad);
  31.        fclose(fichero);
  32.    }
  33.  
  34.    /* Leo el archivo */
  35.    printf("\nEsto es lo que se ha introducido en el archivo:\n\n");
  36.    printf("_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\n");
  37.    fichero=fopen(name,"r");
  38.    if(fichero==NULL){
  39.        printf("\nEl archivo no existe\n");
  40.        exit(1);
  41.    }
  42.    while(feof(fichero)==0){
  43.  
  44.        fgets(persona.nombre,40,fichero);
  45.        puts(persona.nombre);
  46.        fgets(persona.ciudad,40,fichero);
  47.        puts(persona.ciudad);
  48.        fscanf(fichero,"%d",&persona.edad);
  49.        puts(persona.edad);
  50.    }
  51.    fclose(fichero);
  52. return 0;
  53. }
  54.  

Gracias, un saludo
7  Programación / Programación C/C++ / [Resuelto] Una mano en este caso de ficheros en: 24 Agosto 2014, 23:41 pm
Hola amigos tengo un problema con este código que estoy creando que trata sobre ficheros. Tengo creados varios ficheros en txt dentro del proyecto donde estoy construyendo el código pero no me permite abrirlo.

No se que estoy haciendo mal, gracias por su ayuda.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define N 25
  4.  
  5. int main(){
  6.  
  7.    FILE *fichero;
  8.    char name[40],cadena[100];
  9.    int contador=0;
  10.  
  11.    /* Esta parte de codigo verifico la existencia del fichero para posteriormente ser leído*/
  12.    printf("\nIntroduzca nombre de fichero, tendra 3 oportunidades\n");
  13.    printf("_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\n");
  14.    do{
  15.        printf("-->");
  16.        gets(name);
  17.        if((fichero=fopen(name,"r"))!=NULL){
  18.            printf("Fichero abierto correctamente!!\n");
  19.            printf("_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _\n\n");
  20.  
  21.       }
  22.       else{
  23.            printf("Fichero no encontrado\n");
  24.            contador++;
  25.                if(contador==3)
  26.                    exit(1);
  27.        }
  28.       printf("\n");
  29.    }while(fichero==NULL);
  30.    /* Aqui trato de ir leyendo el fichero de 25 en 25 lineas */
  31.    do{
  32.            for(contador=0;contador<N;contador++){
  33.                    fgets(cadena,100,fichero);
  34.                        if(!feof(fichero))
  35.                                puts(cadena);
  36.            }
  37.            getchar();
  38.    }while(!feof(fichero));
  39.    fclose(fichero);
  40. return 0;
  41. }
  42.  
  43.  
8  Programación / Programación C/C++ / Empezando con funciones en: 27 Mayo 2014, 23:22 pm
Hola, estaba creando un programa simple para ir asimilando el concepto de inicio de funciones, pero tengo una duda en como podría obtener el total de importe que no me cuadra con lo que se clasifica individualmente por automóvil.

No se si podría realizar el cálculo como lo hago en la función principal o intentarlo con la llamada de otra función para que me retorne el total...

Ahí va mi parte de código:

Código
  1. /* programa calculo importe parking */
  2. #include <stdio.h>
  3.  
  4.    float calcularImporte(float _horas);
  5.  
  6.    int main(void){
  7.  
  8.        float horas,total=0;
  9.        int contador;
  10.        printf("\n\tAutomovil \tHoras \t\tImporte:");
  11.        for( contador=1; contador <=3; contador++ ){
  12.            scanf("%f",&horas);
  13.            printf("\t");
  14.            printf("\t%d \t%f \t%f$",contador,horas,calcularImporte(horas));
  15.            horas+=horas;
  16.            total=total+calcularImporte(horas);
  17.        }
  18.        printf("\n \t\t\tTotal %f \tTotal %f",horas,total);
  19.        printf("\n");
  20.    }
  21.  
  22.    float calcularImporte( float _horas ){
  23.  
  24.        float importe;
  25.        if(_horas<=3){
  26.            importe=2.00;
  27.        }else if (_horas>3 && _horas <24){
  28.            importe=2.00+_horas*0.5;
  29.        }else
  30.            importe=10.00;
  31.        return(importe);
  32.    }
  33.  
  34.  

Saludos y gracias
9  Foros Generales / Sugerencias y dudas sobre el Foro / No puedo contestar a mi propio post creado en: 23 Mayo 2014, 18:56 pm
Hola,

mi consulta es relacionada a un tema propuesto en la zona de programación en c-c++ donde no puedo responder a las personas que me han ayudado a comprender mis dudas relativas para tal creación de post.

Este es el post:
Código:
http://foro.elhacker.net/programacion_cc/ayuda_para_crear_tabla_de_conversion_de_decimales-t415077.0.html

En otros post si me permite responder sin presentar dicho mensaje.

Código:
Un error ha ocurrido
Este tema está bloqueado, no estás autorizado para publicar o modificar mensajes...

Me gustaría conocer el porqué de la anulación de mis respuestas.

Saludos y gracias
10  Programación / Programación C/C++ / Ayuda para crear tabla de conversión de decimales en: 21 Mayo 2014, 23:32 pm
Hola,

el problema que tengo es que no se como acertar en crear un bucle para sacar decimales del 1 al 256 y obtener su binario, octal y hex.

El objetivo final es poder crear una lista para números del 1 al 256 de conversión decimal a binario, decimal a octal y decimal a hex.

Primero he comenzado con la conversión del código de decimal a binario, realizando este código:

Código
  1.  
  2. #include <stdio.h>
  3.  
  4. /* conversor de decimal a binario */
  5.  
  6. int main(){
  7.  
  8.    int numero;
  9.  
  10.    printf("Introduzca un numero en decimal: ");
  11.    scanf("%d",&numero);
  12.    while(numero>=2){
  13.  
  14.        printf("\t%d",numero%2);
  15.        numero/=2;
  16.    }
  17.    printf("\t %d",numero);
  18.    printf("\n");
  19. }

Una vez conseguido la primera parte me propongo a crear la lista del 1 al 256, primero lo he intentado con un bucle for pero me creaba bucle infinito. Después he pasado a usar otro bucle while con variable contador para sacar decimales hasta el límite (256) pero no consigo interpretar como sacar la conversión de un decimal seguido del otro.

Aquí va como he tenido que dejar el código:

Código
  1. #include <stdio.h>
  2.  
  3. /* tabla decimal a binario,octal y hexadecimal */
  4.  
  5. int main(){
  6.  
  7.    int numero,contador=1;
  8.  
  9.    while(contador<=4){
  10.            numero=0;
  11.            numero++;
  12.            while(numero>=2){
  13.                    printf("Decimal %d \t%d",contador,numero%2);
  14.                    numero/=2;
  15.            }
  16.            printf("\t %d",numero);
  17.            contador++;
  18.    }
  19. }
  20.  

Gracias.

Un saludo
Páginas: [1] 2
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines