Jump to content
firenameangel

Programa C - Simulador de Potência Elétrica

Recommended Posts

firenameangel

Boa tarde pessoal,

estou no primeiro ano de faculdade e também o primeiro contacto com programação, tenho um trabalho para fazer e gostaria de saber se alguém me pode ajudar a fazer e compreender.

Enunciado:

Pretende-se com este trabalho prático construir um programa que ajude um consumidor de energia elétrica a simular a operação de seus equipamentos elétricos e eletrónicos ligados à rede elétrica em simultâneo, de forma a possibilitar a contratação da potência mais adequada para os diversos cenários possíveis. Para isso, deve utilizar a metodologia descrita a seguir. Descrição sobre o funcionamento do programa Todos os equipamentos elétricos e eletrónicos (por exemplo, candeeiros, máquina de lavar roupa, computador, televisão, etc.) quando são ligados à rede elétrica são colocados numa fila denominada “equipamentos em uso”. Inicialmente, a fila encontra-se vazia. Sempre que é ligado um equipamento, é-lhe atribuído um número. O número do equipamento é um inteiro que pode variar entre 1 a 99 não podendo haver números repetidos em simultâneo na fila. A cada equipamento, é atribuída uma categoria. São consideradas 3 categorias de eficiência energética: AA, A+ e B. Relativamente a cada equipamento é importante registar o seu código, designação, categoria e data e hora a que foi ligado e desligado. Estes dados devem ser pedidos ao utilizador com exceção da data e hora que deve ser atribuída pelo sistema no momento em que o equipamento dá entrada (ligado) e saída (desligado) respetivamente na fila. O consumidor pode ter até 100 equipamentos elétricos e eletrónicos diferentes disponíveis mas, a fila de “equipamentos em uso” apenas suporta um máximo de 20 ligados em simultâneo. A fila de “equipamentos em uso” deverá estar sempre visível e ordenada por ordem decrescente de categoria dando assim preferência à utilização dos mais económicos. Da mesma forma, cada vez que é ligado ou desligado um equipamento o consumidor é informado sobre o consumo total em uso, no momento, sugerindo a respetiva potência a contratar.

/* Template Trabalho Prático APROG
  Nov-2013
  Software utilizado: Dev C++
  Sistema Operativo: Windows


  Descrição sobre as funcionalidades do programa
O programa deverá ter o comportamento a seguir sugerido:
1. Ligar equipamento
   a. Pergunta o número do equipamento.
   b. Verifica se esse número já existe na fila.
   c. Pergunta a categoria.
   d. Insere o número do equipamento numa posição da fila correspondendo a um novo equipamento ligado à rede elétrica. A posição deste equipamento na fila deve ser solicitada ao utilizador, no entanto, este deve ficar sempre posicionado dentro do grupo com igual categoria. Caso se pretenda inserir um equipamento na fila numa posição já ocupada, todos os equipamentos situados à sua direita terão que ser deslocados uma posição para a direita na fila (ver exemplo 1). No caso da fila se encontrar completa, o último equipamento da fila deverá ser retirado (o que significa ser desligado) desde que a sua categoria seja mais baixa do que a do novo equipamento.
   e. Atualiza a fila.
   f. Verifica se o equipamento alguma vez foi utilizado pelo consumidor. No caso de ser a primeira vez pede os restantes dados do equipamento. No caso de não ser a primeira vez acrescenta data e hora em que foi ligado.
2. Desligar equipamento
   a. Pergunta o número do equipamento.
   b. Procura esse número na fila.
   c. Elimina o equipamento da fila (que corresponde a desligar o equipamento). A posição onde se encontra o número do equipamento não deve ficar desocupada, exceto se for o último da fila. Assim, todos os equipamentos que estão a seguir ao equipamento que vai ser eliminado da fila (ou seja, desligado) têm de ser deslocados na fila (ver exemplo 2).
   d. Pergunta se quer eliminar o equipamento permanentemente. No caso de não querer apenas insere data e hora em que foi desligado.
3. Mostrar detalhe de todos os equipamentos de uma determinada categoria (presente na fila ou não) por ordem decrescente de utilização.
   a. Pergunta a categoria.
   b. Exibe os dados bem como as datas e horas que cada equipamento dessa categoria esteve em funcionamento por ordem decrescente de tempo total de uso. No caso do equipamento não se encontrar na fila deve também apresentar a mensagem "Equipamento desligado". No caso de não haver equipamento de determinada categoria deve apresentar a mensagem "Equipamento inexistente para a categoria X" (em que X é a categoria pretendida).
4. Sair
   a. Termina o programa.
Exemplo 1:
Códigos dos equipamentos na fila atual:
25 76 12 15 78
ao inserir o equipamento 94 na posição 2, a fila deverá ficar ordenada da seguinte forma:
25 94 76 12 15 78
Exemplo 2:
Códigos dos equipamentos na fila atual:
25 76 12 15 78
ao retirar o equipamento 12, a fila deverá ficar ordenada da seguinte forma:
25 76 15 78
*/
#include<stdio.h>
#define MAX_EQ_DSP 100   //Limite máximo de equipamentos disponíveis para utilização
#define MAX_EQ_LIG  20   //Limite máximo de equipamentos ligados em simultâneo
iniciar_fila(int fila[])
{
     int i;
     for(i=1;i<=MAX_EQ_LIG;i++) fila[i]=0;
}
mostrar_fila(int fila[])
{
     int i;
     for(i=1;i<=MAX_EQ_LIG;i++) printf("%3d", fila[i]);
}
int valida_n(int fila[], int n)
{
   int i;
   for(i=1;i<=MAX_EQ_LIG;i++)
      if(fila[i]==n)
         return 1;
   return 0;
}
int valida_ps(int f_equipamento_uso[], int f_categoria[], int n, int pr, int *ps)
{
        //Inserir aqui o código para validar a posição do equipamento na fila
}
inserir(int f_equipamento_uso[], int f_categoria[], int n, int pr, int ps)
{
     int i, temp_u,temp_pr;
      for(i=MAX_EQ_LIG;i>ps;i--)
      {
           f_equipamento_uso[i]=f_equipamento_uso[i-1];
           f_categoria[i]      =f_categoria[i-1];
      }
      f_equipamento_uso[ps]=n;
      f_categoria[ps]=pr;
}
retirar()
{
        //Inserir aqui o código para retirar um equipamento da fila
}
mostrar()
{
        //Inserir aqui o código para mostrar detalhe dos equipamentos de uma categoria
}
main()
{
     char op;
     int f_categoria[MAX_EQ_LIG], f_equipamento_uso[MAX_EQ_LIG];
     int n, pr, ps, res_n, res_ps;
     system("title SiPEc - Simulador de Potencia Eletrica");
     iniciar_fila(f_categoria);
     iniciar_fila(f_equipamento_uso);
     do
     {
         res_n=res_ps=0;
         system("cls");
         printf("\n\n                                       Equipamento em Uso\n");
         printf("\n        Categoria");mostrar_fila(f_categoria);
         printf("\n                  ____________________________________________________________");
         printf("\n      Equipamento");mostrar_fila(f_equipamento_uso);
         printf("\n                  ____________________________________________________________");
         printf("\n          Posicao  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20");
         printf("\n\n\n\nGestao de Equipamentos");
         printf("\n\n(1) Ligar Equipamento");
         printf("\n(2) Desligar Equipamento");
         printf("\n(3) Mostrar detalhe dos equipamentos de uma categoria (ligados, desligados)");
         printf("\n(0) Sair");
         printf("\nOpcao?");
         fflush(stdin);
         scanf("%c",&op);
         switch(op)
         {
               case '1':
                    printf("\n>>> Ligar equipamento <<<");
                    do{
                        printf("\nNumero?");scanf("%d",&n);
                        res_n=valida_n(f_equipamento_uso,n);
                    }while((n<1 || n>99) || res_n==1);
                    do{
                        printf("\ncategoria?");scanf("%d",&pr);
                    }while(pr<1 || pr>3);
                    do{
                        printf("\nPosicao?");scanf("%d",&ps);
                        res_ps=valida_ps(f_equipamento_uso,f_categoria,n,pr,&ps);
                    }while((ps<1 || ps>20) || (res_ps==0));
                     inserir(f_equipamento_uso,f_categoria,n,pr,ps);
                    break;
               case '2':
                    printf("\n>>> Desligar equipamento <<<");
                    retirar();
                    break;
               case '3':
                    printf("\n>>> Mostrar detalhe dos equipamentos de uma categoria (ligados e desligados) <<<");
                    mostrar();
                    break;
               case '0':
                    printf("\nTerminando....");
                    break;
               default:
                    printf("\nERRO - Opcao invalida!");
                    getch();
                    //break;
         }
     }while(op!='0');
     getch();
}

Edited by thoga31
Tags code + GeSHi

Share this post


Link to post
Share on other sites
thoga31

No que tens dúvidas? Colocares o enunciado e um código não nos ajuda a perceber as tuas dificuldades.


Knowledge is free!

Share this post


Link to post
Share on other sites
HappyHippyHippo

pelo incrível que pareça ... não vejo uma única linha de código de C++ ... num uma instrução perdida no meia de uma linha qualquer


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
pwseo

pelo incrível que pareça ... não vejo uma única linha de código de C++ ... num uma instrução perdida no meia de uma linha qualquer

Enganas-te! Os comentários começados por // são C++ xD (ok, e C99 ou C89+extensões, mas tinha que deixar aqui a piada :P )

E nem sequer é C correcto: falta o tipo de dados da main, falta a lista de argumentos da main (ou então usar (void) como lista de argumentos) e falta tambem return 0; no final da main, a menos que estejamos a utilizar C99 ou extensões GNU).

getch() também é uma coisa engraçada.

firenameangel,

O trabalho é para ser feito em C ou C++?

Share this post


Link to post
Share on other sites
firenameangel

É em C, peço desculpa.

A minha primeira dúvida é logo qual o código que tenho de inserir para validar a posição do equipamento.

Share this post


Link to post
Share on other sites
HappyHippyHippo

A minha primeira dúvida é logo qual o código que tenho de inserir para validar a posição do equipamento.

como não dizes o que significa "validar a posição da lista" vou tirar as minhas próprias conclusões e depreender que será:

- é o código a ser inserido na função apropriada que irá assumir que toda a lista se encontra ordenada tirando a posição a verificar, e que terá de comparar o elemento a verificar com o elemento anterior da lista (se existir), e verificar se esse elemento valida a ordem importa na lista, assim como comparar com o elemento seguinte (se existir) e voltar a validar a mesma ordem. mas agora entre o elemento a validar e o seguinte. irá retornar um valor representativo de que a ordem entre os elementos anterior, a verificar e seguinte se encontra correcta ou não.


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
thoga31

Tópico movido para a secção correcta. Título editado à luz deste facto.

Tomem atenção à linguagem em que estão a programar. C e C++ são primos mas não deixam de ser totalmente diferentes.


Knowledge is free!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.