Mudanças entre as edições de "AP2"
Ir para navegação
Ir para pesquisar
(9 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 27: | Linha 27: | ||
}; | }; | ||
− | + | ||
− | void | + | /* protótipos de funções */ |
+ | void listar_carro_por_hora(); | ||
+ | void listar_carros(); | ||
+ | void retirar_carro_estac(); | ||
+ | void inserir_carro_estac(); | ||
+ | struct horas *hora_atual(); | ||
+ | |||
+ | |||
+ | main() | ||
+ | { | ||
+ | int opcao; | ||
+ | struct horas *p; | ||
+ | |||
+ | do { | ||
+ | printf("1-Listar por placa 2-Retirar 3-Inserir 4-Listar todos 5-FIM\n"); | ||
+ | scanf("%d", &opcao); | ||
+ | switch(opcao) { | ||
+ | case 1: listar_carro_por_hora(); | ||
+ | break; | ||
+ | case 2: | ||
+ | retirar_carro_estac(); | ||
+ | break; | ||
+ | case 3: | ||
+ | inserir_carro_estac(); | ||
+ | break; | ||
+ | case 4: | ||
+ | listar_carros(); | ||
+ | break; | ||
+ | default: | ||
+ | break; | ||
+ | } | ||
+ | /* exemplo de uso da função hora */ | ||
+ | p=hora_atual(); | ||
+ | printf("Hora %d minuto %d\n", p->hora, p->minuto); | ||
+ | free(p); | ||
+ | } while(opcao!=FIM); | ||
+ | } | ||
+ | |||
+ | |||
+ | /* lista carros que entraram entre uma dada hora de entrada e de saida */ | ||
+ | void listar_carro_por_hora() | ||
{ | { | ||
} | } | ||
Linha 59: | Linha 99: | ||
return p; | return p; | ||
− | } | + | } |
+ | </syntaxhighlight> | ||
+ | |||
+ | ===Correção=== | ||
+ | {{collapse top|Correção}} | ||
+ | <syntaxhighlight lang=c> | ||
+ | #include <stdio.h> | ||
+ | #include <stdlib.h> | ||
+ | #include <string.h> | ||
+ | #include <time.h> | ||
+ | |||
+ | #define FIM 5 | ||
+ | |||
+ | typedef struct t_carro tipo_carro; | ||
+ | |||
+ | struct horas { | ||
+ | int hora; | ||
+ | int minuto; | ||
+ | }; | ||
+ | |||
+ | struct t_carro { | ||
+ | char dono[20]; | ||
+ | char placa[9]; | ||
+ | struct horas *entrada; | ||
+ | tipo_carro *proximo; | ||
+ | } *tail; | ||
+ | |||
+ | |||
+ | /* protótipos de funções */ | ||
+ | void inserir_cabeca_lista(); | ||
+ | void listar_carro_por_placa(); | ||
+ | void listar_carros(); | ||
+ | void retirar_carro_estac(); | ||
+ | void inserir_carro_estac(); | ||
+ | struct horas *hora_atual(); | ||
+ | |||
− | + | main() | |
{ | { | ||
int opcao; | int opcao; | ||
struct horas *p; | struct horas *p; | ||
− | + | tail=NULL; | |
+ | inserir_cabeca_lista(); | ||
do { | do { | ||
− | printf(" | + | printf("\n1-Listar por placa \n2-Retirar \n3-Inserir \n4-Listar todos \n5-FIM\n>"); |
scanf("%d", &opcao); | scanf("%d", &opcao); | ||
switch(opcao) { | switch(opcao) { | ||
Linha 85: | Linha 161: | ||
break; | break; | ||
} | } | ||
− | |||
− | |||
− | |||
− | |||
} while(opcao!=FIM); | } while(opcao!=FIM); | ||
} | } | ||
+ | |||
+ | |||
+ | /* lista carros que entraram entre uma dada hora de entrada e de saida */ | ||
+ | void listar_carro_por_placa() | ||
+ | { | ||
+ | char placa[9]; | ||
+ | tipo_carro *p; | ||
+ | p=tail; | ||
+ | printf("Digite a placa do carro:"); | ||
+ | scanf("%s",placa); | ||
+ | |||
+ | while(p!=NULL && strcmp(p->placa,placa)!=0){ | ||
+ | p=p->proximo; | ||
+ | } | ||
+ | if(p!=NULL){ | ||
+ | printf("\n---------------------------------------------------------------------"); | ||
+ | printf( "\n%s \t %s \t %d:%d",p->dono,p->placa,p->entrada->hora,p->entrada->minuto); | ||
+ | printf("\n---------------------------------------------------------------------"); | ||
+ | } else { | ||
+ | printf("\n---------------------------------------------------------------------"); | ||
+ | printf("\nCarro não encontrado!"); | ||
+ | printf("\n---------------------------------------------------------------------"); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | |||
+ | void retirar_carro_estac() | ||
+ | { | ||
+ | char placa[9]; | ||
+ | tipo_carro *pa,*pp; | ||
+ | pa=tail; | ||
+ | pp=tail->proximo; | ||
+ | printf("Digite a placa do carro:"); | ||
+ | scanf("%s",placa); | ||
+ | |||
+ | while(pp!=NULL && strcmp(pp->placa,placa)!=0){ | ||
+ | pa=pp; | ||
+ | pp=pp->proximo; | ||
+ | } | ||
+ | |||
+ | if(pp!=NULL){ | ||
+ | pa->proximo=pp->proximo; | ||
+ | free(pp); | ||
+ | printf("\n---------------------------------------------------------------------"); | ||
+ | printf("\nCarro retirado!"); | ||
+ | printf("\n---------------------------------------------------------------------"); | ||
+ | } else { | ||
+ | printf("\n---------------------------------------------------------------------"); | ||
+ | printf("\nCarro não encontrado!"); | ||
+ | printf("\n---------------------------------------------------------------------"); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void inserir_cabeca_lista() | ||
+ | { | ||
+ | tipo_carro *head = malloc(sizeof(tipo_carro)); | ||
+ | strcpy(head->dono,"TESTE"); | ||
+ | strcpy(head->placa,"XXX-0000"); | ||
+ | head->entrada = hora_atual(); | ||
+ | |||
+ | tail=head; | ||
+ | } | ||
+ | |||
+ | void inserir_carro_estac() | ||
+ | { | ||
+ | tipo_carro *novo = malloc(sizeof(tipo_carro)); | ||
+ | printf("Nome do dono: "); | ||
+ | scanf("%s",novo->dono); | ||
+ | |||
+ | printf("Placas: "); | ||
+ | scanf("%s",novo->placa); | ||
+ | |||
+ | novo->entrada = hora_atual(); | ||
+ | |||
+ | if(tail==NULL){ | ||
+ | tail=novo; | ||
+ | }else{ | ||
+ | novo->proximo=tail->proximo; | ||
+ | tail->proximo = novo; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | void listar_carros() | ||
+ | { | ||
+ | tipo_carro *p; | ||
+ | printf("\n---------------------------------------------------------------------"); | ||
+ | for (p = tail->proximo; p != NULL; p = p->proximo){ | ||
+ | printf( "\n%s \t %s \t %d:%d",p->dono,p->placa,p->entrada->hora,p->entrada->minuto); | ||
+ | } | ||
+ | printf("\n---------------------------------------------------------------------"); | ||
+ | } | ||
+ | |||
+ | struct horas *hora_atual() | ||
+ | { | ||
+ | time_t rawtime; | ||
+ | struct tm *tminfo; | ||
+ | struct horas *p; | ||
+ | |||
+ | time ( &rawtime ); | ||
+ | tminfo = localtime ( &rawtime ); | ||
+ | |||
+ | if((p=(struct horas *)malloc(sizeof(struct horas)))==NULL) | ||
+ | return NULL; | ||
+ | p->hora = tminfo->tm_hour; | ||
+ | p->minuto = tminfo->tm_min; | ||
+ | |||
+ | return p; | ||
+ | } | ||
+ | |||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | {{collapse bottom}} | ||
+ | |||
+ | ---- | ||
+ | {| border="1" cellpadding="5" cellspacing="0" | ||
+ | ! style="background: #cdc5bf;" | [[PRG1-_Programação_I_-_Graduação | << ]] | ||
+ | ! style="background: #cdc5bf;" | AP2 - Correção | ||
+ | |} |
Edição atual tal como às 15h12min de 25 de junho de 2015
Prova 1
Questão Única
Desenvolver um sistema de controle de estacionamento utilizando listas encadeadas, implementando as funções associadas a este sistema.
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define FIM 5
typedef struct t_carro tipo_carro;
struct horas {
int hora;
int minuto;
};
struct t_carro {
char dono[20];
char placa[9];
struct horas *entrada;
tipo_carro *proximo;
};
/* protótipos de funções */
void listar_carro_por_hora();
void listar_carros();
void retirar_carro_estac();
void inserir_carro_estac();
struct horas *hora_atual();
main()
{
int opcao;
struct horas *p;
do {
printf("1-Listar por placa 2-Retirar 3-Inserir 4-Listar todos 5-FIM\n");
scanf("%d", &opcao);
switch(opcao) {
case 1: listar_carro_por_hora();
break;
case 2:
retirar_carro_estac();
break;
case 3:
inserir_carro_estac();
break;
case 4:
listar_carros();
break;
default:
break;
}
/* exemplo de uso da função hora */
p=hora_atual();
printf("Hora %d minuto %d\n", p->hora, p->minuto);
free(p);
} while(opcao!=FIM);
}
/* lista carros que entraram entre uma dada hora de entrada e de saida */
void listar_carro_por_hora()
{
}
void retirar_carro_estac()
{
}
void inserir_carro_estac()
{
}
void listar_carros()
{
}
struct horas *hora_atual()
{
time_t rawtime;
struct tm *tminfo;
struct horas *p;
time ( &rawtime );
tminfo = localtime ( &rawtime );
if((p=(struct horas *)malloc(sizeof(struct horas)))==NULL)
return NULL;
p->hora = tminfo->tm_hour;
p->minuto = tminfo->tm_min;
return p;
}
Correção
Correção |
---|
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define FIM 5
typedef struct t_carro tipo_carro;
struct horas {
int hora;
int minuto;
};
struct t_carro {
char dono[20];
char placa[9];
struct horas *entrada;
tipo_carro *proximo;
} *tail;
/* protótipos de funções */
void inserir_cabeca_lista();
void listar_carro_por_placa();
void listar_carros();
void retirar_carro_estac();
void inserir_carro_estac();
struct horas *hora_atual();
main()
{
int opcao;
struct horas *p;
tail=NULL;
inserir_cabeca_lista();
do {
printf("\n1-Listar por placa \n2-Retirar \n3-Inserir \n4-Listar todos \n5-FIM\n>");
scanf("%d", &opcao);
switch(opcao) {
case 1: listar_carro_por_placa();
break;
case 2:
retirar_carro_estac();
break;
case 3:
inserir_carro_estac();
break;
case 4:
listar_carros();
break;
default:
break;
}
} while(opcao!=FIM);
}
/* lista carros que entraram entre uma dada hora de entrada e de saida */
void listar_carro_por_placa()
{
char placa[9];
tipo_carro *p;
p=tail;
printf("Digite a placa do carro:");
scanf("%s",placa);
while(p!=NULL && strcmp(p->placa,placa)!=0){
p=p->proximo;
}
if(p!=NULL){
printf("\n---------------------------------------------------------------------");
printf( "\n%s \t %s \t %d:%d",p->dono,p->placa,p->entrada->hora,p->entrada->minuto);
printf("\n---------------------------------------------------------------------");
} else {
printf("\n---------------------------------------------------------------------");
printf("\nCarro não encontrado!");
printf("\n---------------------------------------------------------------------");
}
}
void retirar_carro_estac()
{
char placa[9];
tipo_carro *pa,*pp;
pa=tail;
pp=tail->proximo;
printf("Digite a placa do carro:");
scanf("%s",placa);
while(pp!=NULL && strcmp(pp->placa,placa)!=0){
pa=pp;
pp=pp->proximo;
}
if(pp!=NULL){
pa->proximo=pp->proximo;
free(pp);
printf("\n---------------------------------------------------------------------");
printf("\nCarro retirado!");
printf("\n---------------------------------------------------------------------");
} else {
printf("\n---------------------------------------------------------------------");
printf("\nCarro não encontrado!");
printf("\n---------------------------------------------------------------------");
}
}
void inserir_cabeca_lista()
{
tipo_carro *head = malloc(sizeof(tipo_carro));
strcpy(head->dono,"TESTE");
strcpy(head->placa,"XXX-0000");
head->entrada = hora_atual();
tail=head;
}
void inserir_carro_estac()
{
tipo_carro *novo = malloc(sizeof(tipo_carro));
printf("Nome do dono: ");
scanf("%s",novo->dono);
printf("Placas: ");
scanf("%s",novo->placa);
novo->entrada = hora_atual();
if(tail==NULL){
tail=novo;
}else{
novo->proximo=tail->proximo;
tail->proximo = novo;
}
}
void listar_carros()
{
tipo_carro *p;
printf("\n---------------------------------------------------------------------");
for (p = tail->proximo; p != NULL; p = p->proximo){
printf( "\n%s \t %s \t %d:%d",p->dono,p->placa,p->entrada->hora,p->entrada->minuto);
}
printf("\n---------------------------------------------------------------------");
}
struct horas *hora_atual()
{
time_t rawtime;
struct tm *tminfo;
struct horas *p;
time ( &rawtime );
tminfo = localtime ( &rawtime );
if((p=(struct horas *)malloc(sizeof(struct horas)))==NULL)
return NULL;
p->hora = tminfo->tm_hour;
p->minuto = tminfo->tm_min;
return p;
}
|
<< | AP2 - Correção |
---|