Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Наименьшее элемент массива
 
 автор: Jovidon   (23.04.2013 в 10:15)   письмо автору
 
 

Здарова народ!!!
Задача. Составить алгоритм и программу поиска наименьшего элемента массива X(n).
<?php
    $arr 
= array(14,21,37,2,4,6,4,7,8,44,2,2,23,44);
    
    function 
small_value($val)
    {
        
$smallest 0;
        for(
$i=0$i<count($val); $i++)
        {
            if(
$val[$i] < $smallest)
            {
                
$smallest $val[$i];
            }
        }
        return 
$smallest;
    }
    
    echo 
small_value($arr); // выводить 0
?>


Почему?

  Ответить  
 
 автор: psychomc   (23.04.2013 в 10:30)   письмо автору
 
   для: Jovidon   (23.04.2013 в 10:15)
 

Неужели не понятно почему? Сами же присваивание 0. минимальный должен быть на старте равен первому элементу массива, array_shift используйте. А вообще, в топку весь алгоритм, есть встроенная фция min

  Ответить  
 
 автор: Jovidon   (23.04.2013 в 10:34)   письмо автору
 
   для: psychomc   (23.04.2013 в 10:30)
 

почуму условия не выполняеться?
Это задача по информатике нелзя использовать язык php а что касаеться цикла или конструкци if else но во всех языках есть.

  Ответить  
 
 автор: psychomc   (23.04.2013 в 10:46)   письмо автору
 
   для: Jovidon   (23.04.2013 в 10:34)
 

Замените в вашем коде $smallest = 0; на $smallest =$val[0]; и в цикле начинайте не с 0 а с 1. Всё

  Ответить  
 
 автор: Lotanaen   (23.04.2013 в 10:31)   письмо автору
 
   для: Jovidon   (23.04.2013 в 10:15)
 


 <?php
    $arr 
= array(14,21,37,2,4,6,4,7,8,44,2,2,23,44);
    
    function 
small_value($val)
    {
        
        for(
$i=0$i<count($val); $i++)
        {
           if (
$i==0$smallest $val[$i]; 
           if(
$val[$i] < $smallest)
            {
                
$smallest $val[$i];
            }
        }
        return 
$smallest;
    }
    
    echo 
small_value($arr); // выводить 0
?> 

  Ответить  
 
 автор: psychomc   (23.04.2013 в 10:36)   письмо автору
 
   для: Lotanaen   (23.04.2013 в 10:31)
 

Мде. И зачем на каждой итерации этот лишний if?

  Ответить  
 
 автор: Lotanaen   (23.04.2013 в 10:40)   письмо автору
 
   для: psychomc   (23.04.2013 в 10:36)
 

ну да, просто $smallest = $val[0]; в первом варианте прописать

  Ответить  
 
 автор: Jovidon   (23.04.2013 в 10:40)   письмо автору
 
   для: Lotanaen   (23.04.2013 в 10:31)
 

ООо спаисбо :))
случайно не знаете какую нибудь (сайт, книги) сборник задач с решениями по информатике?
Готовлюс для поступления в университет. Буду очень блогадарен.

  Ответить  
 
 автор: confirm   (23.04.2013 в 11:32)   письмо автору
 
   для: Jovidon   (23.04.2013 в 10:15)
 

И зачем этот алгоритм? Есть ведь min(array).
echo min($arr); //2

  Ответить  
 
 автор: Jovidon   (23.04.2013 в 17:15)   письмо автору
 
   для: confirm   (23.04.2013 в 11:32)
 

Да min это отлично!
Но это задача по информатике. (php нельзя использовать)

  Ответить  
 
 автор: confirm   (23.04.2013 в 18:32)   письмо автору
 
   для: Jovidon   (23.04.2013 в 17:15)
 

Понятно, ну тогда лучше так:
<?
$arr 
= array(14,21,37,2,4,6,4,7,8,44,2,2,23,44);

$n=0;
for(
$i=0$k=count($arr); $i<$k$i++) {
  if(
$arr[$n] > $arr[$i]) $n=$i;
}
echo 
$arr[$n];


Кстати - php нельзя использовать. А почему тогда count используете?

  Ответить  
 
 автор: Jovidon   (24.04.2013 в 09:53)   письмо автору
 
   для: confirm   (23.04.2013 в 18:32)
 

Спасибо!!!
с count - ом разбирусь

  Ответить  
 
 автор: confirm   (24.04.2013 в 10:12)   письмо автору
 
   для: Jovidon   (24.04.2013 в 09:53)
 

А что с ним разбираться, если пишется абстрактно, как алгоритм, то никаких count быть не должно. Да и вообще, даже с его применением, у вас есть "баг" в коде.
Такие алгоритмы пишутся для быстрого поиска, сортировки, расстановки... А у вас что получается:
for($i=0; $i<count($val); $i++)
А условие цикла проверяется при каждой итерации, и получается, что при каждой итерации выполняется подсчет количества элементов массива, что никак не вяжется с задачей алгоритма для быстрого... Множество раз выполняется пустая работа. Подсчет количества элементов нужно производить один раз - при входе в цикл, так как написано у меня.

Но, если код не привязан к конкретному языку, использовать РНР нельзя, то значит и другое тоже нельзя. Значит цикл надо писать так:
<?
for($i=0; @$arr[$i]; $i++) {
  if(
$arr[$n] > $arr[$i]) $n=$i;
}

Но и в данном случае есть РНР-след - собака подавляющая. Но если в рамках РНР отключены предупреждения, то все будет ОК, и собака не нужна. То есть это только для просмотра этого цикла в РНР собака, например JavaScript исполнит это же самое без ругани, ошибок, а тем более исключений:
<script>
arr = [14,21,37,2,4,6,4,7,8,44,2,2,23,44]; 
n=0; 
for(i=0; arr[i]; i++) { 
   if(arr[n] > arr[i]) n=i; 

alert(arr[n]);
</script>

И нет никаких count, а проверяется возвращаемый элемент массива, если он отсутствует в текущей итерации, то цикл прекращается.

  Ответить  
 
 автор: Sfinks   (24.04.2013 в 11:25)   письмо автору
 
   для: confirm   (24.04.2013 в 10:12)
 

А если в массиве есть ноль?
arr = [14,21,37,0,2,4,6,4,7,8,44,2,2,23,44];

Думаю вообще без привязки к языку не выйдет.
Либо в php будет isset() или key_exists(), либо в JS будет !==undefined, либо что-то еще в других языках.

  Ответить  
 
 автор: confirm   (24.04.2013 в 11:29)   письмо автору
 
   для: Sfinks   (24.04.2013 в 11:25)
 

Ну вас за язык тянули? :)

Я это прекрасно знаю, и сперва оставил автору PS, а затем удалил. Человеку надо давать возможность думать.

  Ответить  
 
 автор: Sfinks   (24.04.2013 в 13:03)   письмо автору
 
   для: confirm   (24.04.2013 в 11:29)
 

=)

  Ответить  
 
 автор: confirm   (24.04.2013 в 11:39)   письмо автору
 
   для: Sfinks   (24.04.2013 в 11:25)
 

Кстати, для JS не !==undefined, а просто !=undefined

  Ответить  
 
 автор: Jovidon   (24.04.2013 в 11:40)   письмо автору
 
   для: confirm   (24.04.2013 в 10:12)
 

Очень блогадарен за все!!!
Посоветуй какую небудь книгу или сайт, чтобы изучать алгаритми.
Для поступления в университет очень важно.

  Ответить  
 
 автор: confirm   (24.04.2013 в 11:43)   письмо автору
 
   для: Jovidon   (24.04.2013 в 11:40)
 

Набираете в Гугле (Яшка тупой, в нем только мыльные оперы искать) "математика алгоритмы", и выбирай не хочу :)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования