Exercício sobre complexidade computacional.
Desenvolvimento do projeto prático.
Problema adaptado do 2º teste do ano passado.
Considere a seguinte função, que tem o nome f:
int f(int n, int x){ int soma = 0; for (int i = 0 ; i < n ; i++){ soma = soma + x; // instrução interna do ciclo for } return soma; }Responda:
int g(int n, int x){ }
void cmdAvancaTempo(Supermercado s, string args){ char lixo[MAX_LINHA]; int n; if (sscanf(args,"%d %s", &n, lixo) != 1 || n < 0) invalidos(); else { int agora = tempoAvancaSupermercado(s, n); printf("Tempo corrente: %d segundos\n", agora); } }
É preciso fazer passar o tempo, um segundo de cada vez.
A programação do que acontece em cada segundo pode talvez ser feita no sistema com o argumento de que é preciso coordenar caixas, clientes e história.
Uma alternativa é programar o que acontece em cada segundo no gestor das caixas, com o argumento de que a passagem do tempo decorre nas caixas. É isso que aparece o esboço abaixo.
Mas, nesse caso, o sistema precisa de passar muitos dados para o gestor das caixas poder fazer o seu trabalho. É preciso passar, pelo menos: o tempo corrente, os clientes (para remover os clientes que saem) e a história (para adicionar um registo por cada cliente que sai).
int tempoAvancaSupermercado(Supermercado s, int n){ for (int i = 0; i < n; i++){ // avanca tempo avancaTempoCaixas(...) // manda avancar tempo em cada caixa } // retornar o momento corrente }