« 1 2 »
Autor Zpráva
Nadan
Profil
Ehm, snažím se učit v php a zkouším takovou "kalkulačku". Nevím, jak mám udělat výpočet, zatím jsem přišel na:
<?php
if ($znamenko == "-") {$znam == "-";}
elseif ($znamenko == "+") {$znam == "+";}
elseif ($znamenko == "*") {$znam == "*";}
elseif ($znamenko == "x") {$znam == "*";}
elseif ($znamenko == "/") {$znam == "/";}
elseif ($znamenko == ":") {$znam == "/";}
?>
Výsledek: <?php echo $x."$znamenko".$y."=".($x $znam $y); ?>
nightfish
Profil
lepší bude
<?php
  if ($znamenko == "+") { $vysledek = $x + $y; }
  else if ($znamenko == "*") { $vysledek = $x * $y; }
  ...
Nadan
Profil
Oooo, děkuju.
Joker
Profil
nightfish
Ještě lépe:
<?php
  if ($znamenko == "+") { $vysledek = $x + $y; }
  else if (($znamenko == "*") || ($znamenko == "x")) { $vysledek = $x * $y; }
  ...
Nadan
Profil
Joker
Aha.... Takže ty || znamená v podstatě +?
Majkl578
Profil
|| je or, motas podminky s aritmetickymi operatory
Nadan
Profil
Majkl578
Promiň, s php začínám...
DJ Miky
Profil
Ty || znamenají, pokud je znaménko "*" nebo "x", tak se násobí.
Nadan
Profil
DJ Miky
To vím.

A ještě jeden problém. Jak víte, nulou nelze dělit, ale když to někdo zkusí, tak mi to píše errorovou hlášku. Hezčí by byl normální text. Jak to tam mám napasovat, aby mi to napsalo, když někdo bude chtít dělit nulou, "Nulou nepodělíš"?
Majkl578
Profil
osobne bych to cele udelal treba takto:

function mathOperation($x, $y, $op) {
$x = (float) $x;
$y = (float) $y;
switch($op) {
  case '+' :
    return $x + $y;
  break;
  case '-' :
    return $x - $y;
  break;
  case '*' :
  case 'x' :
    return $x * $y;
  break;
  case '/' :
  case '÷' :
    if($y == 0) { 
      die('Division by zero is forbidden.');
    }
    return $x / $y;
  break;
  case '^' :
    return pow($x, $y);
  break;
  default :
    die('No math operation defined, exiting');
  break;
}


edit: deleni nulou osetreno
Nadan
Profil
Majkl578
Aha, to je chytré... Zas tak pokročilý, abych tohle sesmolil nejsem, ale je to dobré...
Nadan
Profil
Hmmm, nějak to hapruje...

<?php
function mathOperation($x, $y, $op) {
$x = (float) $x;
$y = (float) $y;
switch($op) {
  case '+' :
    return $x + $y;
  break;
  case '-' :
    return $x - $y;
  break;
  case '*' :
  case 'x' :
    return $x * $y;
  break;
  case '/' :
  case '÷' :
    if($y == 0) { 
      die('Dělen&iacute; nulou je zak&aacute;zan&eacute;.');
    }
    return $x / $y;
  break;
  case '^' :
    return pow($x, $y);
  break;
  default : {
    die('Nebylo zad&aacute;no ž&aacute;dn&eacute; č&iacute;slo.');}
  break;
?>
Měsíček
Profil
Ty očividně neumíš kopírovat ..
Nadan
Profil
Měsíček
Ano, to už je upravené. Je to sice možná blbost, ale to, co poslal Majkl578 taky nefungovalo...
EDIT: Píše mi to: Parse error: syntax error, unexpected $end in /home/free/yc.cz/m/mamlas/root/www/kalku/vysledek.php on line 46
Měsíček
Profil
Kecáš, neučíš se ..
<?php
function mathOperation($x, $y, $op) {
  $x = (float) $x;
  $y = (float) $y;
  switch($op) {
    case '+' :
      return $x + $y;
    break;
    case '-' :
      return $x - $y;
    break;
    case '*' :
    case 'x' :
      return $x * $y;
    break;
    case '/' :
    case '÷' :
      if($y == 0) { 
        die('Dělení nulou je zakázané!');
      }
      return $x / $y;
    break;
    case '^' :
      return pow($x, $y);
    break;
    default : 
      die('Nebylo zadané žádné číslo');
    break;
  }
}
echo (mathOperation(4,2,"*"));
?>
Nadan
Profil
Měsíček
A proč jsou
echo (mathOperation(4,2,"*"));


tady určitá čísla a násobení? Co to udělá?
Měsíček
Profil
To ti ukazuje jak výše napsanou funkci použít. Vypíše součin čísel 4 a 2 (proto "*").
Nadan
Profil
Měsíček
Ale pak mi to při jakémkoli příkladu vyhazuje 8. Mám to poslední tedy smazat, nebo upravit...?
Měsíček
Profil
"Ale pak mi to při jakémkoli příkladu vyhazuje 8. Mám to poslední tedy smazat, nebo upravit...?"

Ani jedno. Skoč si do vany napuštěné ledovou vodou pak si přečti alespoň základy PHP a teprve poté se k tomu vrať, jinak to nemá smysl - věř mi.
Nadan
Profil
Měsíček
:) Tak to fakt dík. Vím, že by tam mělo být echo, nejspíše s proměnnou, která vyplyne z té funkce, ale já tam vidím jen tři proměnné a to: x, y a op. Takže nevím. S funkcemi jsem se ještě nesetkal...
DoubleThink
Profil *
Mám to poslední tedy smazat, nebo upravit...?
Nejlépe naučit se elementární základy syntaxe PHP.
Nadan
Profil
Hu, už to mám...
Díky DoubleThink
Díky Měsíček
Majkl578
Profil
hm tak znovu, tentokrat plne funkcni kod i s formularem:

<?php

if(isset($_POST['x'], $_POST['y'], $_POST['operator'])) {
  echo mathOperation($_POST['x'], $_POST['y'], $_POST['operator']);
} else {
  echo '<form action="' . $_SERVER['PHP_SELF'] . '" method="post">první číslo: <input type="text" name="x" /><br />druhé číslo: <input type="text" name="y" /><br />operátor: <select name="operator"><option value="+">+</option><option value="-">-</option><option value="*">*</option><option value="/">/</option><option value="^">^</option></select><br /><input type="submit" value="Count" />';
}




function mathOperation($x, $y, $op) {
	$x = (float) $x;
	$y = (float) $y;
	switch($op) {
	case '+' :
		return $x + $y;
	break;
	case '-' :
		return $x - $y;
	break;
	case '*' :
	case 'x' :
		return $x * $y;
	break;
	case '/' :
	case '÷' :
		if($y == 0) {
			die('Division by zero is forbidden.');
		}
		return $x / $y;
	break;
	case '^' :
		return pow($x, $y);
	break;
	default :
		die('No math operation defined, exiting');
	break;
	}
}

?>
Nadan
Profil
Majkl578
Já to mám jinak:
index.php

<form id="form1" name="form1" method="post" action="vysledek.php">
  <table width="306" border="0" cellspacing="0" bordercolor="#000000">
    <tr>
      <td width="71">Č&iacute;slo 1 </td>
      <td width="126">Znam&eacute;nko</td>
      <td width="87">Č&iacute;slo 2 </td>
    </tr>
    <tr>
      <td><label for="textfield"></label>
      <input type="text" name="x" id="x" /></td>
      <td><input type="text" name="op" id="op" /></td>
      <td><input type="text" name="y" id="y" /></td>
    </tr>
  </table>
  <div>
    <p><label for="Submit"></label>
      <input type="submit" name="Submit" value="Vypoč&iacute;tat" id="Submit" />
    </p>
  </div>
</form>


vysledek.php

<?php
function mathOperation($x, $y, $op) {
  $x = (float) $x;
  $y = (float) $y;
  switch($op) {
    case '+' :
      return $x + $y;
    break;
    case '-' :
      return $x - $y;
    break;
    case '*' :
    case 'x' :
      return $x * $y;
    break;
    case '/' :
    case '÷' :
      if($y == 0) { 
        die('Delení nulou je zakázané!');
      }
      return $x / $y;
    break;
    case '^' :
      return pow($x, $y);
    break;
    default : 
      die('Nebylo zadané žádné císlo');
    break;
  }
}
echo mathOperation($x, $y, $op)
?>
Majkl578
Profil
Nadan
to je sice hezky, ale mas to spatne. to die v default neznaci (ne)zadani cisla, ale spatneho operatoru.
u toho echo mathOperation(...) ti chybi strednik na konci

hochu jeste se mas co ucit (i html) :)

btw zkus to moje, popr. si to uprav.
Nadan
Profil
Majkl578
Já to špatně nemám, jede mi to normálně... A ten středník není povinný, opkud tam nebudu něco připisovat.
EDIT: A nevím, proč bych se měl učit HTML...
TomášK
Profil
Jen poznámka na okraj - všechny 'break;' se můžou vyhodit. Vždy je před nimi 'return;' nebo 'die();', který tu funkci ukončí, a na break se nikdy nedostane.
Majkl578
Profil
TomášK
ááá tak pan chytrej. takze kdyz budu mocnit, tak mi to vrati vysledek scitani, coz je prvni return. fakt mas kvalitni logicke uvazovani.
AM
Profil *
Majkl578
Mám nejradši lidi, co se vysmějou ostatním a vůbec nemají pravdu :) breaky lze skutečně vyhodit, jen si to zkus. Switch se zastaví u prvního case, který platí (řekněme když mocníš, case '^'), a vzhledem k tomu, že hned další příkaz je return, ukončí se celá funkce a vrátí výsledek mocnění (nevím, jak jsi přišel na to, že by interpret šel v kódu nahoru a vrátil sčítání. Spíš ty máš nějak pokřivenou logiku). Obecně není špatný zvyk tam breaky nechávat, řekněme, že by se programátor po čase rozhodl do určité větve dát jiný příkaz, než return, a mohl by zapomenout tam break vrátit. V takhle jednoduché věci bych si je ale zcela bez obav dovolil smazat :)
Joker
Profil
Majkl578
Ale on má TomášK pravdu. Za return nemusí být break, protože ten return tak jako tak vyskočí z funkce. Ale možná bych tam ty break stejně dal, naformátované tak, aby bylo vidět, kde končí který case. Je to IMHO přehlednější.
« 1 2 »

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0