Informática, perguntado por sebastiaocandioyllu1, 1 ano atrás

Boa tarde..
Meus amigo.
preciso resolver esse exercícios.

Veículos somente podem entrar ou sair do anel viário se estiverem na faixa externa do anel viário (faixa 1).

Veículos somente podem desenvolver alta velocidade e fazer ultrapassagens se estiverem na faixa interna do anel viário (faixa 2).

Um sistema de trânsito pode ser monitorado por um programa eletrônico que mostre a ocupação da via, a velocidade dos automóveis, os pontos de engarrafamento, entre outras informações.

O anel possui uma carga máxima de veículos que pode comportar em suas pistas.


Questões

a) Que tipo de estrutura de dados (lista, fila, pilha, árvore, ...) você usaria para resolver este problema? Que tipo de implementação esta estrutura de dados deveria ter (por vetor, por nós alocados dinamicamente, ...)? Justifique sua resposta.

b) Programe esta estrutura de dados criando funções para inserir um veículo, remover um veículo, verificar se a estrutura de dados está vazia ou cheia, procurar um veículo, alterar velocidade de um veículo, alterar faixa do veículo.

c) Teste sua estrutura de dados inserindo pelo menos 10 veículos inicialmente e fazendo um loop de repetição no qual os veículos vão sendo inseridos, removidos, alterando de faixa, aleatoriamente.

· utilize as funções rand() e srand() do C++ (ou similar em outra linguagem) para gerar valores aleatórios para a velocidade e tempo em que o automóvel vai permanecer no anel;

· Faça apenas um programa para resolver as questões B e C.
Anexo

Soluções para a tarefa

Respondido por tpsantwf
0
// linha.cpp : define o ponto de entrada para o aplicativo do console.//
#include "stdafx.h"#include <stdio.h> #include <stdlib.h> #include <time.h>   #include <locale.h> 
typedef struct informacao{ int velocidade, numRegistro, tempo;  short faixa;    }info;
struct elementos{ struct informacao dados;     struct elementos* prox, *ant;   };struct noDiscritor{ struct elementos* pInicio, *pFinal;  unsigned long qtd, MAX; };
typedef struct elementos elem;typedef struct noDiscritor lista;
short criaLista(lista** li, unsigned long MAX) { *li = (lista*)malloc(sizeof(lista)); 
if (!li)       return -1;
(*li)->pInicio = NULL;   (*li)->pFinal = NULL; (*li)->qtd = 0;          (*li)->MAX = MAX;       
return 1;   }
short liberaLista(lista* li){ elem* no;   
if (!li)   return -1;
while ((li->pInicio) != NULL)  { no = li->pInicio;    li->pInicio = li->pInicio->prox;    
free(no);    }
free(li);   
return 1;   }
short criaNo(elem** no, info dado){ *no = (elem*)malloc(sizeof(elem)); 
if (!no)       return 0;  
(*no)->dados = dado;     (*no)->prox = NULL;      (*no)->ant = NULL;
return 1;   }
short listaVazia(lista* li){ if (!li)                return -1;
return (li->qtd == 0);  }
short listaCheia(lista* li){ if (!li) return -1;
return (li->qtd == li->MAX);}
short insereListaFinal(lista* li, info dado) { elem* no;    short bol = criaNo(&no, dado);  
if ((!li) || (!bol))   return -1;
if (listaCheia(li))    return 0;
no->ant = li->pFinal;   
if (listaVazia(li))     li->pInicio = no;
else li->pFinal->prox = no;  
li->pFinal = no;     ++li->qtd;          
return 1;}
short removeInicio(lista* li){ elem* no; 
if (!li)   return -1;
if (listaVazia(li))    return 0;
no = li->pInicio;   
if (li->qtd == 1)      { li->pFinal = NULL;   li->pInicio = NULL; }
else { li->pInicio = li->pInicio->prox;     li->pInicio->ant = NULL;             }
--li->qtd;  
free(no);   
return 1;}
short consultaListaPos(lista* li, unsigned long pos, info* dado) { elem* no;                    register unsigned long i; 
if (!li)   return -1;
if ((listaVazia(li)) || (pos <= 0) || (pos > li->qtd))     return 0;
for (i = 1, no = li->pInicio; (i != pos) && (no != NULL); ++i, no = no->prox);    
if (no == NULL)    return 0;
*dado = no->dados;  
return 1;}
short alteraFaixa(lista* li, int numRegistro, short faixa){ elem* no; 
if (!li)   return -1;
if (listaVazia(li))    return 0;
if (li->pInicio->dados.numRegistro == numRegistro)     { li->pInicio->dados.faixa = faixa; return 1; }
if (li->pFinal->dados.numRegistro == numRegistro)  { li->pFinal->dados.faixa = faixa; return 1; }
if ((no = li->pInicio->prox) == NULL)  return 0;
while ((no != li->pFinal) && (no->dados.numRegistro != numRegistro))   no = no->prox;
if (no == li->pFinal)  return 0;
no->dados.faixa = faixa;    
return 1;}
short alteraVelocidade(lista* li, int numRegistro, int velocidade){ elem* no;
if (!li) return -1;
if (listaVazia(li)) return 0;
if (li->pInicio->dados.numRegistro == numRegistro) { li->pInicio->dados.velocidade = velocidade; return 1; }
if (li->pFinal->dados.numRegistro == numRegistro) { li->pFinal->dados.velocidade = velocidade; return 1; }
if ((no = li->pInicio->prox) == NULL) return 0;
while ((no != li->pFinal) && (no->dados.numRegistro != numRegistro)) no = no->prox;
if (no == li->pFinal) return 0;
no->dados.velocidade = velocidade;
return 1;}
short imprimeConteudo(lista* li){ elem* no; register unsigned long i;
setlocale(LC_ALL, ""); 
if (!li) return -1;
if (listaVazia(li)) return 0;
printf("\n\t# ...Começo... #####\n"); for (no = li->pInicio, i = 1; no != NULL; no = no->prox, ++i) printf("\n%luº Carro:" "\nfaixa: %hi" "\nvelocidade: %3i km/h" "\nnumero de registro: %6i." "\ntempo que permanecerá: %3i min" "\n ----------\n", i, no->dados.faixa, no->dados.velocidade, no->dados.numRegistro, no->dados.tempo); printf("\n\t #...Termino... #\n");
return 1;}



int main(){ lista* li; info veiculo; register int i, j, op; int tam = 10; long max = 100, qtd = 10; short bol;
setlocale(LC_ALL, "");  srand(time(NULL));    
criaLista(&li, max);    
for (i = 0; i < 10; ++i)   { veiculo.faixa = rand() % 2 + 1;  veiculo.numRegistro = rand() % 999999 + 1;  veiculo.velocidade = rand() % 200;   veiculo.tempo = rand() % 120 + 1; 
insereListaFinal(li, veiculo);  }
printf("Antes da simulação:"); imprimeConteudo(li);
op = rand() % 4 + 1;   while (op != 0)  { switch (op) { case 1: tam = rand() % tam + 1; } }}
Perguntas interessantes