За последние 24 часа нас посетили 8713 программистов и 833 робота. Сейчас ищут 372 программиста ...

Запутался с циклами. Очень нужна помощь объяснить

Тема в разделе "PHP для новичков", создана пользователем neketsh, 29 апр 2015.

  1. neketsh

    neketsh Новичок

    С нами с:
    29 апр 2015
    Сообщения:
    17
    Симпатии:
    0
    Только начал учить PHP и только недоавно дошел до циклов. Я вроде все понимал и все работало, пока в моем учебник ене дали задачку написать. Некто кладет в банк 10000р под 10% в год. Через сколько лет он станет милионером и доживет ли он.
    Я написал код, вроде все по правилам, но цикличность происходит лишь в действии, а в теле цикла не происходит. Т.е пишет что год увеличился на один, но вклад не увеличивается.
    Код (PHP):
    1. <?php
    2.  
    3.  
    4. $sum1 = 10000; /* начальная сумма /*
    5. $perc = 1.1;  /* банк начисляет 10% /*
    6.  
    7. for ($year =16; $year <=80; $year++) {      /* человеку 16 лет. Средний возраст 80 лет. /*
    8.     $sum2 = $sum1 * $perc;    /* количество денег приходящих каждый год /*
    9.     echo " In {$year} have {$sum2} \n";
    10.  
    11.          if ($sum2 >= 1000000) {      /* если стал милионером то вывести возраст и остановить работу программы /*
    12.     echo "You are a millionare at {$year}";
    13.     break;
    14.    }
    15. }
    Нокогда я пытаюсь запустить, мне пишет что "в n году 11000". Что не так? Заранее спасибо!
     
  2. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.901
    Симпатии:
    968
    чувак, за тебя в первый раз модератор уже поправил сообщение. ты люто игнорируешь правила сообщества. готовься к соответствующему отношению в свой адрес.
     
  3. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.490
    Симпатии:
    1.731
    В алгоритме ошибка. Во-первых, банк начисляет сложные проценты, т.е. исходная сумма увеличивается, и на неё начисляется тот же процент. Во-вторых, у вас же sum2 всегда будет одним и тем же, вы же не увеличиваете её ни на какой процент. Написать вам самому этот алгоритм правильно - пара пустяков, но, попробуйте, всё же, исходя их подсказок, сделать самостоятельно.
     
  4. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.901
    Симпатии:
    968
    у тебя sum1 не изменяется. и в 17 и в 37 и в 77 у чувака на счете будет одна и та же сумма. короче тебе с такими потугами идти изучать основы программирования. ну и букварик почитать чтоб правила осиливать.
     
  5. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    Вы немножко просто невнимательны.
    1. Почитайте про комментарии в php. Есть однострочные, что в данном случае использовать было бы логичнее. Вы здесь используете многострочные, и то неправильно.
    Вы пишете: /* комментарий /*
    А надо: /* комментарий */
    2. Чтобы понять вашу ошибку, вам надо было всего лишь написать каждую строчку не кодом, а перевести на русский язык. Что и как происходит в каждой строчке. Сами бы нашли ошибку. Попробуйте, перед тем, как читать пункт 3, там будет ответ.
    3. У вас $sum1 объявлена вне цикла, а $year в цикле. У $year у вас инкремент на каждую итерацию цикла, следовательно начение этой переменной увеличивается с каждой итерацией. А вот $sum1 вы в цикле вызываете постоянно извне, а в цикле ей новое значение не присваиваете. Следовательно, у вас $sum1 всегда имеет то значение, с которым вы её объявили.
     
  6. neketsh

    neketsh Новичок

    С нами с:
    29 апр 2015
    Сообщения:
    17
    Симпатии:
    0
    Спасибо вам!) Прочитал что вы написали, еще подумал немного и допер!)
    Вот что получилось у меня:
    Код (PHP):
    1. <?php
    2.  
    3.  
    4. $sum1 = 10000;
    5. $perc = 10;
    6.  
    7. for ($year =16; $year <=80; $year++) {
    8.     $sum1 = $sum1 + (( $sum1 * 10) / 100);
    9.     echo " In {$year} have $ {$sum1} \n";
    10. if ($sum1 >= 1000000) {
    11.     echo "You are a millionare at {$year}";
    12.     break;
    13. } elseif ( $year == 80) {
    14.     echo "You died without $1000000";
    15.     break;
    16. }
    17. } 
     
  7. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.901
    Симпатии:
    968
    sum*=1.1

    Добавлено спустя 1 минуту 15 секунд:
    зачем ты объявляешь эту переменную если потом используешь хардкодед константу 10 ?