Ir para conteúdo

Arquivado

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

Luis_Carlos

Calculadora em PHP não funciona

Recommended Posts

Olá amigos,estou tentando desenvolver uma calculadora em PHP com os seguintes parametros:

- Recebe dois numeros e o usuario escolhe uma operação para eles.

-As operações são:divisão,multiplicação,adição,soma,radiação,potenciação e comparação entre os dois numeros(primeiro maior que o segundo e primero igual ao segundo, as oprações serão escolhidas por uma tabela.

- O resultado deveria ser por extenso,ou seja,apos o calculo do resultado é impresso em letras,e não em numeros,(dessa parte já estou quase desistindo,já me contento que funcione os calculos :upset: ).

Então seriam 3 arquivos:

01 HTML com o formulário.
01 PHP que receberá os valores do form e retornará os resultados.
01 PHP contendo as funções que será usado para fazer os cálculos (rotinas.php)

 

O fato é que quando executo tem muitos erros,e não estou conseguindo resolver,principalmente dentro do rotinas.php

 

Abaixo seguem os codigos:rotinas.php

<?php

	function SomaNumeros($n1, $n2){
		return $n1 + $n2;
	}
	
	function SubtraiNumeros($n1, $n2){
		return $n1-$n2;
	}
	
	function MultiplicaNumeros($n1, $n2){
		return $n1*$n2;
	}
	
	function DivideNumeros($n1, $n2){
		return $n1/$n2;
	}
	function Mostra ($n1, $n2){
		echo "Mostra valores N1 = ".$n1 . "  N2 = " .$n2 ."<BR>";
	}
	
	function potenciacao($n1, $n2) {

    return $n1^$n2;

}
    
	function sqrt($x) {
        $aproximacao = 0.0000001;
        $n1 = 1.0;
        $n2 = 0;
        while (abs($n1-$n2) > $aproximacao) {
                $n2 = $n1;
                $n1 = ($n1 + ($x/$n1))/2;
        }
        return $n1;

   
function NumMaior($NumMaior)
 if ($n1 > $n2)
 $maior = $n1;
else
 $maior = false; 
 
 function Num1Maior($Num1Maior)
 if ($n1 => $n2)
 $maiorN = True;
else
 $maiorN = false; 
 

function NumExtenso($valor) { 

$centena = array("", "cem"); 

$dezena = array("", "dez", "vinte", "trinta", "quarenta", "cinquenta", "sessenta", "setenta", "oitenta", "noventa"); 

$dezenas10 = array("dez", "onze", "doze", "treze", "quatorze", "quinze", "dezesseis", "dezessete", "dezoito", "dezenove"); 

$unidades = array("", "um", "dois", "três", "quatro", "cinco", "seis", "sete", "oito", "nove"); 

$z=0; 

$valor = number_format($valor, 2, ".", "."); 
$inteiro = explode(".", $valor); 
for($i=0;$i<count($inteiro);$i++) 
for($ii=strlen($inteiro[$i]);$ii<3;$ii++) 
$inteiro[$i] = "0".$inteiro[$i]; 


$fim = count($inteiro) - ($inteiro[count($inteiro)-1] > 0 ? 1 : 2); 
$rt=''; 
for ($i=0;$i<count($inteiro);$i++) { 
$valor = $inteiro[$i]; 
$rc = (($valor = 100)&& ($valor = 100)) ?  "cem" : $centena[$valor[0]]; ; 
$rd = ($valor[1] < 2) ? "" : $dezenas[$valor[1]]; 
$ru = ($valor > 0) ? (($valor[1] == 1) ? $dezenas10[$valor[2]] : $unidades[$valor[2]]) : ""; 
$r = $rc.(($rc && ($rd || $ru)) ? " e " : "").$rd.(($rd && $ru) ? " e " : "").$ru; 
$t = count($inteiro)-1-$i; 
if ($valor == "000")$z++; elseif ($z > 0) $z--; 
if (($t==1) && ($z>0) && ($inteiro[0] > 0)) $r .= (($z>1) ? " de " : ""); 
if ($r) $rt = $rt . ((($i > 0) && ($i <= $fim) && ($inteiro[0] > 0) && ($z < 1)) ? ( ($i < $fim) ? ", " : " e ") : " "); 
} 
return($rt ? $rt : "zero"); 
} 
 
 
	
?>

chamafuncao.php

<?php
	include "libs_aula/rotinas.php";
	$a = 5;
	$b = 10;
	
	echo "<br><br><h3>Chamada das Funções </h3><br>";
	
	echo "A soma de ".$n1." , ".$n2." = ". SomaNumeros ($n1,$n2); 
	echo "<BR>";
	echo "A subtração de ".$n1." , ".$n2." = ". SubtraiNumeros($n1,$n2);
	echo "<BR>";
	echo "A multiplicação de ".$n1." , ".$n2." = ". MultiplicaNumeros($n1,$n2);
	echo "<BR>";
	echo "A divisão de ".$n1." , ".$n2." = ". DivideNumeros($n1,$n2);
	echo "A potenciação de ".$n1." , ".$n2." = ". potenciacao($n1,$n2);
	echo "A radiação de ".$n1." , ".$n2." = ". sqrt($n1,$n2);
	echo "O primeiro é maior ".$n1." , ".$n2." = ". NumMaior($n1,$n2);
	echo "Primero Maior ou Igual ".$n1." , ".$n2." = ". Num1Maior($n1,$n2);
	
	echo "<BR>";
	
		  
    
	
	
?>

calculadora.html

<html xmlns="http://www.w3.org/1999/xhtml" lang="pt-br">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Minha calculadora</title>
</head>
<body>
<form method="post" action="rotinas.php">
Valor 1:  
<input type="text" name="n1" size="5" />  
Tipo de calculo:   
<select name="tipo">  
<option selected="selected">Somar</option>  
<option>Subtrair</option>  
<option>Multiplicar</option>  
<option>Dividir</option>  
<option>Potenciação</option>  
<option>Radiação</option>  
<option>Primero Maior</option>  
<option>Primero Maior ou Igual</option>    
</select>  
Valor 2:  
<input type="text" name="n2" size="5" />   
<input type="submit" name="calcular" value="Calcular" />  
</form>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, amigo... Você foi muito subjetivo na sua pergunta, então vou resumir minha resposta pela primeira parte da solução, que é a calculadora em si.

 

Como não sei até onde vai seu domínio sobre o PHP, vou deixar que você analise o código e poste as dúvidas que surgirem. A ideia é incentivar e promover a orientação a objetos, pois acredito que isso iria contribuir muito no seu código.

 

No meu ambiente tenho o PHP 5.6.2 e eu usei alguns recursos da versão 5.4, então se você testar em um ambiente com versão inferior, vai dar erro, mas corrigir não é uma tarefa difícil.

 

 

calculadora.php

<?php
class Calculadora {
    public $Operandos = [];
    public $Operador;

    public function calcular() {
        return $this->Operador->processar( $this->Operandos );
    }
}

operadores/i_operador.php

<?php
interface Operador {
    
    public function processar( array $operandos );
    
}
operadores/divisao.php
<?php
class Divisao implements Operador {
    
    public function processar( array $operandos ) {
        $total = array_shift( $operandos );
        array_walk(
            $operandos,
            function ( $operando ) use ( &$total ) { $total /= $operando; }
        );
        return $total;
    }
    
}
operadores/igualdade.php
<?php
class Igualdade implements Operador {
    
    public function processar( array $operandos ) {
        for( $i = 0, $total = sizeof( $operandos ); $i < ( $total - 1 ) ; ++$i ):
            $atual =& $operandos[ $i ];
            $proximo =& $operandos[ $i + 1 ];
            if ( $atual !== $proximo )
                return false;
        endfor;
        return true;
    }
    
}
operadores/maior.php
<?php
class Maior implements Operador {
    
    public function processar( array $operandos ) {
        return max( $operandos );
    }
    
}
operadores/menor.php
<?php
class Menor implements Operador {
    
    public function processar( array $operandos ) {
        return min( $operandos );
    }
    
}
operadores/multiplicacao.php
<?php
class Multiplicacao implements Operador {
    
    public function processar( array $operandos ) {
        return array_product( $operandos );
    }
    
}
operadores/soma.php
<?php
class Soma implements Operador {
    
    public function processar( array $operandos ) {
        return array_sum( $operandos );
    }
    
}
operadores/subtracao.php
<?php
class Subtracao implements Operador {
    
    public function processar( array $operandos ) {
        $total = array_shift( $operandos );
        array_walk(
            $operandos,
            function ( $operando ) use ( &$total ) { $total -= $operando; }
        );
        return $total;
    }
    
}
pratica.php
<?php
require_once( 'calculadora.php' );
require_once( 'operadores/i_operador.php' );
require_once( 'operadores/divisao.php' );
require_once( 'operadores/igualdade.php' );
require_once( 'operadores/maior.php' );
require_once( 'operadores/menor.php' );
require_once( 'operadores/multiplicacao.php' );
require_once( 'operadores/soma.php' );
require_once( 'operadores/subtracao.php' );

$Calculadora = new Calculadora();
$Calculadora->Operandos = [ 5, 3, 2 ];

$Calculadora->Operador = new Divisao();
printf( '5 / 3 / 2 = %.2f<br>', $Calculadora->calcular() );

$Calculadora->Operador = new Maior();
printf( 'Maior = %d<br>', $Calculadora->calcular() );

$Calculadora->Operador = new Menor();
printf( 'Menor = %d<br>', $Calculadora->calcular() );

$Calculadora->Operador = new Multiplicacao();
printf( '5 * 3 * 2 = %d<br>', $Calculadora->calcular() );

$Calculadora->Operador = new Soma();
printf( '5 + 3 + 2 = %d<br>', $Calculadora->calcular() );

$Calculadora->Operador = new Subtracao();
printf( '5 - 3 - 2 = %d<br>', $Calculadora->calcular() );

$Calculadora->Operador = new Igualdade();

printf( '5 = 3 = 2? %s<br>', $Calculadora->calcular() ? 'Sim' : 'Não' );
$Calculadora->Operandos = [ 5, 5, 5, 5 ];
printf( '5 = 5 = 5 = 5? %s', $Calculadora->calcular() ? 'Sim' : 'Não' );

Retorno:

5 / 3 / 2 = 0.83
Maior = 5
Menor = 2
5 * 3 * 2 = 30
5 + 3 + 2 = 10
5 - 3 - 2 = 0
5 = 3 = 2? Não
5 = 5 = 5 = 5? Sim

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Meu nivel em PHP é iniciante,então achei um pouco complexo seu codigo (apesar de estar muito bom!).

Na verdade não sei como utilizar o que voce me passou nisso:

 

01 HTML com o formulário.
01 PHP que receberá os valores do form e retornará os resultados.
01 PHP contendo as funções que será usado para fazer os cálculos (rotinas.php)
Pelo que que entendi,voce criou um script para cada operação,e como isso é um trabalho do meu curso,tenho que utilizar essa forma que citei acima,pois ainda não aprendemos esse conteudo,e tambem nao entendi,como tenho pouco tempo para entregar e fiquei o fim de semana todo nisso,nao teria tempo de estudar tudo de novo.
Sei que esta um pouco confuso o que fiz,mas como o prazo é hoje para a entrega,vou ter insistir naquele codigo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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