|
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
1
« 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
« 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
« 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
« 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. /************** funcion para reservar memoria para el nuevo elemento*/ struct listaDoble *nuevoElemento() { struct listaDoble *a; a = (struct listaDoble*)malloc(sizeof(struct listaDoble)); return a; } /*********** funcion que calcula si la lista esta vacia**************/ int listaVacia(struct listaDoble*cabeza) { if(cabeza == NULL) /*la lista esta vacia*/ return 1; else return 0; /*la lista no esta vacia*/ } void leerDatosFichero(char *fichero, struct listaDoble **cabeza) { FILE *p; struct listaDoble *aux; /*se reserva espacio para el nuevo elemento*/ aux = nuevoElemento(); p = fopen("conejos2006.bin", "rb"); if(p== NULL) { printf("\nError de lectura del fichero\n"); exit(-1); } while(fscanf(p, "%s %d %lf", aux->codigo, &aux->edad, &aux->peso)==3) { insertarLista(cabeza, aux->codigo, aux->edad, aux->peso); } fclose(p); } /************funcion que inserta elementos al comienzo de la lista*/ void insertarLista(struct listaDoble **cabeza, char *codigo, int edad, double peso) { struct listaDoble *nuevo = NULL; struct listaDoble *aux = NULL; /*se reserva espacio para el nuevo elemento*/ nuevo = nuevoElemento(); strcpy(nuevo->codigo, codigo); nuevo->edad = edad; nuevo->peso = peso; if(listaVacia(*cabeza)) { *cabeza = nuevo; nuevo->sig = NULL; nuevo->anterior = NULL; } else { aux = *cabeza; nuevo->sig = aux; aux->anterior = nuevo; *cabeza = nuevo; } } /*****************muestra los elementos de la lista desde el principio hasta el fin***/ void visualizarDirecta(struct listaDoble *cabeza) { if(!listaVacia(cabeza)) { printf("\n Codigo: %s\n", cabeza->codigo); printf(" Edad: %d\n", cabeza->edad); printf(" Peso: %.3lf\n", cabeza->peso); visualizarDirecta(cabeza->sig); } } /****************funcion que comprueba si existe un fichero***/ int existeFichero() { FILE *f; f = fopen("conejos2006.bin", "rb"); /*abre fichero para lectura*/ if(f == NULL) /*el fichero no existe*/ { return 0; } else { fclose(f); return 1; } } [QUOTE] Aqui pongo el principal es decir el main. [/QUOTE]
#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
« 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
« 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
« 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
« 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
« 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
« 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
« 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
« 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
« 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. #include "listas.h" void cogerDatosTexto(struct lista **cabeza) { FILE *p; //declaro un puntero al fichero struct lista *actual; struct lista *aux; char nombre[15]; char ape1[20]; char ape2[20]; int edad = 0; if((p=fopen("listas.txt","r")) == NULL) // abro para lectura { printf("\n Error al abrir el archivo\n"); exit (1); } *cabeza=NULL; while(fscanf(p,"%s %s %s %d",nombre,ape1,ape2,&edad)== 4) { //reservamos espacio para el nuevo elemento actual = nuevoElemento(); strcpy(actual->nombre,nombre); strcpy(actual->ape1,ape1); strcpy(actual->ape2,ape2); actual->edad=edad; actual->sig = NULL; if(*cabeza ==NULL) *cabeza = actual; else aux->sig = actual; aux = actual; } fclose(p); }
Aqui les pongo el fichero de cabecera /*Declaracion de estructuras y funciones*/ #include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> #include <malloc.h> #define SI 1 #define NO 0 struct lista { char nombre[15]; char ape1[20]; char ape2[20]; int edad; struct lista *sig; }; struct lista *nuevo; void cogerDatosTexto(struct lista **cabeza); void introducirDatos(struct lista *dat); struct lista* nuevoElemento(); int presentaMenu(void); void crearLista(struct lista **cabeza); int listaVacia(struct lista *cabeza); void insertarPrincipio(struct lista **cabeza); void visualizarNodo(struct lista *cabeza); void mostrarLista(struct lista *cabeza); void insertarFinal(struct lista **cabeza); void insertarPorApellido1(struct lista **cabeza,char *ape1); void visualizarPorApellido1(struct lista *cabeza,char *ape1); struct lista* buscarPersona(struct lista *cabeza, char *ape1); void visualizarCabezaCola(struct lista *cabeza); void visualizarColaCabeza(struct lista *cabeza); void liberarMemoria(struct lista **cabeza); void liberarMemoriaRecursivo(struct lista **cabeza); void grabarLista(struct lista *cabeza, char *fichero); void borrarPorApellido1(struct lista **cabeza, char *ape1); void liberarRecursivo(struct lista **cabeza); void liberar(struct lista **cabeza); int listaOrdenadaApellido(struct lista *cabeza);
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
« 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: void verPropietarios() { FILE *pf; struct propietario p1; pf = fopen("propietarios.txt", "r"); /*se abre para lectura*/ if(pf == NULL) { printf("\n No existe el archivo\n"); exit (-1); } /*comienzo a leer datos hasta que llegue al final*/ while(fscanf(pf, "%s %s %s %s", p1.nombre, p1.apellidos, p1.NIF, p1.direccion) == 4) { escribirPropietario(p1); } fclose(pf); }
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 void escribirPropietario(struct propietario p1) { printf("Nombre: %s Apellidos: %s NIF: %s Direccion: %s\n", p1.nombre, p1.apellidos, p1.NIF, p1.direccion); }
15
« 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
« 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
« 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 #include "listas.h" /* Programa principal */ main() { struct lista *existe; struct lista *cabeza; char nombre[15]; char ape1[20]; char ape2[20]; int edad = 0; int opcion; char resp; /* opciones */ do{ crearLista(&cabeza); do{ cogerDatosTexto(&cabeza); printf("\n La lista enlazada es asi: \n\n"); mostrarLista(cabeza); presentaMenu(); printf("Introduce una opcion: "); scanf("%d",&opcion); fflush(stdin); }while(opcion <0 || opcion > 11); switch(opcion) { case 3: /*Insertar por apellido1*/ introducirDatos(nombre, ape1, ape2, edad); /*comprobamos si existe la persona*/ existe = buscarPersona(cabeza, ape1); if(!existe) { do { insertarPorApellido1(&cabeza, nombre, ape1, ape2, edad); printf("\n\n¿Desea introducir otra persona? (S/N): "); scanf("%c", &resp); system("clear"); }while(resp == 's' || resp =='S'); mostrarLista(cabeza); getchar(); } else printf("\n Esta persona ya existe"); visualizarNodo(existe); getchar(); getchar(); break; case 4: /*Borrar por apellido1*/ printf("\n Introduzca el apellido a borrar: "); gets(ape1); //comprobamos si la persona existe existe = buscarPersona(cabeza, ape1); if(existe) //si existe { borrarPorApellido1(&cabeza, ape1); printf("\n Elemento borrado"); mostrarLista(cabeza); } else printf("\n Elemento no encontrado\n"); getchar(); getchar(); break; } //cierre del switch }while (opcion); /* opcion != 0 */ } /************************ Función crear() ***************************/ /* Propósito..: Crea la lista. Parámetros.: Puntero cabeza de lista por referencia. Devuelve...: Nada. */ /********************************************************************/ void crearLista(struct lista **cabeza) { *cabeza = NULL; } void presentaMenu(void) { printf("EJEMPLO DE LISTA ENLAZADA\n"); printf("-------------------------\n\n"); printf("1.- Insertar al Principio\n"); printf("2.- Insertar al Final\n"); printf("3.- Insertar por apellido1\n"); printf("4.- Borrar por apellido 1\n"); printf("5.- Visualizar por apellido1 \n"); printf("6.- Visualizar cabeza cola\n"); printf("7.- Visualizar cola cabeza\n"); printf("8.- Liberar Memoria\n"); printf("9.- Liberar Memoria Recursivo\n"); printf("10.- Grabar Lista\n"); printf("0.- TERMINAR.\n\n\n"); } /******************************Funcion nuevoElemento****************/ /*Funcion que sirve para reservar espacio para un nuevo elemento*/ struct lista* nuevoElemento() { struct lista *a; a = (struct lista*)malloc(sizeof(struct lista)); return a; } /************************ Función vacia() ***************************/ /* Propósito: Comprueba si la lista está vacía. Parámetros: Puntero cabeza de lista por valor. Devuelve: 1 si la lista está vacía. 0 si no lo está. */ /********************************************************************/ int listaVacia(struct lista *cabeza) { if (cabeza==NULL) return SI; /* verdad */ else return NO; /* falso */ } //FUNCION BUSCAR PERSONA struct lista* buscarPersona(struct lista *cabeza, char *ape1) { struct lista *existe; existe = cabeza; if (listaVacia(cabeza) == SI) { printf("\n La lista esta vacia.\n"); } //se recorre la lista hasta encontar el elemento o hasta llegar al final while(existe!=NULL) { if(strcmp(existe->ape1, ape1)== 0) { return existe; } else{ existe= existe->sig; } } return (NULL); } void introducirDatos(char *nombre, char *ape1, char *ape2, int edad) { printf("\n Introduzca el nombre => "); gets(nombre); fflush(stdin); printf("\nIntroduzca el apellido1 => "); gets(ape1); fflush(stdin); printf("\nIntroduzca el apellido2 => "); gets(ape2); fflush(stdin); printf("\nIntroduzca la edad => "); scanf("%d",&edad); fflush(stdin); } void mostrarLista(struct lista *cabeza) { struct lista *actual; actual = cabeza; while(actual!=NULL) { printf("%s %s %s %d \n",actual->nombre,actual->ape1,actual->ape2,actual->edad); actual = actual->sig; } printf("\n"); } void visualizarNodo(struct lista *nodo) { printf("\n Nombre.....: %s" "\n Apellido1......: %s" "\n Apellido2.....: %s" "\n Edad.....: %d \n",nodo->nombre,nodo->ape1,nodo->ape2,nodo->edad); } //Esta funcion sirve para insertar por orden alfabetico el primer apellido void insertarPorApellido1(struct lista **cabeza, char *nombre, char *ape1, char *ape2, int edad) { struct lista *aux=NULL; //almacena elemento posterior al que se inserta struct lista *ant =NULL; //almacena elemento anterior al que se inserta struct lista *nuevo = NULL; //almacena el nuevo elemento int encontrado = 0; //Se reserva espacio para el nuevo elemento nuevo = nuevoElemento(); strcpy(nuevo->nombre, nombre); strcpy(nuevo->ape1, ape1); strcpy(nuevo->ape2, ape2); nuevo->edad = edad; if(listaVacia(*cabeza) == SI) //comprueba si la lista esta vacia { *cabeza = nuevo; //la cabeza será el nuevo elemento nuevo->sig = NULL; } else{ aux = *cabeza; if(strcmp(aux->ape1, ape1)>0 ) //nuevo elemento se inserta delante de //la cabeza { nuevo->sig=*cabeza; //El siguiente de nuevo será la cabeza *cabeza=nuevo; } else //buscamos la posicion de insercion, se interrumpe cuando se //encuentra el primer elemento mayor que n o cuando se llega al final de la lista { while(aux!=NULL && encontrado == 0) { if( strcmp( aux->ape1, ape1 ) >=0 ) //hemos encontrado la posicion de insercion { encontrado = 1; break; } else //se actualizan los valores de ayx y ant { ant=aux; aux=aux->sig; } } if(aux == NULL){ //el elemento se inserta al final ant->sig = nuevo; nuevo->sig = aux; } } } } void borrarPorApellido1(struct lista **cabeza, char *ape1) { struct lista *ant = NULL; //almacena el elemento anterior al que se borra struct lista *borrar; //almacena el elemento a borrar borrar = *cabeza; if (listaVacia(*cabeza) == SI) { printf("\n La lista esta vacia.\n"); exit (0); } while(borrar != NULL) { if(!strcmp(ape1, borrar->ape1)) break; else{ //si son distintos ant = borrar; borrar = borrar->sig; } } if (strcmp(ape1, (*cabeza)->ape1) == 0 ) //el elemento a borrar es cabeza { *cabeza = borrar->sig; free(borrar); //se libera la antigua cabeza } //el elemento a borrar no es la cabeza if (borrar != NULL) //Si borrar es distinto de NULL { if(borrar == *cabeza) { *cabeza = borrar->sig; free(borrar); } else //si el elemento a borrar no es la cabeza { ant->sig = borrar->sig;; free(borrar); } } printf("\n\n El apellido ha sido borrado\n"); fflush(stdin); getchar(); } /*listas.h*/ /*Declaracion de estructuras y funciones*/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <malloc.h> #define SI 1 #define NO 0 struct lista { char nombre[15]; char ape1[15]; char ape2[15]; int edad; struct lista *sig; }; struct lista *nuevo; void cogerDatosTexto(struct lista **cabeza); void introducirDatos(char *nombre, char *ape1, char *ape2, int edad); struct lista* nuevoElemento(); void presentaMenu(void); void crearLista(struct lista **cabeza); int listaVacia(struct lista *cabeza); void insertarPrincipio(struct lista **cabeza, char *nombre, char *ape1, char *ape2, int edad); void visualizarNodo(struct lista *nodo); void mostrarLista(struct lista *cabeza); void insertarFinal(struct lista **cabeza, char *nombre, char *ape1, char *ape2, int edad); void insertarPorApellido1(struct lista **cabeza, char *nombre, char *ape1, char *ape2, int edad); visualizarpersona(struct lista *cabeza, char *nombre); void visualizarPorApellido1(struct lista *cabeza,char *ape1); struct lista* buscarPersona(struct lista *cabeza, char *ape1); void visualizarCabezaCola(struct lista *cabeza); void visualizarColaCabeza(struct lista *cabeza); void liberarMemoria(struct lista **cabeza); void liberarMemoriaRecursivo(struct lista **cabeza); void grabarLista(struct lista *cabeza, char *fichero); void borrarPorApellido1(struct lista **cabeza, char *ape1);
Gracias a todos,  Si Juank, ve esto, que sepa q solo me refiero a la funcion borrarPorApellido1
18
« 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
« 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
« 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
21
« 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.
22
« 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
« 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
« 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
« 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.
|
|
|