Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • 0
taina2007

LÓGICA DE PROGRAMAÇÃO

Pergunta

1) Sabe-se que o quilowatt de energia custa 0,05% do valor do salário mínimo (R$ 1000) e o consumo (kW) dessa residência ao longo do ano foi:
Janeiro 150
Fevereiro 52
Março 45
Abril 28
Maio 65
Junho 87
Julho 12
Agosto 100
Setembro 120
Outubro 45
Novembro 67
Dezembro 230
 Sabe-se, que se o valor consumido for maior que 60 kW, deve ser aplicada uma taxa extra (bandeira amarela) igual a 2% do valor da conta, e se for maior que 100 kW, deve ser aplicada mais uma taxa (bandeira vermelha) igual a 5% do valor da conta (antes da bandeira amarela). Essas taxas devem ser somadas ao valor total da conta. Faça um programa  que calcule e mostre a. o valor a ser pago por essa residência a cada mês; b. Se no mês de dezembro o consumo médio foi menor que 85 quilowatts, então deve ser dado um desconto de natal de 50% nesse mês;

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

4 respostas a esta questão

Recommended Posts

Você não sabe por onde começar? Já fez algo?

No caso da questão 1 eu fária:

		$porcent = 0.05; // Porcentagem do valor do KW do salário.
	 	$totalp = 100; // Porcentagem total 
	 	$total = $porcent / $totalp; // Dividiaria as porcentagens
	 	$valor = 1000; // Valor do salário.
	 	$resultKW = $valor * $total; // Multiplicaria o salário pela divisão da porcentagem;
		// Resultado séria 0,5, ou seja cada KW custária $ 0,5.

Já na "2)A" eu criaria uma class para fazer várias instancias.

Já na "2)B" eu somaria é dividiria todos os valores dos meses de KW e  passarias para a class assim podendo verificar se a media e menor que 85.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia @taina2007 eu estava estudando class e tals, esse seu exercicio caiu como uma luva para mim bota em pratica oque eu estou aprendendo.

Só fiquei em duvida em 2 casos, se passa-se 100 kws eu aplicaria as duas bandeiras no caso 2%, 5% ou só a de 5% considerei só a 5%;

A outra ficaria em questão do desconto de natal já se ele ultrapasse as bandeiras 60 ou 100 kws eu aplicaria ou não as bandeiras respectivamente 2%, 5% é depois daria o desconto de 50%, considerei que aplicaria a bandeira e depois daria o desconto.

Não sei se interpretei certo mas fica aí minhas ressalvas.

Primeiro criei a a página kws.php e fiz o seguinte código:

<?php
	 
	 /**
	 * Kws 
	 */
	 class KW
	 {
	 	private $mes;
	 	private $valor;
	 	private $allmeses;

	 	function __construct($mes, $kw)
	 	{
	 		$this->setMes($mes);
	 		$this->setValorKW($kw);
	 	}
	 	public function apresentar(){
	 		echo "<p>Mês: ".$this->getMes().'</p>';
	 		echo "<p>Valor(KW): ".$this->getValorKW().'</p>';
	 	}
	 	public function getMes(){
	 		return $this->mes;
	 	}
	 	public function setMes($m){
	 		$this->mes = $m;
	 	}
	 	public function getValorKW(){
	 		return $this->valor;
	 	}
	 	public function setValorKW($kw){
	 		$this->valor = $kw;
	 	}
	 	public function getAllMeses(){
	 		return $this->allmeses;
	 	}
	 	public function setAllMeses($n){
	 		$this->allmeses = $n;
	 	}
	 	public function calcular(){
	 		$porcent = 0.05;  // Porcentagem do KW do salário;
	 		$totalp = 100; // total porcentagem;
	 		$total = $porcent / $totalp; // Divide a porcentagens
	 		$valor = 1000; // Valor do salario;
	 		$resultKW = $valor * $total; // Multiplica o valor do salário pela porcentagem total.


	 		if($this->getValorKW() > 60 && $this->getValorKW() < 100){ // verifica se o valor do Kw e maior que 60 e menor que 100;

	 			if($this->getAllMeses() < 85 && $this->getMes() == 'Dezembro'){ // Verifica se a media anual consumida e menor que 85 e se o mês em questão e dezembro, se for dezembro ele calcula as bandeira e aplica o 50% de desconto só em dezembro;
	 				$kwh = $resultKW * $this->getValorKW(); // Calcula o valor total em $ do KW.
	 				$totalJuros = $kwh + (0.02 * $kwh); // Aplica a taxa 2% ;
	 				$totalJuros2 = $totalJuros - (0.5 * $totalJuros); // Subtrai 50% de desconto em dezembro;
	 				echo "<p>Valor sem juros: ".$kwh."</p>"; // Valro sem juros
	 				echo "<p style='background:#b3e5fc; padding:5px;'>Aumento de 2%(Bandeira Amarela) + 50% de desconto por sua média de energia anual ser: ".$this->allmeses." não ultrapassando o limite!</p>"; // Mensagem
	 				echo '<p>Valor total a pagar: '.$totalJuros2.'</p>'; // Valor total a pagar.
	 			}else{// Se não e dezembro ele calcula somente com a bandeira necessaria e da o valor;
	 			$kwh = $resultKW * $this->getValorKW(); 
	 			$totalJuros = $kwh + (0.02 * $kwh);
	 			echo "<p>Valor sem juros: ".$kwh."</p>";
	 			echo "<p style='background:#ffeb3b; padding:3px;'>Aumento de 2%(Bandeira Amarela)</p>";
	 			echo '<p>Valor total a pagar: '.$totalJuros.'</p>';
	 		}
	 		}elseif($this->getValorKW() >= 100){ // verifica se o valor de KW e maior ou igual a 100;

	 			if($this->getAllMeses() < 85 && $this->getMes() == 'Dezembro'){// Verifica se a media anual consumida e menor que 85 e se o mês em questão e dezembro, se for dezembro ele calcula as bandeira e aplica o 50% de desconto só em dezembro;
	 				$kwh = $resultKW * $this->getValorKW();// Calcula o valor total em $ do KW
	 				$totalJuros = $kwh + (0.05 * $kwh); // Aplica a taxa de 5%;
	 				$totalJuros2 = $totalJuros - (0.5 * $totalJuros); // Subtrai 50% de desconto em dezembro;
	 				echo "<p>Valor sem juros: ".$kwh."</p>";
	 				echo "<p style='background:#b3e5fc; padding:5px;'>Aumento de 5%(Bandeira Vermelha) + 50% de desconto por sua média de energia anual ser: ".$this->allmeses." não ultrapassando o limite!</p>";
	 				echo '<p>Valor total a pagar: '.$totalJuros2.'</p>';
	 			}else{ // Se não e dezembro ele não o desconto de 50%;
	 			$kwh = $resultKW * $this->getValorKW();
	 			$totalJuros = $kwh + (0.05 * $kwh);
	 			echo "<p>Valor sem juros: ".$kwh."</p>";
	 			echo "<p style='background:#f40000; padding:3px;'>Aumento de 5%(Bandeira Vermelha)</p>";
	 			echo '<p>Valor total a pagar: '.$totalJuros.'</p>';
	 		}
	 		}elseif($this->getValorKW() <= 60 ){ // Verifica se p Kw menor ou igual a 60, nesse caso não há taxas extras de bandeiras;
	 			if($this->getAllMeses() < 85 && $this->getMes() == 'Dezembro'){ // Verifica se a media anual consumida e menor que 85 e se o mês em questão e dezembro, se for dezembro ele calcula as bandeira e aplica o 50% de desconto só em dezembro;
	 				$kwh = $resultKW * $this->getValorKW();
	 				$totalJuros2 = $kwh - (0.5 * $kwh);
	 				echo "<p style='background:#b3e5fc; padding:5px;'>50% de desconto por sua média de energia anual ser: ".$this->allmeses." não ultrapassando o limite!</p>";
	 				echo '<p>Valor total a pagar: '.$totalJuros2.'</p>';
	 			}else{ // Se não e dezembro ele não aplica a taxa de desconto no valor total.
	 			$kwh = $resultKW * $this->getValorKW(); // Calcula o valor sem taxas;
	 			echo '<p>Valor total a pagar: '.$kwh.'</p>'; // Mostra na tela o valor total a pagar;
	 		}

	 		}
	 	}
	 }

?>

E na index.php eu fiz o seguinte código:

<style type="text/css">
	body{
		padding: 0;
		margin:0;
	}
</style>
<div style="text-align: center; background: #e9ebee; color:#1d2129; padding-top: 20px;">
	<?php
		require_once 'kws.php'; // Arquivo necessario para instanciar a class.

		$array = array('Janeiro' => '150', 'Fevereiro' => '52', 'Março' => '45', 'Abril' => '28', 'Maio' => '65', 'Junho' => '87', 'Julho' => '12', 'Agosto' => '100', 'Setembro' => '120', 'Outubro' => '45', 'Novembro' => '67', 'Dezembro' => '230'); // Arrays dos meses e seus KW's

		$somar = array_sum($array); // Soma valores do array
		$conta_meses = count($array); // Conta elementos o array tem;
		$consumo_medio = $somar/$conta_meses; // Divide o valor total de Kw's pelo valor de meses;


		foreach ($array as $key => $item) { // Faz o foreach do array para separar os numeros do texto;
			echo '<div style="border: 1px solid; border-color: #e5e6e9 #dfe0e4 #d0d1d5; border-radius: 30px; background-color: #fff; font-family: Tahoma; width:550px; margin:0 auto;">';
			$mes = new KW( "$key", $array[$key]); // Instancia a class e passar o Nome do mês é o valor em KW's
			if($key == 'Dezembro'){ // Verifica se o mês e dezembro.
				$mes->setAllMeses($consumo_medio); // Se o mês for dezembro ele passa o valor do consumo médio anul.
			}
			$mes->apresentar(); // Apresenta o mês e seus Kw's.
			$mes->calcular(); // Calcula quanto vai pagar;
			echo "</div>";
			echo '<br>'; // Quebra de linha;
		}
	?>
</div>

Fica ai um de vários métodos que possa se fazer essa questão, que sirva de exemplo para você criar o seu próprio, já que copiando e colando você não irá aprender que é o mais importante.

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por FILIPEINFORMATICA10
      uses Crt; var X, Y : Integer; begin Writeln ('Entre com dois Números:'); { Mostra na tela a mensagem} Readln (X, Y); { Lê os dois números } If (X = Y) Then {Condição - SE X for igual a Y} Begin {INICIO - Repare abaixo que existe duas instruções, dois comandos Writeln, por isso estão entre BEGIN e END} Writeln ('X é igual que Y'); Writeln ('O Valor de X é =', X); End; {FIM} end.
    • Por flavionorvel
      #include <stdio.h>
      #include <stdlib.h>
      // Limites de tamanhos
      #define MINIMO 2
      #define MAXIMO 50
      // Variáveis globais
      int opcao = 0;
      int linhas = MAXIMO;
      int colunas = MAXIMO;
      int matrizA[MAXIMO][MAXIMO];
      int matrizB[MAXIMO][MAXIMO];
      void limpar_tela();
      // Retorna resposta do usuario se quer rodar novamente
      int rodar_novamente()
      {
      int opcao = 0;
      printf("\n\nDeseja rodar novamente? Digite 1 para SIM e 0 para Não: ");
      scanf("%d",&opcao);
      if (opcao == 1 || opcao == 0) {
      return opcao;
      }
      printf("\nOpcao invalida. Escolha novamente.");
      return rodar_novamente();
      }
      // Recebe valor inteiro do usuario
      int receber_numero()
      {
      int numero = 0;
      scanf("%d",&numero);
      if (numero >0) {
      return numero;
      }
      printf("\nNúmero inválido. digite um número positivo.: ");
      return receber_numero();
      }
      // Valida tamanhos de linhas e colunas
      int validar_tamanhos(int linhas, int colunas)
      {
      if ((linhas >= MINIMO && linhas <= MAXIMO) && (colunas >= MINIMO && colunas <= MAXIMO) && (linhas !
      = colunas)) {
      return 1;
      }
      printf("\nLinhas e Colunas devem ser diferentes e ter valores entre %d e %d. Tente
      novamente.",MINIMO,MAXIMO);
      return 0;
      }
      // Preencher matriz
      void preencher_matriz(int matriz[MAXIMO][MAXIMO], int linhas, int colunas)
      {
      int i,j;
      for (i = 0 ; i < linhas ; i ++) {
      for (j = 0 ; j < colunas ; j ++) {
      printf("\nDigite um valor inteiro para a posicao %d-%d da matriz A: ",i,j);
      matriz[j] = receber_numero();
      }
      }
      }
      // Imprimir matrizes
      void imprimir_matrizes(int matrizA[MAXIMO][MAXIMO], int matrizB[MAXIMO][MAXIMO], int linhas, int
      colunas)
      {
      int i,j;
      limpar_tela();
      printf("\n\nMATRIZ A\n");
      for (i = 0 ; i < linhas ; i++) {
      for (j = 0 ; j < colunas ; j ++) {
      printf("\nMATRIZ A POSICAO %d-%d: %d",i,j,matrizA[j]);
      }
      }
      printf("\n\nMATRIZ B (TRANSPOSTA DE A)\n");
      for (i = 0 ; i < colunas ; i++) {
      for (j = 0 ; j < linhas ; j ++) {
      printf("\nMATRIZ B POSICAO %d-%d: %d",i,j,matrizB[j]);
      }
      }
      }
      void limpar_tela()
      {
      system("@cls||clear");
      }
      // Laço principal
      int main()
      {
      int i,j;
      do {
      //Inicializar variáveis
      opcao = 0;
      linhas = 0;
      colunas = 0;
      i = 0;
      j = 0;
      do {
      printf("\nEntre com o tamanho para linhas: ");
      linhas = receber_numero();
      printf("\nEntre com o tamanho para colunas: ");
      colunas = receber_numero();
      } while (!validar_tamanhos(linhas,colunas));
      // entrar com valores para a matriz A
      preencher_matriz(matrizA, linhas, colunas);
      // criar matriz transposta de A
      for(i = 0 ; i < linhas ; i ++) {
      for(j = 0 ; j < colunas ;j ++) {
      matrizB[j] = matrizA[j];
      }
      }
      // Imprimir matrizes
      imprimir_matrizes(matrizA,matrizB,linhas, colunas);
      // Pergunta ao usuário se quer continuar
      opcao = rodar_novamente();
      } while (opcao == 1);
      }me 

       
    • Por AnotherSunset
      Boa noite/dia gente. Preciso de ajuda aqui. Tenho um exercício no qual tenho de fazer um programa em pascal com o seguinte enunciado:
      Considere a soma S dos termo da série infinita apresentada abaixo:

      Fazer um programa em Free Pascal que calcule o valor aproximado da soma S dos termos da série até o momento em que a diferença das normas (módulo) de 2 termos consecutivos for menor que 0,000001 ({i.e.}, norma da diferença das normas de dois termos consecutivos).
       
      Segue meu algoritmos/programa:
       
      program calcserie;
      var
         soma, a1, a2, an  : real;
         sinal                : longint;
         cont, n, fat         : integer;
      begin
         n := 0;
         a1 := 1;
         a2 := 0;
         soma := 0;
         cont := 1;
         fat := 1;
         an := 1;
         sinal := 1;
         while (an) > 0.000001 do
            begin
            n := n + 2;
              while cont <= n do
                  begin
                  fat := fat * cont;
                  cont := cont + 1;
              end;
           soma := (soma + (a1 * sinal));
           sinal := sinal * -1;
           a2 := a1;
           a1 := ((1/fat));
              if (a2 < 0) then
              an := (a2 * -1) - a1
              else if (a1 < 0) then
              an := (a2) - (a1 * -1);
              end;
         write (soma:0:15);
      end.
       
      Meu erro está sendo a partir da 3 casa decimal

    • Por gerlan.silva
      programa no SCILAB
       
      Escreva um programa que executa a soma dos n primeiros números inteiros ímpares maiores que 0
    • Por viniciusSantana
      Boa noite meu problema é '$' que sempre da na ultima linha esta ai o codigo
       
       
      Program Pzim ;
      var nome:string;
              sangue:string;
              idade:integer;
      Begin
      writeln('Escreva seu nome aqui ');
      read(nome);
      writeln('Digite sua idade ');
      read(idade);
      writeln('Digite seu tipo sanguineo ');
      read(sangue);
      if sangue=Apositivo then
      write('Você ',nome,'tem);
      End.
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.