Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Помогите с формулой расчета в массивах
benkerrry  
 ۩     Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 10
Пользователь №: 38334
На форуме: 3 года, 1 месяц, 8 дней
Карма:




Есть значения $a и $b, нужно высчитать сумму со следующих значений массива пока $b не будет = 0 или не будет ровна следующему значению.
к примеру
$a = 1;
$b = 1900;
400+600+800=1800 (оставшиеся 100 не хватает на следующее значаение, значит скрипт переходит к подсчету)
$c = 4 (чтобы получить значение 5 не хватает 100, поэтому $ будет 4)

$names[0]="200";
$names[1]="400";
$names[2]="600";
$names[3]="800";
$names[4]="1000";
Подскажите как составить саму формулу получения значения $c?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
walerus  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Чтобы все !
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1975
Пользователь №: 26852
На форуме: 5 лет, 8 месяцев, 21 день
Карма: 112




Цитата
Есть значения $a и $b, нужно высчитать сумму со следующих значений массива
назревает вопрос - какого массива? у него есть структура и имя?
Цитата
пока $b не будет = 0
судя по примеру:
Цитата
$names[0]="200";
$names[1]="400";
$names[2]="600";
$names[3]="800";
$names[4]="1000";
нуля не будет никогда, т.к. все прибавляется...
и так, что же нужно сделать то?
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
walerus  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Чтобы все !
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1975
Пользователь №: 26852
На форуме: 5 лет, 8 месяцев, 21 день
Карма: 112




еще не понятно, это как?:
$a = 1;
$b = 1900;

$a - минимальное значение будущей "суммы", $b - максимальное число, ДО которого ведется сложение чисел.

400+600+800=1800 - эти цифры от куда?, если от сюда
$names[0]="200";
$names[1]="400";
$names[2]="600";
$names[3]="800";
$names[4]="1000";
то пример не правильный, потому как:

т.к. $a у нас равна 1, то не забываем ее прибавлять, или для чего она вообще?

1 + 200(201) + 400(601) + 600(1201 !!! уже) - следующее прибавление значения 800, перевалит за максимум $b(1900) т.к. будет равна = 1201 + 800 === 2001, что противоречит правилу, либо же $a указывает с какой позиции в массиве начинать подсчет?.
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
benkerrry  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 10
Пользователь №: 38334
На форуме: 3 года, 1 месяц, 8 дней
Карма:




$a - это можно сказать так $names[$a]
$c - это цифра нового значения $names[$a], после подсчета значений в кавычках
мне нужно чтобы формула брала значения $a находила нужное значение в $names[] и высчитывала сумму "значений в кавычках" и сравнивала с $b
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
walerus  
[x] Дата
Цитировать сообщение

Пользователь сейчас на форуме



Чтобы все !
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1975
Пользователь №: 26852
На форуме: 5 лет, 8 месяцев, 21 день
Карма: 112




Нда... постановка задачи на "уровне" )))

есть массив:
$names[0]="200";
$names[1]="400";
$names[2]="600";
$names[3]="800";
$names[4]="1000";


есть значения:
$a = 1; // Это стартовая ячейка/позиция в массиве, от которой вести подсчет суммы
$b = 1900; // Это максимальное значение, выше которого сумма не должна превышать.
$c = ''; // Это искомое значение, которое будет являться позицией в массиве $names, при прибавлении значения которой, будет превышать наше условие.

$names[0]="200";
$names[1]="400";
$names[2]="600";
$names[3]="800";
$names[4]="1000";

$a = 1;
$b = 1900;
$c = '';

$tmp_summ = 0;
$tmp_string = '';
foreach( $names as $names_key => $names_value )
{
if ( $names_key < $a ) continue; // Пропускаем все что меньше или равно минимальному значению

$tmp_string[] = $names_value;
$tmp_summ = $tmp_summ + $names_value;

## Проверяем наше условие
if ( isset( $names[$names_key+1] ) )
{
if ( ( $tmp_summ + $names[$names_key+1] ) >= $b )
{
## останавливаемся и выводим результат
echo "Действия: ". implode( "+", $tmp_string ) . " = " . array_sum( $tmp_string ) . "<br>\n";

$c = $names_key+1;
echo "\$a = " . $a . "<br>\n";
echo "\$b = " . $b . "<br>\n";
echo "\$c = " . $c . "<br>\n";
echo "delta = " . ( $b - $tmp_summ ). "<br>\n";
die;
}
}

else
$c = $names_key;
}

echo "Действия: ". implode( "+", $tmp_string ) . " = " . array_sum( $tmp_string ) . "<br>\n";
echo "\$a = " . $a . "<br>\n";
echo "\$b = " . $b . "<br>\n";
echo "\$c = " . $c . "<br>\n";
Результат
Действия: 400+600+800 = 1800
$a = 1
$b = 1900
$c = 4
delta = 100
Если допустим указать Больше значение $b, например:

$b = 2900;, то результат будет таким
Действия: 400+600+800+1000 = 2800
$a = 1
$b = 2900
$c = 4
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Guest  
Дата
Цитировать сообщение


Гость пожелал остаться неизвестным

Unregistered









работает. спасибо. подскажите еще как итог вывести таким образом <? echo "$с" ?>
а то когда я удаляю тут echo вывод
= $names_key+1;
die;
то все пропадает, и выводится <? echo "$с" ?> не хочет
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
walerus  
Дата
Цитировать сообщение

Пользователь сейчас на форуме



Чтобы все !
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 1975
Пользователь №: 26852
На форуме: 5 лет, 8 месяцев, 21 день
Карма: 112




$tmp_summ = 0;
$tmp_string = '';
foreach( $names as $names_key => $names_value )
{
if ( $names_key < $a ) continue; // Пропускаем все что меньше или равно минимальному значению

$tmp_string[] = $names_value;
$tmp_summ = $tmp_summ + $names_value;

## Проверяем наше условие
if ( isset( $names[$names_key+1] ) )
{
if ( ( $tmp_summ + $names[$names_key+1] ) >= $b )
{
$c = $names_key+1;
break;
}
}

else
$c = $names_key;
}

echo "$с";
PMПисьмо на e-mail пользователюICQ
    1   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
benkerrry  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 10
Пользователь №: 38334
На форуме: 3 года, 1 месяц, 8 дней
Карма:




выводит только так
$c = $names_key+1;
echo "$c";
die;
а так не хочет
Итог: <? echo "$с" ?>
и вообще все что после закрывающего тэга ?> ничего не отображает
мне нужно значение $с вставить в верстку

Это сообщение отредактировал benkerrry - 24.11.2014 - 02:07
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
benkerrry  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 10
Пользователь №: 38334
На форуме: 3 года, 1 месяц, 8 дней
Карма:




с break; выводит теперь. спасибо огромное за помощь
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Winston  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме




******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 9509
Пользователь №: 18161
На форуме: 7 лет, 5 месяцев, 13 дней
Карма: 552




Расскажешь потом на сколько лабу сдал smile.gif
PMСайт пользователя
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса