есть задача. Исходные два числа хранятся в текстовом файле в произвольной последовательности. По нажатию кнопки Вычислить результат выводится в форму. Проблема в том, что из файла получается считать только числа, но сложить их нельзя. Пыталась считать файлы посимвольно и если один из элементов равен плюсу, то остальные числа сложить, но ничего не получилось. Прошу помощи, т.к. в php еще новичок.
]2
<?php
function getPlus($a, $b){
return $a+$b;
}
function getMinus($a, $b){
return $a-$b;
}
function plus(){
$db = mysql_connect("localhost","root","") or die ("don't connect with mysql");
mysql_select_db("exam",$db) or die ("don't connect with db");
$file = 'data.txt';
$f = fopen($file,"r") or "don't open file";
$a = Array();
while (($data = fgets($f))!=false){
$a0 = explode(" ",$data);
foreach ($a0 as $item)
if (is_numeric(trim($item)))
$a[] = $item;
}
fclose($f);
foreach($a as $item) echo $item;
$char = '+';
// $res = 0;
for ($i = 0; $i < 3; $i++){
if ()
{$res = $a[1]+$a[2];}
}
echo $res;
}
if (isset($_GET['button'])){
plus();
}
Можно воспользоваться функцией rsort
и eval
$file = file('file.txt');
Обозначим допустимые математические знаки
$exp = ['+', '-', '/', '*'];
Далее сортируем массив
rsort($file);
Делаем проверку допустимого знака, если такой есть, то выполняется дейтсвие
if (in_array($file[2], $exp)) {
echo eval('return $file[0] '.$file[2].' $file[1];');
}
есть много вариантов
<?php
$file = file('file.txt', FILE_SKIP_EMPTY_LINES); // читаем фаил в массив
$file = array_map('trim', $file); // тримим
$plus = array_search('+', $file); // ищем плюс
$result = 0;
if($plus !== false) { // если нашли
unset($file[$plus]); //убираем его с массива
$result = array_sum($file); // суммируем массив
echo $result . ' ok';
} else {
echo 'error';
}
<?php
$trimmed = file('sum_nums.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$stack = [];
$op = '';
// Expression that can be calculated
$expr = ['+', '-', '/', '*'];
foreach($trimmed as $line_num => $line){
//
if(in_array($line, $expr)){
$op = $line;
}else{// Numbers
$stack[] = (int)$line;
}
// Calculate
if(count($stack) == 2 && !empty($op)){
echo sprintf("%d %s %d = %d", $stack[0] , $op , $stack[1] ,eval('return ' .$stack[0] .$op. $stack[1] . ';')) . "\n";
// Empty array and operation
$stack = [];
$op = '';
}
}
Ну как вариант :<
$FILE = 'data.txt';
$ARRAY = array_filter(file($FILE), function($value) {
return !empty(trim($value));
});
$RESPONSE = NULL;
foreach ($ARRAY as $key => $value) {
if (($value == '+') OR ($value == '-')) {
unset($ARRAY[$key]);
foreach ($ARRAY as $value2) {
if (is_numeric($value2)) {
switch ($value) {
case '+':
if (is_null($RESPONSE)) {
$RESPONSE = 0;
}
$RESPONSE += $value2;
break;
case '-':
if (is_null($RESPONSE)) {
$RESPONSE = $value2;
}
$RESPONSE -= $value2;
break;
default:
break;
}
}
}
break;
}
}
var_dump($RESPONSE);
А если просто сложить, то так:
$FILE = 'data.txt';
$ARRAY = array_filter(file($FILE), function($value) {
return !empty(trim($value));
});
$RESPONSE = 0;
foreach ($ARRAY as $key => $value) {
if ($value == '+') {
unset($ARRAY[$key]);
foreach ($ARRAY as $value2) {
if (is_numeric($value2)) {
$RESPONSE += $value2;
}
}
break;
}
}
var_dump($RESPONSE);
Виртуальный выделенный сервер (VDS) становится отличным выбором
не так давно пользуюсь CMake и вот наткнулся на такую, нельзя сказать проблему, а скорее не понятную мне вещь, пример:
Чтобы сформировать строку использую std::stringstream (набиваю содержимым оператором <<), затем выбираю полученную строку методом std::stringstream::str:
Пишу консольное приложение в Linux, вот и возникло два вопроса
Необходимо создать базовый класс который будет иметь 4 наследникаВся проблема в том, что мне нужен базовый класс в одном экземпляре, так как...