Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод простых чисел. 
V
    Опции темы
Sinobithug
Дата 19.4.2010, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 10.6.2009

Репутация: нет
Всего: нет



В текстовое поле вводится число нужно вывести простые числа(которые делятся без остатка на 1 и сами на себя) входящие в состав числа из текстового поля.
Код

<head>
<script>
function f()
{
st=' '
k=1
n=Number (document.form1.num1.value)
for(i=1; i<=n; i++)
{
if(n%i==0)
k++
st=st+' '+i
}
if(k==2)
alert(st)
}
</script>
<body>
<form name="form1">
<input type=text name="num1">
<input type=button value="Найти" onClick="f()">
</form>
</body>
</html>


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

Это сообщение отредактировал(а) Sinobithug - 20.4.2010, 15:09
PM MAIL   Вверх
IDVsbruck
Дата 19.4.2010, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 778
Регистрация: 12.11.2006

Репутация: 7
Всего: 22



В принципе, ошибок нет, но код ужасающ, нечитабелен и некроссбраузерный. Не уверен, что все его "съедят".
1. document.form1.num1.value - исключительно для ИЕ.
2. Отсутствие оканчивающих точек с запятой - не стандарт.
3. Отсутствие инициирующих var засоряет память.
4. Надо полагать, что препод имел в виду ситуацию, когда st = st + ... выполняется в любом случае, а нужно, чтобы только при выполнении условия.

Думаю, код будет более правильным таким:
Код
<html>
    <head>
        <script type="text/javascript">
            function f() {
                var st = "", k = 1, n = Number(document.getElementById("num1"));
                for (var i = 1; i <= n; i++)
                    if (n % i == 0) {
                        k++;
                        st = st + " " + i;
                    }
                if (k == 2) alert(st);
            }
        </script>
    </head>
    <body>
        <input type="text" id="num1">
        <input type="button" value="Найти" onclick="f()">
    </body>
</html>

PM MAIL   Вверх
Sinobithug
Дата 19.4.2010, 20:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 10.6.2009

Репутация: нет
Всего: нет



IDVsbruck, 
Ваш код не выводит ничего.
PM MAIL   Вверх
ksnk
Дата 19.4.2010, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Цитата(IDVsbruck @  19.4.2010,  17:45 Найти цитируемый пост)
В принципе, ошибок нет
 
Цитата(Sinobithug @  19.4.2010,  20:41 Найти цитируемый пост)
Ваш код не выводит ничего.

 smile 

Вообще-то какой алгоритм, такой и вывод...

что такое "входящие в состав числа из текстового поля"? слишком нетривиальная формулировка для моего математического образования...  smile 




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
ksnk
Дата 19.4.2010, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Код

            function XXX(x,start,res){
                for (var i = start; i <= Math.floor(Math.sqrt(x)+0.0001); i++){
                    if (x % i == 0){ 
                       XXX(Math.round(x/i),i,res); res.push(i);
                       return ;
                    }
                }
                res.push(x);
            }
            function f() {
                var n= parseInt(document.getElementById("num1").value),st=[];
                XXX(n,2,st);
                if(st.length==1) alert(n+ ' - just a simple number ');
                else alert(n+'='+st.join('*'));
            }

на коленке вот, сочинилось...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Sinobithug
Дата 20.4.2010, 08:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 10.6.2009

Репутация: нет
Всего: нет



Цитата
Вообще-то какой алгоритм, такой и вывод...

Преподаватель сказал что всё правильно.


ksnk, 
Ваш код просто отображаестя в браузере.


Цитата
что такое "входящие в состав числа из текстового поля

Если в текстовом поле ввели 20 то в alert должно вывеститсь 1 2 3 5 7 11 13 17 19

Это сообщение отредактировал(а) Sinobithug - 20.4.2010, 17:43
PM MAIL   Вверх
EmilRegis
Дата 20.4.2010, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 306
Регистрация: 21.9.2007

Репутация: 3
Всего: 4



Sinobithug, попытался вникнуть в логику вашего скрипта и не смог)))
Первое что на ум пришло это вот
Код

function f() {
        var st = "", k = 1, n = Number(document.getElementById("num1").value);
         for (var i = 1; i <= n; i++){
        for(var j=1;j<i;j++)
            if (i % j == 0) k++;
        if (k == 2) st = st + " " + i;
        k=1;
     }
     alert(st);
}

но тут 2 цикла, это плохо, возможно и по другому можно
PM MAIL   Вверх
ksnk
Дата 20.4.2010, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 48
Всего: 386



Цитата(Sinobithug @  20.4.2010,  08:21 Найти цитируемый пост)
Препод сказал что всё правильно.

Мне как-то неловко спрашивать... А компьютер у препода есть?
К тому-же мистический смысл вот этого оператора if(k==2) alert(st); мне не удалось установить

Цитата(Sinobithug @  20.4.2010,  08:21 Найти цитируемый пост)
ksnk, 
Ваш код просто отображаестя в браузере.

А если подставить его в ваш,  между тегами <script> и </script>? Хотя он разлагает число на простые множители. как бы все равно не то ;)

Добавлено @ 11:03
EmilRegis, без пары циклов все равно не обойтись. Сначала нужно пробежаться по всем числам меньше N, потом проверить. что это число - простое... Можно, наверное , скрыть один цикл в другом как-нибудь заумно или попытаться отрезать лишний перебор во втором цикле, но это не принципиально сократит сложность задачи...

Это сообщение отредактировал(а) ksnk - 20.4.2010, 11:03


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
EmilRegis
Дата 20.4.2010, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 306
Регистрация: 21.9.2007

Репутация: 3
Всего: 4



ksnk, в твоём примере всё равно меньше операций выполняется, если его доработать
Код

function XXX(x,start,res){
                for (var i = start; i <= x; i++){
                    if (x % i == 0){ 
                       XXX(Math.round(x/i),i,res); 
                       res.push(i);
                       return ;
                    }
                }
                res.push(x);
            }
            function f() {
                var n= parseInt(document.getElementById("num1").value),str='';
                for (var i=2;i<=n;i++){
                    var st=[];
                    XXX(i,2,st);
                    if (st.length==2) str += i+' ';
                }
                alert(str);
            }

а в моём пробегает по всем итерациям обоих циклов
PM MAIL   Вверх
azesmcar
Дата 20.4.2010, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: нет
Всего: 211



Код

<html>
<head>
<script>
    function isSimple(n) {
        if (n <= 3)
            return true;
        for (j = 2; j <= Math.ceil(Math.sqrt(n)); ++j)
            if (n % j == 0)
                return false;
        return true;
    }

    function getSimpleNumbers(num)
    {
        var s = '';
        for(i = 1; i <= num; ++i)
            if (isSimple(i))
                s = s + ' ' + i;
        return s;
    }
</script>
<body>
<form name="form1">
<input type=text name="num1">
<input type=button value="Найти" onClick="javascript:alert(getSimpleNumbers(document.form1.num1.value));">
</form>
</body>
</html>

PM   Вверх
Sinobithug
Дата 20.4.2010, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 10.6.2009

Репутация: нет
Всего: нет



azesmcar, 
О у вас работает, спасибо.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1190 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.