Ayuda por favor
Necesito ayuda con este ejercicio. Le necesito xa antes del dia 20 de febrero de 2005, osea este domingo. Si que me compila pero por ejemplo meto ana con prioridad 1, noe con prioridad 1 y fer con prioridad 2. le doy a seleccionar y me muestra ana , luego le doy a opcion 3 y me pone noe y fer
luego le doy a opcion 2 y me aparece noe luego a opcion 3 y me salen fer y noe y noe no me tndria q salir puesto q esta seleccionado y me debe mostrar solo fer y luego si le doy a opcion 2 me debe salir fer y me sale noe otra vez y me deberia salir fer . Que debo cambiar en el for de la funcion listar xq q me funcione bien. Si alguien me lo puede arreglar se lo agradeceria muchisimo.
/*Ejercicio 2.- El hospital Clínico Universitario de Valladolid desea, para gestionar el
servicio de urgencias, hacer un programa que permita:
1. Dar de alta a las personas que llegan a una consulta. Se pedirá el nombre y la prioridad,
que podrá ser 1, 2 o 3.
2. Seleccionar la siguiente persona para ser atendida. El programa elegirá a la que tenga
mayor prioridad, y en caso de empate a la que haya llegado antes. El nombre de la persona
elegida será mostrado en pantalla y ésta será eliminada pues se supone que ya ha sido atendida.
3. Listar los nombres y prioridades de todas las personas que están esperando.*/
//Programa realizado por Noelia Sanz Peñas
#include <stdio.h>
#include <conio.h>
#include <string.h>
void menu();
void altas(struct urgencias *pac);
void siguiente(struct urgencias pac[]);
void listar(struct urgencias pac[]);
struct urgencias
{
char nombre[20];
int prioridad;
}pac[3];
//______________________________________________________________________________
int i=0;
void main()
{
int op;
char opc;
do
{
clrscr();
menu();
scanf("%d",&op);
switch(op)
{
case 1: do
{
altas(&pac[i]);
i++;
printf("nDesea introducir otro paciente?(S/N): ");
fflush(stdin);
opc=getche();
}while((opc=='s')||(opc=='S')&&(i<3));break;
case 2: siguiente(pac);break;
case 3: listar(pac);break;
}
}while(op!=4);
getch();
}
//______________________________________________________________________________
void menu()
{
printf("ttt M E N U");
printf("nttt_______________");
printf("nnttt1) AGREGAR PACIENTE A LA LISTA DE ESPERA");
printf("nttt2) SELECCIONAR AL SIGUIENTE PACIENTE EN SER ATENDIDO");
printf("nttt3) VER LISTA DE PACIENTES EN LISTA DE ESPERA");
printf("nttt4) SALIR");
printf("nntttElija una opcion: ");
}
//______________________________________________________________________________
void altas(struct urgencias *pac)
{
clrscr();
printf("ntttAGREGAR PACIENTE A LISTA DE ESPERA");
printf("ntt___________________________________________");
printf("nnttNOMBRE: ");
fflush(stdin);
gets(pac->nombre);
do{
printf("nttPRIORIDAD (1=MAX,2=MED,3=MIN)");
scanf("%d",&pac->prioridad);
}while((pac->prioridad<=0)||(pac->prioridad>3));
}
//______________________________________________________________________________
void siguiente(struct urgencias pac[])
{
struct urgencias pac2[3];
int max,pos=0,x=0,j=0;
max=pac[0].prioridad;
for(i=1;i<3;i++)
{
if((pac[i].prioridad<max)&&(pac[i].prioridad!=0))
{
max=pac[i].prioridad;
pos=i;
}
}
textcolor(3);
cprintf("Paciente seleccionado");
printf("n____________");
printf("nnPACIENTE %d",pos+1);
printf("nNOMBRE:%s",pac[pos].nombre);
printf("nPRIORIDAD: %d",pac[pos].prioridad);
pac[pos]=pac[pos+1];
i=0;
j=0;
do
{
if(j!=pos)
{
strcpy(pac2[j].nombre,pac[i].nombre);
pac2[j].prioridad=pac[i].prioridad;
j++;
}
i++;
}while(i<3);
for(x=0;x<3;x++)
{
strcpy(pac[i].nombre,pac2[j].nombre);
pac[i].prioridad=pac2[j].prioridad;
}
i--;
}
//______________________________________________________________________________
void listar (struct urgencias pac[])
{
int j;
clrscr();
for(j=0;j<i;j++)
{
printf("nnPACIENTE %d",j+1);
printf("n____________");
printf("nnNOMBRE: %s",pac[j+1].nombre);
printf("nPRIORIDAD: %d",pac[j+1].prioridad);
}
}
luego le doy a opcion 2 y me aparece noe luego a opcion 3 y me salen fer y noe y noe no me tndria q salir puesto q esta seleccionado y me debe mostrar solo fer y luego si le doy a opcion 2 me debe salir fer y me sale noe otra vez y me deberia salir fer . Que debo cambiar en el for de la funcion listar xq q me funcione bien. Si alguien me lo puede arreglar se lo agradeceria muchisimo.
/*Ejercicio 2.- El hospital Clínico Universitario de Valladolid desea, para gestionar el
servicio de urgencias, hacer un programa que permita:
1. Dar de alta a las personas que llegan a una consulta. Se pedirá el nombre y la prioridad,
que podrá ser 1, 2 o 3.
2. Seleccionar la siguiente persona para ser atendida. El programa elegirá a la que tenga
mayor prioridad, y en caso de empate a la que haya llegado antes. El nombre de la persona
elegida será mostrado en pantalla y ésta será eliminada pues se supone que ya ha sido atendida.
3. Listar los nombres y prioridades de todas las personas que están esperando.*/
//Programa realizado por Noelia Sanz Peñas
#include <stdio.h>
#include <conio.h>
#include <string.h>
void menu();
void altas(struct urgencias *pac);
void siguiente(struct urgencias pac[]);
void listar(struct urgencias pac[]);
struct urgencias
{
char nombre[20];
int prioridad;
}pac[3];
//______________________________________________________________________________
int i=0;
void main()
{
int op;
char opc;
do
{
clrscr();
menu();
scanf("%d",&op);
switch(op)
{
case 1: do
{
altas(&pac[i]);
i++;
printf("nDesea introducir otro paciente?(S/N): ");
fflush(stdin);
opc=getche();
}while((opc=='s')||(opc=='S')&&(i<3));break;
case 2: siguiente(pac);break;
case 3: listar(pac);break;
}
}while(op!=4);
getch();
}
//______________________________________________________________________________
void menu()
{
printf("ttt M E N U");
printf("nttt_______________");
printf("nnttt1) AGREGAR PACIENTE A LA LISTA DE ESPERA");
printf("nttt2) SELECCIONAR AL SIGUIENTE PACIENTE EN SER ATENDIDO");
printf("nttt3) VER LISTA DE PACIENTES EN LISTA DE ESPERA");
printf("nttt4) SALIR");
printf("nntttElija una opcion: ");
}
//______________________________________________________________________________
void altas(struct urgencias *pac)
{
clrscr();
printf("ntttAGREGAR PACIENTE A LISTA DE ESPERA");
printf("ntt___________________________________________");
printf("nnttNOMBRE: ");
fflush(stdin);
gets(pac->nombre);
do{
printf("nttPRIORIDAD (1=MAX,2=MED,3=MIN)");
scanf("%d",&pac->prioridad);
}while((pac->prioridad<=0)||(pac->prioridad>3));
}
//______________________________________________________________________________
void siguiente(struct urgencias pac[])
{
struct urgencias pac2[3];
int max,pos=0,x=0,j=0;
max=pac[0].prioridad;
for(i=1;i<3;i++)
{
if((pac[i].prioridad<max)&&(pac[i].prioridad!=0))
{
max=pac[i].prioridad;
pos=i;
}
}
textcolor(3);
cprintf("Paciente seleccionado");
printf("n____________");
printf("nnPACIENTE %d",pos+1);
printf("nNOMBRE:%s",pac[pos].nombre);
printf("nPRIORIDAD: %d",pac[pos].prioridad);
pac[pos]=pac[pos+1];
i=0;
j=0;
do
{
if(j!=pos)
{
strcpy(pac2[j].nombre,pac[i].nombre);
pac2[j].prioridad=pac[i].prioridad;
j++;
}
i++;
}while(i<3);
for(x=0;x<3;x++)
{
strcpy(pac[i].nombre,pac2[j].nombre);
pac[i].prioridad=pac2[j].prioridad;
}
i--;
}
//______________________________________________________________________________
void listar (struct urgencias pac[])
{
int j;
clrscr();
for(j=0;j<i;j++)
{
printf("nnPACIENTE %d",j+1);
printf("n____________");
printf("nnNOMBRE: %s",pac[j+1].nombre);
printf("nPRIORIDAD: %d",pac[j+1].prioridad);
}
}
