• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

suzy

um vetor conter dentro um vetor dinamico

14 mensagens neste tópico

ora bem, esta duvida e lixada :thumbdown:

tenho um vetor medicos com 5 elementos

[][][][][]

agora cada medico tem de ter as suas consultas, este array de consultas vais ser dinamico, uma lista ligada :cheesygrin:

a nivel de estruturaçao das estruturas

typedef struct objecto consulta, *pconsulta;

// esta informacao e da estrutura consulta
struct objecto{
char tipo[100];
char paciente[100];
int ano;
pconsulta prox;//proximo elemento
};

// o vetor medicos que tem para cada um array dinamico de consultas


typedef struct medico{
      char nome[TAM];
      char especialidade[TAM];
      consulta consultas; //aqui e a minha duvida, como declaro um array de consultas? como vai ser dinamico nao tem 
                                     //tamanho definido
      }medicina;

como faço?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não será assim:

typedef struct sconsulta {
               char tipo[100];
               char paciente[100];
               int ano;
               struct sconsulta *next;
        } Consulta, *pConsulta;
        
pConsulta medicos[5];//array onde cada elemento é um apontador para uma lista ligada de consultas, ou seja, cada médico tem a si associado uma lista de consultas

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:-[

e as caracteristicas dos proprios medicos?  é que em cada medico tem de estar o seu nome, especialidade, e o tal vetor de consultas dinamicos.

isto e uma confusao :( :( :( :(

muito obrigada banderous, vou tentar  :thumbsup:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

typedef struct sconsulta {
               char tipo[100];
               char paciente[100];
               int ano;
               struct sconsulta *next;
        } Consulta, *pConsulta;

typedef struct medico_specs {
char nome[TAM];
char esp[TAM];
} Medico_spec;


typedef struct smedico {
Medico_spec med;
pConsulta consultas;
} Medico;

Medico medicos[5];

Assim tens um array onde, em cada posição tens 1 estrutura composta por 2 campos: um campo que é, também ele, uma estrutura contendo os dados relativos ao médico (Medico_spec), e outro campo que é 1 apontador para a lista ligada das consultas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso não são bem dicas, é código completo. Não tenho a certeza se é caso para agradecer...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:-[ thedark, o banderus so me tentou ajudar  :(

eu quero aprender :(

agora tenho mais uma duvida  :( segundo este racicionio pconsulta e um apontador  para uma lista ligada de consultas.

ir buscar o o nome de um medico e facil.

e so fazer

medico.med.nome

agora para ir buscar ir ter ao valor da lista ligada de consultas?

tou a fazer medico.consultas->tipo, mas esta a dar erro.

e para o proximo elemento da lista é?

medico.consultas->next?? afinal isto e um apontador para outro apontador  :wallbash:

como faço??

obrigada

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

:-[ thedark, o banderus so me tentou ajudar  :(

Eu sei que o que ele fez foi com boas intenções, mas não devia ter dado a solução de bandeja, é só isso!

medico.consultas->next?? afinal isto e um apontador para outro apontador  :wallbash:

Como estás a criar as consultas? Alocaste espaço para onde o next aponta?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

viva! ;)

sim, vou fazer uma função para inserir uma consulta.

vou claro usar memoria dinamica para alocar o next, que e um ponteiro para a proxima estrutura.

agora o que me esta a fazer muita confusao, e esse ponteiro consultas que aponta para outro ponteiro. :fartnew2:

thanks

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

por exemplo pelo que tive a estudar.

tenho por exemplo



typedef struct objecto consulta, *pconsulta;
struct objecto{
char tipo[100];
pconsulta prox; // proximo elemento da lista ligada

}

//funcao mostra informacao da lista ligada



void mostra_info(pconsulta p)
{
while(p!=NULL)
{
printf("%s\n", p->tipo);
p = p->prox;
}
}



pconsulta insere_inicio(pconsulta p)
{
pconsulta novo;
novo = malloc(sizeof(consulta));
if(novo==NULL)
{
printf("Erro na requisição de memoria\n");
return p;
}
preenche(novo);
novo->prox=p;
p=novo;
return p;
}



... main()
{
pconsulta base=NULL;
pconsulta b;
b=insere_inicio(base);
..


simples, sei agora neste caso que quero.... vou ter de marrar :wallbash:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites













#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAX 5

typedef struct objecto consulta, *pconsulta;

struct objecto{
char tipo;
pconsulta proximo;// ponteiro para o proximo elemento da lista ligada
};

typedef struct med{
     char nome[50];
     }medicin;
     
typedef struct smedico{
         medicin med;
         pconsulta consultas;
         }medico;
         
         
         
void preenche(pconsulta p)
{
printf("Titulo: ");
fflush(stdin);
gets(p->tipo); // da me erro porque??

p->proximo=NULL;
};

         
pconsulta insere_inicio(medico *ptr , int total,pconsulta p)
{
char n[50];
int i;
printf(" qual o nome\n");
scanf("%s",n);

for(i=0;i<total;i++){
   if(strcmp(ptr[i].med.nome,n)==0){

pconsulta nov;
nov = (consulta*)malloc(sizeof(consulta));
if(nov==NULL)
{
printf("Erro na requisição de memoria\n");
return p;
}
preenche(nov);
nov->ptr[i].consultas->proximo=p;
p=nov;
return p;
}
}
   

isto ta a dar erros nao entendo :S, o que estou a fazer de mal?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

void preenche(pconsulta p)
{
printf("Titulo: ");
fflush(stdin);
gets(p->tipo); // da me erro porque??

p->proximo=NULL;
};

Dá erro porque tipo é um char e não uma string.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

;) sim, eu vi, thanks

mas tou a fazer algo de errado, aqui :wallbash: e nao sei aonde

imaginemos insero dois medicos

pedro

manuel

agora vou querer inserir consultas (lista dinamica) no medico pedro.

qual o nome?

pedro

titulo?

normal

agora vou inserir uma consulta no medico manuel

qual o nome?

manuel

titulo?

urgente

agora se eu for ver a consulta que inseri anteriormente ao medico pedro fica assim

pedro

urgente

ou seja fica com a consulta do manuel, pq?? :wallbash: :rant_01:

thanks  :)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct objecto consulta, *pconsulta;


struct objecto{
char tipo[100];
pconsulta prox;
};


   
   typedef struct vmedico{
   char nome [100];
   pconsulta consultas;
   }medico;

int lista_vazia(pconsulta p)
{
if(p==NULL)
return 1;
else
return 0;
};


void mostra_info(medico *ptr, int total, pconsulta p)
{
char name[100];
int i;
printf("qual o nome do medico\n");
fflush(stdin);
gets(name);
for(i=0;i<total;i++){
if(strcmp(ptr[i].nome,name)==0)
  {
while(p!=NULL)
{
printf("%s\n", p->tipo);
p = p->prox;
}
}
}
};

void mostra_tudas(pconsulta p)
{

while(p!=NULL)
{
printf("%s\n", p->tipo);
p = p->prox;
}


};

void preenche(pconsulta p)
{
printf("Titulo: ");
fflush(stdin);
gets(p->tipo);

p->prox=NULL;
};






pconsulta insere_inicio(medico *ptr,int total,pconsulta p)
{
char name[100];
int i;
pconsulta novo;
printf("qual o nome do medico\n");
fflush(stdin);
gets(name);
for(i=0;i<total;i++){
if(strcmp(ptr[i].nome,name)==0)
  {


//pconsulta novo;
novo = (consulta*)malloc(sizeof(consulta));
if(novo==NULL)
{
printf("Erro na requisição de memoria\n");
return p;
}
preenche(novo);
novo->prox=p;
p=novo;
return p;
}
}
};



/*****************************************************************/

medico inicializa(){//retorna uma estruruta
medico m;
printf("Nome do medico\n");
fflush(stdin);
gets(m.nome);
return m;
}

int insere(medico *ptr, int total)//ponteiro para o inicio do vector, e total dos livros que tem
{
if(total==2)
{
printf("Nao existe espaco livre\n");
return total;
}
else
{
*(ptr+total) = inicializa(); // e a mesma coisa que b[total], e um estrutra logo pode receber a funcao incializa
return total+1;
}
};



void lista_todos(medico *ptr, int total)
{
int i,j;
for(i=0; i<total; i++){
          printf(" Nome: %s\n",ptr[i].nome);
         }
          
          
           
   
}







int menu(void)
{
int i;
printf("1-Adicionar uma consulta\n");
printf("2-Mostra consultas de um determinado medico\n");
printf("3-Adicionar medico\n");
printf("4-Listar todos os medicos\n");
printf("5-Mostra tudas\n");
printf("\nEscolha uma opcao: ");
do
scanf("%d", &i);
while(i<1 || i>6);
return i;
}

main()
{

medico medicos[2];
int i, total = 0;
pconsulta lista=NULL; //DO TIPO PONTEIRO
pconsulta lol;

int valor;
do{
i = menu();
switch (i){
case 1: lol = insere_inicio(medicos,total,lista);
break;
case 2: mostra_info(medicos,total,lol);
break;
case 3: total=insere(medicos,total);
break;
case 4: lista_todos(medicos,total);
break;
case 5:mostra_tudas(lista);
break;


}
}while(i!=6);
fflush(stdin);
getchar();
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora