Mudanças entre as edições de "AP2"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
(Criou página com '==Prova 1== ===Questão Única=== Desenvolver um sistema de controle de estacionamento utilizando listas encadeadas, implementando as funções associadas a este sistema. <cod...')
 
 
(11 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 101: Linha 101:
 
}
 
}
 
</syntaxhighlight>
 
</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;
 +
  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; 
 +
}
 +
 +
</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