Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.01.2016, 17:42
Интересующийся
Отправить личное сообщение для Bruha1991 Посмотреть профиль Найти все сообщения от Bruha1991
 
Регистрация: 17.01.2016
Сообщений: 10

Написал Решето Эратосфена. Оцените!
Я начинающий JavaScript-программист. Написал решето Эратосфена при поиске простых чисел до 100 элементов. Вроде работает! Оцените пожалуйста код как для новичка. Кстати можно ли переменную i объявить в теле цикла (цикл отмечен комментарием).
<script>
	var a = [];
	var p = 2;
	var i;

	function searchPrime(p){
		for(i = 1; i < 98; i++){
			if((i + 2) == p){
				continue;
			}
			if(((i + 2) % p) == 0){
				a[i] = false;
			}
		}
	}

	function findP(){
		i = (p - 2 + 1);
		while(i < 98){
			if(a[i] == true){
				p = i + 2;
				return;
			}
		        i++;
		}
	}

	for(i = 0; i < 98; i++){ //можно ли объявить i в этом цикле?
		a[i] = true;
	}
			
	while((p * p) < 99){
		searchPrime(p);
		findP();
	}
			
	for(i = 0; i < 98; i++){
		if(a[i] == true){
			alert((i + 2));
		}
	}
</script>
Ответить с цитированием
  #2 (permalink)  
Старый 23.01.2016, 19:37
Аватар для Coriolan161
Профессор
Отправить личное сообщение для Coriolan161 Посмотреть профиль Найти все сообщения от Coriolan161
 
Регистрация: 21.11.2015
Сообщений: 440

Bruha1991,
Можно, начинающий программист, можно.
var a = [],
    p = 2;

	function searchPrime(p){
		for(var i = 1; i < 98; i++){
			if((i + 2) == p){
				continue;
			}
			if(((i + 2) % p) == 0){
				a[i] = false;
			}
		}
	}

	function findP(){
		var i = p - 1; //можно
		while(i < 98){
			if(a[i] == true){
				p = i + 2;
				return;
			}
		        i++;
		}
	}

	for(var i = 0; i < 98; i++){ //можно
		a[i] = true;
	}
			
	while((p * p) < 99){
		searchPrime(p);
		findP();
	}
			
	for(var i = 0; i < 98; i++){ //можно
		if(a[i] == true){
			console.log(i + 2);
		}
	}

Последний раз редактировалось Coriolan161, 23.01.2016 в 19:40.
Ответить с цитированием
  #3 (permalink)  
Старый 23.01.2016, 19:41
Аватар для Coriolan161
Профессор
Отправить личное сообщение для Coriolan161 Посмотреть профиль Найти все сообщения от Coriolan161
 
Регистрация: 21.11.2015
Сообщений: 440

Bruha1991,
Но очень много проходов по всем элементам массива.
Ответить с цитированием
  #4 (permalink)  
Старый 23.01.2016, 20:43
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Цитата:
Можно, начинающий программист, можно.
Но она все равно будет объявлена в контексте функции, а не блока.

Объявлять переменные с блочной областью видимости можно в ES6 с помощью ключевого слова let - https://learn.javascript.ru/let-const.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает Решето Эратосфена Bruha1991 Общие вопросы Javascript 1 23.01.2016 00:09