PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (1): [1]

> Найдено сообщений: 10
Mandalorian Отправлено: 25 Ноября, 2021 - 09:20:56 • Тема: Реализация функции • Форум: Вопросы новичков

Ответов: 5
Просмотров: 120
Всем большое спасибо!

don.bidon пишет:
$opened = 0;

don.bidon, понравилось Ваше решение со счетчиком $opened Здорово
Mandalorian Отправлено: 24 Ноября, 2021 - 14:10:17 • Тема: Реализация функции • Форум: Вопросы новичков

Ответов: 5
Просмотров: 120
Здравствуйте! Стоит вот такая задача.

Реализуйте функцию isBalanced, которая принимает на вход строку, состоящую только из открывающих и закрывающих круглых скобок, и проверяет, является ли эта строка корректной. Пустая строка (отсутствие скобок) считается корректной.

Строка считается корректной (сбалансированной), если содержащаяся в ней скобочная структура соответствует требованиям:

Скобки — это парные структуры. У каждой открывающей скобки должна быть соответствующая ей закрывающая скобка.
Закрывающая скобка не должна идти впереди открывающей. Такой вариант недопустим )(, а вот такой допустим ()().

PHP:
скопировать код в буфер обмена
  1.  
  2. isBalanced('(())');  // true
  3. isBalanced('((())'); // false
  4.  


Написал решение такого плана:

PHP:
скопировать код в буфер обмена
  1.  
  2. function isBalanced($str) {
  3. $length = strlen($str);    
  4. $resLeft = [];
  5. $resRight = [];
  6.    
  7. for($i = 0; $i < $length; $i++){
  8. if ($str[$i] === '(') {
  9.     $resLeft []= $i;
  10.     } elseif ($str[$i] === ')') {
  11.     $resRight []= $i;
  12.     }
  13. }
  14.  
  15. for($i = 0; $i < $length; $i++){
  16.  
  17. if($resLeft[$i] > $resRight[$i]) {
  18.     return false;
  19. }
  20. }
  21. return true;
  22. }
  23.  


Вроде выдает правильные ответы.

Вопрос: может можно както упростить? Или на что-то не обратил внимания.
Mandalorian Отправлено: 12 Ноября, 2021 - 08:12:14 • Тема: Проблема с кодировкой • Форум: Вопросы новичков

Ответов: 2
Просмотров: 90
Большое спасибо.
Mandalorian Отправлено: 11 Ноября, 2021 - 19:44:56 • Тема: Проблема с кодировкой • Форум: Вопросы новичков

Ответов: 2
Просмотров: 90
Здравствуйте! Есть такое задание:

Допишите реализацию функции invertCase(), которая инвертирует регистр каждого символа в переданной строке.
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. $str = 'ПрИвЕт!';
  5. invertCase($str); // пРиВеТ!
  6.  


Я написал решение такого плана:

PHP:
скопировать код в буфер обмена
  1.  
  2. function invertCase($text)
  3. {
  4.     // BEGIN (write your solution here)
  5.     $result = '';
  6.     for($i = 0; $i <= mb_strlen($text); $i++) {
  7.         if($text[$i] === mb_strtolower($text[$i])) {
  8.             $result .= mb_strtoupper($text[$i]);
  9.         } else {
  10.             $result .= mb_strtolower($text[$i]);
  11.         }
  12.     }
  13.     return $result;
  14.     // END
  15. }
  16.  
  17. echo invertCase('пРивет'); // выдаст ???????
  18.  


при этом правильный ответ такой:
PHP:
скопировать код в буфер обмена
  1.  
  2. function invertCase($text)
  3. {
  4. $len = mb_strlen($text);
  5.     $result = '';
  6.     for ($i = 0; $i < $len; $i++) {
  7.         $symbol = mb_substr($text, $i, 1);
  8.         $lowerSymbol = mb_strtolower($symbol);
  9.         if ($symbol === $lowerSymbol) {
  10.             $result .= mb_strtoupper($symbol);
  11.         } else {
  12.             $result .= $lowerSymbol;
  13.         }
  14.     }
  15.     return $result;
  16. }
  17.  


Вопрос: в чем принципиальная разница, что первый вариант не выдает правильную кодировку, а второй вариант отрабатывает все правильно?
На что мне обратить внимание?
Mandalorian Отправлено: 20 Сентября, 2021 - 12:59:27 • Тема: Скрипт-гороскоп • Форум: Вопросы новичков

Ответов: 3
Просмотров: 142
Я кстати вспомнил. В функцию mktime можно не передавать последним параметром год date('Y'), так как функция берет автоматически год, который сейчас.

По поводу первого вопроса с датами $today и $tommorow нашел еще такой вариант записи:
PHP:
скопировать код в буфер обмена
  1.  
  2. $today = date('d.m.Y');
  3. $tommorow = date('d.m.Y', strtotime("+ 1 day"));
  4.  


Тут уже будет учитываться смена месяца и года.
Mandalorian Отправлено: 20 Сентября, 2021 - 08:11:37 • Тема: Скрипт-гороскоп • Форум: Вопросы новичков

Ответов: 3
Просмотров: 142
Большое спасибо!
Mandalorian Отправлено: 17 Сентября, 2021 - 17:30:48 • Тема: Скрипт-гороскоп • Форум: Вопросы новичков

Ответов: 3
Просмотров: 142
Здравствуйте! Занимаюсь по онлайн учебнику Трепачев Д.П.
Задача.

Сделайте скрипт-гороскоп. Внутри него хранится массив гороскопов на несколько дней вперед для каждого знака зодиака. По заходу на страницу спросите у пользователя дату рождения, определите его знак зодиака и выведите предсказание для этого знака зодиака на текущий день.

Написал код такого плана.

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. ini_set('error_reporting', E_ALL);
  4. ini_set('display_errors', 1);
  5. ini_set('display_startup_errors', 1);
  6.    
  7. if (empty($_GET)){
  8. ?>
  9.  
  10. <form action="" method="GET">
  11. <input name="birth" placeholder="dd.mm.yyyy">
  12. <input type="submit">
  13. </form>
  14.  
  15. <?PHP
  16. } else {
  17.  
  18. $date = $_GET['birth'];
  19. $arrDate = explode('.', $date);
  20. $dateStamp = mktime(0,0,0,$arrDate[1],$arrDate[0],date('Y'));
  21.  
  22. $today = date('d');
  23. $tommorow = date('d')+1;
  24.  
  25. $horoscope = [
  26.         'Овен'=>[$today=>'гороскоп Овна на Сегодня',$tommorow=>'гороскоп Овна на Завтра'],
  27.         'Телец'=>[$today=>'гороскоп Тельца на Сегодня',$tommorow=>'гороскоп Тельца на Завтра'],
  28.         'Близнецы'=>[$today=>'гороскоп Близнецов на Сегодня',$tommorow=>'гороскоп Близнецов на Завтра'],
  29.         'Рак'=>[$today=>'гороскоп Рака на Сегодня',$tommorow=>'гороскоп Рака на Завтра'],
  30.         'Лев'=>[$today=>'гороскоп Льва на Сегодня',$tommorow=>'гороскоп Льва на Завтра'],
  31.         'Дева'=>[$today=>'гороскоп Девы на Сегодня',$tommorow=>'гороскоп Девы на Завтра'],
  32.         'Весы'=>[$today=>'гороскоп Весов на Сегодня',$tommorow=>'гороскоп Весов на Завтра'],
  33.         'Скорпион'=>[$today=>'гороскоп Скорпиона на Сегодня',$tommorow=>'гороскоп Скорпиона на Завтра'],
  34.         'Стрелец'=>[$today=>'гороскоп Стрельца на Сегодня',$tommorow=>'гороскоп Стрельца на Завтра'],
  35.         'Козерог'=>[$today=>'гороскоп Козерога на Сегодня',$tommorow=>'гороскоп Козерога на Завтра'],
  36.         'Водолей'=>[$today=>'гороскоп Водолея на Сегодня',$tommorow=>'гороскоп Водолея на Завтра'],
  37.         'Рыбы'=>[$today=>'гороскоп Рыб на Сегодня',$tommorow=>'гороскоп Рыб на Завтра'],
  38. ];
  39.  
  40. $zodiacs = [
  41.         'Овен'=>[2103, 1904],
  42.         'Телец'=>[2004, 2005],
  43.         'Близнецы'=>[2105, 2006],
  44.         'Рак'=>[2106, 2207],
  45.         'Лев'=>[2307, 2208],
  46.         'Дева'=>[2308, 2209],
  47.         'Весы'=>[2309, 2210],
  48.         'Скорпион'=>[2310, 2111],
  49.         'Стрелец'=>[2211, 2112],
  50.         'Козерог'=>[2212, 1901],
  51.         'Водолей'=>[2001, 1802],
  52.         'Рыбы'=>[1902, 2003],
  53. ];
  54.  
  55.  
  56.  
  57. foreach($zodiacs as $key=>$sign) {
  58.         foreach($sign as $date) {
  59.                 $res = str_split($date, 2);
  60.                 $zodiacs[$key][] = mktime(0,0,0,$res[1], $res[0], date('Y'));   // третьим и четвертым элементом массива записываю временные рамки знака в формате Timestamp
  61.                 }
  62.         if ($dateStamp > $zodiacs[$key][2] && $dateStamp < $zodiacs[$key][3]) {  // здесь соответственно сравниваю дату рождения и временные рамки знака
  63.                 print_r ("$key<br>");
  64.                 print_r ("$horoscope[$key][$today]<br>");
  65.         }
  66.     }
  67. }
  68. ?>
  69.  


Старался делать с учетом уже пройденного материала, чтоб не слишком сложно было.

Интерестно услышать мнения на счет кода. Может можно что-то улучшить? Или проще написать. Или вобще по другому надо... По интернету посмотрел решения другие, и чего-то не легли на душу. Решил по своей логике попробовать.
Mandalorian Отправлено: 08 Сентября, 2021 - 09:32:47 • Тема: Получить собственные делители числа, являющиеся простыми числами • Форум: Вопросы новичков

Ответов: 4
Просмотров: 195
Понял, спасибо!
Mandalorian Отправлено: 07 Сентября, 2021 - 20:19:08 • Тема: Получить собственные делители числа, являющиеся простыми числами • Форум: Вопросы новичков

Ответов: 4
Просмотров: 195
По поводу простых чисел прочитал, спасибо. Почему-то думал, что знаю что это. Оказывается, совсем не то)

Собственно, второй вопрос отпал теперь.
Mandalorian Отправлено: 07 Сентября, 2021 - 17:58:33 • Тема: Получить собственные делители числа, являющиеся простыми числами • Форум: Вопросы новичков

Ответов: 4
Просмотров: 195
Здравствуйте! Сейчас учусь. Возникло сомнение в решении задачи.

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

Дана функция.
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3. function getPrimeDivisors($num) {
  4.         $result = [];
  5.         $divs = getOwnDivisors($num);
  6.        
  7.         foreach ($divs as $div) {
  8.                 if (isPrime($div)) {
  9.                         $result[] = $div;
  10.                 }
  11.         }
  12.                
  13.         return $result;
  14. }
  15.  


Необходимо написать реализацию вспомогательных функций.

В свою очередь я написал такой код:
PHP:
скопировать код в буфер обмена
  1.  
  2. function getOwnDivisors($num){
  3.                 for($i = 1; $i <= $num; $i++){
  4.                         if($num % $i === 0) {
  5.                                 $arr[] = $i;
  6.                         }
  7.                 }
  8.                 return $arr;
  9.         }
  10.  
  11.         function isPrime($num) {
  12.                 for($i = 2; $i < $num; $i++){
  13.                         if($num % $i === 0) {
  14.                                 return false;
  15.                         }
  16.                 }
  17.                 return true;
  18.         }
  19.  
  20. var_dump(getPrimeDivisors(...));
  21.  


Есть несколько вопросов. Первый - все ли правильно в этом коде, и если не все то что неправильно?

Второй - почему, кода я передаю в основную функцию дробное число, то она все равно ведет себя как с простыми числами? Например, передал в функцию число 23,25 а функция возвращает массив с делителями 1 и 23.

Третий - например возьмем число 12. Функция выдаст массив с числами 1,2,3. Куда подевались 6 и 12? Если же возьмем число 19 - то массив будет из чисел 1 и 19. Почему так происходит?

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB