C/Visual C - Problemas aignando memoria dinamica.

 
Vista:

Problemas aignando memoria dinamica.

Publicado por Jhonnytunes (1 intervención) el 07/11/2009 17:02:16
Hola a todos, tenemos una tarea en la universidad. Soy de los estudiantes que prefiere indagar hasta encontrar la solucion pero esta situacion me resulta tan compleja que me frusta, La profesora nos asigno la siguiente tarea:
---------------
1.Una clínica médica desea mantener una aplicación informática que le permita conocer en todo momento los médicos que trabajan en la clínica y la información de los pacientes que tiene cada médico. Para hacerlo una empresa que desarrolla aplicaciones ha diseñado una aplicación donde la estructura de datos que almacena la información es la siguiente:

typedef struct{
char* codColegiado;
char* nombre;
}TDatosMedico;

typedef struct{
char* codPaciente;
char* nombre;
int situacion; // 1-Enfermo, 2-Grave, 3- Muy grave
int estado; // 1- ingresado, 2-alta
}TPaciente;

typedef struct {
TDatosMedico *infoMedico; //prt a los datos del medico
TPaciente **listaPaci; //arreglo de punteros a los pacientes
}TMedico;

TMedico **clínica; //arreglo de punteros de médicos

Se pide: Codificar funciones que permitan dar a conocer:
a.Ingresar a un paciente.
b.Dar de alta a un paciente.
c.Cantidad de médicos en la clínica
d.Listar los médicos con sus pacientes, totalizando al final la cantidad de pacientes por médico, cantidad de ingresados y de altas.
e.Estadística porcentual por medico en cuanto a la situación de los pacientes:
% de enfermos normales, graves y muy graves.

El código de médicos y pacientes se genera automáticamente por el sistema, y debe ser un consecutivo de 5 dígitos empezando por “00001”
---------------------

Yo declare las estructuras y asine direccion para clinica y para *(clinica+i). Pero al intentar darle memoria al campo de la estructura de dice que tal cosa no es una estructura.

Codigo:
-------------
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>

typedef struct
{
char *codColegiado;
char *nombre;
}TDatosMedico;

typedef struct
{
char *codPaciente;
char *nombre;
int situacion; //1-Enfermo, 2-Grave, 3-Muy Grave.
int estado; //1-Ingresado, 2-Alta.
}TPaciente;

typedef struct
{
TDatosMedico *infoMedico; //ptr a los datos del medico.
TPaciente **listaPaci; //Arreglos de punteros a los pacientes.
}TMedico;

int main()
{
TMedico **clinica;
int idp=0, idm=0, intento=1, cntmed=0, opc;
char pass[15];

clinica=NULL;

while(strcmp(pass, "pucmm")!=0 )
{

system("cls");
printf("\nIngrese la clave de acceso: ");
scanf("%s", pass);
intento++;
if(intento>5)
{
printf("\nUsted ha sobrepasado el limite de intentos. Esta aplicacion cerrara.");
getch();
exit(1);
}
}

do
{
system("cls");
printf("1-Agregar Medico.\n2-Agregar Pacientes.\n3-Dar de alta un paciente.\n");
printf("4-Cantidad de medicos en la clinica.\n5-Listar Medicos\n6-Estaditica por centual por medico.\n7-Salir.\nOpcion: ");
scanf("%d", &opc);
printf("\n");
switch(opc)
{
case 1:
cntmed++;
clinica=(TMedico**)realloc(clinica, cntmed * sizeof( TMedico* ));
if(clinica==NULL) exit(1);

*(clinica+cntmed-1)=(TMedico*)malloc(sizeof(TMedico));
*clinica[cntmed-1].infoMedico=(TDatosMedico*)malloc(sizeof(TDatosMed ico));


printf("\n");

break;

}

}while(opc>=1 && opc<=6);

getch();
return 0;
}
--------------------

Como pueden ver no lo he terminado, simplemente quiero saber que estoy haciendo mal en el "case 1". El error del compilador es el siguiente:" error: request for member `infoMedico' in `*((((TMedico**)(((unsigned int)cntmed) * 4u)) + clinica) - 4u)', which is of non-class type `TMedico*'| ". Estare muy agradecido oopor su ayuda. Pasen buen dia todos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problemas aignando memoria dinamica.

Publicado por Tom (619 intervenciones) el 09/11/2009 09:51:02
clinica[cntmed-1]->infoMedico=(TDatosMedico *)malloc(sizeof(TDatosMedico));
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problemas aignando memoria dinamica.

Publicado por Tom (619 intervenciones) el 09/11/2009 10:14:25
a) No necesitas ** para nada.
b) Por claridad, es mejor que vayas paso a paso:

typedef struct {
TDatosMedico *infoMedico;
TPaciente *listaPaci;
} TMedico;

int main() {
...
TMedico *clinica;
...
...

case 1:
...
TDatosMedico *tmpMedico = (TDatosMedico*)malloc(sizeof(TDatosMedico));
tmpMedico->codColegiado = strdup("lo que sea");
tmpMedico->nombre = strdup("lo que sea");
...
...
TMedico *tmpLMedico = (TMedico*)malloc(sizeof(TMedico));
tmpLMedico->infoMedico = tmpMedico;
tmpLMedico->listaPaci = NULL;
...
...
clinica = realloc(clinica, cntmed * sizeof(TMedico*));
clinica[cntmed - 1] = tmpLMedico;
...
...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar