Guião laboratorial n.º 2 – exercício 4
O aeroporto de Coimbra pretende um programa para gerir a informação relativa às partidas de voos. Cada voo é identificado por: número do voo, nome da companhia, cidade destino e hora de partida (horas e minutos).
a) Crie um tipo estruturado chamado struct tempo que permita armazenar as componentes de uma determinada hora de um dia (horas e minutos).
b) Crie um tipo estruturado chamado struct voo que permita armazenar a informação relativa a um voo. O campo que armazena a hora de partida deve ser do tipo struct tempo.
c) Desenvolva uma função que escreva o conteúdo dos campos de uma variável estruturada do tipo struct voo. A função recebe como argumento a variável já preenchida.
d) Desenvolva uma função que permita introduzir informação relativa a um novo voo. É passado como argumento um ponteiro para a estrutura a inicializar.
e) Desenvolva uma função que altere a hora de partida de um voo. Recebe como argumento um ponteiro para uma estrutura já preenchida e solicita ao utilizador as novas componentes da hora para efetuar a alteração.
f) Desenvolva uma função que verifique se um determinado voo já partiu. Recebe como argumentos uma estrutura do tipo struct voo onde está armazenada a informação do voo e uma estrutura do tipo struct tempo onde está armazenada a hora atual. Devolve 1 se o voo já tiver partido, ou 0, se isso ainda não tiver acontecido.
g) Declare uma tabela que lhe permita armazenar informação relativa a 300 voos. A tabela deve ser uma variável local da função main().
h) Desenvolva uma função que permita adicionar novos voos à tabela. A função recebe como argumentos um ponteiro para o início da tabela e um ponteiro para o inteiro que indica quantos voos existem. É o utilizador que indica quantas novas entradas quer inserir e que especifica a informação relativa a cada um dos novos voos. A função deve atualizar a tabela e o inteiro referenciado pelo segundo argumento, indicando quantos voos passam a existir.
i) Desenvolva uma função que liste a informação completa de todos os voos armazenados na tabela. A função recebe como argumentos um ponteiro para o início da tabela e o número de voos que esta contém.
j) Desenvolva uma função que verifique quais os voos que partem nos próximos 30 minutos. Deve ser escrito o número, o destino e o tempo que falta para a partida de cada um desses voos. Um ponteiro para o início da tabela de voos, o número de elementos que esta contém e a hora atual são passados como argumentos.
k) Desenvolva uma função que retire da tabela todos os voos que já partiram. São passados como argumentos um ponteiro para o início da tabela, um ponteiro para um inteiro que indica quantos voos esta contém e a hora atual. A função deve atualizar a tabela e o contador de voos.
l) Crie um programa que construa um menu com o seguinte formato:
1. Introduzir novos voos
2. Listar todos os voos
3. Listar proximos voos
4. Atualizar tabela de voos
5. Terminar
O programa deve fazer a gestão das seleções que o utilizador for efetuando. Termina a execução quando for selecionada a opção 5.
Sugestão: Utilize a seguinte função para obter a hora atual do sistema. O resultado é devolvido numa estrutura do tipo struct tempo.
#include <stdio.h> #include <time.h> /* Estrutura auxiliar para guardar as componentes da hora */ struct tempo{ int h, m; }; struct tempo hora_atual() { time_t a; struct tm* b; struct tempo atual; time(&a); b = localtime(&a); atual.h = b->tm_hour; atual.m = b->tm_min; return atual; }
/* Exemplo de utilização da função hora_atual() */ int main() { struct tempo t = hora_atual(); printf(" São %2.2d:%2.2d\n", t.h, t.m); return 0; }
Proposta de trabalho: Altere o programa de gestão do aeroporto de modo a que os voos fiquem ordenados na tabela por hora de partida. Efetue as alterações necessárias nas funções que implementou.
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <string.h> #define ST_TAM 50 #define MAX 300 // Estrutura auxiliar para armazenar as componentes de uma hora: horas + minutos (alinea a)) struct tempo{ int h, m; }; // Estrutura para armazenar informacao sobre um voo (alinea b)) struct voo{ int num; // Numero do voo char companhia[ST_TAM]; // Companhia char destino[ST_TAM]; // cidade de destino struct tempo hora_p; // Hora de partida }; // Funcao que obtem a hora do sistema e a devolve numa estrutura do tipo struct tempo struct tempo hora_atual() { time_t a; struct tm* b; struct tempo atual; time(&a); b = localtime(&a); atual.h = b->tm_hour; atual.m = b->tm_min; return atual; }; // Funcao auxiliar para mostrar o menu e obter a opcao desejada pelo utilizador // Devolve a opcao selecionada como resultado int menu() { int op; struct tempo t = hora_atual(); printf("\n%2.2d:%2.2d\n", t.h, t.m); printf("\n1 - Introduzir novos voos"); printf("\n2 - Listar todos os voos"); printf("\n3 - Listar proximos voos"); printf("\n4 - Actualizar tabela de voos"); printf("\n5 - Veriricar se um voo ja partiu"); printf("\n6 - Terminar"); do{ printf("\nOpcao: "); scanf("%d", &op); }while(op<1 || op>6); return op; } //------------------- funcoes a implementar void alineac(struct voo *p, int t){ int i; printf("\nTotal de registos: %d", t); for(i=0; i<t;i++, p++){ //printf("\nvoo: %d\tcompanhia: %s\tindo para: %s\thorario: %d:%d", p->, p[i].companhia, p[i].destino, p[i].hora_p.h, p[i].hora_p.m); printf("\nvoo: %d\tcompanhia: %s\tindo para: %s\thorario: %d:%d", p->num, p->companhia, p->destino, p->hora_p.h, p->hora_p.m); // printf("\nvoo: %d", p->num); } } void alinead(struct voo *p, int *t, int m){ char r; do{ printf("\nQuer inserir?"); scanf(" %c", &r); if(r=='s'){ printf("\n---------------------------"); printf("\nQual o numero do voo?"); scanf(" %d", &(p->num)); printf("Qual o nome da companhia?"); scanf(" %[^\n]", &(p->companhia)); printf("Qual o nome do destino?"); scanf(" %[^\n]", &(p->destino)); printf("Qual a hora e minutos de partida?"); scanf("%d %d", &(p->hora_p.h), &(p->hora_p.m)); (*t)++; p=p+(*t); } }while(r=='s' && *t < m); } void alineae(struct voo *p, int t){ int r, i; printf("\nQual o voo que quer alterar? 0 se nenhum"); scanf(" %d", &r); for(i=0; i< t; i++, p++){ if(r==p->num){ printf("\n o horario atual e: %d:%d", p->hora_p.h, p->hora_p.m); printf("Qual a NOVA hora e minutos de partida?"); scanf("%d %d", &(p->hora_p.h), &(p->hora_p.m)); } } } void alienaf(struct voo *p, int t){ //nao vai devolver, escreve no final o valor 1 ou 0 dependendo int i, sita; struct tempo usa = hora_atual(); for(i=0; i<t;i++, p++){ if(p->hora_p.h < usa.h && p->hora_p.m < usa.m){ sita=1; }else{ sita=0; } printf("\nsituacao: %d\tvoo: %d\tcompanhia: %s\tindo para: %s\thorario: %d:%d", sita, p->num, p->companhia, p->destino, p->hora_p.h, p->hora_p.m); } } void alienaj(struct voo *p, int t){ struct tempo usa = hora_atual(); int i, auxHaM=0, auxHrM=0,y; auxHaM=(usa.h*60)+usa.m; for(i=0; i<t;i++, p++){ printf("\n%d:%d-%d:%d", usa.h, usa.m, p->hora_p.h, p->hora_p.m); auxHrM=(p->hora_p.h*60)+p->hora_p.m; // y= atoi(auxHrM); if(auxHrM < auxHaM){ printf("\n%d\tcompanhia: %s\tindo para: %s\thorario: %d:%d", p->num, p->companhia, p->destino, p->hora_p.h, p->hora_p.m); }else{ printf("\nno can do"); } printf("\n%d-%d", auxHaM, auxHrM); } } int main(int argc, char *argv[]) { int i; // Declaracao das variaveis locais: (alinea g) struct voo aero[MAX]; int total=0; //alinea c struct voo testec ={11,"TAP", "London", {12,30}}, tested; /* struct voo testec ={ {11,"TAP", "London", {12, 00}}, {22,"RYN", "Faro", {13, 30}}; {33,"TAP", "Paris", {18, 00}}; {44,"RYN", "NY",{22, 30}} }; */ // Ciclo principal do programa do{ i=menu(); switch(i){ case 1: //aliena d alinead(&aero, &total, MAX); break; case 2: //aliena c alineac(aero, total); break; case 3: //alinea j) alienaj(aero, total); break; case 4: //alterar a hora do voo alinea e) alineac(aero, total); //listar primeiro alineae(&aero, total); break; case 5: //verificar se um voo ja partiu f) alienaf(aero, total); break; } }while(i!=6); return 0; }
falta verificar as horas e a ultima aliena… :P
ajuda(atoi): LINK
ajuda(estruturas e arrays): LINK
0 thoughts on “Guião laboratorial n.º 2 – exercício 4”