За последние 24 часа нас посетили 16790 программистов и 1643 робота. Сейчас ищут 872 программиста ...

Задача закрепляющая тему "Массивы"

Тема в разделе "PHP для новичков", создана пользователем Igorbay, 19 апр 2016.

  1. Igorbay

    Igorbay Активный пользователь

    С нами с:
    9 апр 2015
    Сообщения:
    48
    Симпатии:
    0
    Обучающий курс Михаила Русакова.
    Раздел "Основы PHP".
    Тема урока "Массивы".

    Думаю многим знаком этот курс и возможно данная задача тоже.
    Но у меня не получается решить, больше чем первые два задания:
    1) Создайте массив из трех значений: "два", "один", "три".
    2) Создайте функцию, которая принимает число в виде строки, а возвращает само число. НАпример, получена строка "два", а возвращается число 2.
    Код (Text):
    1. $array = array (2 => "dva", 1=> "odin", 3=> "tri");
    2.  
    3. function chislo ($array) {
    4.     foreach ($array as $k => $v) {
    5.         echo "$v = $k<br />";
    6.     }
    7. }
    8. $chislo = chislo($array);
    3) Создайте массив из 100 элементов. Значение каждого элемента должно высчитываться по правилу: (номер_итерации*х), где х - это число, возвращаемое функцией, созданной во 2-ом пункте. Параметр для функции - это элемент массива, созданного в 1-ом пункте, где индекс равен остатку от деления на 3 номера итерации.
    4) Выведите получившийся массив, используя цикл for.
    5) Создайте ассоциативный массив, где ключи имеют значение: "один", "два" и "три", а значение 1, 2 и 3 соответственно.

    Вот примерное представление третьего задание. А без него и остальные не решить:

    Код (Text):
    1. function parametr ($array) {
    2.     $parametr = 0;
    3.     foreach ($array as $k=>$v) {
    4.         $parametr = $k%count($array);//где индекс равен остатку от деления на 3 номера итерации
    5.     }
    6.     return $parametr;
    7. }
    8.  
    9. $parametr = parametr($array);
    10.  
    11. function array100 ($parametr) { //Создайте массив из 100 элементов. Параметр для функции - это элемент массива, созданного в 1-ом пункте
    12.     $chislo = chislo ($array);
    13.     $znachElem = 0;
    14.     foreach ($array as $k=>$v) {
    15.         $znachElem = $k * $chislo; //Значение каждого элемента должно высчитываться по правилу: (номер_итерации*х), где х - это число, возвращаемое функцией, созданной во 2-ом пункте
    16.     }
    17.     return $znachElem;
    18. }
    19.  
    20. $znachElem = array100 ($array);
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Что не получается?
     
  3. machetero

    machetero Активный пользователь

    С нами с:
    25 окт 2014
    Сообщения:
    499
    Симпатии:
    21
    Русаков новый Попов ?
     
  4. Igorbay

    Igorbay Активный пользователь

    С нами с:
    9 апр 2015
    Сообщения:
    48
    Симпатии:
    0
    Ну явно код неверен. Это лишь мое предположение решения данной задачи. Потому хочу узнать мнения более грамотного кодера, правильно ли строится начало? или копать в другом направлении?
    Я не смотрел курсы Попова по ПХП.
     
  5. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Всё нормально, тут дело в том, что есть задача и она обычно на мелки под задачи делиться, вот я и спрашиваю в чём проблема, что конкретно не получается сделать.
    Как задача будет решена, сможем уже и об оптимальности её решения поговорить.
    Может не получается 100 элементов в массив добавить или что-то дальше?
    --- Добавлено ---
    Это я про третий пункт, правильно ли я понял что с ним затык
     
  6. Igorbay

    Igorbay Активный пользователь

    С нами с:
    9 апр 2015
    Сообщения:
    48
    Симпатии:
    0
    Да. Все верно

    Дело в том, что я не могу даже понять этот вопрос в некоторых моментах. Например:

    - "Создайте массив из 100 элементов. Значение каждого элемента должно высчитываться по правилу..." - Нужно создавать массив или же функцию с циклом, которая будет создавать элементы массива?

    - "где х - это число, возвращаемое функцией, созданной во 2-ом пункте." - Во втором пункте функция возвращает три числа. Какое число брать?

    - "Параметр для функции - это элемент массива, созданного в 1-ом пункте..." - Массив созданный в 1-ом пункте опять таки имеет три элемента. Какой элемент брать?

    - "где индекс равен остатку от деления на 3 номера итерации." - Просто не врубился.

    Понимаю, что данные вопросы нужно адресовать не вам, а Михаилу. Но все таки, быть может с высоты вашего опыта вопросы могут показаться, смешными и не сложными :)
     
  7. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    надо подумать, что там имели ввиду
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Всё ясно описано. Идёшь циклом от 0 до 99 (вариант, от одного до 10). Пускай это будет $i. Берёшь $i % 3 (остаток от деления), пусть это будет $c, потом берёшь элемент массива на шаге 1 с таким индексом, и пропускаешь через функцию шага 2 (кстати, что за бред вы написали в коде? Там же не сказано вывести массив в задаче). Ну и т.д. Включайте голову. Пересмотрите курс (раз такое задание дали, значит должны были объяснять, что значит вернуть из функции результат), а лучше почитайте доки. Нарисуйте блок-схему задачи 2.
     
    denis01 нравится это.
  9. Igorbay

    Igorbay Активный пользователь

    С нами с:
    9 апр 2015
    Сообщения:
    48
    Симпатии:
    0
    То есть я не верно решил уже вторую задачу? Вот два других варианта решения второго задания. Верны ли они?
    Вариант № 1
    Код (Text):
    1. $array = array ("dva", "odin", "tri");
    2.  
    3. function chislo ($array) {
    4.     foreach ($array as $k=>$v) {
    5.     if ($v == "dva") {
    6.         $v = 2;
    7.     } else if ($v == "odin") {
    8.         $v = 1;
    9.     } else if ($v == "tri") {
    10.         $v = 3;
    11.     }
    12.     }
    13.     return $v;
    14. }
    Вариант № 2
    Код (Text):
    1. function chislo ($array) {
    2.     foreach ($array as $k=>$v) {
    3.     switch ($v) {
    4.         case "dva":
    5.         $v = 2;
    6.         break;
    7.         case "odin":
    8.         $v = 1;
    9.         break;      
    10.         case "tri":
    11.         $v = 3;
    12.         break;
    13.         }
    14.     }
    15.     return $v;
    16. }
     
  10. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Вы вообще не въехали в условие задачи. Я должен вызвать вашу функцию со строкой, и получить число. Т.е.
    PHP:
    1. echo chislo("odin"), ",", chislo("dva");
    должно дать ответ
    Код (Text):
    1. 1, 2
    Я же говорю, нарисуйте сначала блоксхему
    http://pro-prof.com/archives/1462
    Вам достаточно буквально первых 5-6. Циклы рекомендую прорисовывать просто условием, приближает понимание, как они работают. Фактически, задача-то на поиск в массиве, т.е. есть массив $a, есть строка $s, надо найти в массиве строку $s, и вернуть её ключ. Есть для этого в php вообще стандартная функция, но здесь, я думаю, для развития задано написать её самостоятельно. Там, вообще говоря, строчки 4 будет. Хочется поэтому, чтобы вы сами додумались
     
    Igorbay нравится это.
  11. Igorbay

    Igorbay Активный пользователь

    С нами с:
    9 апр 2015
    Сообщения:
    48
    Симпатии:
    0
    С блок схемами не работал ни разу. Хотя давно хочу заняться этим вопросом. Но все ни как не могу найти время. Благодарю за ссылку.

    Можете уточнить, что имели ввиду? А не просто это как?

    Вот и я хочу, разобрать суть, понять логику, потому пробую разные варианты. Лучше уж разобрать (пусть даже чужой и готовый) скрипт, но без стандартных функций. Чем пользоваться этими самыми готовыми функциями созданными PHP.
    Вот кстати новый вариант решения второго задания. При вызове функции со строкой, возвращающий число:
    Код (Text):
    1. $array3 = array ("dva", "odin", "tri");
    2.  
    3. function chislo ($chislo) {
    4.     if ($chislo == "dva") {
    5.         return 2;
    6.         }
    7.     else if ($chislo == "odin") {
    8.         return 1;
    9.         }
    10.     else if ($chislo == "tri") {
    11.         return 3;
    12.         }
    13. }
    14. echo chislo("odin"), ",", chislo("dva");
     
  12. p@R@dox 55RU

    p@R@dox 55RU Зэк
    [ БАН ]

    С нами с:
    21 май 2014
    Сообщения:
    1.358
    Симпатии:
    7
    Адрес:
    с планеты Ялмез
    а не лучше использовать switch-case??
     
  13. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Ну функция более-менее адекватная. Задачу выполняет, по крайней мере. Только лучше ставить строгое равенство (===), для надёжности. Хотя я думал, что суть этой задачи в поиске по массиву, но потом посмотрел в каком порядке элементы в массиве, и засомневался. ОК, теперь давайте дальше разбирайтесь.
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    внутри функции должен быть тупо ассоциативный массив
    --- Добавлено ---
    в том-то и соль задания
    --- Добавлено ---
    вся идея изучения массивов состоит в том, чтобы научиться ими пользоваться
     
  15. Igorbay

    Igorbay Активный пользователь

    С нами с:
    9 апр 2015
    Сообщения:
    48
    Симпатии:
    0
    Вот решение третьего задания:

    Код (Text):
    1. for ($i=0; $i<100; $i++) {
    2.     $i*chislo($array3[$i%3]);
    3. }
    Буду искать вариант построения функции через массив :)
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    искать? Очевидно же, что это должен быть ассоциативный массив. Это такой массив, у которого ключи - это слова. А тебе по слову нужно вывести число. Или я что-то не уловил?
     
  17. Igorbay

    Igorbay Активный пользователь

    С нами с:
    9 апр 2015
    Сообщения:
    48
    Симпатии:
    0
    Ну вот в самом начале, я указал решение данного задания через массив:

    Код (Text):
    1. $array = array (2 => "dva", 1=> "odin", 3=> "tri");
    2.  
    3. function chislo ($array) {
    4.     foreach ($array as $k => $v) {
    5.         echo "$v = $k<br />";
    6.     }
    7. }
    8. $chislo = chislo($array);
    Но вроде как ни то оказалось.
    При вызове функции, в аргументе, что нужно передавать? Слово "odin" или название массива?
     
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а задача как звучит точно?
     
  19. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Перевожу на русский. Умножить переменную $i на результат вызова функции chislo, а результат выкинуть в мусор
     
  20. Igorbay

    Igorbay Активный пользователь

    С нами с:
    9 апр 2015
    Сообщения:
    48
    Симпатии:
    0
    Забыл записать результат в переменную
    Код (Text):
    1. for ($i=0; $i<100; $i++) {
    2.   $array100[] =  ($i*chislo($array3[$i%3]));
    3. }
    Вот первые пять заданий общей задачи:

    1. Создайте массив из трех значений: "два", "один", "три".
    2. Создайте функцию, которая принимает число в виде строки, а возвращает само число. Например, получена строка "два", а возвращается число 2.
    3. Создайте массив из 100 элементов. Значение каждого элемента должно высчитываться по правилу: (номер_итерации*х), где х - это число, возвращаемое функцией, созданной во 2-ом пункте. Параметр для функции - это элемент массива, созданного в 1-ом пункте, где индекс равен остатку от деления на 3 номера итерации.
    4. Выведите получившийся массив используя цикл for
    5. Создайте ассоциативный массив, где ключи имеют значения: "один", "два" и "три", а значения 1, 2 и 3 соответственно
     
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    задачу номер два реши сначала.
     
  22. Igorbay

    Igorbay Активный пользователь

    С нами с:
    9 апр 2015
    Сообщения:
    48
    Симпатии:
    0
    Код (Text):
    1. function chislo ($chislo) {
    2.     if ($chislo == "dva") {return 2;}
    3.     else if ($chislo == "odin") {return 1;}
    4.     else if ($chislo == "tri") {return 3;}
    5. }
    Как я понял - это не вариант?
     
  23. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Ну тут же нет ассоциативного массива! :D
     
  24. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  25. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Объявите массив не вне функции, а внутри нее. И все заработает.