• Martes 18 de Junio de 2024, 13:43

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Temas - i82maria

Páginas: [1] 2
1
Visual C++ / Arboles En Qt4 Con C++
« en: Martes 5 de Diciembre de 2006, 18:17 »
Hola a todos, necesito obtener aquellos nodos que sean descendientes a un nodo. He conseguido que em diga cuantos nodos tienen descendientes, pero no cuales son. Si alguien sabe de c++ y de qt, Por favor ruego me ayuden.
Aqui adjunto el texto del codigo que tengo hecho.

[CODE]
int NodoBinario::numDescendientes(FunctorNodo *f)
{
   int numDes = 0;
   if(esHoja())  //no tiene hijos
       return 0;      
   else {
       if(hijoIzquierdo())
          numDes+= 1+hijoIzquierdo()->numDescendientes(f);
       if(hijoDerecho())
          numDes+= 1+hijoDerecho()->numDescendientes(f);
   }
   return numDes;
}   

Y luego en el principal se hace asi:
//DESCENDIENTES DE UN NODO
void Practica::descendientes(void)
{
bool ok = true;
QString resultado; //creamos una lista

// Creamos un functor que inserte el campo informativo de
// cada nodo en la lista
InsertarLista(functor);
   
// Pedimos un entero al usuario
QString str=QInputDialog::getText( this, "Descendientes nodo", "Introduzca un valor entero",
        QLineEdit::Normal, QString::null, &ok);

  if ( ok && !str.isEmpty() )
  {
    int numero = str.toInt( &ok );
    if (! ok )
    {
      QMessageBox::critical(this, appName, "Debe introducir un número entero");
    }
    else
    {
      _nodoActual = _arbol->buscarNodo(numero);
      if(_nodoActual) {
                 _nodoActual->numDescendientes(&functor);
        QMessageBox::information(this, appName, "El numero de descendientes es: " +QString::number(_nodoActual->numDescendientes(&functor)));  

      }
      else
      {
            QMessageBox::information(this, appName, "EL nodo no pertenece al arbol");
      }
    }
   }
     resultado = functor.verResultado();
     QMessageBox::about(this, appName, "Los descendientes son= " +resultado);
}     

Y aqui es donde tengo mi problema q no me muestra los descendientes.

Gracias, saludos.

2
GNU/Linux / Necesito Un Linux Que Tengan Librerias Qt4
« en: Jueves 21 de Septiembre de 2006, 19:51 »
Hola a todos, tengo que hacer unas practicas con la librerias de qt, version 4, en lenguaje C++ y necesito saber si alguien me puede recomendar algun linux para instalar en casa, o algun sitio donde me puedan ayudar a hacer esto.
Gracias

3
C/C++ / Listas Simples En C
« en: Jueves 8 de Junio de 2006, 13:35 »
Hola a todos necesito crear dos listas a partir de un fichero de texto en C.
La funcion recibe como parametro el nombre del fichero y un entero que puede ser o 1 o 2, si es 1, debe contener solo los apellidos y si es 2 los dni.
Pongo aqui abajo el codigo que he hecho para ver si le encuentran algun fallo.
Pq es q solo me muestra una linea por cada lista.
[CODE]
#include <stdio.h>
#include <malloc.h>
#include <string.h>

struct datos{
   char ape1[15];
   char DNI[10];
   int edad;
 };

struct lista1{
   char ape1[15];
   struct lista1 *sig;
 };

struct lista2{
   char DNI[10];
   struct lista2 *sig;
 };


main()
{
  char fichero[15];
  char resp;
  struct datos d;
  struct lista1 *cabeza1 = NULL;
  struct lista2 *cabeza2 = NULL;
  int n;
  int opc;
  printf("\nIntroduzca el fichero: ");
  scanf("%s", fichero);
  getchar();
  fflush(stdin);
 
  do{
   d = introducirDatos();
   anyadirAlumnos(d, fichero);
   printf("\nDesea introducir un alumno mas : ? ");
    scanf("%c", &resp);
    getchar();
    fflush(stdin);
   
    }while(resp =='s' || resp == 'S');
   
    getchar();
    verFichero(fichero);
    getchar();
   do{
   cabeza1 = pasarFichero(fichero, 1);
     printf("\nLISTA APELLIDOS\n");
     mostrarLista1(cabeza1);
     getchar();
   
   cabeza2 = pasarFichero(fichero, 2);
 
       printf("\nLISTA DNI\n");
     mostrarLista2(cabeza2);
 
    printf("\nDesea crear otra lista?\n");
    scanf("%d", &opc);
    }while(opc <2);
     
 }



void *pasarFichero(char *fichero, int n)
  {
     FILE *pf;
     struct datos d;
     struct lista1 *cabeza1 = NULL;
     struct lista2 *cabeza2 = NULL;
     struct lista1 *aux1 = NULL;
     struct lista2 *aux2 = NULL;
     if((pf = fopen(fichero, "r"))==NULL){
         printf("Error de memoria\n");
    exit(-1);
   }
   while(fscanf(pf, "%s %s %d", d.ape1, d.DNI, &d.edad)==3)
   {
      if(n==1){
         aux1 = nuevoElemento1();
         strcpy(aux1->ape1, d.ape1);
         if(!listaVacia1(cabeza1)){
          cabeza1 = aux1;
          }
          else{
                aux1->sig = cabeza1;
      cabeza1 = aux1;
      }
      return (cabeza1);
           }
      if(n==2){
           aux2 = nuevoElemento2();
         strcpy(aux2->DNI, d.DNI);
         if(!listaVacia2(cabeza2)){
          cabeza2 = aux2;
          }
          else{
                aux2->sig = cabeza2;
      cabeza2 = aux2;
      }
      return(cabeza2);
         }
       }
  }

4
C/C++ / Listas Dobles En C
« en: Martes 6 de Junio de 2006, 17:18 »
Hola a todos, que tal?, tengo un problemilla necesito pasar de un fichero binario en C a una lista doblemente enlazada. Yo tengo el codigo, pero no se pq no me muestra bien la lista doble, si alguien puede ayudarme por favor, aqui abajo adjunto el codigo q tengo hecho. Gracias
Esto es el codigo de las funciones.
Código: Text
  1.  
  2. /************** funcion para reservar memoria para el nuevo elemento*/
  3. struct listaDoble *nuevoElemento()
  4. {
  5.    struct listaDoble *a;
  6.    a = (struct listaDoble*)malloc(sizeof(struct listaDoble));
  7.    return a;
  8.    
  9. }
  10.  
  11. /*********** funcion que calcula si la lista esta vacia**************/
  12. int listaVacia(struct listaDoble*cabeza)
  13. {
  14.    if(cabeza == NULL) /*la lista esta vacia*/
  15.       return 1;
  16.    else
  17.        return 0;     /*la lista no esta vacia*/
  18.  }
  19.  
  20. void leerDatosFichero(char *fichero, struct listaDoble **cabeza)
  21. {
  22.   FILE *p;
  23.   struct listaDoble *aux;
  24.  
  25.   /*se reserva espacio para el nuevo elemento*/
  26.   aux = nuevoElemento();
  27.   p = fopen(&#34;conejos2006.bin&#34;, &#34;rb&#34;);
  28.   if(p== NULL)
  29.   {
  30.      printf(&#34;&#092;nError de lectura del fichero&#092;n&#34;);
  31.      exit(-1);
  32.   }
  33.  
  34.   while(fscanf(p, &#34;%s %d %lf&#34;, aux-&#62;codigo, &aux-&#62;edad, &aux-&#62;peso)==3)
  35.   {
  36.      insertarLista(cabeza, aux-&#62;codigo, aux-&#62;edad, aux-&#62;peso);
  37.   }
  38.  
  39.   fclose(p);
  40. }
  41.  
  42. /************funcion que inserta elementos al comienzo de la lista*/  
  43.  void insertarLista(struct listaDoble **cabeza, char *codigo, int edad, double peso)
  44.  {
  45.     struct listaDoble *nuevo = NULL;
  46.     struct listaDoble *aux = NULL;
  47.    
  48.     /*se reserva espacio para el nuevo elemento*/
  49.     nuevo = nuevoElemento();
  50.     strcpy(nuevo-&#62;codigo, codigo);
  51.     nuevo-&#62;edad = edad;
  52.     nuevo-&#62;peso = peso;
  53.    
  54.     if(listaVacia(*cabeza))
  55.     {
  56.       *cabeza = nuevo;
  57.       nuevo-&#62;sig = NULL;
  58.       nuevo-&#62;anterior = NULL;
  59.     }
  60.    
  61.     else {
  62.     aux = *cabeza;
  63.      nuevo-&#62;sig = aux;
  64.      aux-&#62;anterior = nuevo;
  65.      *cabeza = nuevo;
  66.      }
  67.        
  68.  }
  69. /*****************muestra los elementos de la lista desde el principio hasta el fin***/
  70. void visualizarDirecta(struct listaDoble *cabeza)
  71. {
  72.   if(!listaVacia(cabeza))
  73.   {
  74.     printf(&#34;&#092;n Codigo: %s&#092;n&#34;, cabeza-&#62;codigo);
  75.     printf(&#34; Edad: %d&#092;n&#34;, cabeza-&#62;edad);
  76.     printf(&#34; Peso: %.3lf&#092;n&#34;, cabeza-&#62;peso);
  77.     visualizarDirecta(cabeza-&#62;sig);
  78.   }
  79. }
  80.  
  81.  /****************funcion que comprueba si existe un fichero***/
  82.  int existeFichero()
  83.  {
  84.    FILE *f;
  85.    f = fopen(&#34;conejos2006.bin&#34;, &#34;rb&#34;); /*abre fichero para lectura*/
  86.    if(f == NULL) /*el fichero no existe*/
  87.    {
  88.       return 0;
  89.    }
  90.     else {
  91.        fclose(f);
  92.        return 1;
  93.      }
  94.   }  
  95. [QUOTE]
  96. Aqui pongo el principal es decir el main.
  97. [/QUOTE]
  98.  
  99.  
#include "cabecera.h"

main()
{
struct listaDoble *cabeza = NULL;
int opc;
int existeF;
char fichero[30];

/*
  if(argc <2) {
          printf("El numero de argumentos debe ser 2\n");
     exit(-1);
     }
   */
do{
   do{
     opc = menu();
     }while(opc <1 || opc >10);
     
     switch(opc)
     {
      case 1: /*Pasar del fichero a una lista*/
       /*
       guardarDatosFichero(argv[1], cabeza);
       printf("\nLos datos se han guardado correctamente\n");
    printf("\nPulse intro para seguir");
    getchar();
    getchar();*/
    existeF = existeFichero();
    if(existeF == 0)
    {
      printf("No existe el fichero conejos\n");
      exit(1);
     }
     else {
       leerDatosFichero("conejos2006.bin", &cabeza);
       printf("Los datos han sido grabados\n");
       visualizarDirecta(cabeza);
       printf("La lista es \n");
       
     printf("\nPulse intro para seguir");
    getchar();
    getchar();
    }
         
       break;
       
       case 10:
         printf("\nSALIR DEL PROGRAMA DE CONEJOS\n");
    printf("\nPulse intro para seguir\n");
   
    getchar();      
       break;
       
     }
    }while(opc!=10);
  }
 
  /*******************funcion del menu de opciones de la lista*****************/
int menu()
{
  int opc;
  system("clear");
  printf("\n MENU DE PRACTICA DE LISTAS\n\n");
  printf("\n 1. Pasar del fichero a lista en un fichero. ");
  printf("\n 10. Salir del programa. ");
  printf("\n\n  Introduzca una opcion: ");
  scanf("%d", &opc);
 
  return opc;
}

5
ADA / Necesito Alguien Que Sepa Pvm
« en: Martes 3 de Enero de 2006, 15:32 »
Hola, vereis, necesito alguien qye me pueda orientar, tengo que ahcer una practica en pvm, no sabia de que hacerlo, y se me ha ocurrido si estaria bien, hacerlo de producto de matrices, o es demasiado simple. Por favor, hemirado y re que te mirado en internet y no encontre nada interesante. alguien pede ayudarme.

Gracias. FELIZ AÑO A TODOS

6
C/C++ / Ayuda Con El Codigo Es De Ficheros, Listas En C
« en: Martes 13 de Diciembre de 2005, 14:58 »
Hola a todos el codigo es este.
[CODE]
La funcion que me piden, qes que dado el nombre del fichero como parametro, y un entero, cree dos listas, una que contenta solo los apellidos y otra que contenga solo los dni. Si el entero es 1, la lista contendra solo los apellidos, y si el entero es 2 la lista contendra solo los dnis. uego me pide que devuelva la cabeza al programa principal.

#include <stdio.h>
#include <malloc.h>
#include <string.h>

struct datos{
   char ape1[15];
   char DNI[10];
   int edad;
  };

struct lista1 {
    char ape1[15];
     struct lista1 *sig;
    };

struct lista2 {
    char DNI[10];
    struct lista2 *sig;
 };


 void *pasarFichero(char *fichero, int n){
  {
     FILE *pf;
     struct datos d;
     struct lista *cabeza1 = NULL;
     struct lista *cabeza2 = NULL;
     struct lista *aux1 = NULL;
      struct lista *aux2 = NULL;
     if((pf = fopen(fichero, "rb"))==NULL){
         printf("Error de memoria\n");
    exit(-1);
   }
   while(fread(&d, sizeof(struct datos),1, pf) == 1) {
      if(n==1){
         aux1 = (struct lista1*)malloc(sizeof(struct lista1));
         strcpy(aux->ape1, d.ape1);
         if(cabeza1 ==NULL){
          cabeza1 = aux1;  
          }
          else{
                aux1->sig = cabeza1;
      cabeza1 = aux1;
      }
      return (cabeza1);
               
         }
       else(n==2){
           aux2 = (struct lista2*)malloc(sizeof(struct lista2));
         strcpy(aux->ape1, d.DNI);
         if(cabeza2 ==NULL){
          cabeza2 = aux2;
         
          }
          else{
                aux2->sig = cabeza2;
      cabeza2 = aux2;
      }
      return(cabeza2);
         }
       }
  }

Por favor, yo hice esta funcion, si hay alguien que sepa como se hace, o que me diga donte te ngo el error. gracuas

7
C/C++ / Pasar De Ficheros A Listas
« en: Lunes 12 de Diciembre de 2005, 20:40 »
Tengo una estructura llamada datos, que contiene los campos, dni, apellidos, y edad. Creo un fichero que tenga esos campos. Y ahora tengo que creear una lista con los apellidos, y otra con los dnis. Si alguien me puede ayudar, estoy desesperada. Gracias
Esto es lo que yo llevo hecho hasta ahora.

[CODE]
#include <stdio.h>
#include <malloc.h>
#include <string.h>

struct datos{
   char ape1[15];
   char DNI[10];
   int edad;
 
};
/*
struct lista1 {
    char ape1[15];
   
    struct lista *sig;
    };

struct lista2 {
    char DNI[10];
    struct lista2 *sig;
 };
 
  */  
struct datos introducirDatos();
void anyadirRegistro(struct datos d, char *fichero);
void verFichero(char *fichero);

 

main()
{
 FILE *p;
 char fichero[20];
 char resp;
  struct datos d;
  int n;
 
 
  printf("\nIntroduzca el nombre del fichero que desee: ");
  gets(fichero);
  fflush(stdin);
 
   

/*   struct actores *v;
   v = (struct actores *) malloc(sizeof(struct actores);*/
 do{
  d = introducirDatos();

 
  printf("¿Desea introducir un estudiante mas: ");
  scanf("%s", &resp);
  fflush(stdin);
 
  }while(resp == 's' || resp == 'S');
   anyadirRegistro(d, fichero);
 
/verFichero(fichero);
 }
 
struct datos introducirDatos()
{
  struct datos aux;
   printf("Apellido1: ");
    gets(aux.ape1);
    printf("DNI: "),
    gets(aux.DNI);
    printf("Edad: ");
    scanf("%d", &aux.edad);
    getchar();
    fflush(stdin);
 return (aux);
 }
 
void anyadirRegistro(struct datos d, char *fichero)
{
  FILE *fp;
 fp = fopen(fichero, "ab");

 
  fwrite(&d, sizeof(struct datos),1, fp);
  fclose(fp);
}
 
void verFichero(char *fichero)
  {
    FILE *fp;
    struct datos d;
    fp = fopen(fichero, "rb");
    /*)==NULL) {
        printf("Error al abrir el fichero\n");
   exit(-1);
    }*/
    while(fread(&d, sizeof(struct datos),1 , fp)==1)
    {  
         printf(" %s %s  %d \n", d.ape1, d.DNI, d.edad);
     }
     fclose(fp);
  }
/*

8
C/C++ / Vector De Estructuras Almacenarlo En Listas En C
« en: Sábado 25 de Junio de 2005, 22:58 »
Hola a todos, necesito si alguien puede orientarme en como hacer lo siguiente:

Una funcion que reciba un vector de estructuras, struct registro *v, y almacene sus datos en dos listas, lista 1 y lista2, ordenadas por el campo nombre, de forma tal que en la lista 1 esten los registros cuyo campo anyo sea impar
y en la lista 2 aquellos que son pares.

struct registro
{
char nombre[15];
char pais[15];
int anyo;
};

struct registro *v;

Por favor, si alguien me puede ayudar, gracias.

9
C/C++ / Matriz De Tres Dimensiones En C
« en: Miércoles 22 de Junio de 2005, 19:13 »
Hola a todos tengo que hacer un ejercicio super interesante, pero necesito ayuda, porque estoy un poco perdida, resulta que se trata de una matriz dinamica que almacena una serie de notas obtenidas en unas asignaturas por un conjunto de alumnos. Me dice que las filas de la matriz, son 6 que s el numero de cursos por año, las columnas son las asignaturas que son 5 por año y otra dimension,es la de calificaciones correspondientes a cda curso.

tambien me dice que hay un fichero binario que contiene el nombre del alumno y un identificador.

Ej:
Pepa 1
Luis 2
etc.

Me pide q calcule el numero de estudiantes q hay en el fichero, q cree la matriz e inserta las calificaciones de cada estudiante. en la fila de la matriz correspondiente al identificador del alumno en el fichero,
Si alguien se le da bien esto y me puede dar una orientacion, la idea la tengo pero no s como exponerla. Gracias.

10
C/C++ / Error De Ejecucion De Listas En C
« en: Viernes 17 de Junio de 2005, 23:42 »
Hola a todos, que ta, estoy haciendo una practica de listas, parece q el programa compila perfectamente, pero a la hora de ejecutar, no se porque me da un error de ejecucion que pone
Nombre........................NULL
y no se porque es, creo que dice q es en la funcion visualizarNodo de una lista.

void visualizarNodo(struct lista *cabeza)
{

   
        printf("\n Nombre..........: %s", cabeza->nombre);
         printf("\n Apellido1.......: %s", cabeza->ape1);
         printf("\n Apellido2.......: %s", cabeza->ape2);
         printf("\n Edad............: %d", cabeza->edad);
       printf("\n");      
      
}No se pero si alguien puede ayudarme, porfa que lo haga, pq no se pq da ese tipo de error.
 gracias

11
C/C++ / Relacionar Dos Ficheros De Texto En C
« en: Martes 14 de Junio de 2005, 13:51 »
Hola buenas, tengo un problemilla a la hora de hacer una funcion, resulta que me piden, que teniendo un fichero de texto de clientes (nombre, apellidos, dni, y direccion) y uno de coches(tipo, matricula, coste), debo visualizar dad su matricula un coche, y su clienre correspondiente. Y bueno tengo la idea, de que si tengo q abrir los dos ficheros, primero en el de coches, buscar la matricula, pero luego, me pierdo a la hora de relacionar, para buscar el Nif en el de clientes, y q me muestre aquel cliente q tiene ese coche.

Tambien cuenta con un registro binario, (matri, NIF), tengo q hacer uso de este, para relacionar los otros?.

Aqui pongo el codigo q he hecho, si alguien puede ayudarme, para decirme donde tengo el fallo, no consigo q me ejecute bien.

[CODE]
int consultaCocheCliente(int matri)
{
   FILE *fp1, *fp2, *fp3;
   struct vehiculo c1;
   struct propietario p1;
   struct vehiculoPropietario bin;
   
   int coincide = 0;

   fp1 = fopen("vehiculos.txt", "r");

   fp2 = fopen("propietarios.txt", "r");

   fp3 = fopen("vehiculosPropietario.bin", "rb");

   while(fscanf(fp1, "%s %d %f", c1.tipo, &c1.matri, &c1.coste) == 3)
   {
      if(c1.matri == bin.matri)
      {

        while(fscanf(fp2, "%s %s %s %s", p1.nombre, p1.apellidos, p1.NIF, p1.direccion) ==4)
        {
          if(strcmp(p1.NIF, bin.NIF)==0)
          {

                 imprimirCocheMatricula(bin.matri);
                 imprimirPropietarioNIF(p1.NIF);
                coincide = 1;
          }            
        }
      }         
   }
    return(coincide);
   fclose(fp1);
   fclose(fp2);
   fclose(fp3);
}
Gracias
Saludos Maria

12
C/C++ / Matrices Tridimensional En C
« en: Miércoles 8 de Junio de 2005, 19:55 »
Hola a todos, a  ver como explico yo esto, resulta que tengo que hacer una practica que va sobre matrices tridimensionales en C, pues bien, la reserva ya se como se hace, en este caso es asi:

byte reservaMatriz(byte ***imagen, int f, int c)
  {    int i;
 
      *imagen = (byte **)malloc((f)*sizeof(byte *));
      for(i=0; i< f; i++)
      {
         (*imagen) = (byte *) malloc(c* sizeof(byte));
      }
   
  }

La matriz se llama imagen,y la funcion para guardarla en un fichero es esta:
se le pasa el nombre del fichero, la matriz, el numero d efilas y columnas y el nivel de gris de la imagen.

void crearFicheroMixto(char *fichero, byte **imagen, int f, int c, int n_gris)
  {
   /*aqui la imagen se pasa como puntero doble pq ya no lo vamos a modificar*/
   
       char cadena[10]; //para el comentario de la cabecera
    FILE *pf;
    int i;
 
    pf = fopen(fichero, "w"); /*abrimos el fichero para escritura en modo texto*/   
    if(pf == NULL)
    {
       printf("\nError de apertura, del fichero %s \n", fichero);
      exit(-1);
    }
    fprintf(pf, "%s\n", "P5");
   fprintf(pf, "%d %d\n", c, f);
   fprintf(pf, "%d\n", n_gris);
   
   /*escribimos la parte binaria*/
   
   for(i=0; i<f; i++)
   {
     fwrite(imagen, sizeof(byte), c, pf);
   }
   fclose(pf); /*cerramos el fichero*/
}

Pues bien, mi problema esta, que no se muy bien como enfocar ahora esto, el proceso de binarizacion, si alguien sabe darme alguna idea, se lo agradeceria.Muchas gracias

Binarización
Consiste en trasformar una imagen de niveles de gris en una imagen binaria, esto es, en la que tan solo hay dos niveles de gris: 0 (negro) y 255 (blanco). La transformación se realiza según la función:
 0 siI(i, j)<=t

255 siI()i, j >t
Siendo I(i,j), el valor de luminosidad del pixel colocado en las coordenadas (i,j) de la imagen, y t el valor de umbral para la binarización.

13
C/C++ / Listas Relacionadas Con Ficheros En C
« en: Miércoles 1 de Junio de 2005, 14:40 »
Hola a todos, que tal, vereis tengo un problemilla, tengo hecha una practica de listas, que tiene q hacer una serie de cosas,insertar al principio, insertar al final, insertar por apellido1, borrar por apellido1, visualizar por apellido1, etc. La cuestion es que me piden que cree la lista, a partir de los datos incluidos en un fuichero texto, es decir, que la funcion crear Lista, debe incluir la lectura e inserción de todos los registros que existe en el fichero.
Pues bien yo tengo la practica entera, pero no he conseguido que escriba en el fichero, solo que lo lea del fichero, asi que les pongo el codigo que tengo de la funcion cogerDatosTexto, y si alguien sabe como enfocar la funcion crear Lista, por favor que m eche una mano.

Código: Text
  1.  
  2. #include &#34;listas.h&#34;
  3.  
  4. void cogerDatosTexto(struct lista **cabeza)
  5. {
  6.  
  7.     FILE *p; //declaro un puntero al fichero
  8.     struct lista *actual;
  9.     struct lista *aux;
  10.   char nombre[15];
  11.   char ape1[20];
  12.   char ape2[20];
  13.   int edad = 0;
  14.  
  15.  if((p=fopen(&#34;listas.txt&#34;,&#34;r&#34;)) == NULL) // abro para lectura
  16.  {
  17.    printf(&#34;&#092;n Error al abrir el archivo&#092;n&#34;);
  18.    exit (1);
  19.  }
  20.  
  21.   *cabeza=NULL;
  22.  
  23.     while(fscanf(p,&#34;%s %s %s %d&#34;,nombre,ape1,ape2,&edad)== 4)
  24.     {
  25.     //reservamos espacio para el nuevo elemento
  26.     actual = nuevoElemento();
  27.        
  28.      strcpy(actual-&#62;nombre,nombre);
  29.     strcpy(actual-&#62;ape1,ape1);
  30.     strcpy(actual-&#62;ape2,ape2);
  31.     actual-&#62;edad=edad;
  32.     actual-&#62;sig = NULL;
  33.     if(*cabeza ==NULL)
  34.       *cabeza = actual;
  35.     else
  36.       aux-&#62;sig = actual;
  37.     aux = actual;
  38.   }
  39.    fclose(p);
  40.  
  41. }
  42.  
  43.  
  44.  


Aqui les pongo el fichero de cabecera

Código: Text
  1.  
  2. /*Declaracion de estructuras y funciones*/
  3.  
  4. #include &#60;stdio.h&#62;
  5. #include &#60;stdlib.h&#62;
  6. #include &#60;conio.h&#62;
  7. #include &#60;string.h&#62;
  8. #include &#60;malloc.h&#62;
  9. #define SI 1
  10. #define NO 0
  11.  
  12. struct lista
  13. {
  14.     char nombre[15];
  15.     char ape1[20];
  16.     char ape2[20];
  17.     int edad;
  18.     struct lista *sig;
  19. };
  20. struct lista *nuevo;
  21. void cogerDatosTexto(struct lista **cabeza);
  22.  
  23. void introducirDatos(struct lista *dat);
  24.  
  25. struct lista* nuevoElemento();
  26. int presentaMenu(void);
  27. void crearLista(struct lista **cabeza);
  28. int listaVacia(struct lista *cabeza);
  29. void insertarPrincipio(struct lista **cabeza);
  30. void visualizarNodo(struct lista *cabeza);
  31.  
  32. void mostrarLista(struct lista *cabeza);
  33. void insertarFinal(struct lista **cabeza);
  34. void insertarPorApellido1(struct lista **cabeza,char *ape1);
  35.  
  36. void visualizarPorApellido1(struct lista *cabeza,char *ape1);
  37. struct lista* buscarPersona(struct lista *cabeza, char *ape1);
  38. void visualizarCabezaCola(struct lista *cabeza);
  39. void visualizarColaCabeza(struct lista *cabeza);
  40. void liberarMemoria(struct lista **cabeza);
  41. void liberarMemoriaRecursivo(struct lista **cabeza);
  42. void grabarLista(struct lista *cabeza, char *fichero);
  43. void borrarPorApellido1(struct lista **cabeza, char *ape1);
  44.  
  45. void liberarRecursivo(struct lista **cabeza);
  46. void liberar(struct lista **cabeza);
  47. int listaOrdenadaApellido(struct lista *cabeza);
  48.  
  49.  


No crean qe quiero q me hagan la practica, ya les digo solo necesito que al insertar datos, se insetten tamien en el fichero, poruqe yo tengo hecho todo el resto de la practica.
Muchas gracias

14
C/C++ / Problemas Al Leer Cadenas, Con Scanf
« en: Viernes 13 de Mayo de 2005, 21:29 »
Hola, buenas, vereis, tengo un problema, a la hora de mostrar el contenido de un fichero en consola. La cosa es la siguiente. Yo tengo q mostrar en pantalla, las personas q hay en un fichero de clientes de coches. Pues bien, lo hago asi:
Código: Text
  1.  
  2. void verPropietarios()
  3. {
  4.   FILE *pf;
  5.   struct propietario p1;
  6.   pf = fopen(&#34;propietarios.txt&#34;, &#34;r&#34;); /*se abre para lectura*/
  7.  
  8.   if(pf == NULL)
  9.   {
  10.     printf(&#34;&#092;n No existe el archivo&#092;n&#34;);
  11.     exit (-1);
  12.   }
  13.  
  14.   /*comienzo a leer datos hasta que llegue al final*/
  15.  
  16.   while(fscanf(pf, &#34;%s %s %s %s&#34;, p1.nombre, p1.apellidos, p1.NIF, p1.direccion) == 4)
  17.   {
  18.      escribirPropietario(p1);
  19.   }
  20.   fclose(pf);
  21. }
  22.  
  23.  

El problema está q cuando me los muestra, me coge para el nombre una palbra, no dos. Es decir, si le meto:
Nombre: Maria Jose
Apellidos: Perez Muñoz
Me troca los campos, y me muestra
Nombre:Maria Apellidos:Jose NIF: Perez.
Entendeis lo que quiero decir no, yo se q esto pasa por leer los campos con scanf, pero es q no se como leerlos, ya q se trata de ficheros texto, si alguien puede decirme como puedo solucionar este problema. Gracias

Código: Text
  1.  
  2. void escribirPropietario(struct propietario p1)
  3. {
  4.   printf(&#34;Nombre: %s  Apellidos: %s NIF: %s  Direccion: %s&#092;n&#34;, p1.nombre, p1.apellidos, p1.NIF, p1.direccion);
  5. }
  6.  
  7.  

15
C/C++ / Problema Al Ejecutar Ficheros En C
« en: Miércoles 11 de Mayo de 2005, 02:21 »
Hola tengo que hacer una practica de ficheros  de c, estoy yendo poco a poco. Y bueno no es plande ponerle todo el codigo, solo les pondre, donde me dice el debug q me da error, dice q es en el fscanf y yo no sé por que.

int buscarPorMatri(char *fichero, int matri, struct vehiculo *coche)
{
  FILE *pfichero;
  int salir = 0;
  int encontrado = 0;
  int cont;
  struct vehiculo auxiliar;
  //struct vehiculo *coche;
 
  pfichero = fopen(fichero, "r"); /*abrimos para lectura*/
   while(salir ==0)
  {
   cont = fscanf(pfichero,"%s %d %f", auxiliar.tipo, &auxiliar.matri, &auxiliar.coste);
   
   /*en la variable cont almacenamos el numero de campos del fichero*/
   
   if(cont!=3) /*hemos llegado al final del fichero*/
      salir = 1;
    else
       if(auxiliar.matri == matri) /*ha encontrado el registro*/
       {
         encontrado = 1;
      salir = 1;
      *coche = auxiliar; /*almacena en coche el registro encontrado*/
      }
   
   }
   fclose(pfichero);
   return encontrado;
}

Yo ejecuto el programa, y se sale ,  y el debug me dice q es el fscanf de estga funcion, si alguien puede ayudarme, y quiere ver el codigo entero que me lo diga. Gracias, necesito consejos.

16
C/C++ / Estructuras De Datos Dinamicas En C
« en: Martes 14 de Diciembre de 2004, 12:59 »
Hola a todos, estoy haciendo una practica de colas en C, otra de pilas, y ambas me dan error de ejecucion de memoria, si alguien tiene tiempo, y puede ayudarme, es que no se donde esta el fallo,es muy importante.Adjunto aqui el codigo de cada una de ellas.Ruego me contesten lo antes posible, gracias.
[CODE]
/*colas.h*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>

struct cola{
   char fichero[31];
   int tamanyo;
   char usuario[31];
   int ident;
   struct cola *sig;
};
void crear(struct cola **frente);
int vaciaCola(struct cola *frente);
void introducirDatos(struct cola *datos);
void anyadir(struct cola **final);
struct cola *nuevoElemento();
void eliminar(struct cola **frente);
void visualizar(struct cola *actual);
void imprimirTrabajo(struct cola **frente);
void listar(struct cola **frente);
int presentaMenu(void);

/*colas.c*/
#include "colas.h"

main()
{
   int opcion;
   struct cola *frente, *final;

   do{

      crear(&frente);
      do{
         opcion = presentaMenu();

       }while(opcion <0 || opcion > 4);
     
      switch(opcion)
      {
   
         case 1: /*Añadir un trabajo*/
                anyadir(&final);
            break;
         case 2: //Imprimir un trabajo
            imprimirTrabajo(&frente);
            break;
         case 3: //listar trabajos
            listar(&frente);
            break;
         case 4: //eliminar un trabajo
            eliminar(&frente);
            break;
         case 0:
            printf("\n\n\nADIOS\n");
            break;
      }
   }while(opcion);
}


      
void crear(struct cola **frente)
{
   *frente = NULL;
}

int vaciaCola(struct cola *frente)
{
   if(frente == NULL)
      return 1;
   else
      return 0;
}

void introducirDatos(struct cola *datos)
{
   
   printf("\nIntroduzca el nombre del fichero: ");
   gets(datos->fichero);
   fflush(stdin);

   printf("\n Introduzca el tamanyo: ");
   scanf("%d", &datos->tamanyo);
   fflush(stdin);

   printf("\nIntroduzca el nombre de usuario: ");
   gets(datos->usuario);
   fflush(stdin);

   printf("\nIntroduzca el identificador: ");
   scanf("%d", &datos->ident);
   getche();
   
}

int presentaMenu(void)
{
   int opcion;
    printf("EJEMPLO DE MANEJO DE COLAS\n");
    printf("-------------------------\n\n");
     printf("1.- Anyadir un trabajo a la cola\n");
     printf("2.- Imprimir un trabajo\n");
     printf("3.- Listar los trabajos\n");
     printf("4.- Eliminar un trabajo\n");
     printf("0.- TERMINAR.\n\n\n");
     printf("Introduce una opcion: ");
     scanf("%d",&opcion);
     fflush(stdin);
    return opcion;
}

struct cola *nuevoElemento()
{
   struct cola *a;
   a = (struct cola *) malloc(sizeof(struct cola));
   return a;
}

void anyadir(struct cola **final)
{
 struct cola *nuevo= NULL;
 struct cola *aux = NULL; //almacena el posterior al que se inserta

 
   printf("AÑADIR TRABAJOS\n");
   printf("**********************\n\n");
 
  nuevo = nuevoElemento();
 introducirDatos(nuevo);


 if(vaciaCola(*final))
 {
    nuevo->sig = *final;
    *final = nuevo;

 }
 else
 {
    aux = *final;
    while((aux->sig) !=NULL){
       aux = aux->sig;
    }
    if(nuevo !=NULL)
    {
       aux->sig = nuevo;
       nuevo->sig =NULL;
    }
 }
}


void eliminar(struct cola **frente)
{
   struct cola *borrar, *ant = NULL;
   int id;

   system("clear");
   printf("ELIMINAR TRABAJOS\n");
   printf("**********************\n\n");
   printf("\n Introduzca el identificador de trabajo: ");
   scanf("%d", &id);


   if(vaciaCola(*frente))
   {
      printf("\nLa cola esta vacia\n");
      exit(0);
   }
   else
   {
      while(borrar!=NULL && borrar->ident == id)
         {
         if(ant == NULL){
            borrar = *frente;
            *frente = (*frente)->sig;
            free(borrar);
            }
            else{
               ant->sig = borrar->sig;
               free(borrar);
               }
         }
            //si son distintos
         ant = borrar;
         borrar = borrar->sig;

   }
}


void visualizar(struct cola *actual)
{
    printf("\n Fichero..................: %s", actual->fichero);
     printf("\n Tamanyo en bytes.........: %d", actual->tamanyo);
     printf("\n Nombre de usuario........: %s", actual->usuario);
     printf("\n Identificador............: %d", actual->ident);
   actual = actual->sig;

   
}

void listar(struct cola **frente)
{
   struct cola *actual;
   system("clear");
   printf("LISTAR TRABAJOS DE LA COLA\n");
   printf("**********************\n\n");
   
   actual = *frente;
   if(!vaciaCola(*frente))
   {
      while(actual!=NULL)
      {
         visualizar(actual);
         printf("\n");
         fflush(stdin);
         printf("\nPulse intro para continuar....");
         getchar();

         actual = actual->sig;
      }
   }
}

void imprimirTrabajo(struct cola **frente)
{
   struct cola *borrar;
   system("clear");
   printf("IMPRIMIR TRABAJOS\n");
   printf("**********************\n\n");
   
   borrar = *frente;
   visualizar(borrar);
      fflush(stdin);
      printf("\nPulse intro para continuar....");
      getchar();
    *frente = (*frente)->sig;
   free(borrar);
}

/*pilas.h*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define ASCENDENTE 1
#define DESCENDENTE 0

struct pila{
   char nombre[15];
   int edad;
   struct pila *sig;
};

void crearPila(struct pila **cima);
int pilaVacia(struct pila *cima);
void apilar(struct pila **cima);
void desapilar(struct pila **cima);
void listarPila(struct pila *cima);
//void eliminarPila(struct pila **cima, char *nombre);
void liberar(struct pila **cima);
int menu(void);

struct pila *nuevoElemento();
void visualizar(struct pila *cima);
void leerDatos(struct pila *dat);
void verCima(struct pila *cima);
void top(struct pila *cima,char *nom, int *ed);

/*pilas.c*/
#include "pilas.h"

main(void)
{
   struct pila *cima;
   int opcion;
   do{
   crearPila(&cima);

   do
   {
      opcion = menu();
      
   }while(opcion <0 || opcion >5);

      switch(opcion)
      {
      case 1: //añadir en la pila
         apilar(&cima);

         break;
      case 2: //ver la cima de la pila
         verCima(cima);
         break;
      case 3: //Desapilar un elemento de la cima
         desapilar(&cima);
         break;
      case 4: //Listar la pila
         listarPila(cima);
         break;
   
      case 5: //Liberar la memoria de la pila
         liberar(&cima);

         break;
      }
   }while(opcion);
}

int menu(void)
{
   int opcion;

   printf("******** EJEMPLO DE PILAS **********\n");
   printf("1. Añadir en la pila\n");
   printf("2. Cima de la pila\n");
   printf("3. Desapilar un elemento de la pila\n");
   printf("4. Listar la pila\n");
   printf("5. Liberar la memoria ocupada por la pila\n\n");
   printf("0. TERMINAR\n\n");
   printf("\nIntroduce una opcion: ");
   scanf("%d",&opcion);
   fflush(stdin);

   return opcion;
}
/************************** Funcion crearPila() *********************/
/* Propósito.........: Crea la pila.
   Parametro.........: Puntero cima d ela pila por referencia
   Devuelve..........: Nada
   */
/********************************************************************/

void crearPila(struct pila **cima)
{
   *cima = NULL;
}

/************************** Funcion pilaVacia() *********************/
/* Propósito.........: Comprueba si la pila está vacia
   Parametro.........: Puntero cima de la pila por valor
   Devuelve..........:  SI si la pila está vacia
                  NO si la pila no lo está.
   */
/********************************************************************/


int pilaVacia(struct pila *cima)
{
   if(cima == NULL)
      return 1;
   else
      return 0;
}


void leerDatos(struct pila *dat)
{
   printf("\nIntroduzca el nombre...: ");
   gets(dat->nombre);
   fflush(stdin);

   printf("\nIntroduzca la edad...: ");
    scanf("%d", &dat->edad);
   fflush(stdin);

    dat->sig = NULL;
}

struct pila *nuevoElemento()
{
   struct pila *a;
   a = (struct pila *) malloc(sizeof(struct pila));
   return a;
}

/************************** Funcion apilar() *********************/
/* Propósito.........: Añade elementos a la pila
   Parametro.........: Puntero cima de la pila por referencia
   Devuelve..........:  Nada
   */
/********************************************************************/

void apilar(struct pila **cima)
{
   struct pila *nuevo;
   nuevo = nuevoElemento();
   leerDatos(nuevo);

   nuevo->sig = *cima;
   *cima = nuevo;
}
/************************** Funcion desapilar() *********************/
/* Propósito.........: Elimina elementos de la cima de la pila
   Parametro.........: Puntero cima de la pila por referencia
   Devuelve..........:  nada
   */
/********************************************************************/

void desapilar(struct pila **cima)
{
   struct pila *borrar;
    if (pilaVacia(*cima))
      printf("\n La pila está vacia\n");
   else
   {

   borrar = *cima;
   *cima = borrar->sig;
   free(borrar);
   }
   
}
/************************** Funcion eliminarPila() *********************/
/* Propósito.........: Se encarga de eliminar un elemento por su nombre
   Parametro.........: Puntero cima de la pila por valor, y el nombre
                  del alumno que queremos que se borre.
   Devuelve..........:  Nada.
   Llamadas... a la funcion crearPila, apilar, y desapilar  
*/
/********************************************************************/


/************************** Funcion desapilar() *********************/
/* Propósito.........: Muestra por pantalla los elemento s de la pila
                  desde la cima hasta la base
   Parametro.........: Puntero cima de la pila por valor
   Devuelve..........:  nada
   */
/********************************************************************/
void visualizar(struct pila *cima)
{
   struct pila *actual;
   actual = cima;
   while(actual!=NULL)
   {
      printf("Nombre.........%s\n ", actual->nombre);
      printf("Edad...........%d\n ", actual->edad);
      actual = actual->sig;
   }
}

/************************** Funcion listarPila() *********************/
/* Propósito.........: Muestra por pantalla los elementos de la pila.
   Parametro.........: Puntero cima de la pila por valor.
   Devuelve..........:  Nada.
   Llamada ... a la funcion visualizar()
   */
/********************************************************************/
void listarPila(struct pila *cima)
{
   if(pilaVacia(cima))
      printf("\n\nLa pila esta vacia\n");
   else
   {
      printf("\nLISTADO DEL ESTADO DE LA PILA\n");
   visualizar(cima);
   }
   getchar();
}


void liberar(struct pila **cima)
{
   struct pila *actual, *aux;
   actual = *cima;
   while(actual!=NULL)
   {
      aux = actual->sig;
      free(actual);
      actual = aux;
   }
   *cima = NULL;
}

void verCima(struct pila *cima)
{
   char nom[15];
   int ed;

   if (pilaVacia(cima))
      printf("\n\nLa pila está vacía.\n");
   else
   {
      top(cima,nom,ed);

         printf("\n\nValor de la cima: %s\n",nom);
     
         printf("\n\nValor de la cima: %d\n",ed);
   }
}
void top(struct pila *cima,char *nom, int *ed)
{
   /* si la pila está vacía no hacemos nada */
   if (pilaVacia(cima))
      exit (0);

   /* proceso normal (pila no vacía) */
   strcpy(*nom, cima->nombre);
   
   *ed = cima->edad;
 
}

17
C/C++ / Error De Ejecución En Memoria
« en: Lunes 6 de Diciembre de 2004, 20:05 »
Hola a todos, estoy desesperada, tengo que ahcer una practica de listas, y he optado por ir haciendo poco a poco, función a función, resulta que me compila, pero me da un error de ejecución en memoria, en las funciones InsertarporApellido1 y borrarporApellido1, asi que voy a a poner el enunciado de la práctica, y el código que yo he hecho, por si alguien puede ayudarme, gracias.Solo he puesto el codigo necesario para que funcionen estas funciones.

El codigo es este: adjunto el de listas. h y listas. C
Código: Text
  1.  
  2. #include &#34;listas.h&#34;
  3.  
  4. /* Programa principal */
  5. main()
  6. {
  7.  struct lista *existe;
  8.  struct lista *cabeza;
  9.  char nombre[15];
  10.  char ape1[20];
  11.  char ape2[20];
  12.  int edad = 0;
  13.  int opcion;
  14.  char resp;
  15.  
  16.   /* opciones */
  17. do{
  18.   
  19.  crearLista(&cabeza);
  20.      
  21.     
  22.   do{
  23.       cogerDatosTexto(&cabeza);
  24.       printf(&#34;&#092;n La lista enlazada es asi: &#092;n&#092;n&#34;);
  25.     mostrarLista(cabeza);  
  26.     presentaMenu();
  27.     printf(&#34;Introduce una opcion: &#34;);
  28.      scanf(&#34;%d&#34;,&opcion);
  29.      fflush(stdin);
  30.   
  31.     
  32.  }while(opcion &#60;0 || opcion &#62; 11);
  33.       
  34.   
  35.  
  36.       switch(opcion)
  37.       {
  38.   
  39.       
  40.      case 3: /*Insertar por apellido1*/
  41.         introducirDatos(nombre, ape1, ape2, edad);  
  42.         /*comprobamos si existe la persona*/
  43.               existe = buscarPersona(cabeza, ape1);
  44.       
  45.       if(!existe)
  46.       {
  47.             do
  48.            {
  49.             insertarPorApellido1(&cabeza, nombre, ape1, ape2, edad);            printf(&#34;&#092;n&#092;n¿Desea introducir otra persona? (S/N): &#34;);
  50.             scanf(&#34;%c&#34;, &resp);
  51.             system(&#34;clear&#34;);
  52.            }while(resp == 's' || resp =='S');
  53.        mostrarLista(cabeza);
  54.        getchar();
  55.     }
  56.          
  57.     else
  58.        printf(&#34;&#092;n Esta persona ya existe&#34;);
  59.          visualizarNodo(existe);
  60.            getchar();
  61.            getchar();
  62.     
  63.       break;
  64.  
  65.      case 4: /*Borrar por apellido1*/
  66.          printf(&#34;&#092;n Introduzca el apellido a borrar: &#34;);
  67.          gets(ape1);
  68.         
  69.      //comprobamos si la persona existe
  70.         existe = buscarPersona(cabeza, ape1);
  71.  
  72.        if(existe) //si existe
  73.        {
  74.           borrarPorApellido1(&cabeza, ape1);
  75.         printf(&#34;&#092;n Elemento borrado&#34;);
  76.          mostrarLista(cabeza);
  77.        }    
  78.       else
  79.        printf(&#34;&#092;n Elemento no encontrado&#092;n&#34;);
  80.  
  81.      getchar();
  82.      getchar();
  83.      break;
  84.     
  85.   
  86.   
  87.       } //cierre del switch
  88.    }while (opcion);  /* opcion != 0 */
  89.  }
  90.  
  91. /************************ Función crear() ***************************/
  92. /*
  93.    Propósito..: Crea la lista.
  94.    Parámetros.: Puntero cabeza de lista por referencia.
  95.    Devuelve...: Nada.
  96. */
  97. /********************************************************************/
  98.  
  99. void crearLista(struct lista **cabeza)
  100. {
  101.       *cabeza = NULL;
  102.     
  103. }
  104.  
  105.  void presentaMenu(void)
  106. {
  107.    printf(&#34;EJEMPLO DE LISTA ENLAZADA&#092;n&#34;);
  108.    printf(&#34;-------------------------&#092;n&#092;n&#34;);
  109.      printf(&#34;1.- Insertar al Principio&#092;n&#34;);
  110.      printf(&#34;2.- Insertar al Final&#092;n&#34;);
  111.      printf(&#34;3.- Insertar por apellido1&#092;n&#34;);
  112.      printf(&#34;4.- Borrar por apellido 1&#092;n&#34;);
  113.      printf(&#34;5.- Visualizar por apellido1 &#092;n&#34;);
  114.      printf(&#34;6.- Visualizar cabeza cola&#092;n&#34;);
  115.      printf(&#34;7.- Visualizar cola cabeza&#092;n&#34;);
  116.      printf(&#34;8.- Liberar Memoria&#092;n&#34;);
  117.      printf(&#34;9.- Liberar Memoria Recursivo&#092;n&#34;);
  118.      printf(&#34;10.- Grabar Lista&#092;n&#34;);
  119.      printf(&#34;0.- TERMINAR.&#092;n&#092;n&#092;n&#34;);
  120. }
  121.     
  122.  /******************************Funcion nuevoElemento****************/
  123. /*Funcion que sirve para reservar espacio para un nuevo elemento*/
  124.  
  125. struct lista* nuevoElemento()
  126. {
  127.     struct lista *a;
  128.     a = (struct lista*)malloc(sizeof(struct lista));
  129.     return a;
  130. }
  131.  
  132.  
  133. /************************ Función vacia() ***************************/
  134. /*
  135.    Propósito:  Comprueba si la lista está vacía.
  136.    Parámetros: Puntero cabeza de lista por valor.
  137.    Devuelve:   1 si la lista está vacía.
  138.                0 si no lo está.
  139. */
  140. /********************************************************************/
  141. int listaVacia(struct lista *cabeza)
  142. {
  143.    if (cabeza==NULL)
  144.       return SI;    /* verdad */
  145.    else
  146.       return NO;    /* falso */
  147. }
  148.  
  149.  
  150. //FUNCION BUSCAR PERSONA
  151.  
  152.   struct lista* buscarPersona(struct lista *cabeza, char *ape1)
  153.   {
  154.         
  155.     struct lista *existe;
  156.   existe = cabeza;
  157.  
  158.     if (listaVacia(cabeza) == SI)
  159.     {
  160.       printf(&#34;&#092;n La lista esta vacia.&#092;n&#34;);
  161.       
  162.     }
  163.  
  164.     //se recorre la lista hasta encontar el elemento o hasta llegar al final
  165.     while(existe!=NULL)
  166.     {
  167.         if(strcmp(existe-&#62;ape1, ape1)== 0)
  168.     {  
  169.       return existe;
  170.     
  171.         }  
  172.         else{
  173.            existe= existe-&#62;sig;
  174.     }
  175.   }
  176.   return (NULL);
  177.  
  178. }        
  179.  
  180. void introducirDatos(char *nombre, char *ape1, char *ape2, int edad)
  181. {
  182.           printf(&#34;&#092;n Introduzca el nombre =&#62; &#34;);
  183.       gets(nombre);
  184.       fflush(stdin);
  185.   
  186.           printf(&#34;&#092;nIntroduzca el apellido1 =&#62; &#34;);
  187.           gets(ape1);
  188.           fflush(stdin);
  189.         
  190.   
  191.           printf(&#34;&#092;nIntroduzca el apellido2 =&#62; &#34;);
  192.           gets(ape2);
  193.           fflush(stdin);
  194.         
  195.   
  196.           printf(&#34;&#092;nIntroduzca la edad =&#62; &#34;);
  197.           scanf(&#34;%d&#34;,&edad);
  198.           fflush(stdin);
  199.         
  200. }
  201.  
  202. void mostrarLista(struct lista *cabeza)
  203. {
  204.   struct lista *actual;
  205.   actual = cabeza;
  206.  
  207.   while(actual!=NULL)
  208.   {
  209.   printf(&#34;%s %s %s %d &#092;n&#34;,actual-&#62;nombre,actual-&#62;ape1,actual-&#62;ape2,actual-&#62;edad);
  210.   actual = actual-&#62;sig;
  211.   }
  212.   printf(&#34;&#092;n&#34;);
  213.   
  214. }
  215.  
  216. void visualizarNodo(struct lista *nodo)
  217. {
  218.          printf(&#34;&#092;n Nombre.....: %s&#34;
  219.                 &#34;&#092;n Apellido1......: %s&#34;
  220.                 &#34;&#092;n Apellido2.....: %s&#34;
  221.                 &#34;&#092;n Edad.....: %d &#092;n&#34;,nodo-&#62;nombre,nodo-&#62;ape1,nodo-&#62;ape2,nodo-&#62;edad);
  222. }
  223.  
  224. //Esta funcion sirve para insertar por orden alfabetico el primer apellido
  225.  
  226. void insertarPorApellido1(struct lista **cabeza, char *nombre, char *ape1, char *ape2, int edad)
  227. {
  228.    struct lista *aux=NULL; //almacena elemento posterior al que se inserta
  229.    struct lista *ant =NULL; //almacena elemento anterior al que se inserta
  230.    struct lista *nuevo = NULL; //almacena el nuevo elemento
  231.    int encontrado  = 0;
  232.   
  233.    //Se reserva espacio para el nuevo elemento
  234.   nuevo = nuevoElemento();
  235.   strcpy(nuevo-&#62;nombre, nombre);
  236.   strcpy(nuevo-&#62;ape1, ape1);
  237.   strcpy(nuevo-&#62;ape2, ape2);
  238.   nuevo-&#62;edad = edad;
  239.  
  240.    if(listaVacia(*cabeza) == SI) //comprueba si la lista esta vacia
  241.    {
  242.   
  243.   *cabeza = nuevo; //la cabeza será el nuevo elemento
  244.   nuevo-&#62;sig = NULL;
  245.    }
  246.  
  247.    else{
  248.      aux = *cabeza;
  249.      if(strcmp(aux-&#62;ape1, ape1)&#62;0 ) //nuevo elemento se inserta delante de
  250.                                         //la cabeza
  251.        {
  252.         nuevo-&#62;sig=*cabeza; //El siguiente de nuevo será la cabeza
  253.        *cabeza=nuevo;
  254.        }
  255.      else //buscamos la posicion de insercion, se interrumpe cuando se
  256.      //encuentra el primer elemento mayor que n o cuando se llega al final de la lista
  257.          {
  258.   
  259.               while(aux!=NULL && encontrado == 0) {
  260.                    if( strcmp( aux-&#62;ape1, ape1 ) &#62;=0 ) //hemos encontrado la posicion de insercion
  261.                     {
  262.                       encontrado = 1;
  263.                      break;
  264.                     
  265.                      }
  266.                    else //se actualizan los valores de ayx y ant
  267.                        {
  268.                        ant=aux;
  269.                        aux=aux-&#62;sig;
  270.                        }
  271.  
  272.              }
  273.         if(aux == NULL){  //el elemento se inserta al final
  274.                 ant-&#62;sig = nuevo;    
  275.         nuevo-&#62;sig = aux;
  276.         }
  277.    }
  278.    }
  279.  
  280. }
  281.  
  282. void borrarPorApellido1(struct lista **cabeza, char *ape1)
  283. {
  284.  struct lista *ant = NULL; //almacena el elemento anterior al que se borra
  285.  struct lista *borrar;  //almacena el elemento a borrar
  286.  borrar = *cabeza;
  287.  
  288. if (listaVacia(*cabeza) == SI)
  289. {
  290.       printf(&#34;&#092;n La lista esta vacia.&#092;n&#34;);
  291.     exit (0);
  292. }
  293.  
  294. while(borrar != NULL)
  295.      {
  296.     if(!strcmp(ape1, borrar-&#62;ape1)) break;
  297.             
  298.       else{ //si son distintos
  299.              ant = borrar;
  300.              borrar = borrar-&#62;sig;
  301.             }
  302.      }
  303.   
  304. if (strcmp(ape1, (*cabeza)-&#62;ape1) == 0 ) //el elemento a borrar es cabeza
  305.         {
  306.          *cabeza = borrar-&#62;sig;
  307.          free(borrar); //se libera la antigua cabeza
  308.         }
  309.   
  310.       //el elemento a borrar no es la cabeza
  311.      if (borrar != NULL)    //Si borrar es distinto de NULL
  312.       {
  313.      if(borrar == *cabeza)
  314.      {
  315.        *cabeza = borrar-&#62;sig;
  316.        free(borrar);
  317.      }
  318.       else //si el elemento a borrar no es la cabeza  
  319.       {
  320.             ant-&#62;sig = borrar-&#62;sig;;
  321.            free(borrar);
  322.       }
  323.    }
  324.       printf(&#34;&#092;n&#092;n El apellido ha sido borrado&#092;n&#34;);
  325.          fflush(stdin);
  326.          getchar();
  327. }
  328.  
  329. /*listas.h*/
  330. /*Declaracion de estructuras y funciones*/
  331.  
  332. #include &#60;stdio.h&#62;
  333. #include &#60;stdlib.h&#62;
  334. #include &#60;string.h&#62;
  335. #include &#60;malloc.h&#62;
  336. #define SI 1
  337. #define NO 0
  338.  
  339. struct lista
  340. {
  341.     char nombre[15];
  342.     char ape1[15];
  343.     char ape2[15];
  344.     int edad;
  345.     struct lista *sig;
  346. };
  347. struct lista *nuevo;
  348.  
  349. void cogerDatosTexto(struct lista **cabeza);
  350.  
  351. void introducirDatos(char *nombre, char *ape1, char *ape2, int edad);
  352.  
  353. struct lista* nuevoElemento();
  354. void presentaMenu(void);
  355. void crearLista(struct lista **cabeza);
  356. int listaVacia(struct lista *cabeza);
  357. void insertarPrincipio(struct lista **cabeza, char *nombre, char *ape1, char *ape2, int edad);
  358. void visualizarNodo(struct lista *nodo);
  359.  
  360. void mostrarLista(struct lista *cabeza);
  361. void insertarFinal(struct lista **cabeza, char *nombre, char *ape1, char *ape2, int edad);
  362. void insertarPorApellido1(struct lista **cabeza, char *nombre, char *ape1, char *ape2, int edad);
  363.  
  364.  
  365. visualizarpersona(struct lista *cabeza, char *nombre);
  366. void visualizarPorApellido1(struct lista *cabeza,char *ape1);
  367. struct lista* buscarPersona(struct lista *cabeza, char *ape1);
  368. void visualizarCabezaCola(struct lista *cabeza);
  369. void visualizarColaCabeza(struct lista *cabeza);
  370. void liberarMemoria(struct lista **cabeza);
  371. void liberarMemoriaRecursivo(struct lista **cabeza);
  372. void grabarLista(struct lista *cabeza, char *fichero);
  373. void borrarPorApellido1(struct lista **cabeza, char *ape1);
  374.  
  375.  

Gracias a todos,  :)
Si Juank, ve esto, que sepa q solo me refiero a la funcion borrarPorApellido1

18
C/C++ / Duda De Listas Simples En C
« en: Viernes 12 de Noviembre de 2004, 21:55 »
Lo que necesito esta puesto ahora en el script de arriba, en la nueva discusion que he puesto de Error de ejecucion en memoria, si alguien quiere ayudarme, que la lea. Gracias.

19
ADA / Necesito Ayuda Sobre Pvm
« en: Jueves 11 de Noviembre de 2004, 20:48 »
Aunque este foro sea de ADA, es lo más parecido que he encontrado a PVM, por favor, si alguien conoce ese lenguaje, querria hacerle una consulta, tengo quye hacer una practica en pvm, y soy nueva en esto. Por favor,si alguien sabe algo, que me responda. Gracias
 ;)

20
C/C++ / Alguien Sabe De Un Buen Compilador De C
« en: Miércoles 10 de Noviembre de 2004, 18:40 »
Por favor, quisiera saber si alguien conoce algun sitio de la web, donde me pueda bajar un buen compilador de C, tengo el Dev Cpp, pero es que me da muchos probleamas. Si alguien conoce algun buen compilador bajo Windows, que me conteste, porfi, que me hace mucha falta.
Gracias
 :rolleyes:

21
C/C++ / Practica De Vectores En C++
« en: Domingo 7 de Noviembre de 2004, 19:11 »
Hola acabo de empezar a usar un poco el lenguaje C++, asi que no estoy muy puesta. Tengo que hacer una practica de vectores, con una funcion tipo menu, y en cada opcion, que haga algo, bien que muestre el vector, bien que inserte un elemento, etc, mi pregunta es que en el switch, que viene adjunto, en cada case, yo puedo crear una funcion para cada case?. Es decir, una que muestre el tamaño del vector, otra que muestre el primer elemento, lo mismo que tengo puesto en cada case, pero haciendo una funcion aparte?. Es que no sé como hacerlo.
Aqui muestro el codigo de la práctica.
[CODE]
/*Practica de vectores*/

#include <iostream>
#include <vector>    // necesario para el contenedor vector
#include <cstdlib>   //necesario para rand() y srand()

using namespace std;

int main(void)
{
vector <int> v(6);
int d1, d2;
int b;
int num;
int pos;
int bor;
char op;
int opc;


do{
cout <<"*******Practica de vectores******\n" ;

cout <<" 1. Introducir datos en el vector.\n";
cout <<" 2. Mostrar el vector.\n";
cout <<" 3  Mostrar el tamaño del vector.\n";
cout <<" 4. Mostrar el primer elemento del vector.\n";
cout <<" 5. Mostrar el ultimo elemento del vector.\n";
cout <<" 6. Añadir elementos al final del vector.\n";
cout <<" 7. Invertir el vector\n";
cout <<" 8. Ordenar el vector.\n";
cout <<" 9. BUscar un elemento en el vector\n";
cout <<" 10. INsertar un elemento en el vector.\n";
cout <<" 11. Borrar el primer elemento del vector.\n";
cout <<" 12. Borrar el ultimo elemento del vector.\n";
cout <<" 13. Borrar un elemento cualquiera del vector.\n";
cout <<" 14. Borrar el vector.\n";

cout <<" Elija una opcion.\n";
cin >> opc;




switch(opc){
     case 1: for (int i=0 ; i<v.size() ; i++) {
          cout << "Introduce un valor real ";
          cin >> v;
          cout << endl;   
      }
       break;
       
     case 2:
          for (int i=0 ; i<v.size() ; i++) cout << v << " ";
   cout << endl;

       break;
     
     case 3:    cout << "El tamaño del vector es = " << v.size() << endl;
      cout << endl;
       break;
     
     case 4:    cout << "El primer elemento = " << v.front() << " o bien "<< *(v.begin()) << endl;
      cout << endl;
       break;
       
     case 5:    cout << "El Ultimo elemento = " << v.back() << " o bien "<< *(v.end()-1) << endl;
      cout << endl;

       break;
     
     case 6:    cout << "Insertamos al final del vector el elemento:  ";
      cin >> d1;

      v.push_back(d1);

      cout << " y el  " ;
      cin >> d2;
      cout << endl;
      v.push_back(d2);
      cout << endl;
      
      cout << "Ahora el vector es: ";
      for (int i=0 ; i<v.size() ; i++) cout << v << " ";
      cout << endl;
      cout << endl;

       break;
     
     case 7:   for (vector<int>::iterator it = v.begin(); it!=v.end(); ++it)
          cout << *it << " ";
      cout << endl;   
      reverse(v.begin(),v.end());
      cout << "EL vector invertido es: ";
      cout << endl;
      cout << endl;
      for (int i=0 ; i<v.size() ; i++) cout << v << " ";
      cout << endl;
       break;
     
     case 8:    sort(v.begin(),v.end());
           cout << "EL vector ordenado es:   ";
      for (int i=0 ; i<v.size() ; i++) cout << v << " ";
      cout << endl;
      cout << endl;
       break;
     
     case 9:    cout << "Busqueda: Introduce entero a buscar ";
      cin >> b;
      cout << endl;
      if (find(v.begin(),v.end(),B)==v.end()) cout << b <<" no encontrado\n";
      else cout << b <<" encontrado\n";

     
       break;
     
     case 10:   cout << "Insertemos el ";
      cin >> num;
      cout << endl;
      cout << "en la posicion ";
      cin >> pos;
      cout << endl;
      cout << endl;
      v.insert(v.begin() + pos, num);
      for (int i=0 ; i<v.size() ; i++) cout << v << " ";
      cout << endl;
      cout << endl;
       break;
       
     case 11:   cout << "Borramos el primer elemento:  ";
      cout << endl;
      v.erase(v.begin() + 0);
      for (int i=0 ; i<v.size() ; i++) cout << v << " ";
      cout << endl;
      cout << "Tam = " << v.size() << endl;
      cout << endl;

       break;
       
     case 12:     cout << "Borramos el ultimo elemento:  ";
      cout << endl;
      v.pop_back();  //borra el ultimo elemento del vector

     
       break;
     
     case 13:
       break;

     case 14:
       break;

     default: cout << "Error salir del programa\n";
     
     
     }
     cout <<" DEsea continuar?\n";
cin >> op;
}while(op!= 's' || op != 'S');    
}





Insisto yo lo que quiero es que me digan como puedo hacer una función para cada case del programa.
Gracias, ruego respondan lo antes posible.
 :smartass:

22
C/C++ / Estructuras En C
« en: Martes 2 de Noviembre de 2004, 18:34 »
Hola tengo un problemilla, estoy haciendo un ejercicio de C, que va sobre estructura de un paciente, y al compilarlo me da error, en lista, dice que no es de tipo estructura. Yo no se donde está el problema, si alquien puede ayudarme, aquie le pongo el código.


/*Desarrolla un programa en C que use una estructra para la siguiente
informacion sobre un paciente de un hospital:nomre, direccion, fecha de
nacimiento, sexo, dia de visita y problema medico. El program deve tener una
funcion para entrada de los datos de un paciente, guardar los diversos pacientes
en un array y mostrar los pacientes cuyo dia de visita sea uno determinado.
*/
<!--xc1--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>XCODE </td></tr><tr><td id='XCODE'><!--exc1-->

#include <stdio.h>
#include <stdlib.h>

#define TAM 200

struct paciente{
     char *nombre;
     char *direccion;
     char fecha [10];
     char sexo; //V o H
     char diavisita [10];
     char *problema;
     };
    
 main(){
     char dia [10];
    struct paciente *lista;
    tomaDatos(lista);
    printf("Intrpoduzca la fecha de la consulta: (dd/mm/aaaa) ");
    gets(dia);
    mostrarConsulta(dia, lista);
    }
    
    
    
tomaDatos(struct paciente *lista)
{
  
  int i;
  char buffer [80];
  
  lista = (struct paciente*) malloc(TAM*sizeof(struct paciente));
  printf(" Entrada de datos de los pacientes\n");
  printf("============================= ==============\n");
  for(i=0; i < TAM; i++)
  {
     printf("Nombre del paciente: \n");
     gets(buffer);
     lista[i]->nombre = malloc(strlen(buffer)+1);
     strcpy(lista[i]->nombre, buffer);
     printf("Direccion del paciente: \n");
     gets(buffer);
     lista[i]->direccion = malloc(strlen(buffer)+1);
     strcpy(lista[i]->direccion, buffer);
     printf("Fecha de nacimiento (dd/mm/aaaa): \n");
     gets(lista[i]->fecha);
     printf("Sexo del paciente:\n");
     lista[i]->sexo = getche();
     printf("Dia de visita (dd/mm/aaaa): \n");
     gets(lista[i]->diavisita);
     printf("Problema medico del paciente: \n");
     gets(buffer);
     lista[i]->problema = malloc(strlen(buffer)+1);
     strcpy(lista[i]->problema, buffer);
     printf("¿Desea continuar (S/N) \n");
     if(getchar() == 'N') return;
     }
   }
  mostrarConsulta(char *dia, struct paciente* lista)
  {
    int i;
    printf("Pacientes con visita el dia %s\n\n", dia);
    printf("====================   =====================\n");
    for(i=0; i<TAM; i++)
       if(!strcmp(dia, lista[i]->diavisita))
           printf("\t%s \n". lista->nombre);
  }

   <!--xc2--></td></tr></table><div class='postcolor'><!--exc2-->
     
Gracias espèro una respuesta lo antes posible.
Resulta que me han comentado algo asi, como q no he declarado la estructura como puntero, por eso no puedo usar las flechas, si alguien me puede decir, sobre este codigo, donde tengo el error, es q no lo veo.
Gracias, saludos desde Andalucia
Saludos

23
C/C++ / Numero Aleatorios En C
« en: Martes 2 de Noviembre de 2004, 17:58 »
Hola quisiera si alguien me puede echar una mano, es que tengo una practica e la que tengo que generar una matriz de 4 * 5 elementos, y se rellena con numeros aleatorios, pues bien, no se muy bien como funciona pero creo que es con rand().
Lo que no entiendo es poruqe se llamaa la funcion randomize().
Alguien me puede ayudar a saber como funcionan los numeros aleatorios en C.
Si alguien me puede ayudar, me vendría bien, gracias.

Verás, es que el programa es en C, asi que no me sirve eso que me has puesto.
Gracias de todos modos, el codigo es este:

#include <stdio.h>
#include <stdlib.h>


main()
{
float **mat, *productos;
int n;
randomize();
generarMatriz(mat);
multiplicaColumnas(mat, rand() % n, productos);
mostrarSumaProductos(productos);
}

generarMatriz(float **m)
{
int i, j;

m = (float**) malloc(4*5 *sizeof(float));
randomize();
for(i=0; i<4; i++){
for(j=0; j<5; j++)
(int) *(m + i*5 +j) = rand() + rand() /100;
}
}

multiplicaColumnas(float **m, int ncolum, float *vp)
{
int i;
vp = (float *)malloc(5* sizeof(float));
for(i=0; i<4; i++)
// *vp++ = (*(m+ i*5)) * (*(m + i*5 + ncolum));
vp = m[0] * m[ncolum];
vp++;
}

mostrarSumaProductos(float *v)
{
int i, suma = 0;
for(i=0; i< 4; i++)
suma += *v;
*v++;
printf("%f\n", suma);
}

Si puedes echale un vistazo, y me dices si es que puedo suprimir el randomize,o no.Porqe es que la estoy compilando en linux, y el error, que me da es un
que dice q no reconoce randomize.
Por fa, si puedes contestame.
Gracias

24
ADA / Alguien Sabe Algo De Pvm
« en: Martes 13 de Julio de 2004, 12:51 »
Por favor, es importante, necesito si  alguien puede indicarme alguna pagina, o aolgo que tenga de pVM , engo que hacer un trabajo, y no tengo material informativo bueno.
Sé que este foro es de ADA, pero yo necesito saber si alguien me puede recomendar alguna pagina o algo, de PVM, tengo que hacer una  practica para septiembre, y no sé como empezarla.
Gracias

25
C/C++ / Alguien Usa El Programa Dev-cpp
« en: Martes 1 de Junio de 2004, 13:36 »
Esto que puse antes, ya lo tengo resuelto, muchas gracias, por la ayuda qye me habeis prestado todos.

Páginas: [1] 2