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

 

 


Tema destacado: Curso de javascript por TickTack


  Mostrar Temas
Páginas: 1 2 3 4 5 6 7 8 9 10 11 [12] 13 14 15 16 17 18 19 20 21 22
111  Programación / Programación C/C++ / abrir archivo con default en: 26 Noviembre 2013, 22:08 pm
Saludos, yo siempre que utilizo archivos los creo y abro  indicandole al fopen que quiero crear mi archivo en la USB, pero ahora quiero usar la forma default solo que no se como hacerlo ni donde me va a crear y guardar los archivos:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void crearTablero(int n,int **tablero);
  5.  
  6. int main()
  7. {
  8.    FILE *pd;
  9. if((pd = fopen("F:\\archivo.txt","w"))!= NULL)
  10.   printf("Se ha creado archivo");
  11. }
  12.  

de antemano gracias
112  Programación / Programación C/C++ / memoria dinamica y funciones en: 25 Noviembre 2013, 03:09 am
saludos

tengo el siguiente codigo en el que le asigno memoria dinamica a una matriz en lenguaje C para poder ingresarle x numero de datos, el problema que tengo es que si quiero pasarle la matriz a una funcion para dentro de esta asignarle memoria dinamica el programa me truena, pero si se la asigno dentro del main el programa funciona correctamente y no se a que se debe, este es el codigo que me truena:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void inicializaTablero(char **tablero,int n);
  5.  
  6. int main()
  7. {
  8.    int n,i,j;
  9.    char **tablero;
  10.    printf("Dame tamanio de tablero: ");
  11.    scanf("%d",&n);
  12.    inicializaTablero(tablero,n);
  13.    for(i = 0;i < n;i++)
  14.    {
  15.        printf("\n");
  16.        for(j = 0;j < n;j++)
  17.        printf("[%c]",tablero[i][j]);
  18.    }
  19.    return 0;
  20. }
  21.  
  22. void inicializaTablero(char **tablero,int n)
  23. {
  24.    int i,j,k;
  25.     tablero = (char**)malloc(n*sizeof(char*));
  26.    for(i = 0;i < n;i++)
  27.       tablero[i] = (char*)malloc(n);
  28.    for(j = 0;j < n;j++)
  29.    {
  30.        for(k = 0;k < n;k++)
  31.           tablero[j][k] = '0';
  32.    }
  33. }
  34.  


y de esta manera si funciona:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.    int n,i,j,k;
  7.    char **tablero;
  8.    printf("Dame tamanio de tablero: ");
  9.    scanf("%d",&n);
  10.    tablero = (char**)malloc(n*sizeof(char*));
  11.    for(i = 0;i < n;i++)
  12.       tablero[i] = (char*)malloc(n);
  13.    for(j = 0;j < n;j++)
  14.    {
  15.        for(k = 0;k < n;k++)
  16.           tablero[j][k] = '0';
  17.    }
  18.    for(i = 0;i < n;i++)
  19.    {
  20.        printf("\n");
  21.        for(j = 0;j < n;j++)
  22.        printf("[%c]",tablero[i][j]);
  23.    }
  24.    return 0;
  25. }
  26.  

de antemano gracias

113  Programación / Programación C/C++ / desbordamiento de arreglos en: 24 Noviembre 2013, 01:41 am
Saludos, si tengo una matriz en C, en la cual tengo que posicionarme en alguna de las casillas( le pido la fila y la columna al usuario), y despues a apartir de esa casilla quiero moverme x numero de celdas en el eje de las filas y x numero de celdas en el eje de las columnas, ¿Cual es a manera correcta de validar que la nueva posicion en la que me encuentro es una celda valida para que no se desborde el arreglo???,podria ser algo como esto?

Código
  1. void verificarCelda(char **arreglo,int filaInicial,int columnaInicial)
  2. {
  3.    if(arreglo[filaInicial + 2][columnaInicial - 1] != -1)
  4.       printf("Celda valida");
  5. }
  6.  
114  Programación / Programación C/C++ / matrices y memoria dinamica en: 22 Noviembre 2013, 23:13 pm
Saludos

si tengo  una matriz n x n, a la que quiero asignarle memoria dinamicamente porque su tamaño solo se puede saber en tiempo de ejecucion, cual es la manera correcta de hacerlo?

Código
  1. char **tablero;
  2.      tablero = (char**)malloc(tamanio*sizeof(char*);

o esta otra:

Código
  1. char **tablero;
  2. tablero = (char**)malloc(n*sizeof(char));
  3.    for(i = 0;i < n;i++)
  4.       tablero[i] = (char*)malloc(n*sizeof(char));

otra duda, estaba leyendo un manual sobre memoria dinamica y me decia que si hacia algo como esto me iba a dar error de compilacion que porque el compilador requiere que el tamaño del array o de la matriz sea constante:

Código
  1. int main()
  2. {
  3.  
  4.    int num_estudiantes,i;
  5.    printf("Dame numero de estudiantes: ");
  6.    scanf("%d",&num_estudiantes);
  7.    int asignatura[num_estudiantes];
  8.    for(i = 0;i < num_estudiantes;i++)
  9.    {
  10.        printf("Dame un numero \n");
  11.        scanf("%d",&asignatura[i]);
  12.    }
pero ya lo probe y me compila correctamente, a que se debe esto??

gracias
115  Programación / Programación C/C++ / copiar vectores de enteros en: 21 Noviembre 2013, 22:14 pm
Saludos

Tengo un arreglo de enteros y quiero copiarlo a otro arreglo, pense que lo podia hacer con la funcion strcpy(), pero despues me di cuenta que esta solo se usa para cadenas. Entonces que otra manera hay de hacer esto??

gracias
116  Programación / Programación C/C++ / Lista doblemente ligada en: 14 Noviembre 2013, 23:54 pm
Saludos tengo una lista doblemente ligada que me inserta por la cabeza, por el final, despues y antes de un elemento que se le pide al usuario, todavia no esta terminado pero el problema que tengo es con el caso de insertar antes de un elemento dado, que me truena el programa y no entiendo por que, creo que el problema es que una vez que le pido al usuario el numero antes del que quiero ingresar mando llamar a la funcion anterior

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define INSERTAR_CABEZA 1
  4. #define INSERTAR_ANTES 2
  5. #define INSERTAR_DESPUES 3
  6. #define INSERTAR_FINAL 4
  7. #define SALIR 5
  8.  
  9. typedef struct nodo
  10. {
  11.    int elemento;
  12.    struct nodo *sig;
  13.    struct nodo *ant;
  14. }Nodo;
  15.  
  16. Nodo *crearNodo(int insertable);
  17. void insertarCabeza(int insertable,Nodo **cabeza);
  18. void insertar_antes(Nodo *anterior,int insertable);
  19. void insertar_despues(Nodo *posterior,int insertable);
  20. void insertarFinal(Nodo *ultimo,int insertable);
  21. Nodo *buscarElemento(int elementoBuscado,Nodo *cabeza);
  22. void imprimirLista(Nodo *cabeza);
  23. Nodo *ultimoElemento(Nodo *cabeza);
  24. Nodo *Anterior(Nodo *p);
  25.  
  26. int main()
  27. {
  28.    Nodo *cabeza,*anterior,*posterior,*p,*ultimo;
  29.    cabeza = NULL;
  30.    int continuar = 1,opcion,numElementos,insertable,elementoBuscado,i;
  31.    printf("Lista Doblemente Enlazada!\n\n");
  32.    do
  33.    {
  34.        printf("\nMenu\n");
  35.        printf("1) Insertar cabeza de Lista\n");
  36.        printf("2) Insertar antes de elementento\n");
  37.        printf("3) Insertar despues de elemento\n");
  38.        printf("4) Insertar final de Lista\n");
  39.        printf("5) Salir\n");
  40.        scanf("%d",&opcion);
  41.        switch(opcion)
  42.        {
  43.            case INSERTAR_CABEZA:
  44.               printf("Dame el numero de elementos de la lista: ");
  45.               scanf("%d",&numElementos);
  46.               for(i=0;i < numElementos;i++)
  47.               {
  48.                   printf("Dame el elemento a insertar: ");
  49.                   scanf("%d",&insertable);
  50.                   insertarCabeza(insertable,&cabeza);
  51.                   system("cls");
  52.               }
  53.               imprimirLista(cabeza);
  54.               break;
  55.            case INSERTAR_ANTES:
  56.               printf("Antes de que elemento se quiere insertar: ");
  57.               scanf("%d",&elementoBuscado);
  58.               if((p = buscarElemento(elementoBuscado,cabeza))!=NULL)
  59.               {
  60.                   printf("Dame el elemento a insertar: ");
  61.                   scanf("%d",&insertable);
  62.                   anterior = Anterior(p);
  63.                   insertar_antes(anterior,insertable);
  64.               }
  65.               else
  66.                  printf("No se encontro elemento!\n");
  67.               imprimirLista(cabeza);
  68.               break;
  69.            case INSERTAR_DESPUES:
  70.               printf("Despues de que elemento deseas insertar: ");
  71.               scanf("%d",&elementoBuscado);
  72.               if((posterior = buscarElemento(elementoBuscado,cabeza))!=NULL)
  73.               {
  74.                   printf("Dame el elemento a insertar: ");
  75.                   scanf("%d",&insertable);
  76.                   insertar_despues(posterior,insertable);
  77.               }
  78.               else
  79.                  printf("No se encontro elemento!\n");
  80.               imprimirLista(cabeza);
  81.               break;
  82.            case INSERTAR_FINAL:
  83.               printf("Dame el numero de elementos de la lista: ");
  84.               scanf("%d",&numElementos);
  85.               if(estaVacia(cabeza))
  86.               {
  87.                   printf("Dame el elemento a insertar: ");
  88.                   scanf("%d",&insertable);
  89.                   cabeza = crearNodo(insertable);
  90.                   numElementos--;
  91.               }
  92.               for(i = 0;i < numElementos;i++)
  93.               {
  94.                   ultimo = ultimoElemento(cabeza);
  95.                   printf("Dame el elemento a insertar: ");
  96.                   scanf("%d",&insertable);
  97.                   insertarFinal(ultimo,insertable);
  98.               }
  99.               imprimirLista(cabeza);
  100.               break;
  101.            case SALIR:
  102.               continuar = 0;
  103.               break;
  104.        }
  105.        if(continuar)
  106.            system("pause");
  107.    }while(continuar);
  108.    return 0;
  109. }
  110.  
  111. Nodo *crearNodo(int insertable)
  112. {
  113.    Nodo *p;
  114.    p = (Nodo*)malloc(sizeof(Nodo));
  115.    p->elemento = insertable;
  116.    p->sig = NULL;
  117.    p->ant = NULL;
  118.    return p;
  119. }
  120.  
  121. void insertarCabeza(int insertable,Nodo **cabeza)
  122. {
  123.    Nodo *nuevo;
  124.    nuevo = crearNodo(insertable);
  125.    nuevo->sig = *cabeza;
  126.    nuevo->ant = NULL;
  127.    *cabeza = nuevo;
  128. }
  129.  
  130. void insertar_antes(Nodo *anterior,int insertable)
  131. {
  132.    Nodo *nuevo;
  133.    nuevo = crearNodo(insertable);
  134.    anterior->sig->ant = nuevo;
  135.    nuevo->ant = anterior;
  136.    nuevo->sig = anterior->sig;
  137.    anterior->sig = nuevo;
  138. }
  139.  
  140. void insertar_despues(Nodo *posterior,int insertable)
  141. {
  142.    Nodo *nuevo;
  143.    nuevo = crearNodo(insertable);
  144.    posterior->sig->ant = nuevo;
  145.    nuevo->ant = posterior;
  146.    nuevo->sig = posterior->sig;
  147.    posterior->sig = nuevo;
  148. }
  149.  
  150. void insertarFinal(Nodo *ultimo,int insertable)
  151. {
  152.    ultimo->sig = crearNodo(insertable);
  153.    ultimo->sig->sig = NULL;
  154.    ultimo->sig->ant = ultimo;
  155. }
  156.  
  157. void imprimirLista(Nodo *cabeza)
  158. {
  159.    Nodo *ptr;
  160.    for(ptr = cabeza;ptr!=NULL;ptr = ptr->sig)
  161.       printf("%d\t",ptr->elemento);
  162. }
  163.  
  164. Nodo *buscarElemento(int elementoBuscado,Nodo *cabeza)
  165. {
  166.    Nodo *ptr;
  167.    for(ptr = cabeza;ptr!=NULL;ptr = ptr->sig)
  168.    {
  169.        if(ptr->elemento == elementoBuscado)
  170.           return ptr;
  171.    }
  172.    return NULL;
  173. }
  174.  
  175. Nodo *ultimoElemento(Nodo *cabeza)
  176. {
  177.    Nodo *ptr;
  178.    ptr = cabeza;
  179.    while(ptr->sig!=NULL)
  180.       ptr = ptr->sig;
  181.    return ptr;
  182. }
  183.  
  184. int estaVacia(Nodo *cabeza)
  185. {
  186.    if(cabeza == NULL)
  187.       return 1;
  188.    else
  189.       return 0;
  190. }
  191.  
  192. Nodo *Anterior(Nodo *p)
  193. {
  194.    return p->ant;
  195. }
  196.  

gracias
117  Programación / Programación C/C++ / programa tarjetas en: 9 Noviembre 2013, 06:02 am
Saludos

Tengo el siguiente programa que dice:

Tengo n tarjetas numeradas en cierto orden(al azar), y hay que eliminar algunas de esas tarjetas, de tal forma que las que queden esten ordenadas ascendentemente,  y cuyos valores esten entre el rango 1 <= valores <= 100,000, esto ya lo codifique pero el problema que tengo es que me pide encontrar el menor numero de tarjetas que se pueden eliminar y es lo que no entiendo como hacerlo, o sea que tengo que buscar todas las posibilidades y despues verificar cual es la que puede eliminar el menor numero de tarjetas?? el codigo es el siguiente:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #define VALORES 100000
  5.  
  6. typedef struct nodo
  7. {
  8.    int dato;
  9.    struct nodo *sig;
  10. }Nodo;
  11.  
  12. void agregarTarjetas(int x,Nodo **cabeza);
  13. void imprimirTarjetas(Nodo *cabeza);
  14. void eliminarTarjetas(Nodo *cabeza);
  15. Nodo *crearNodo(int x);
  16.  
  17.  
  18. int main()
  19. {
  20.    int numeroTarjetas,i,x;
  21.    Nodo *cabeza;
  22.    cabeza = NULL;
  23.    srand(time(NULL));
  24.    do
  25.    {
  26.        printf("Dame numero de tarjetas: ");
  27.        scanf("%d",&numeroTarjetas);
  28.        system("cls");
  29.    }while((numeroTarjetas < 1)||(numeroTarjetas > 100));
  30.    for(i = 0;i < numeroTarjetas;i++)
  31.    {
  32.        x = rand()% VALORES+1;
  33.        agregarTarjetas(x,&cabeza);
  34.    }
  35.    printf("Archivo original\n");
  36.    imprimirTarjetas(cabeza);
  37.    eliminarTarjetas(cabeza);
  38.    printf("despues\n");
  39.    imprimirTarjetas(cabeza);
  40.    return 0;
  41. }
  42.  
  43. void agregarTarjetas(int x,Nodo **cabeza)
  44. {
  45.    Nodo *nuevo;
  46.    nuevo = crearNodo(x);
  47.    nuevo->sig = *cabeza;
  48.    *cabeza = nuevo;
  49. }
  50.  
  51. Nodo *crearNodo(int x)
  52. {
  53.    Nodo *p;
  54.    p = (Nodo*)malloc(sizeof(Nodo));
  55.    p->dato = x;
  56.    p->sig = NULL;
  57.    return p;
  58. }
  59.  
  60. void imprimirTarjetas(Nodo *cabeza)
  61. {
  62.    Nodo *ptr;
  63.    for(ptr = cabeza;ptr!=NULL;ptr = ptr->sig)
  64.       printf("[%d]",ptr->dato);
  65. }
  66.  
  67. void eliminarTarjetas(Nodo *cabeza)
  68. {
  69.    Nodo *ptr1,*ptr2;
  70.    for(ptr1 = cabeza,ptr2 = ptr1->sig;ptr2!=NULL;ptr2 = ptr2->sig)
  71.    {
  72.        if(ptr2->dato < ptr1->dato)
  73.           ptr1->sig = ptr2->sig;
  74.        else
  75.           ptr1 = ptr1->sig;
  76.    }
  77. }
  78.  

esta la hice con listas con apuntadores porque pense que seria mas facil hacer las eliminaciones, aunque tambien lo habia hecho de esta otra manera, y las dos funcionan solo que no se como hacer un algoritmo que me determine cual es el menor numero de tarjetas que se pueden eliminar

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <time.h>
  5. #define VALORES 100000
  6.  
  7. int *ingresarValores(int numeroTarjetas,FILE *fd);
  8. void eliminarTarjetas(int tarjetas[],int numeroTarjetas,FILE *fd);
  9.  
  10. int main()
  11. {
  12.    FILE *fd;
  13.    int numeroTarjetas,*tarjetas;
  14.    srand(time(NULL));
  15.    if((fd = fopen("F:\\Archivo_Analisis_Algoritmos.txt","w"))!= NULL)
  16.    {
  17.        do
  18.        {
  19.            printf("Dame el numero de tarjetas: ");
  20.            scanf("%d",&numeroTarjetas);
  21.            system("cls");
  22.        }while((numeroTarjetas < 1)||(numeroTarjetas > 1000));
  23.        fprintf(fd,"Archivo de Texto:\n\n");
  24.        tarjetas = ingresarValores(numeroTarjetas,fd);
  25.        eliminarTarjetas(tarjetas,numeroTarjetas,fd);
  26.    }
  27.    else
  28.       printf("No se pudo crear archivo\n");
  29.    return 0;
  30. }
  31.  
  32. int *ingresarValores(int numeroTarjetas,FILE *fd)
  33. {
  34.    int i,*buffer;
  35.    buffer = (int*)malloc(numeroTarjetas*sizeof(int));
  36.    for(i = 0;i < numeroTarjetas;i++)
  37.    {
  38.        buffer[i] = rand()% VALORES+1;
  39.        printf("[%d]",buffer[i]);
  40.        fprintf(fd,"%d,",buffer[i]);
  41.        if((i%10==0)&&(i!=0))
  42.           fprintf(fd,"\n");
  43.    }
  44.    return buffer;
  45. }
  46.  
  47. void eliminarTarjetas(int tarjetas[],int numeroTarjetas,FILE *fd)
  48. {
  49.    int i,j;
  50.    for(i=0;i < numeroTarjetas;i++)
  51.    {
  52.        for(j=i+1;j < numeroTarjetas;j++)
  53.        {
  54.            if(tarjetas[j] < tarjetas[i])
  55.               tarjetas[i] = -1;
  56.        }
  57.    }
  58.    fprintf(fd,"\n\nTarjetas eliminadas\n");
  59.    for(i=0;i < numeroTarjetas;i++)
  60.    {
  61.        if(tarjetas[i] != -1)
  62.           fprintf(fd,"[%d]",tarjetas[i]);
  63.    }
  64.  
  65. }
  66.  

por ejemplo si tengo los numeros [11,500][22,924][13,449][21,933][13,150][1,858][11,516], se que el menor numero de eliminaciones serian 4, y quedaria asi:

[11,500][13,449][21,933], pero trate de buscarle la logica y no supe como

de antemano gracias
118  Programación / Programación C/C++ / colores de texto en: 6 Noviembre 2013, 01:19 am
Saludos

Si tengo un codigo con varios printf, y quiero cambiarle el color de fuente a solo uno de esos printf, como lo haria, intente con system("color"); pero imprime todo de ese color y no solo el printf que yo quiero,tendria que agregar alguna libreria o algo asi??

gracias
119  Programación / Programación C/C++ / fwrite y estructuras en: 4 Noviembre 2013, 02:14 am
Saludos

si tengo la siguiente estructura en la que tengo campos de tipo cadena y campos de tipo entero, cual es la manera para poder escribirlos en un archivo utilizando a fuerzas la funcion fwrite()??

Código
  1. typedef struct
  2. {
  3.    char nombre[MAX];
  4.    int edad;
  5.    char ciudad_residencia[MAX];
  6. }Persona;
  7.  

el problema que tengo es con el campo int me imprime basura  a la hora de escribir en el archivo:

Código
  1. int main()
  2. {
  3.    FILE *fd;
  4.    Persona p;
  5.    agregarDatos(&p);
  6.    if((fd = fopen("F:\\gente.txt","w"))!=NULL)
  7.    {
  8.        fwrite(p.nombre,sizeof(char),strlen(p.nombre),fd);
  9.        fwrite(&p.edad,sizeof(int),1,fd);// aqui esta el error
  10.        fwrite(p.ciudad_residencia,sizeof(char),strlen(p.ciudad_residencia),fd);
  11.    }
  12.    else
  13.       printf("No se pudo crear archivo\n");
  14.    return 0;
  15. }

tengo entendido que con el fprintf me puedo quitar de problemas, pero tengo que usar a fuerzas el fwrite

de antemano gracias

120  Programación / Programación C/C++ / cambiar for a do-while en: 1 Noviembre 2013, 23:28 pm
Saludos tengo la siguiente funcion que tiene un for el cual quiero convertirlo a un do-while, pero no se bien como hacerlo

Código
  1. void imprimirLista(Nodo *cabeza)
  2. {
  3.    Nodo *p,*ult;
  4.    for(p = cabeza,ult = fin(cabeza);p!=ult;p = p->sig)
  5.    {
  6.        printf("%s\t",p->nombre);
  7.        printf("%d\t",p->edad);
  8.        printf("%s\n\n",p->ciudad_residencia);
  9.    }
  10. }
  11.  
  12. Nodo *fin(Nodo *cabeza)
  13. {
  14.    Nodo *ptr = cabeza;
  15.    while(ptr->sig!= NULL)
  16.        ptr = ptr->sig;
  17.    return ptr;
  18. }

el principal problema es que no se donde poner el p = p->sig en el do while?? probe con lo siguiente pero me marca errores

Código
  1. void imprimirLista(Nodo *cabeza)
  2. {
  3.    Nodo *p,*ult;
  4.    p = cabeza;
  5.    ult = fin(cabeza);
  6.    do
  7.    {
  8.        printf("%s\t",p->nombre);
  9.        printf("%d\t",p->edad);
  10.        printf("%s\n\n",p->ciudad_residencia);
  11.        p = p->sig;
  12.    }while(p!=ult);
  13. }

gracias
Páginas: 1 2 3 4 5 6 7 8 9 10 11 [12] 13 14 15 16 17 18 19 20 21 22
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines