Ir ao conteúdo
  • Cadastre-se
Graziele Demetrio

C Energia elétrica de uma cidade

Posts recomendados

Exercício 2:   
Para cada um dos consumidores de energia elétrica de uma cidade é informado o número da conta e o total de KW consumido no mês. Sabendo-se que o custo do KW é de R$ 1,75, fazer um algoritmo para: 

  • Armazenar e listar o número da conta, o total de KW consumidos e o valor a pagar de cada consumir cadastrado;
  • Listar o número da conta, o total de KW consumidos e o valor a pagar do consumidor que mais gastou e o que menos gastou;
  • Mostrar a média de consumo da cidade;
  • Mostrar o número de consumidores que ultrapassaram o consumo de 170 KW; 

Armazene as informações em estruturas de vetores e/ou matrizes. Na tela, deve existir um MENU que pergunta ao usuário se ele deseja cadastrar um novo consumidor ou listar alguma informação (maior, menor, média, etc.).

 

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>

int NConta[30];//Numero de conta
int TotalKW;// Valor Total de KW
int VPConsumidor;//Valor a Pagar de cada consumidor
int VGMais, VGMenos;
int MediaCons;
int consUltra;// Consulmo que ultrapassa 170
float media;////Media de consulmo
int Valorpago;
int subtracao;

int main()
{
	printf("Digite o numero da conta A:\n");
	scanf_s("%d", &NConta);

	printf("Digite o numero total de consumo KW:\n");
	scanf_s("%d", &TotalKW);

	if (TotalKW)
	{// soma do valor a pagar de cada consumidor
		Valorpago = 1.75 * TotalKW;
	}

	void cadastro();
	{
		int i;
		for (i = 0; i <= Valorpago; i++)
		{
			if (Valorpago[i] > Valorpago[VGMais]) {
				VGMais = i;
			}
			if (Valorpago[i] < Valorpago[VGMenos]) {
				VGMenos = i;
			}
		}
	}

	printf("O Total da conta = %d\n", Valorpago);
	printf("Maior Valor: %s com a Valorpago %d.", Valorpago[VGMais]);
	printf("Maior Valor: %s com a Valorpago %d.", Valorpago[VGMenos]);

	system("pause");
	return 0;
}

Esta dando alguns erros e queria ver onde posso arrumar, e ali no void de cadastro onde esta os dois if seria para ver qual é o valor gasto maior e menor so que e ali que o código nao esta lendo como faço para ele ler? como fazer a media dos 2 valores? como fazer para por como vetor? 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá@Graziele Demetrio edite o post, por favor, apague o código e copie novamente e dessa vez use o CODETAG esse botão [<>] de sua caixa de mensagens. Esse procedimento melhor a apresentação do seu código. Obrigado.

 
 

@Graziele Demetrio Apesar de ter editado, ainda continuo trazendo caracteres estranhos.

Tenha certeza que apagou do post antigo e copiou a partir do IDE no PC. Esses caracteres espaços ou estranhos ocorrem quando o código é copiado diretamente do post, isso dificulta muito nossa ajuda. Recomendo sempre usar o code tag <> no código colado a partir de uma  cópia (Ctrl + C) da IDE.  

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora copie sem problema.

 

2 minutos atrás, Graziele Demetrio disse:

@MB_ agora editei novamente e copiei  direto do visual studio

ótimo, vou estudar seu código e tentar uma ou mais resposta para seu questionamento.

adicionado 2 minutos depois

Em 1 hora eu retorno!

  • Haha 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Graziele Demetrio Então notei 2 equívocos e não são sérios, são faltas comuns de sintaxe que todo mundo comete.

São eles:

  1. Você implementou uma função cadastro; legal, porém dentro de outra; não legal isso rompe com principal fundamental do paradigma de programação procedural, mesmo que os eventos seja sequencias uma função não é implementada dentro de outra faz anos, pode até ser declarada e sempre chamada mais jamais implementada porque não faz sentido. Refiro-me a função cadastrar que é interna a função main. Está como exemplo abaixo
    main(void)
    {
    	void cadastro(void)
    	{
    		...
    	}
    	return 0;
    }

     

  2. Ainda na função cadastro void cadastro(); a variável global Valorpago foi declarada como sendo simples, contudo a função acessa por índices como se fosse um objeto, ou melhor, um vetor que na realidade não é. O mesmo equívoco dentro da função main. 
  3. Para fechar a função cadastro void cadastro(); que pelo identificado (seu nome dentro do algoritmo) leva a entender que será algo para preencher informações; as informações  do exame
    2 horas atrás, Graziele Demetrio disse:

    o número da conta e o total de KW consumido no mês

    Quando na verdade há uma tentativa de encontrar o maior e o menor consumidor de energia. Então o nome desse procedimento (ou função) é outro.

 

 

De cara, recomendo começar pela função cadastrar(...) que de fato solicita as informações do exame.

Depois para outras ainda a se pensar.

 

DICA: Reduza o número de variáveis globais, deixa apenas aquelas que são estritamente necessárias, pois o uso abusivo delas é muito fortemente característica de pouca lógica e ninguém gosta de passar esse impressão.

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

boa tarde, dei uma ajeitada no codigo , mais esta dando agora erro ( subscrito requer tipo ponteiro ou matriz),

pode me ajudar, nao sei onde esta este erro, e o que tem que ser feito.

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>


#define numeros_linhas 5 // declarando tamanho máximo do vetor
#define valor_kwh 1.75
#define CONSUMO_ACIMA 170
#define KEY_ENTER 13
// variáveis globais

float consumidor[numeros_linhas][2];
int total_registrado = 0;
int NConta[30];//Numero de conta
int TotalKW;// Valor Total de KW
int Valorpago;
int a, b[10] = { 0 };



int 


	printf("Digite o numero da conta A:\n");
	scanf_s("%d", &NConta);

	printf("Digite o numero total de consumo KW:\n");
	scanf_s("%d", &TotalKW);


	if (TotalKW)
	{// soma do valor a pagar de cada consumidor

		Valorpago = 1.75 * TotalKW;

	}

void cadastroConsKw();
{
	system("cls");
	printf("\nNúmero da matrícula:\n");
	scanf_s("%f", &consumidor[total_registrado][0]);
	printf("\nKWH consumido: ");
	scanf_s("%f", &consumidor[total_registrado][1]);
	total_registrado++;
	printf("\nCadastro realizado com sucesso!\n");
	system("pause");
}
void consumo_Maio()
{
	system("cls");
	// o menor no começo é sempre 0, então não existe engenharia de usar energia do poste e não	pagar nada

	if (total_registrado > 0)
	{
		float kwh = 0, vl_total = 0, numero_conta = 0;

		int i;
		// compara se o kwk é maior que registrado
		for (i = 0; i < total_registrado; i++)
		{
			if (consumidor[i][1] > kwh)
			{
				numero_conta = consumidor[i][0];
				kwh = consumidor[i][1];
			}
		}
		vl_total = (float)(kwh * valor_kwh);
		printf("\nMaior consumo registrado");
		printf("\nNúmero da conta: %0.2f", numero_conta);
		printf("\nKwH consumido: %0.2f", kwh);
		printf("\nValor total a pagar: %0.2f", vl_total);
	}
	else {
		printf("\nNão há consumidor cadastrado...\n");
	}
		system("pause");
}// procedimento para mostrar menor consumo

void consumo_Menor() 
{
	system("cls");
	// preciso primneiro colocar kwk com valor estratoférico que nem Bill Gates conseguiria pagar
	if (total_registrado > 0) 
	{
		float kwh = 99999999, vl_total = 0, numero_conta = 0;

		int i; 
		
		for (i = 0; i < total_registrado; i++) 
		{// compara se o kwk é menor que registrado

			if (consumidor[i][1] < kwh) 
			{
				numero_conta = consumidor[i][0];
				kwh = consumidor[i][1];
			}
		}
		vl_total = (float)(kwh * valor_kwh);
		printf("\nMenor consumo registrado");
		printf("\nNúmero da conta: %0.2f", numero_conta);
		printf("\nKw consumido: %0.2f", kwh);
		printf("\nValor total a pagar: %0.2f", vl_total);
	}
	else {
		printf("\nConsulmidor inexistente...\n");
	}
	system("pause");
}// procedimento para listar consumidores acima n kwh
void listarConsumoSuperior(float n)
{
	system("cls");

	if (total_registrado > 0)
	{
		int contador = 0, i = 0;

		printf("\nExibindo consumo acima de %.2fKW", n);

		for (i = 0; i < total_registrado; i++)
		{
			if (consumidor[i][1] > n)
			{
				printf("\nNúmero da conta: %.2f - KWh: %.2f", consumidor[i][0],
					consumidor[i][1]);
				contador++;
			}
		}
		printf("\nTotal encontrado: %d\n", contador); // imprimindo total de consumidor
	}
	else
	{
		printf("\nNão há consumidor cadastrado...\n");
	}
	system("pause");
}
// exibe a media de consumo da cidade

void consumo_medio_cidade()
{
	system("cls");
	if (total_registrado > 0)
	{
		float media = 0; // declarando media 

		int i;

		for (i = 0; i < total_registrado; i++)
		{
			media = media + consumidor[i][1];//somando consumo
		}
		media = media / total_registrado; // fazendo media com total somado dividindo com numero de consumidor cadastrado

		printf("\nO consumo médio da cidade é: %.2fKW\n", media); // imprimindo a media de consumo da cidade
	}
	else
	{
		printf("\nNão há consumidor cadastrado...\n");
	}
	system("pause");
}
// procedimento para exibir menu




	printf("O Total da conta = %d\n", Valorpago);
	printf("Maior Valor: %s com a Valorpago %d.", Valorpago[VGMais]);
	printf("Maior Valor: %s com a Valorpago %d.", Valorpago[VGMenos]);


	int main(int argc, char* argv[])
	{
		setlocale(LC_ALL, "Portuguese");

		exibirMenu();
		return 0;
	}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá@Graziele Demetrio começarei o estudo de sua resposta e 5 horas mais tarde direi alguma coisa.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

As 5 funções estão funcionando ...

 

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>


#define NUMERO_LINHAS 5 // declarando tamanho máximo do vetor
#define valor_kwh 1.75
#define CONSUMO_ACIMA 170
#define VAZIO 0
#define KEY_ENTER 13

// Variáveis Globais
int   total_registrado;
int   consumidor_numero_conta[NUMERO_LINHAS];
float consumidor_total_KW[NUMERO_LINHAS];



void cadastroConsKw(void)
{
	system("cls");

	if (NUMERO_LINHAS == total_registrado) {
            printf("Cadastro Cheio\n");
	}
	else for (int reg= 0; reg < NUMERO_LINHAS; ++reg) {
            if(VAZIO == consumidor_numero_conta[reg]) {
                    printf("Número da matrícula: "); scanf(" %d",&consumidor_numero_conta[reg]);
                    printf("KWH consumido: "); scanf(" %f",&consumidor_total_KW[reg]);

                    ++total_registrado;
                    puts("");
                    printf("Cadastro realizado com sucesso!\n");
                    break;
            }
	}
	system("pause");
	return;
}



void consumo_maior(void)
{
	system("cls");
    float kwh = 0, vl_total = 0;
    int numero_conta = 0;
	// o menor no começo é sempre 0, então não existe engenharia de usar energia do poste e não	pagar nada

	if (total_registrado > VAZIO) {
            int i;
		// compara se o kwk é maior que registrado
            for (i = 0; i < NUMERO_LINHAS; i++) {
                    if ((consumidor_numero_conta[i] != VAZIO)&&(consumidor_total_KW[i] > kwh)) {
                            numero_conta = consumidor_numero_conta[i];
                            kwh = consumidor_total_KW[i];
                    }
            }
            vl_total = (kwh * valor_kwh);

            printf("Maior consumo registrado \n");
            printf("Número da conta: %d \n", numero_conta);
            printf("KwH consumido: %0.2f \n", kwh);
            printf("Valor total a pagar: %0.2f \n", vl_total);
            puts("");
	}
	else {
            printf("\nNão há consumidor cadastrado...\n");
	}
    system("pause");
}// procedimento para mostrar menor consumo

void consumo_menor(void)
{
	system("cls");
    float kwh = 99999999, vl_total = 0;
    int numero_conta = 0;
	// preciso primneiro colocar kwk com valor estratoférico que nem Bill Gates conseguiria pagar
	if (total_registrado > VAZIO) {

            int i;
		// compara se o kwk é maior que registrado
            for (i = 0; i < NUMERO_LINHAS; i++) {
                    if ((consumidor_numero_conta[i] != VAZIO)&&(consumidor_total_KW[i] < kwh)) {
                            numero_conta = consumidor_numero_conta[i];
                            kwh = consumidor_total_KW[i];
                    }
            }
            vl_total = (float)(kwh * valor_kwh);

            printf("Menor consumo registrado \n");
            printf("Número da conta: %d \n", numero_conta);
            printf("Kw consumido: %0.2f \n", kwh);
            printf("Valor total a pagar: %0.2f \n", vl_total);
            puts("");
	}
	else {
            printf("\nConsulmidor inexistente...\n");
	}
	system("pause");
}// procedimento para listar consumidores acima n kwh



void listarConsumoSuperior(float n)
{
	system("cls");

	if (total_registrado > 0) {
            int contador = 0, i = 0;

            printf("Exibindo consumo acima de %.2f KW \n", n);
            for (i = 0; i < NUMERO_LINHAS; i++) {
                    if ((consumidor_numero_conta[i] != VAZIO)&&(consumidor_total_KW[i] > n)) {
                            printf("Número da conta: %d - KWh: %.2f \n", consumidor_numero_conta[i],
                                                                                consumidor_total_KW[i]);
                            contador++;
                    }
            }
            printf("Total encontrado: %d \n", contador); // imprimindo total de consumidor
	}
	else {
            printf("\nNão há consumidor cadastrado... \n");
	}
	system("pause");
}
// exibe a media de consumo da cidade

void consumo_medio_cidade()
{
	system("cls");
	if (total_registrado > 0) {
            float media = 0; // declarando media

            int i;

            for (i = 0; i < NUMERO_LINHAS; i++) {
                if (consumidor_numero_conta[i] != VAZIO) {
                        media = media + consumidor_total_KW[i];//somando consumo
                }
            }
            media = media / total_registrado; // fazendo media com total somado dividindo com numero de consumidor cadastrado
            printf("O consumo médio da cidade é: %.2fKW\n",media); // imprimindo a media de consumo da cidade
	}
	else {
            printf("Não há consumidor cadastrado...\n");
	}
	system("pause");
}

int main(void)
{
    setlocale(LC_ALL, "Portuguese");

    cadastroConsKw();
    cadastroConsKw();
    cadastroConsKw();

    listarConsumoSuperior(CONSUMO_ACIMA);

    consumo_medio_cidade();
    consumo_maior();
    consumo_menor();


    return 0;
}

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@gabriel3vs onde estive escrito scanf troque por scanf_s, veja qual será o próximo erro e me avise

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: minicurso “Como ganhar dinheiro montando computadores”

Gabriel TorresGabriel Torres, fundador e editor executivo do Clube do Hardware, acaba de lançar um minicurso totalmente gratuito: "Como ganhar dinheiro montando computadores".

Você aprenderá sobre o quanto pode ganhar, como cobrar, como lidar com a concorrência, como se tornar um profissional altamente qualificado e muito mais!

Inscreva-se agora!