Jump to content

[Resolvido] fazer com que a cedula do medico seja unica


suzy
 Share

Recommended Posts

:wallbash: ja estou ha 2 horas nisto  <img alt= " data-emoticon="true" height="20" src="https://cdn.portugal-a-programar.org/public/emoticons/wallbash.gif" srcset="https://cdn.portugal-a-programar.org/public/emoticons/wallbash@2x.gif 2x" title=":wallbash: " width="20">, sei mais o menos o algoritmo para ver se o a decula e unica, mas ja fiz umas funcoezitas para inserir e listar, e aqui nao estou a conseguir colocar o codigo para a cedula ser unica.

queria que o utilizador ao introduzir a cedula se houvesse uma igual avisasse, ja tentei modificar o inserer, o listar etc, etc.. etc e nao consigo 😞 alguem me pode dar ideias de como ser a melhor forma:(

é que o vector de arrays de medico tem de ser local a funcao main. ja tentei colocar um ponteiro, na  funcao inicializar, mas como a funcao inserir chama esse funcao, nao posso colocar inicializar(medicos) , porque o nome do vector nao e reconhecido aqui, pois so e reconhecido na funcao main

como faço??

#include <stdio.h>
#include <string.h>
#define TAM 50
#define MAX 2



typedef struct horario{
        char manha[TAM];
        char tarde[TAM];
        char dia[TAM];
        }hor;
        



typedef struct medico{
      int cedula;
      char nome[TAM];
      int idade;
      char especialidade[TAM];
      hor vet[7];
      }medicina;
      


/***************************************************************************/
medicina inicializa(){//retorna uma estruruta




medicina novo;
int i;
printf("Cedula Profissional\n");
scanf("%d",&novo.cedula);
printf("Nome : ");
scanf("%s",&novo.nome);
printf("idade : ");
scanf("%d",&novo.idade);
printf(" Especialidade\n");
scanf("%s",&novo.especialidade);

for(i=0;i<1;i++){//sete dias
    printf(" Horario %d Dia da Semana \n",i+1);
    printf(" de Manha");
    scanf("%s",novo.vet[i].manha);
    printf(" de tarde\n");
    scanf("%s",novo.vet[i].tarde);
    printf(" dia da semana\n");
    scanf("%s",novo.vet[i].dia);
    }

return novo;
};

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




int insere(medicina *ptr, int total)//ponteiro para o inicio do vector, e total dos livros que tem
{
if(total==MAX)
{
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 escreve (medicina a){//vou passar uma estrutura como paramentro
          int i;
          printf(" Nome: %s\n",a.nome);
          printf(" idade %d\n",a.idade);
          
          
            for(i=0;i<7;i++){//sete dias
            printf(" %d Dia da Semana \n",i+1);
            printf("Na %s",a.vet[i].dia);
            printf(" Manha ->",a.vet[i].manha);
            printf(" Tarde ->",a.vet[i].tarde);
                 }
          };
          
        /***********************************************************/
        
void lista_todos(medicina *ptr, int total)
{
int i,j;
for(i=0; i<total; i++){
          printf(" Nome: %s\n",ptr[i].nome);
          printf(" idade %d\n",ptr[i].idade);
          
          
            for(j=0;j<1;j++){//sete dias
            printf(" %d Dia da Semana \n",i+1);
            printf(" de manha%s\n",ptr[i].vet[j].manha);
            printf(" de tarde %s\n",ptr[i].vet[j].tarde);
            printf(" no dia %s\n",ptr[i].vet[j].dia);
                 }
          }
   
}; 
          











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

int menu(void)
{
int i;
printf("1-Adicionar um livro\n");
printf(" 2 - listar medicos\n");
printf("\nEscolha uma opcao: ");

do
scanf("%d", &i);
while(i<1 || i>2);
return i;
}



main()
{
medicina medicos[2];
int i, total = 0;
do{
i = menu();
switch (i){
case 1: total = insere(medicos, total);
break;
case 2: lista_todos(medicos,total);
break;

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

   

desculpem, nao sei como se coloca a cores  ?

Link to comment
Share on other sites

O tipo de dados 'medicina' e a função inicializa() não estão definidos em lado nenhum.

Isto deve dar-te logo um erro aquando da chamada dessa função.

typedef struct medico{
      int cedula;
      char nome[TAM];
      int idade;
      char especialidade[TAM];
      hor vet[7];
      }medicina;



/***************************************************************************/
medicina inicializa(){//retorna uma estruruta

Estão ali. Também te confundiste com os typedefs? 😞😄

*(ptr+total) = inicializa();

Em vez disto devias criar uma variável temporária para receber o resultado da função inicializa. Depois percorres todos os elementos que estão em ptr e comparas os campos cedula com o da variável temporária. Se no fim de comparares todos não existir nenhum igual é que adicionas ao fim do ptr.

Desaparecido.

Link to comment
Share on other sites

O que está a acontecer no código que mostraste é que os dados estão a ser pedidos e inseridos numa estrutura medicina dentro da função inicializa. Depois a estrutura é retornada por cópia.

A função insere está a retornar um inteiro, não uma estrutura.

Desaparecido.

Link to comment
Share on other sites

? nao esta a resultar  😞 :( 😞

int insere(medicina *ptr, int total){
{
int cedula,i;
medicina temp;
if(total==MAX)
{
printf("Nao existe espaco livre\n");
return total;
}
else
{       
      for(i=0;i<total;i++){
         
        if(temp.cedula!=ptr[i].cedula){

          *(ptr+total) = inicializa(); 
          
}  
}
return total+1;

};

obrigada 😄

Link to comment
Share on other sites

Estás a fazer o raciocínio ao contrário. No teu algoritmo, estás a dizer:

"Para todos os médicos, se a cédula do novo médico não for igual à do médico que está a ser testado, copia o novo médico para o que está a ser testado."

quando deveria ser algo assim:

"Para todos os médicos, se a cédula do novo médico for igual à do médico que está a ser testado, sair da função. Se ao chegar ao fim do ciclo nenhuma cédula for igual, então copiar o médico para o fim do array."

Ou seja, dentro do for testas se a cédula é igual. Se for, sais da função. Se não for, continuas o for. Quando o for chegar ao fim, se não tiver saído da função, adicionas o temp.

Desaparecido.

Link to comment
Share on other sites

obrigada pela dica ,mas da me erro:S

int insere(medicina *ptr, int total)//ponteiro para o inicio do vector, e total dos livros que tem
{
int cedula,i;
medicina temp;
if(total==MAX)
{
printf("Nao existe espaco livre\n");
return total;
}
else
{

for(i=0;i<total;i++){
    if(temp.cedula==ptr[i].cedula){
            return 0;
    }else{
          *(ptr+total)=inicializa();
           
         }
  return total+1; 
}
}
};

alias adicionar o temp nao da nesta situacao, de qualqer forma obrigada

Link to comment
Share on other sites

? desculpa la, mas isto ta dificil  ?

assim, queres tu dizer?

int insere(medicina *ptr, int total)//ponteiro para o inicio do vector, e total dos livros que tem
{
int cedula,i;
medicina temp;
if(total==MAX)
{
printf("Nao existe espaco livre\n");
return total;
}
else
{

for(i=0;i<total;i++){
    if(temp.cedula==ptr.cedula){
            return 0;
    }

    }
          

*(ptr+total)=inicializa();         
  return total+1;
}
}
};

obrigada

Link to comment
Share on other sites

? sei que sou chata, sorry  ? tou com dificuldades nisto, ate aprece simples  ?

fiz assim

int insere(medicina *ptr, int total)//ponteiro para o inicio do vector, e total dos livros que tem
{
int cedula,i;
medicina temp;
if(total==MAX)
{
printf("Nao existe espaco livre\n");
return total;
}
else
{
  temp=inicializa();

for(i=0;i<total;i++){
    if(temp.cedula==ptr[i].cedula){
            return total;
    }

    }


*(ptr+total)=inicializa();         
  return total+1;
}
}
}

obrigada

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.