Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.88/16: Рейтинг темы: голосов - 16, средняя оценка - 4.88
Dimka_nevidimka
1 / 1 / 0
Регистрация: 02.06.2013
Сообщений: 83
1

Найти среднее арифметическое ряда чисел 3,6,9,13,16,19,23,26,29 с использованием циклов

09.06.2013, 17:18. Просмотров 2880. Ответов 16
Метки нет (Все метки)

Задача из моего учебника по циклам: необходимо найти среднее арифметическое ряда чисел 3,6,9,13,16,19,23,26,29 с использованием циклов.
Я решил задачу таким образом, но уверен, что автор хотел от меня более элегантное решение с использованием break и continue. Все мои попытки решить задачу с применением этих операторов потерпели неудачу. Как следовало бы решить задачу?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php 
$a=0;
$sum=0;
$i=0;
while ($a <=26)
{
$a=$a+3;
$i=$i+0.2;
 
$sum=$sum+$a+$i;}
echo "$sum";
 
?>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.06.2013, 17:18
Ответы с готовыми решениями:

Среднее арифметическое трех чисел
Нужно создать две функции, первая считает сумму тех чисел и возвращает ее. ...

Вычислить среднее арифметическое последовательности отрицательных дробных чисел
Написать программу, которая вычисляет среднее арифметическое последовательности...

Найти среднее арифметическое
есть задача: Вычислите среднее арифметическое значение ряда чисел любым из...

Запросить последовательность чисел и вывести в окне браузера среднее арифметическое четных введенных элементов
запросить последовательность чисел и вывести в окне браузера среднее...

Дан массив действительных чисел. Вычислить среднее арифметическое минимального и максимального элементов данного массива
Дан массив действительных чисел. Вычислить среднее арифметическое минимального...

16
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16753 / 6644 / 864
Регистрация: 12.06.2012
Сообщений: 19,897
Завершенные тесты: 1
09.06.2013, 18:46 2
че-то вы намудрили. Ни break, ни continue тут не нужны. For - это тоже цикл, через него и следовало делать, т.к. это самое простое решение.
PHP
1
2
3
4
5
6
$numbers = array(3,6,9,13,16,19,23,26,29);
$sum = 0;
$cnt = count($numbers);
for($i = 0; $i < $cnt; $i++)
    $sum += $numbers[$i];
echo $sum / $cnt;
Если же хотите обязательно с выносом мозга с while и break, то можно как-то так (только while, без break)
PHP
1
2
3
4
5
$numbers = array(3,6,9,13,16,19,23,26,29);
$sum = $i = 0;
while(isset($numbers[$i]))
    $sum += $numbers[$i++];
echo $sum / $i;
или еще так (с break)
PHP
1
2
3
4
5
6
7
8
9
$numbers = array(3,6,9,13,16,19,23,26,29);
$sum = $i = 0;
while(true)
{
    if(!isset($numbers[$i]))
        break;
    $sum += $numbers[$i++];
}
echo $sum / $i;
1
Dimka_nevidimka
1 / 1 / 0
Регистрация: 02.06.2013
Сообщений: 83
09.06.2013, 19:02  [ТС] 3
Еще не дошел до массивов по учебнику
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16753 / 6644 / 864
Регистрация: 12.06.2012
Сообщений: 19,897
Завершенные тесты: 1
09.06.2013, 19:15 4

Не по теме:

поверьте, с массивами это будет куда легче для понимания..



Добавлено через 4 минуты
Надеюсь, функции проходили.
PHP
1
2
3
4
5
6
7
8
9
10
11
function srAr($n)
{
    $sum = $cnt = 0;
    for ($i = 0; $i < $n; $i++)
    {
        $sum += intval($i . '3') + intval($i . '6') + intval($i . '9');
        $cnt += 3;
    }
    return $sum / $cnt;
}
echo srAr(3);
функция принимает в качестве аргумента число десятков..
1
PinAwoR
3 / 3 / 0
Регистрация: 23.07.2013
Сообщений: 39
23.07.2013, 16:50 5
Я тоже эту задачку решаю и сделал вот так, возможно слишком много когда, если можно оптимизируите мой код. На заметку я еще функций и массивы не проходил!
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$x = 0;
for ($a = 1; $a < 4; $a++)
{$x =$x + 3;
$sum = $sum + $x;
if ($a == 3)
{$x = $x + 4;
$sum = $sum + $x;
$a++;}}
for ($a = 5; $a < 7; $a++)
{$x =$x + 3;
$sum = $sum + $x;
if ($a == 6)
{$x = $x + 4;
$sum = $sum + $x;
$a++;}}
for ($a = 7; $a < 9; $a++)
{$x =$x + 3;
$sum = $sum + $x;}
echo $sum = $sum / $a;
?>
0
Dealiss
293 / 281 / 84
Регистрация: 10.05.2013
Сообщений: 920
23.07.2013, 19:33 6
Легкое задание
0
PinAwoR
3 / 3 / 0
Регистрация: 23.07.2013
Сообщений: 39
23.07.2013, 20:40 7
Для новичков тоже труд сделать ) , отпимизировать можно мой код еще лучше ?
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16753 / 6644 / 864
Регистрация: 12.06.2012
Сообщений: 19,897
Завершенные тесты: 1
23.07.2013, 20:49 8
Dealiss, что же вы код тогда удалили? Ну принимайтесь за другие легкие задания, например, такие Распечатать на экране монитора таблицу символов, используя только циклы
PinAwoR,
PHP
1
<?=16?>
А вообще, ваш подход нерациональный, посмотрите, сколько повторяющегося кода
0
PinAwoR
3 / 3 / 0
Регистрация: 23.07.2013
Сообщений: 39
23.07.2013, 20:53 9
KOPOJI,
Согласен, поэтому и спросил если могут помочь его сократить. Ваша помощь тоже нужна на начинающих ).
Буду признателен за ваш вклад.
0
Dealiss
293 / 281 / 84
Регистрация: 10.05.2013
Сообщений: 920
23.07.2013, 21:04 10
KOPOJI, ну я не верно прочел поставленное задание. По этому пришлось удалить код.
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16753 / 6644 / 864
Регистрация: 12.06.2012
Сообщений: 19,897
Завершенные тесты: 1
23.07.2013, 21:20 11
во-первых, форматируйте код по-нормальному, читать невозможно. Например, так
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$x = 0;
for ($a = 1; $a < 4; $a++)
{
    $x =$x + 3;
    $sum = $sum + $x;
    if ($a == 3)
    {
        $x = $x + 4;
        $sum = $sum + $x;
        $a++;
    }
}
for ($a = 5; $a < 7; $a++)
{
    $x =$x + 3;
    $sum = $sum + $x;
    if ($a == 6)
    {
        $x = $x + 4;
        $sum = $sum + $x;
        $a++;
    }
}
for ($a = 7; $a < 9; $a++)
{
    $x =$x + 3;
    $sum = $sum + $x;
}
echo $sum = $sum / $a;
или так
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$x = 0;
for ($a = 1; $a < 4; $a++) {
    $x =$x + 3;
    $sum = $sum + $x;
    if ($a == 3) {
        $x = $x + 4;
        $sum = $sum + $x;
        $a++;
    }
}
for ($a = 5; $a < 7; $a++) {
    $x =$x + 3;
    $sum = $sum + $x;
    if ($a == 6) {
        $x = $x + 4;
        $sum = $sum + $x;
        $a++;
    }
}
for ($a = 7; $a < 9; $a++) {
    $x =$x + 3;
    $sum = $sum + $x;
}
 
echo $sum = $sum / $a;
во-вторых, имхо, вместо трех циклов, лучше добавить условий внутри одного.
К тому же уберется повторяющаяся часть..
А переписать покороче можно так
PHP
1
2
3
4
5
6
7
8
9
10
11
$x = 0;
for ($a = 1; $a < 9; $a++)
{
    if($a === 4)
        continue;
    $sum += $x += 3;
    if ($a % 3 === 0)
        $sum += $x += 4;
}
 
echo $sum = $sum / $a;
Добавлено через 3 минуты

Не по теме:

Цитата Сообщение от PinAwoR Посмотреть сообщение
помощь тоже нужна на начинающих
ну в основном, и есть вопросы в разделе для начинающих или в БД :)

1
PinAwoR
3 / 3 / 0
Регистрация: 23.07.2013
Сообщений: 39
23.07.2013, 21:24 12
Спасибо вам за разъяснение и оперативность
0
brevis
23 / 23 / 13
Регистрация: 06.03.2013
Сообщений: 45
23.07.2013, 21:41 13
Что-то мне кажется это не про break с continue. Мне почему то сразу увиделось такое решение:
PHP
1
2
3
4
5
6
7
8
9
10
$s = 0;
$n = 0;
for($i=0;$i<3;$i++) {
    for($j=1;$j<=3;$j++) {
        $s += $i*10 + $j*3;
        $n++;
   }
}
 
echo $s / $n;
(будет вам в копилку решений)
1
KOPOJI
23.07.2013, 21:49
  #14

Не по теме:

brevis, я лишь переписал тот же самый код короче, оставив общий алгоритм без изменений. А свои варианты я писал уже на первой странице :)

0
auditim
0 / 0 / 0
Регистрация: 15.02.2014
Сообщений: 4
15.02.2014, 20:38 15
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
    
    $a = 0;
    $n = 0;
    
    for($i = 3; $i <= 29; $i++){
        if(($i == 3) || ($i == 6) || ($i == 9) || ($i == 13) || ($i == 16) || ($i == 19) || ($i == 23) || ($i == 26) || ($i == 29)){
            $a = $a += $i;
            $result = $a;
            $n++;
        }
    }
    
    echo $result/$n;
    
?>
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16753 / 6644 / 864
Регистрация: 12.06.2012
Сообщений: 19,897
Завершенные тесты: 1
16.02.2014, 00:32 16
А зачем тут вообще переменная $a ?
PHP
1
2
3
4
5
6
7
8
9
10
11
12
  
    $result = 0;
    $n = 0;
    
    for($i = 3; $i <= 29; $i++){
        if(($i == 3) || ($i == 6) || ($i == 9) || ($i == 13) || ($i == 16) || ($i == 19) || ($i == 23) || ($i == 26) || ($i == 29)){
            $result += $i;
            $n++;
        }
    }
    
    echo $result/$n;
Ну и парочка других вариантов
Вариант с for и continue
PHP
1
2
3
4
5
6
7
8
for($i = $n = $result = 0; $i < 30; ++$i)
{
    if($i % 10 !== 3 && $i % 10 !== 6 && $i % 10 !== 9)
        continue;
    ++$n;
    $result += $i;
}
echo $result / $n;
вариант с while и continue
PHP
1
2
3
4
5
6
7
8
9
10
11
$i = -1;
$n = $result = 0;
while(++$i < 30)
{
    if($i % 10 !== 3 && $i % 10 !== 6 && $i % 10 !== 9)
        continue;
    ++$n;
    $result += $i;
    
}
echo $result / $n;
Вариант с while, continue и break
PHP
1
2
3
4
5
6
7
8
9
10
11
$i = $n = $result = 0;
while(true)
{
    if(++$i === 30)
        break;
    if($i % 10 !== 3 && $i % 10 !== 6 && $i % 10 !== 9)
        continue;
    ++$n;
    $result += $i;
}
echo $result / $n;
вариант с for, continue и break
PHP
1
2
3
4
5
6
7
8
9
10
for($i = $n = $result = 0; ; ++$i)
{
    if($i === 30)
        break;
    if($i % 10 !== 3 && $i % 10 !== 6 && $i % 10 !== 9)
        continue;
    ++$n;
    $result += $i;
}
echo $result / $n;
З.Ы. все варианты построены на основе одного алгоритма...
0
auditim
0 / 0 / 0
Регистрация: 15.02.2014
Сообщений: 4
18.02.2014, 20:01 17
я только учусь
опыт приходит со временем
0
18.02.2014, 20:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2014, 20:01

Найти максимальный/минимальный элемент двумерного массива и среднее арифметическое
Нужно найти максимальный минимальный элемент двумерного массива и среднее...

Массив: Найти и вывести на экран среднее арифметическое для элементов массива.
Я недавно начал php учить. Запнулcя на некоторых заданиях.. Не знаю как их...

Найти среднее арифметическое чисел ряда 1, 2...N, которые делятся на 4
Всем привет. Очень нужна ваша помощь. Препод сказал написать программу в...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru