Перейти к содержимому

Реферальная программа Мегаплана

Партнерская программа Kredov

РЕШЕНИЯ задач на PHP для начинающих

#61 cage

cage
  • Пользователь
  • 6 сообщений
  • Репутация: 0
0

Отправлено 24 Ноябрь 2013 - 16:51

<?PHP
function arr_min($A)
{
$min= $A[0];
for ($i = 1; isset($A[$i]); $i++)
  if ($A[$i] < $min)
	  $min= $A[$i];
	  return  $min;
	  if ($A[$i] < $A[9])
		  break;
}
$A = array(4, 6, 12, 9, 5, 23,8,2,11,10);
echo "Первое число < A10 равно ".arr_min($A). "n ";


Выводит наименьшее число массива. А надо первое наименьшее число... Как быть?
  • 0

#62 Ixman

Ixman
  • Пользователь PRO
  • 2 159 сообщений
  • Репутация: 432

Отправлено 24 Ноябрь 2013 - 20:01

cage, не совсем понял как это первое наименьшее число в массиве? Наименьшее оно и в Африке наименьшее. Оно не может быть первым или вторым, оно будет одно в массиве
  • 0

#63 cage

cage
  • Пользователь
  • 6 сообщений
  • Репутация: 0

Отправлено 24 Ноябрь 2013 - 20:12

Не правильно сформулировал...В общем, нужно вывести значение первого из элементов массива, который был бы меньше последнего элемента. А у меня выходит наименьший элемент массива.

cage, не совсем понял как это первое наименьшее число в массиве? Наименьшее оно и в Африке наименьшее. Оно не может быть первым или вторым, оно будет одно в массиве


Дан массив A ненулевых
целых чисел размера 10. Вывести значение первого из тех его элементов
Ak, которые удовлетворяют неравенству Ak < A10. Если таких элементов
нет, то вывести 0.
  • 0

#64 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 24 Ноябрь 2013 - 21:24

Дан массив A ненулевых целых чисел размера 10. Вывести значение первого из тех его элементов Ak, которые удовлетворяют неравенству Ak < A10. Если таких элементов нет, то вывести 0.

Примерно так:
$arr = array(15, 10, 20, 5, 4, 2, 100, 55, 9, 3);
$flag = false;
foreach($arr as $item){
if($item < $arr[9]){
  echo $item;
  $flag = true;
  break;
}
}
if(!$flag) echo 0;

  • 0


#65 cage

cage
  • Пользователь
  • 6 сообщений
  • Репутация: 0

Отправлено 25 Ноябрь 2013 - 16:51

Спасибо, matroskin8! Это все так просто, когда делают профи))
  • 0

#66 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 25 Ноябрь 2013 - 17:33

Пожалуйста)
  • 0


#67 cage

cage
  • Пользователь
  • 6 сообщений
  • Репутация: 0

Отправлено 26 Ноябрь 2013 - 14:49

Задача array27.Дан массив A ненулевых целых чисел размера N. Проверить, чередуются ли в нем положительные и отрицательные числа. Если чередуются, то вывести 0, если нет, то вывести порядковый номер первого элемента, нарушающего закономерность.

Как задать это условие - чередование этих положительных и отрицательных чисел?
  • 0

#68 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 27 Ноябрь 2013 - 10:55

Сходу можно попробовать так:
$arr = array(15, -10, 20, -5, 4, -2, 100, -55, 9, -3);
echo "<pre>" . print_r($arr, true) . "</pre>";
$flag = 0;
foreach ($arr as $key => $value) {
if($key % 2 == 0){
  if($value < 0){
   $flag = true;
   break;
  }
}else{
  if($value > 0){
   $flag = true;
   break;
  }
}
}
if(!$flag) echo "Элементы чередуются";
else echo "Ключ: {$key}, Значение: {$arr[$key]}";

  • 0


#69 isvetlichniy

isvetlichniy
  • Пользователь
  • 619 сообщений
  • Репутация: 93

Отправлено 27 Ноябрь 2013 - 20:29

Сходу можно попробовать так:

а если будет начинаться с отрицательного числа?
мне на лету пришла идея вот какая

<?
$arr = array(15, -10, 20, -5, 4, -2, 100, -55, 9, -3);
echo "<pre>" . print_r($arr, true) . "</pre>";
$flag = false;
for ($i = 0; $i < (count($arr) - 1); $i++) {
  if(gmp_sign($arr[$i] * $arr[$i+1]) != -1){
	  $flag = true;  
	  $res = $arr[$i+1];
	  $key = ($i+1);
    }
}
if(!$flag) echo "Элементы чередуются";
else echo "Ключ: {$key}, Значение: $res";
?>

ну это так, на вскидку, не тестировал
  • 0

#70 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 27 Ноябрь 2013 - 22:18

а если будет начинаться с отрицательного числа?

Тогда нужно будет в условиях изменить знаки на противоположные :) соответственно, можно добавить еще одно условие.

ну это так, на вскидку, не тестировал

Отличное решение. Заменил функцию gmp_sign() (странно, но мой PHP (сборка Денвера) ничего о ней не знает... видать не установлена библиотека GMP) неким аналогом... в итоге получилось так:
$arr = array(15, -10, 20, -5, 4, -2, 100, -55, 9, -3);
echo "<pre>" . print_r($arr, true) . "</pre>";
$flag = false;
for ($i = 0; $i < (count($arr) - 1); $i++){
	if($arr[$i] * $arr[$i+1] > 0){
		$flag = true;
		$res = $arr[$i+1];
		$key = $i+1;
		break;
	}
}
if(!$flag) echo "Элементы чередуются";
else echo "Ключ: {$key}, Значение: $res";

  • 0


robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru