Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
 Аватар для Schulzkafer
82 / 50 / 2
Регистрация: 31.12.2019
Сообщений: 418

Глобальная зона видимости

30.03.2020, 17:46. Показов 1282. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача по выдаче количества наиболее часто встречающейся буквы.
В приведенном мною решении все показывает правильно, но если
мы меняем местополжение sum и добавляем else(второй не рабочий вариант будет помечен комментариями //), то результат уже не тот.
Кто может объяснить, в чем отличие, ведь в обоих вариантах я вывел в глоб. зону видимости(как мне казалось)?


JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function longRepeat(line) {
 
    let sum;  //let sum =0;
    let res = 0;
   
    
    for (let i =0; i<line.length; i++) {
      sum=0; //удаляем
        for (let k =i; k<line.length; k++) {
 
    if (line[i] == line[k]){
        sum++;
    }     //а здесь добавляем else { sum = 0; } для сброса
           if (sum > res) {
               res =sum;
           
}
       }
    }return res;
}
 
   console.log(longRepeat('sdsffffse')) //4 правильный ответ
    console.log(longRepeat('ddvvrwwwrggg')) //3 правильный ответ
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.03.2020, 17:46
Ответы с готовыми решениями:

глобальная область видимости
привет всем. прочитал что переменные обьявляются ключом Var для того, чтобы определить её область видимости. так вот назрел следующий...

Зона видимости
Всем привет! Столкнулся с проблемой нахождения так называемой зоны видимости. Имеется некоторая модель поля(карты), которая...

Зона видимости переменных
Здравствуйте! Подскажите, пожалуйста, как решить такую проблему: В книге Exel 2 пользовательские формы. В коде одной формы получаю значение...

4
Модератор
Эксперт HTML/CSS
 Аватар для AlexZaw
2379 / 1739 / 677
Регистрация: 07.08.2016
Сообщений: 4,093
30.03.2020, 20:59
Лучший ответ Сообщение было отмечено Schulzkafer как решение

Решение

Цитата Сообщение от Schulzkafer Посмотреть сообщение
ведь в обоих вариантах я вывел в глоб. зону видимости(как мне казалось)?
Начнем с того что у вас вообще нет ни одной глобальной переменной. Все ваши переменные являются локальными переменными вашей функции.
Ну а что касается того что код не работает при изменении то смотрите:
вызываем longRepeat('ddvvrwwwrggg')
первые несколько итераций нас не интересуют, доходим до момента когда i == 8; k ==8;
line[i] как и line[k] ссылаются на букву r (которая находится перед буквами g, условие if (line[i] == line[k]) выполняется в sum заносится 1.
следующая итерация внутреннего цикла:
i == 8; k ==9; условие не выполняется, срабатывает else, в sum заносится 0. Дальше пропускаем до тех пор пока i не будет равно 9.
i == 9; k ==9; sum == 0; res нас пока не интересует.
line[i] как и line[k] ссылаются на первую букву g
условие if (line[i] == line[k]) выполняется в sum заносится 1.
далее i == 9; k == 10; line[i] ссылается на первую букву g, line[k] на вторую. Условие выполняется, sum увеличивается на 1;
далее, i == 9; k == 11; все происходит точно также, только line[k] ссылается на последнюю букву g, sum увеличивается на 1 и равно 3
Следующая итерация внешнего цикла:
i == 10; k == 10; sum = 3;
line[i] как и line[k] ссылаются на вторую букву g, условие выполняется, sum увеличивается на 1 и равно 4(ведь сброса sum не происходило)
i == 10; k == 11; line[i] ссылается на вторую букву g, line[k] на последнюю, условие выполняется sum увеличивается еще на 1 и равно уже 5.
ну и последняя итерация, i == 11; k == 11; line[i] и line[k] ссылаются на последнюю букву g, условия выполняется sum увеличивается еще на 1 и равно 6.
При запуске longRepeat('sdsffffse') исправленный код выдает верный результат потому, что sum постоянно сбрасывается, так как после повторяющихся букв f идут другие буквы и срабатывает else

Кстати если бы вы даже вынесли переменную sum в глобальную область видимости, это ничего бы не изменило, так как сброса переменной в исправленном коде не происходит
3
 Аватар для Schulzkafer
82 / 50 / 2
Регистрация: 31.12.2019
Сообщений: 418
30.03.2020, 23:17  [ТС]
БОльшое, огромное спасибо за столь развернутый ответ, а вернее 2 ответа;
- пересмотрел теорию и понял что такое глоб. переменная;
-наконец-то понял в какой последовательности исполняются итерации во вложенном цикле,
этого мне не хватало сильно для решения задач, потому что я видел их исполнение в целом, поэтому просто воспроизводил подобное). сейчас воспроизвел все на листочке и все стало ясно.
Спасиииибо!
0
Модератор
Эксперт HTML/CSS
 Аватар для AlexZaw
2379 / 1739 / 677
Регистрация: 07.08.2016
Сообщений: 4,093
30.03.2020, 23:50
Цитата Сообщение от Schulzkafer Посмотреть сообщение
БОльшое, огромное спасибо
Всегда пожалуйста
Цитата Сообщение от Schulzkafer Посмотреть сообщение
наконец-то понял в какой последовательности исполняются итерации во вложенном цикле
Ну во внутреннем цикле они работают как в обычном одинарном цикле, а вот внешний цикл, тот, при каждой своей итерации, ждет пока отработает внутренний цикл. С двумя вложенными циклами (т.е. в сумме уже три получается) еще веселее, там, самый внешний цикл будет уже ждать пока отработают оба внутренних, затем завершит один проход и опять будет ждать пока отработают внутренние Т.е. если в каждом цикле задать условие на выполнение цикла 10 раз то самый внутренний цикл отработает аж 1000 раз
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function foo() {
  var resI = 0,
    resJ = 0,
    resK = 0;
  for (var i = 0; i < 10; i++) {
    for (var j = 0; j < 10; j++) {
      for (var k = 0; k < 10; k++) {
        resK++;
      }
      resJ++;
    }
    resI++;
  }
  return "итерации цикла с i: " + resI + "; итерации цикла с j: " + resJ + "; итерации цикла с k: " + resK;
}
console.log(foo());
2
 Аватар для Schulzkafer
82 / 50 / 2
Регистрация: 31.12.2019
Сообщений: 418
31.03.2020, 15:54  [ТС]
а это уже моя переделка, для наглядного отображения какой цикл-чем занимается-в какой-момент:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function foo() {
  var resI = 0,
    resJ = 0,
    resK = 0;
   
  for ( let line  = 'i'; line.length < 10; line+='i') {
    console.log(line);
      for ( let lin  = 'J'; lin.length < 10; lin+='J'){
          console.log(lin);
      for ( let li  = 'k'; li.length < 10; li+='k'){
         console.log(li);
         
        resK++;
      }
      resJ++;
    }
    resI++;
  }
  return "итерации цикла с i: " + resI + "; итерации цикла с j: " + resJ + "; итерации цикла с k: " + resK;
}
console.log(foo());
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.03.2020, 15:54
Помогаю со студенческими работами здесь

Вызов функций. Зона видимости
Есть несколько функций. К примеру: void menu() {...opt1(); opt2()} void opt1() {... menu();} void opt2() {... menu();} void...

Компонент вроде ListView и зона видимости.
Всем привет! Ребята, пожалуйста, подскажите как решить одну небольшую проблемку. Я написал компонент вроде ListView, но, если поле с...

Зона видимости экземпляра класса после блока try
Добрый день! При создании класса учел исключительную ситуацию в его конструкторе при помощи throw. Создаю экземпляр класса и передаю...

Вложенные классы, зона видимости класса, заголовочный фаил
Добрый день! Пока писал вопрос нашел ответ)) Но возник другой! Class A { public: void GetInfoA() ...

Глобальная переменная локальной видимости
Я где-то читал, что если объявить переменную вне функций, а затем определить ее в функции, она будет глобальной, то есть время её жизни...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru