Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
2 / 2 / 0
Регистрация: 15.02.2022
Сообщений: 469

Суммирование массива в функции

12.08.2022, 18:58. Показов 596. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть два способа вывода результатов суммирования массива.
Первый способ идет в самой функции без комментария,
а второй способ заключен в комментарий.

Мне стало интересно, есть ли между ними разница?
По мне первый способ более короче, чем второй.
Я еще совсем зеленый в этом деле и не понимаю.

Стоит ли сразу выводить результат как в 1 способе или результат выводить как во 2 способе?
То есть, после подсчета или во время подсчета всех чисел?



PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function dok($name, ...$massive){      
 
$result = 0.0;                        
 
foreach($massive as $items){
$result = $result + $items;           
}
 
echo "$name: ". $result = $result / count($massive) ."<br>";   // 1-ый способ
 
                                                             
/* 
 $result = $result / count($massive);                          // 2-ой способ
 echo "$name: $result <br>";
*/
}
 
dok("John", 5,6,7,8);                
dok("Mark", 6,2,5,2);
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.08.2022, 18:58
Ответы с готовыми решениями:

Суммирование M первых элементов сформированного массива с M последними элементами же массива
Файл исходных данных содержит значения величин N, M и элементов массива IVECT..IVECT.Написать, отладить и протестировать паскаль-прогу,...

суммирование функции
Написать блок-схему и програму на Pascal вычисления функции изображеной суммой ряда ( ) оформить в виде подпрограмы-функции.Использовать ее...

Суммирование ряда, функции
Добрый вечер! Появилась такая проблема. Есть задача, нужно найти сумму ряда. Задачу решили, теперь нужно переписать через функции. ...

9
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
12.08.2022, 18:59
По хорошему нужно отделать вывод от логики, и верстка в echo не должна фигурировать
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
 
//logic:
 
function dok($name, ...$massive)
{
    $result = 0.0;
 
    foreach ($massive as $items) {
        $result = $result + $items;
    }
 
    $result = $result / count($massive);
    return sprintf('%s: %d', $name, $result);
}
 
//output:
?>
<?= dok("John", 5, 6, 7, 8) ?></br>
<?= dok("Mark", 6, 2, 5, 2) ?></br>
Доп переменные или "на лету" - дело вкуса, если оба варианта читабельны
0
2 / 2 / 0
Регистрация: 15.02.2022
Сообщений: 469
12.08.2022, 19:11  [ТС]
crautcher, Чем sprintf лучше echo ?
и что это за символы %s: %d ?

Добавлено через 9 минут
crautcher:
По хорошему нужно отделать вывод от логики,
то есть, лучше мне использовать 2-ой способ ?
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
12.08.2022, 19:13
Я уже ушел с работы, с телефона пишу. Без спринт-эфа может понадобиться экранирование техже долларов, так как это символ переменной. Спринт-ф более читабельный, имхо. S - это значит там будет строка, от string. D - digit
0
2 / 2 / 0
Регистрация: 15.02.2022
Сообщений: 469
12.08.2022, 19:21  [ТС]
crautcher,
значит вы мне рекомендуете использовать 2-ой способ ?
То есть, выводить результат после его подсчета?

Добавлено через 5 минут
crautcher:
return sprintf('%s: %d', $name, $result);
когда я вставил эту строку вместо "echo", то результат перестал выводится на экран.
В чем проблема?
0
 Аватар для sad67man
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,839
12.08.2022, 19:21
G_manX, Не первый и не второй. Выводить результат выполнения функции. Внутри функции ничего не выводить.
0
2 / 2 / 0
Регистрация: 15.02.2022
Сообщений: 469
12.08.2022, 19:23  [ТС]
sad67man
А как это сделать?
Можете пожалуйста показать на примере моего кода, я был бы очень вам признателен.
0
 Аватар для sad67man
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,839
12.08.2022, 19:39
Цитата Сообщение от G_manX Посмотреть сообщение
Можете пожалуйста показать на примере моего кода, я был бы очень вам признателен.
PHP
1
echo dok("John", 5,6,7,8);
А лучше сформировать массив для вывода.


PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
function dok($name, ...$massive){
 
    $result = 0.0;
 
    foreach($massive as $items){
        $result = $result + $items;
    }
 
    return [
        'name' => $name,
        'sum' => $result
    ];
}
PHP
1
2
3
4
$items = [
    dok("John", 5,6,7,8),
    dok("Mark", 6,2,5,2),
];
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
<table>
    <tr>
        <td>name</td>
        <td>sum</td>
    </tr>
    <?php foreach ($items as $item): ?>
        <tr>
            <td><?= $item['name'] ?></td>
            <td><?= $item['sum'] ?></td>
        </tr>
    <?php endforeach;?>
</table>
Добавлено через 11 минут
G_manX, Вообще у вас получается внутри функции name не нужен

PHP
1
2
3
4
5
6
7
8
9
10
$items = [
    [
        'name' => "John",
        'sum' =>  dok(5,6,7,8),
    ],
    [
        'name' => "Mark",
        'sum' =>  dok(6,2,5,2),
    ],
];
PHP
1
2
3
4
5
6
7
8
9
10
function dok(...$massive){
 
    $result = 0.0;
 
    foreach($massive as $items){
        $result = $result + $items;
    }
 
    return $result;
}
А тут уже можно обойтись и встроенной функцией array_sum.

Другое дело. что формирование массива для вывода можно вынести в отдельную функцию.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
function getItems() {
    return [
        [
            'name' => "John",
            'sum' =>  array_sum([5,6,7,8]),
        ],
        [
            'name' => "Mark",
            'sum' =>  array_sum([6,2,5,2]),
        ],
    ];
}
0
2 / 2 / 0
Регистрация: 15.02.2022
Сообщений: 469
12.08.2022, 22:01  [ТС]
sad67man:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
function dok($name, ...$massive){
 
    $result = 0.0;
 
    foreach($massive as $items){
        $result = $result + $items;
    }
 
    return [
        'name' => $name,
        'sum' => $result
    ];
}
Вот это чудеса. А я и не знал, что можно использовать ассоциативный массив
для возвращения первого аргумента функции и результата подсчета.
0
 Аватар для sad67man
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,839
12.08.2022, 23:04
Цитата Сообщение от G_manX Посмотреть сообщение
Вот это чудеса. А я и не знал, что можно использовать ассоциативный массив
для возвращения первого аргумента функции и результата подсчета.
Да вот и получается, что первый аргумент не нужен, так как мы его используем просто для того, чтоб вернуть.

Добавлено через 15 минут
G_manX, Функция должна делать что-то одно - именно это вас и смутило, что вывод выбивается.

Если некая функция, должна делать 2 вещи, то она должна вызывать внутри себя 2 функции поменьше.
Т. е. эта обобщая функция тоже в каком-то смысле делает что-то одно, но только на более высоком уровне.
Это называется уровень абстракции. Разные уровни абстракции смещивать плохо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.08.2022, 23:04
Помогаю со студенческими работами здесь

Суммирование массива
Задача: суммировать массив пока не будет цифра 0. Саму программу вроде написал, но возникли трудности с выводом ответа (суммы) Но так...

Суммирование массива
Дан массив чисел в файле. Требуется найти наименьшую сумму массива, если можно суммировать либо соседние числа, либо если они находятся...

Табуляция функции, суммирование челнов ряда +1
1) Составить программу, которая суммирует члены ряда s=p+(p+1)+(p+2)+...+(p+k). Накопление прямой суммы прекращается после того, как...

Не идет суммирование последнего значения функции
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; int main() { double k, m, q, r, y, x, sum, z, t; cout &lt;&lt;...

Суммирование элементов массива
Для заданного сегмента данных .data arrayW1*dw10h,20h,30h,40h,50h arrayW2dw 60h,70h,80h,90h rez1*dw? rez2*dw? составьте...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru