GVKun编程网logo

PHP 计算器(php编写迷你web计算器)

8

最近很多小伙伴都在问PHP计算器和php编写迷你web计算器这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展C#启动计算器并设计算器为活动窗口、Mac系统计算器如何清除计算记录-计

最近很多小伙伴都在问PHP 计算器php编写迷你web计算器这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展C#启动计算器并设计算器为活动窗口、Mac系统计算器如何清除计算记录-计算器清除计算记录的方法、php 版 子网掩码计算器、php 简单计算器等相关知识,下面开始了哦!

本文目录一览:

PHP 计算器(php编写迷你web计算器)

PHP 计算器(php编写迷你web计算器)

最早想到的方式就是一个很简单的加减乘除,其实没那么简单。分析表达式的运算符与数字这些都必须先想好每一步。 最开始我的解决方法是用系统函数eval,但是有些时候eval函数会被禁止掉.就丢掉这个解决方案,谷歌了一下发现前辈早有很好的解决方案,就是用后缀表

   最早想到的方式就是一个很简单的加减乘除,其实没那么简单。分析表达式的运算符与数字这些都必须先想好每一步。

   最开始我的解决方法是用系统函数eval,但是有些时候eval函数会被禁止掉.就丢掉这个解决方案,谷歌了一下发现前辈早有很好的解决方案,就是用后缀表达式(逆波兰式)来运算,关于逆波兰式的算法,可以自己找一些资料。我直接贴出运算代码

header("Content-type:text/html;charset=utf-8");
        function deleteHtml($str) 
	{ 
	        $str = trim($str); 
		$str = strip_tags($str, ""); 
		$str = ereg_replace("\t", "", $str); 
		$str = ereg_replace("\r\n", "", $str); 
		$str = ereg_replace("\r", "", $str); 
		$str = ereg_replace("\n", "", $str); 
		$str = ereg_replace(" ", "", $str); 
		return trim($str); 
	}
	/*
	 * 将中缀表达式转换成后缀表达式
	 * 也就是逆波兰式
	 */
	class math_rpn
	{
		private $expression = array();   //需要转换的中缀表达式
		private $rpnexp = array();		//处理后的逆波兰式
		private $stack = array(''#'');   //储存临时运算符栈
		private $priority = array(''#''=>0, ''(''=>10, ''+'' => 20, ''-''=>20, ''*''=>30, ''/''=>30); //运算符优先级
		private $operator = array(''('', ''+'', ''-'', ''*'', ''/'', '')''); //四则运算符
		public function __construct($expression)
		{
			$this->_init($expression);
		}
		private function get_token_array($string)
		{
			/* 构造记号流*/
			$token = array();
			$str_len = 0;
			while (true)
			{
				if (1 === preg_match(''/^([%,\\^\\+\\-\\*\\/\\(\\)]).*$/'',$string,$sub))
				{
					array_push($token,$sub[1]);
					$string = substr($string,strlen($sub[1]));
					$str_len += strlen($sub[1]);
					continue;
				}
				elseif (1 === preg_match(''/^(([0-9]+[\\.]?[0-9]*)|([0-9]*[\\.]?[0-9]+)).*$/'',$string,$sub))
				{
					array_push($token,floatval($sub[1]));
					$string = substr($string,strlen($sub[1]));
					$str_len += strlen($sub[1]);
					continue;
				}
				elseif (1 === preg_match(''/^([a-zA-Z_][0-9a-zA-Z_]*\\().*$/'',$string,$sub))
				{
					array_push($token,$sub[1]);
					$string = substr($string,strlen($sub[1]));
					$str_len += strlen($sub[1]);
					continue;
				}
				elseif (1 === preg_match(''/^(\\s+).*$/'',$string,$sub))
				{
					$string = substr($string,strlen($sub[1]));
					$str_len += strlen($sub[1]);
					continue;
				}
				else 
				{
					break;
				}
			}
			if ($string != '''') 
			{
				return $str_len;
			}
			return $token;
		}
		private function _init($expression)
		{
			$exp = array();
			$expression = deleteHtml($expression); 
			$exp = $this->get_token_array($expression);
			if(!is_array($exp))
			{
				$str = substr($expression, $exp,1);
				echo $expression,''表达式错误在'',$str;
				exit;
			}
			$this->expression = $exp;
		}
		public function exp2rpn()
		{
			$count = count($this->expression);
			for($i = 0; $iexpression[$i]; //获取表达式中的每一个字符串
				if ($char == ''('') //如果字符为(,则直接存入$stack的栈顶
				{
					$this->stack[] = $char;
					continue;
				}
				else if (!in_array($char, $this->operator)) //如果字符不为运算符,则压入$rpnexp中
				{
					$this->rpnexp[] = $char;
					continue;
				}
				else if ($char == '')'') //在$stack中查找最近"("之间的运算符,逐个出栈.送入栈$rpnexp中
				{
					for ($j =count($this->stack); $j >= 0; $j++)
					{
						$tmp = array_pop($this->stack);
						if ($tmp == ''('') //跳出循环
							break;
						else
							$this->rpnexp[] = $tmp;
					}
					continue;
				}
				else if ($this->priority[$char] priority[end($this->stack)])
				{
					$this->rpnexp[] = array_pop($this->stack);
					$this->stack[] = $char;
					continue;
				}
				else
				{
					$this->stack[] = $char;
					continue;
				}
			}
			//将存在临时的运算符栈剩余的内容存入rpnexp栈中
			for($i=count($this->stack); $i>=0; $i++)
			{
				if(end($this->stack) == ''#'')
					break;
				else
					$this->rpnexp[] = array_pop($this->stack);
			}
			return $this->rpnexp;
		}
		public function getResult($rpnexp)
		{
			$result = array();
			$rpnexp = array_reverse($rpnexp); //将值倒叙
			$count = count($rpnexp);
			//如果有运算符就计算,否则将数据压入$result结果栈中
			while($count>0)
			{
				$v = array_pop($rpnexp); 
				if(in_array($v, $this->operator))
				{
					$a = array_pop($result);
					$b = array_pop($result);
					switch($v)
					{
						case ''+'':
							array_push($result, ($a+$b));
							break;
						case ''-'':
							array_push($result, ($b-$a));
							break;
						case ''*'':
							array_push($result, ($a*$b));
							break;
						case ''/'':
							array_push($result, ($b/$a));
							break;
						default:
							break;
					}
				}
				else
					array_push($result, $v);
				$count--;
			}
			return array_pop($result);
		}
	}	
	$exp = "(30+3.1)*5/2-2";
	$mathrpn = new math_rpn($exp);
	$rpnExp = $mathrpn->exp2rpn();
	echo $mathrpn->getResult($rpnExp);//80.75 
?>
登录后复制

原文地址:PHP 计算器, 感谢原作者分享。

C#启动计算器并设计算器为活动窗口

C#启动计算器并设计算器为活动窗口

启动计算器,并获取焦点

using System;
using System.Runtime.InteropServices;

namespace ConsoleApplication3
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
System.Diagnostics.Process myProcess = new
System.Diagnostics.Process();
myProcess.StartInfo.FileName = "calc";
myProcess.Start();
myProcess.WaitForInputIdle(2000);
IntPtr hWnd = myProcess.MainWindowHandle;
Console.WriteLine(hWnd);
bool p = SetForegroundWindow(hWnd);
if(!p)
Console.WriteLine("Could not set focus");
}
[DllImport("user32.dll", CharSet=CharSet.Auto,SetLastError=true)] public static extern bool SetForegroundWindow(IntPtr hWnd);
[DllImport("user32.dll", CharSet=CharSet.Auto,SetLastError=true)] public static extern IntPtr SetFocus(IntPtr hWnd);
}
}

 

出处:https://bytes.com/topic/c-sharp/answers/436986-process-setfocus

Mac系统计算器如何清除计算记录-计算器清除计算记录的方法

Mac系统计算器如何清除计算记录-计算器清除计算记录的方法

php小编百草今天为大家介绍mac系统计算器如何清除计算记录。在使用mac系统自带的计算器时,有时候我们会需要清除之前的计算记录,以便进行新的计算。清除计算记录的方法非常简单,只需要几个简单的操作步骤即可完成。接下来,让我们一起来学习如何清除mac系统计算器的计算记录吧!

      第一步:打开Mac系统计算器,点击窗口。

Mac系统计算器如何清除计算记录-计算器清除计算记录的方法

      第二步:在窗口菜单,点击显示记录。

Mac系统计算器如何清除计算记录-计算器清除计算记录的方法

      第三步:在显示记录页面,点击清除按钮即可。

Mac系统计算器如何清除计算记录-计算器清除计算记录的方法

      

以上就是Mac系统计算器如何清除计算记录-计算器清除计算记录的方法的详细内容,更多请关注php中文网其它相关文章!

php 版 子网掩码计算器

php 版 子网掩码计算器

<!--
PHP Subnet Calculator v1.3.
Copyright 06/25/2003 Raymond Ferguson ferguson_at_share-foo.com.
Released under GNU GPL.
Special thanks to krischan at jodies.cx for ipcalc.pl http://jodies.de/ipcalc
The presentation and concept was mostly taken from ipcalc.pl.
-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <title>PHP Subnet Calculator</title>
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  <meta name="GENERATOR" content="Quanta Plus">
</head>
<body bgcolor="#D3D3D3">
<center>
<form method="post" action="<?php print $_SERVER[''PHP_SELF''] ?> ">
<BR><BR>
<table width="95%" align=center cellpadding=2 cellspacing=2 border=0>
  <tr><td align="center" bgcolor="#999999">
     <b><A HREF="http://sourceforge.net/projects/subntcalc/">PHP Subnet Calculator</A></b>
  </td></tr>
</table>
<BR>
<table>
  <tr>
        <td>IP &amp; Mask or CIDR:&nbsp;&nbsp;&nbsp;</td>
        <td><input type="text" name="my_net_info" value="" size="31" maxlength="32"></td>
        <td>&nbsp;&nbsp;&nbsp;&nbsp;<input type="submit" value="Calculate" name="subnetcalc">
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            &nbsp;</td>
  </tr>
</table></form><br>
 
<?php
//Start table
print "<table cellpadding=\"2\">\n<COL span=\"4\" align=\"left\">\n" ;
 
$end=''</table><br><br><br><br><br><table width="95%" align=center cellpadding=2 cellspacing=2 border=0>
      <tr><td bgcolor="#999999"></td><tr><td align="center"><a href="http://validator.w3.org/check/referer">
      <img border="0" src="http://www.w3.org/Icons/valid-html401" alt="Valid HTML 4.01!" height="31" width="88"></a>
      </td></tr></table></center></body></html>'';
 
if (empty($_POST[''my_net_info''])){
    tr(''Use IP & CIDR Netmask:&nbsp;'', ''10.0.0.1/22'');
    tr(''Or IP & Netmask:'',''10.0.0.1 255.255.252.0'');
    tr(''Or IP & Wildcard Mask:'',''10.0.0.1 0.0.3.255'');
    print $end ;
    exit ;
}
 
$my_net_info=rtrim($_POST[''my_net_info'']);
 
 
//if (! ereg(''^([0-9]{1,3}\.){3}[0-9]{1,3}(( ([0-9]{1,3}\.){3}[0-9]{1,3})|(/[0-9]{1,2}))$'',$my_net_info)){
if (! preg_match("/^([0-9]{1,3}\.){3}[0-9]{1,3}(( ([0-9]{1,3}\.){3}[0-9]{1,3})|(\/[0-9]{1,2}))$/",$my_net_info)){
    tr("Invalid Input.");
    tr(''Use IP & CIDR Netmask:&nbsp;'', ''10.0.0.1/22'');
    tr(''Or IP & Netmask:'',''10.0.0.1 255.255.252.0'');
    tr(''Or IP & Wildcard Mask:'',''10.0.0.1 0.0.3.255'');
    print $end ;
    exit ;
}
 
//if (ereg("/",$my_net_info)){  //if cidr type mask
if (preg_match("/\//",$my_net_info)){  //if cidr type mask
    $dq_host = strtok("$my_net_info", "/");
    $cdr_nmask = strtok("/");
    if (!($cdr_nmask >= 0 && $cdr_nmask <= 32)){
        tr("Invalid CIDR value. Try an integer 0 - 32.");
        print "$end";
        exit ;
    }
    $bin_nmask=cdrtobin($cdr_nmask);
    $bin_wmask=binnmtowm($bin_nmask);
} else { //Dotted quad mask?
    $dqs=explode(" ", $my_net_info);
    $dq_host=$dqs[0];
    $bin_nmask=dqtobin($dqs[1]);
    $bin_wmask=binnmtowm($bin_nmask);
    //if (ereg("0",rtrim($bin_nmask, "0"))) {  //Wildcard mask then? hmm?
    if (preg_match("/0/",rtrim($bin_nmask, "0"))) {  //Wildcard mask then? hmm?
        $bin_wmask=dqtobin($dqs[1]);
        $bin_nmask=binwmtonm($bin_wmask);
        if (ereg("0",rtrim($bin_nmask, "0"))){ //If it''s not wcard, whussup?
            tr("Invalid Netmask.");
            print "$end";
            exit ;
        }
    }
    $cdr_nmask=bintocdr($bin_nmask);
}
 
//Check for valid $dq_host
//if(! ereg(''^0.'',$dq_host)){
if(! preg_match("/^0\./",$dq_host)){
    foreach( explode(".",$dq_host) as $octet ){
        if($octet > 255){ 
            tr("Invalid IP Address");
            print $end ;
            exit;
        }
     
    }
}
 
$bin_host=dqtobin($dq_host);
$bin_bcast=(str_pad(substr($bin_host,0,$cdr_nmask),32,1));
$bin_net=(str_pad(substr($bin_host,0,$cdr_nmask),32,0));
$bin_first=(str_pad(substr($bin_net,0,31),32,1));
$bin_last=(str_pad(substr($bin_bcast,0,31),32,0));
$host_total=(bindec(str_pad("",(32-$cdr_nmask),1)) - 1);
 
if ($host_total <= 0){  //Takes care of 31 and 32 bit masks.
    $bin_first="N/A" ; $bin_last="N/A" ; $host_total="N/A";
    if ($bin_net === $bin_bcast) $bin_bcast="N/A";
}
 
//Determine Class
//if (ereg(''^0'',$bin_net)){
if (preg_match("/^0/",$bin_net)){
    $class="A";
    $dotbin_net= "<font color=\"Green\">0</font>" . substr(dotbin($bin_net,$cdr_nmask),1) ;
//}elseif (ereg(''^10'',$bin_net)){
}elseif (preg_match("/^10/",$bin_net)){
    $class="B";
    $dotbin_net= "<font color=\"Green\">10</font>" . substr(dotbin($bin_net,$cdr_nmask),2) ;
//}elseif (ereg(''^110'',$bin_net)){
}elseif (preg_match("/^110/",$bin_net)){
    $class="C";
    $dotbin_net= "<font color=\"Green\">110</font>" . substr(dotbin($bin_net,$cdr_nmask),3) ;
//}elseif (ereg(''^1110'',$bin_net)){
}elseif (preg_match("/^1110/",$bin_net)){
    $class="D";
    $dotbin_net= "<font color=\"Green\">1110</font>" . substr(dotbin($bin_net,$cdr_nmask),4) ;
    $special="<font color=\"Green\">Class D = Multicast Address Space.</font>";
}else{
    $class="E";
    $dotbin_net= "<font color=\"Green\">1111</font>" . substr(dotbin($bin_net,$cdr_nmask),4) ;
    $special="<font color=\"Green\">Class E = Experimental Address Space.</font>";
}
 
//if (ereg(''^(00001010)|(101011000001)|(1100000010101000)'',$bin_net)){
if (preg_match("/^(00001010)|(101011000001)|(1100000010101000)/",$bin_net)){
     $special=''<a href="http://www.ietf.org/rfc/rfc1918.txt">( RFC-1918 Private Internet Address. )</a>'';
}
 
// Print Results
tr(''Address:'',"<font color=\"blue\">$dq_host</font>",
    ''<font color="brown">''.dotbin($bin_host,$cdr_nmask).''</font>'');
tr(''Netmask:'',''<font color="blue">''.bintodq($bin_nmask)." = $cdr_nmask</font>",
    ''<font color="red">''.dotbin($bin_nmask, $cdr_nmask).''</font>'');
tr(''Wildcard:'', ''<font color="blue">''.bintodq($bin_wmask).''</font>'',
    ''<font color="brown">''.dotbin($bin_wmask, $cdr_nmask).''</font>'');
tr(''Network:'', ''<font color="blue">''.bintodq($bin_net).''</font>'',
    "<font color=\"brown\">$dotbin_net</font>","<font color=\"Green\">(Class $class)</font>");
tr(''Broadcast:'',''<font color="blue">''.bintodq($bin_bcast).''</font>'',
    ''<font color="brown">''.dotbin($bin_bcast, $cdr_nmask).''</font>'');
tr(''HostMin:'', ''<font color="blue">''.bintodq($bin_first).''</font>'',
    ''<font color="brown">''.dotbin($bin_first, $cdr_nmask).''</font>'');
tr(''HostMax:'', ''<font color="blue">''.bintodq($bin_last).''</font>'',
    ''<font color="brown">''.dotbin($bin_last, $cdr_nmask).''</font>'');
@tr(''Hosts/Net:'', ''<font color="blue">''.$host_total.''</font>'', "$special");
print "$end";
 
function binnmtowm($binin){
    $binin=rtrim($binin, "0");
    //if (!ereg("0",$binin) ){
    if (!preg_match("/0/",$binin) ){
        return str_pad(str_replace("1","0",$binin), 32, "1");
    } else return "1010101010101010101010101010101010101010";
}
 
function bintocdr ($binin){
    return strlen(rtrim($binin,"0"));
}
 
function bintodq ($binin) {
    if ($binin=="N/A") return $binin;
    $binin=explode(".", chunk_split($binin,8,"."));
    for ($i=0; $i<4 ; $i++) {
        $dq[$i]=bindec($binin[$i]);
    }
        return implode(".",$dq) ;
}
 
function bintoint ($binin){
        return bindec($binin);
}
 
function binwmtonm($binin){
    $binin=rtrim($binin, "1");
    //if (!ereg("1",$binin)){
    if (!preg_match("/1/",$binin)){
        return str_pad(str_replace("0","1",$binin), 32, "0");
    } else return "1010101010101010101010101010101010101010";
}
 
function cdrtobin ($cdrin){
    return str_pad(str_pad("", $cdrin, "1"), 32, "0");
}
 
function dotbin($binin,$cdr_nmask){
    // splits 32 bit bin into dotted bin octets
    if ($binin=="N/A") return $binin;
    $oct=rtrim(chunk_split($binin,8,"."),".");
    if ($cdr_nmask > 0){
        $offset=sprintf("%u",$cdr_nmask/8) + $cdr_nmask ;
        return substr($oct,0,$offset ) . "&nbsp;&nbsp;&nbsp;" . substr($oct,$offset) ;
    } else {
    return $oct;
    }
}
 
function dqtobin($dqin) {
        $dq = explode(".",$dqin);
        for ($i=0; $i<4 ; $i++) {
           $bin[$i]=str_pad(decbin($dq[$i]), 8, "0", STR_PAD_LEFT);
        }
        return implode("",$bin);
}
 
function inttobin ($intin) {
        return str_pad(decbin($intin), 32, "0", STR_PAD_LEFT);
}
 
function tr(){
    echo "\t<tr>";
    for($i=0; $i<func_num_args(); $i++) echo "<td>".func_get_arg($i)."</td>";
    echo "</tr>\n";
}
?>

 

php 简单计算器

php 简单计算器

  1.   作一个加法器,计算它们的和
    2.  作一个减法器,计算它们的差
    3.  作一个乘法器,计算它们的积
    4.  作一个除法器,计算它们的商(和余数)
    这个计算器有着俩个页面,一个页面用于输出结果

mycal.php

<html>
<head>
    <title>我的计算器</title>
    <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
 
</head>
<body>
    <form action="result.php" method="post"/>
    <table width="300px" border="0">  
    <tr><td>第一个数</td><td><input type="text" name="num1" /></td></tr>
    <tr><td>第二个数</td><td><input type="text" name="num2" /></td></tr>
    <tr><td>运算符</td><td>
    <select name="oper">
        <option value="+">+</option>
        <option value="-">-</option>
        <option value="*">*</option>
        <option value="/">/</option>
    </select></td></tr>
    <tr>
        <td colspan="2"><input type="submit" value="计算结果"></td>
    </tr>
    </table>
    </form>
</body>
</html>
登录后复制

result.php

<?php
//总结一句话:
//我们按照正常的思路,应当保证接收数据的时候,$_REQUEST
//[&#39;参数&#39;]要和提交数据的页面给出html元素名字一致,如果不一致,
//则会出现notice提示,同时我们接收的数据就是null等价""
/*
    if($num1==null){
        echo&#39;也没有收到值&#39;;
    }
    if($num1==""){
        echo&#39;也没有值&#39;;
    }
    echo $num1;
*/
    //接收用户从mycal.php(对应静态页面 浏览器提交的数据
    //1.接收num1
    //$_REQUEST 该方法可以接收用户的post 或者get 请求数据
    $num1=$_REQUEST[&#39;num1&#39;];
    //2.接收num2
    $num2=$_REQUEST[&#39;num2&#39;];
    //3.接收运算符
    $oper=$_REQUEST[&#39;oper&#39;];
 
    $res=0;
    switch($oper){
        case "+":
            $res=$num1+$num2;
            break;
        case "-":
            $res=$num1-$num2;
            break;
        case "*":
            $res=$num1*$num2;
            break;
        case "/":
            $res=$num1/$num2;
            break;
        default:
            echo &#39;运算结果不正常&#39;;
 
    }
    echo&#39;接收到.&#39;.$num1."||".$num2."||".$oper."<br/>";
    echo &#39;结果=&#39;.$res ;
?> 
<br/>
<a href="mycal.php">返回计算器页面</a>
登录后复制

关于PHP 计算器php编写迷你web计算器的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于C#启动计算器并设计算器为活动窗口、Mac系统计算器如何清除计算记录-计算器清除计算记录的方法、php 版 子网掩码计算器、php 简单计算器等相关内容,可以在本站寻找。

本文标签: