Программирование BAS: Урок — Циклы
Встречаем новую трудовую неделю очередным выпуском обучающего урока.
Сегодня мы рассмотрим, что собой представляют
Циклы используются для повторения некоторого числа строк программного кода или для перебора, например, таблицы значений, списка значений или массива.
Циклы бывают нескольких видов.
Пока<Какое-то условие>Цикл
//Ваш исполняемый код
КонецЦикла;
Это самая простая конструкция. Условием может быть либо равенство, либо значение булево и т.д.
Например:
Запишем переменную перед началом цикла «Перем1» — она у нас будет выступать в роли ограничителя цикла.
Затем укажем в цикле условие «Перем1 <> 5», т.е. цикл будет выполняться пока наша переменная не примет значение число пять.
После этого (уже в цикле), сообщим значение нашей переменной и увеличим значение переменной на плюс один, перезаписывая переменную.
У циклов есть несколько основных операторов.
Прервать – прерывает полностью цикл. В указанной строке.
Продолжить – после попадания на эту строчку, платформа вернется в начало цикла. А все что после этой строки не будет выполнено.
Для каждого<имя переменной>ИЗ<Имя объекта для перебора>Цикл
//Ваш исполняемый код
КонецЦикла;
Такой цикл хорошо подходит для перебора строк таблицы значений и прочих универсальных коллекций, таких как массив или список значений. Давайте сделаем пример. Создадим таблицу значений, заполним ее несколькими строками и колонками и сообщим результат.
При таком цикле, переменная «Стр» записала в себя значение «СтрокаТаблицыЗначений». В этой переменной, через точку, можно обратиться к колонкам и их значениям.
Похож на предыдущий цикл. Имеет такую конструкцию:
Для <имя переменной> = <Выражение 1>
ПО<Выражение 2>Цикл//Ваш исполняемый код
КонецЦикла;
Такой цикл менее распространён и служит для выполнения цикла по определенному количеству подходов, указанных в<Выражение 2>. Сделаем пример.
Нюанс этого цикла заключается в переменной «Перем1», которую мы определяем и задаем ей значение в первой части конструкции цикла. «Перем1» в начале цикла равна единице, но с каждой итерацией (прохождение полного цикла) эта переменная будет расти на плюс один автоматически. Если вернутся, к примеру цикла «Пока», то там мы самостоятельно записывали переменную, тут же цикл делает это автоматически.
Более подробно с циклами можно ознакомиться на наших курсах программирования BAS и онлайн программирования BAS
Так же, наша компания проводит обучение по курсам:
- Авторские курсы BAS
- Онлайн курсы BAS
Обучение проводится в вечернее время, что позволит вам не отрываться от работы или обучения, практикующим программистом нашей компании.
Если у вас остались вопросы, Вы всегда можете обратиться к нашим аналитикам по телефонам:
(093) 090-70-20
(095) 090-70-20
(068) 090-70-20
Переводим синтаксис 1С на английский язык / Хабр
Когда программисты первый раз видят прикладной язык 1С, многие впадают в ступор. Несмотря на то, что родной русский язык в любом случае ближе и понятнее, читать код на русском языке и понимать, что происходит в нем (когда это в новинку) не так-то просто.
Опытный программист сразу увидит определенные знакомые конструкции (условия, циклы, вызовы функций), но многие моменты в коде все равно будут непонятными и непривычными. А уж если код был написан программистом с даром красивого именования переменных и функций, то процесс первого знакомства с 1С обещает быть еще более ярким. Впрочем, последнее справедливо не только для 1С.
Пример кода от любителя красивого синтаксисаСейчас процесс перевода 1С на английский язык идет полным ходом. К существующим ранее решениям (таким как 1C:Drive) недавно добавился 1С:ERP World Edition, а разработка на английском языке (более привычном и понятном для многих начинающих или не связанных с 1С программистов) стала еще более актуальной.
Как же человеку, уже прикипевшему к русскому языку в коде и / или со знаниями английского на уровне «London is the capital of Great Britain… Microsoft…Coca-Cola…Ok» быстро перестроиться на кодирование на английском языке?
Есть несколько способов:
1. Первое и самое банальное – подтянуть знания английского языка. Даже если удастся запомнить, как писать все нужные конструкции, названия объектов и переменных все равно желательно давать понятными англоговорящему кодеру. И чтобы не сидеть все время в обнимку с гугл-переводчиком, лучше потратить некоторое время на освоение нового языка, благо ресурсов сейчас для этого предостаточно.
Вот пример кода, как не нужно делать:
2. Второй способ – открыть любую типовую конфигурацию и искать название на английском нужной конструкции с помощью синтаксис-помощника. Как правило, там это название будет приведено подобным образом:
Пример типовой конфигурации3. Ну и третий способ – воспользоваться материалом данной статьи, где я приведу примеры наиболее популярных конструкций в стандартном виде и их аналогов на английском языке.
Поехали!
Условный оператор:
Если … Тогда ИначеЕсли … Тогда Иначе КонецЕсли; | If … Then ElsIf … Then Else EndIf; |
Циклы:
Для Счетчик = 1 По 10 Цикл КонецЦикла; | For Counter = 1 To 10 Do EndDo; |
Для Каждого … Из … Цикл КонецЦикла; | For Each … In … Do EndDo; |
Пока … Цикл КонецЦикла; | While … Do EndDo; |
Инструкции препроцессора и директивы компиляции:
#Область | #Region |
Клиент | Client |
Сервер | Server |
МобильноеПриложениеКлиент | MobileAppClient |
МобильноеПриложениеСервер | MobileAppServer |
ТолстыйКлиентОбычноеПриложение | ThickClientOrdinaryApplication |
ТолстыйКлиентУправляемоеПриложение | ThickClientManagedApplication |
ВнешнееСоединение | ExternalConnection |
ТонкийКлиент | ThinClient |
ВебКлиент | WebClient |
&НаКлиенте &НаСервере &НаСервереБезКонтекста &НаКлиентеНаСервереБезКонтекста | &AtClient &AtServer &AtServerNoContext &AtClientAtServerNoContext |
Логические и вспомогательные операторы:
И Или Не | And Or Not |
Продолжить | Continue |
Прервать | Break |
Возврат | Return |
Экспорт | Export |
Знач | Val |
Новый | New |
Перем | Var |
ВызватьИсключение | Raise |
Попытка / исключение:
Попытка Исключение КонецПопытки; | Try Except EndTry; |
Работа с транзакциями:
НачатьТранзакцию | BeginTransaction |
ОтменитьТранзакцию | RollbackTransaction |
ЗафиксироватьТранзакцию | CommitTransaction |
ТранзакцияАктивна | TransactionActive |
Функции / процедуры:
Функция КонецФункции | Function EndFunction |
Процедура КонецПроцедуры | Procedure EndProcedure |
Популярные конструкторы:
Массив | Array |
Структура | Structure |
Соответствие | Map |
СписокЗначений | ValueList |
ТаблицаЗначений | ValueTable |
ДеревоЗначений (Строки, Колонки) | ValueTree (Rows, Columns) |
Запрос | Query |
МенеджерВременныхТаблиц | TempTablesManager |
ТабличныйДокумент | SpreadsheetDocument |
ТекстовыйДокумент | TextDocument |
FTPСоединение HTTPСоединение | FTPConnection HTTPConnection |
COMОбъект | COMObject |
WSПрокси | WSProxy |
БлокировкаДанных | DataLock |
Граница | Boundary |
ДвоичныеДанные | BinaryData |
Диаграмма | Chart |
ДиаграммаГанта | GanttChart |
ДиалогВыбораФайла | FileDialog |
ДокументDOM ДокументHTML | DOMDocument HTMLDocument |
ЗаписьDOM, ЗаписьJSON, … | DOMWriter, JSONWriter, … |
ЧтениеHTML, ЧтениеJSON, … | HTMLReader, JSONReader, … |
ИнтернетПочтовоеСообщение | InternetMailMessage |
Картинка | Picture |
КвалификаторыДаты, КвалификаторыЧисла, … | DateQualifiers, NumberQualifiers, … |
КоллекцияДвижений | RegisterRecordsCollection |
КомпоновщикМакетаКомпоновкиДанных | DataCompositionTemplateComposer |
КомпоновщикНастроекКомпоновкиДанных | DataCompositionSettingsComposer |
МакетКомпоновкиДанных | DataCompositionTemplate |
МоментВремени | PointInTime |
ОписаниеОповещения | NotifyDescription |
ОписаниеТипов | TypeDescription |
ОтборКомпоновкиДанных | DataCompositionFilter |
ПараметрКомпоновкиДанных | DataCompositionParameter |
ПолеКомпоновкиДанных | DataCompositionField |
ПараметрыЗаписиJSON | JSONWriterSettings |
ПараметрыЗаписиXML ПараметрыЧтенияXML | XMLWriterSettings XMLReaderSettings |
ПочтовоеСообщение | MailMessage |
ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений | DataCompositionResultValueCollectionOutputProcessor |
ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент | DataCompositionResultSpreadsheetDocumentOutputProcessor |
ПроцессорКомпоновкиДанных | DataCompositionProcessor |
РеквизитФормы | FormAttribute |
СериализаторXDTO | XDTOSerializer |
ФабрикаXDTO | XDTOFactory |
СообщениеПользователю | UserMessage |
СхемаКомпоновкиДанных | DataCompositionSchema |
Файл | File |
ХранилищеЗначения | ValueStorage |
Цвет | Color |
Шрифт | Font |
УникальныйИдентификатор | UUID |
Популярные методы объектов:
Выполнить | Execute |
ВыполнитьПакет | ExecuteBatch |
УстановитьПараметр | SetParameter |
Выбрать | Select |
СоздатьНаборЗаписей | CreateRecordSet |
Прочитать | Read |
Вставить | Insert |
Выгрузить | Unload |
Загрузить | Load |
Добавить | Add |
Записать | Write |
Заполнить | Fill |
Итог | Total |
Количество | Count |
Метаданные | MetaData |
Очистить | Clear |
Получить | Get |
ПроверитьЗаполнение | CheckFilling |
Удалить | Delete |
Переместить | Move |
Найти | Find |
НайтиСтроки | FindRows |
Сортировать | Sort |
Скопировать | Copy |
ПолучитьМакет | GetTemplate |
ПолучитьОбласть | GetArea |
СрезПервых, СрезПоследних | SliceFirst, SliceLast |
НайтиПоНаименованию | FindByDescription |
НайтиПоКоду | FindByCode |
НайтиПоРеквизиту | FindByAttribute |
Популярные функции и процедуры глобального контекста:
НачалоДня, НачалоМесяца, … | BegOfDay, BegOfMonth, … |
КонецДня, КонецМесяца, … | EndOfDay, EndOfMonth, … |
ОписаниеОшибки | ErrorDescription |
ФоновыеЗадания | BackgroundJobs |
ПолучитьИзВременногоХранилища | GetFromTempStorage |
ТекущаяДата | CurrentDate |
ТекущаяДатаСеанса | CurrentSessionDate |
Дата | Date |
ПоказатьВводДаты, ПоказатьВводСтроки, … | ShowInputDate, ShowInputString, … |
ПоказатьВопрос | ShowQueryBox |
ПоказатьЗначение | ShowValue |
ТипЗнч | TypeOf |
Тип | Type |
Вычислить | Eval |
Формат | Format |
ЗаполнитьЗначенияСвойств | FillPropertyValues |
ПолучитьОбщуюФорму | GetCommonForm |
ПолучитьОбщийМакет | GetCommonTemplate |
ПолучитьФорму | GetForm |
ОткрытьФорму | OpenForm |
РольДоступна | IsInRole |
ПустаяСтрока | IsBlankString |
Лев, Прав, Сред | Left, Right, Mid |
Мин, Макс | Min, Max |
Оповестить, ОповеститьОВыборе | Notify, NotifyChanged |
ПредопределенноеЗначение | PredefinedValue |
УстановитьПривилегированныйРежим | SetPrivilegedMode |
ПрочитатьJSON, ПрочитатьXML | ReadJSON, ReadXML |
Окр | Round |
СтрДлина, СтрЗаменить, СтрНайти, … | StrLen, StrReplace, StrFind, … |
ВРег, НРег | Upper, Lower |
ЗначениеЗаполнено | ValueIsFilled |
Популярные системные перечисления:
ВариантЗаписиДатыJSON | JSONDateWritingVariant |
ВариантСтандартногоПериода | StandardPeriodVariant |
ВидГраницы | BoundaryType |
ВидГруппыФормы | FormGroupType |
ВидДвиженияБухгалтерии | AccountingRecordType |
ВидДвиженияНакопления | AccumulationRecordType |
ВидКнопкиФормы | FormButtonType |
ВидПоляФормы | FormFieldType |
ВидСравнения | ComparisonType |
ВидСравненияКомпоновкиДанных | DataCompositionComparisonType |
ДопустимаяДлина | AllowedLength |
ДопустимыйЗнак | AllowedSign |
ДоступКФайлу | FileAccess |
КодВозвратаДиалога | DialogReturnCode |
КодировкаИменФайловВZipФайле | FileNamesEncodingInZipFile |
КодировкаТекста | TextEncoding |
МетодСжатияZIP | ZIPCompressionMethod |
МетодШифрованияZIP | ZIPEncryptionMethod |
ОбходРезультатаЗапроса | QueryResultIteration |
ПротоколИнтернетПочты | InternetMailProtocol |
РежимБлокировкиДанных | DataLockMode |
РежимДиалогаВопрос | QuestionDialogMode |
РежимДиалогаВыбораФайла | FileDialogMode |
РежимЗаписиДокумента | DocumentWriteMode |
РежимПроведенияДокумента | DocumentPostingMode |
РежимОкругления | RoundMode |
РежимСохраненияПутейZIP | ZIPStorePathMode |
РежимУправленияБлокировкойДанных | DataLockControlMode |
Символы | Chars |
СостояниеФоновогоЗадания | BackgroundJobState |
СпособSMTPАутентификации | SMTPAuthenticationMode |
СпособPOP3Аутентификации | POP3AuthenticationMode |
ТипВнешнейКомпоненты | AddInType |
ТипГруппыЭлементовОтбораКомпоновкиДанных | DataCompositionFilterItemsGroupType |
ТипЗначенияJSON | JSONValueType |
ТипТекстаПочтовогоСообщения | InternetMailTextType |
ТипУзлаDOM | DOMNodeType |
ТипУзлаXML | XMLNodeType |
ТипФайлаТабличногоДокумента | SpreadsheetDocumentFileType |
ТипФайлаФорматированногоДокумента | FormattedDocumentFileType |
УровеньЖурналаРегистрации | EventLogLevel |
ЧастиДаты | DateFractions |
Популярные объекты метаданных, упоминаемые в коде:
Справочники | Catalogs |
Документы | Documents |
РегистрыСведений | InformationRegisters |
РегистрыНакопления | AccumulationRegisters |
РегистрыБухралтерии | AccountingRegisters |
РегистрыРасчета | CalculationRegisters |
ПланыВидовХарактеристик | ChartsOfCharacteristicTypes |
ПланыСчетов | ChartsOfAccounts |
ПланыВидовРасчета | ChartsOfCalculationTypes |
Перечисления | Enums |
Константы | Constants |
(Внешние) Обработки | (External) DataProcessors |
(Внешние) Отчеты | (External) Reports |
РегламентныеЗадания | ScheduledJobs |
ПланыОбмена | ExchangePlans |
ПараметрыСеанса | SessionParameters |
ВнешниеИсточникиДанных | ExternalDataSources |
Популярные функции в языке запросов:
ДОБАВИТЬКДАТЕ | DATEADD |
РАЗНОСТЬДАТ | DATEDIFF |
НАЧАЛОПЕРИОДА, КОНЕЦПЕРИОДА | BEGINOFPERIOD, ENDOFPERIOD |
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ) | COUNT(DISTINC) |
ЗНАЧЕНИЕ | VALUE |
ТИП | TYPE |
ЕСТЬNULL | ISNULL |
ПРЕДСТАВЛЕНИЕ | PRESENTATION |
ПРЕДСТАВЛЕНИЕССЫЛКИ | REFPRESENTATION |
ТИПЗНАЧЕНИЯ | VALUETYPE |
В (ИЕРАРХИИ) | IN (HIERARCHY) |
ДАТАВРЕМЯ | DATETIME |
ПОДОБНО | LIKE |
МЕЖДУ … И … | BETWEEN … AND … |
ВЫРАЗИТЬ | CAST |
ВЫБОР КОГДА ТОГДА ИНАЧЕ КОНЕЦ | CASE WHEN THEN ELSE END |
Все аналоги, конечно, невозможно описать в рамках одной статьи, но наиболее популярные синтаксические конструкции были отражены. Надеюсь, это поможет начинающим программистам и тем, кто только знакомиться с разработкой в 1С на английском языке, чувствовать себя уверенней и писать код быстрее.
C++ Перерыв и продолжение
❮ Назад Далее ❯
C++ Break
Вы уже видели оператор break
, используемый в предыдущей главе этого руководства. Он использовался для «выпрыгивания» из оператора switch
.
Оператор break
можно также использовать для выхода из петля .
Этот пример выходит из цикла, когда i
равно 4:
Пример
for (int i = 0; i < 10; i++) {
если (я == 4) {
ломать;
}
cout << i << "\n";
}
Попробуйте сами »
C++ Continue
Оператор continue
прерывает одну итерацию (в цикле), если выполняется указанное условие, и продолжает следующую итерацию в цикле.
В этом примере пропускается значение 4:
Пример
for (int i = 0; i < 10; i++) {
if (i == 4) {
Продолжать;
}
cout << i << "\n";
}
Попробуйте сами »
Прервать и продолжить в цикле While
Вы также можете использовать break
и continue
в циклах while:
4 Break Пример
в то время как (i < 10) {
cout << i << "\n";
я++;
if (i == 4) {
break;
}
}
Попробуйте сами »
Продолжить Пример
инт я = 0;
в то время как (i < 10) {
if (i == 4) {
i++;
продолжить;
}
cout << i << "\n";
я++;
}
Попробуйте сами »
Упражнения C++
Проверьте себя с помощью упражнений
Упражнение:
Остановить цикл, если i
равно 5:
для (целое я = 0; я < 10; я ++) { если (я == 5) { ; } cout << i << "\n"; }
Начать упражнение
❮ Предыдущий Следующий ❯
ВЫБОР ЦВЕТА
Лучшие учебники
Учебник по HTMLУчебник по JavaScript
Учебник How To
Учебник по SQL
Учебник по Python
Учебник по W3. CSS
Учебник по Bootstrap
Учебник по PHP
Учебник по Java
Учебник по C++
Учебник по jQuery
9003 900
Справочник по HTML
Справочник по CSS
Справочник по JavaScript
Справочник по SQL
Справочник по Python
Справочник по W3.CSS
Справочник по Bootstrap
Справочник по PHP
Цвета HTML
Справочник по Java
Справочник по Angular
Справочник по jQuery
Основные примеры
Примеры HTMLПримеры CSS
Примеры JavaScript
Примеры инструкций
Примеры SQL
Примеры Python
Примеры W3.CSS
Примеры Bootstrap
Примеры PHP
Примеры Java
Примеры XML
Примеры jQuery
3
О W3Schools оптимизирован для обучения и обучения. Примеры могут быть упрощены для улучшения чтения и обучения.
Учебники, ссылки и примеры постоянно пересматриваются, чтобы избежать ошибок, но мы не можем гарантировать полную правильность всего содержания. Используя W3Schools, вы соглашаетесь прочитать и принять наши условия использования,
куки-файлы и политика конфиденциальности.
Copyright 1999-2022 Refsnes Data. Все права защищены.
W3Schools использует W3.CSS.
Проверка одного цикла. Посмотрите на этот классный алгоритм, который я запустил… | Мэри Рэйчел Коенке
Посмотрите на классный алгоритм, с которым я столкнулся на AlgoExpert. Мне нравится кажущаяся простота задачи, но в то же время необходимость ее тщательного продумывания со всеми ее пограничными случаями, чтобы иметь возможность успешно ее решить. Чтобы решить ее оптимально, вы должны мыслить нестандартно.
Вот задача:
Вам дан массив целых чисел, где каждое целое число представляет скачок своего значения в массиве. Например, целое число 2 представляет собой переход на два индекса вперед в массиве; целое число -3 представляет собой переход на три индекса назад в массиве.
Если прыжок выходит за пределы массива, он переходит на другую сторону. Например, скачок на -1 по индексу 0 приводит нас к последнему индексу в массиве. Точно так же скачок на 1 по предыдущему индексу в массиве приводит к индексу 0.
Напишите функцию, которая возвращает логическое значение, указывающее, образуют ли переходы в массиве один цикл. Один цикл возникает, если, начиная с любого индекса в массиве и после переходов, каждый элемент посещается ровно один раз, прежде чем вернуться к начальному индексу.
На первый взгляд все не так уж и сложно. Оптимальная временная сложность — O(n), а оптимальное пространство — O(1). Этот факт немного усложняет задачу, но давайте посмотрим на проблемы по мере их возникновения.
Рассмотрим простой массив [2, 2, -1]. Проблема говорит, что мы можем начать с любого индекса, поэтому мы выберем 0. Значение в массиве [0] равно 2, поэтому мы переместимся на два пробела вперед, отмеченные синим цветом.
Мы посетили массив[0] и теперь массив[2], которые отмечены зеленым цветом.
Переходим на одну позицию назад и посещаем массив[1]. Осталось только вернуться к индексу, с которого мы начали. Так как array[1] имеет значение 2, мы перепрыгиваем на два пробела вперед. Поскольку это выходит за пределы массива, мы возвращаемся к началу и заканчиваем массив [0].
Поскольку мы начали и закончили в массиве [0] и посетили каждый элемент ровно один раз, это один цикл. Достаточно просто.
Давайте посмотрим на тот, который не является одним циклом.
В этом случае мы будем прыгать туда-сюда от массива [0] к массиву [1] и никогда не будем посещать массив [2]. Ни одного цикла. Есть смысл?
Мы могли бы создать массив для отслеживания количества посещений каждого элемента в качестве значения, и если есть ноль или любое число, отличное от 1, это не будет один цикл. Хотя это будет работать, это не будет в пространстве O (1) и, следовательно, не оптимально. Итак, что еще мы можем сделать?
Если мы подумаем о входных данных, массиве, мы сможем точно знать, сколько элементов нам нужно посетить, чтобы завершить цикл. Если учесть это, если в какой-то момент времени мы вернемся к элементу, с которого начали, не посетив array.length элементов, условия, заданные в задаче, не будут выполнены. В качестве альтернативы, если мы посетили array.length количество элементов, и мы не вернемся к элементу, с которого мы начали, опять же, мы знаем, что условия, заданные в задаче, не выполнены.
Учитывая это, нам нужно отслеживать три условия.
- Нам нужно посетить n количество элементов, где n = array.length
- Если после того, как мы посетили каждый элемент, мы не вернулись в исходную точку, у нас проблема
- Если у нас есть посетили более одного элемента, и еще не посетили все остальные элементы ( 1
), и мы снова оказываемся в исходной точке, у нас проблема
С помощью этого решения мы стремимся к O(n) временной сложности, потому что либо мы посещаем каждый элемент входного массива один раз, либо замыкаемся до этого, потому что данные не соответствуют критериям. Сложность пространства будет O(1), потому что мы не создаем никаких дополнительных массивов или структур, которые зависят от размера ввода, только некоторые переменные для отслеживания условий.
Работая в JavaScript, мы начинаем с написания алгоритма, объявляя переменные для отслеживания количества посещенных нами элементов и текущего индекса, который мы посещаем, и инициализируем их равными нулю.
Следующим шагом является создание цикла, который будет выполняться до тех пор, пока количество посещенных нами элементов меньше длины входного массива. Мы можем начать с короткого замыкания цикла, если когда-нибудь вернемся к начальному индексу перед посещением каждого элемента.
Итак, что нам нужно сделать в цикле? По мере выполнения цикла нам нужно увеличивать количество посещенных элементов, выяснять, какой индекс нам нужно посетить следующим, и выяснять, закончим ли мы на индексе, с которого начали. Мы можем сделать большую часть этого легко, а затем абстрагировать поиск следующего индекса во вспомогательный метод и передать текущий индекс и массив в качестве аргументов.
Итак, найти следующий индекс — самая сложная часть. Мы должны найти, насколько далеко вперед или назад нам нужно двигаться, и обработать некоторые крайние случаи. Мы можем начать с объявления переменной, которая находит значение по текущему индексу, потому что это говорит нам, куда нам нужно двигаться дальше. Затем мы можем объявить другую переменную, которая добавляет «скачок» к текущему индексу, чтобы найти следующий индекс.
Отлично! … но подождите … нам нужно иметь возможность вернуться назад и начать с начала, чтобы продолжить, если мы достигнем конца массива, или вернуться к концу, если мы достигнем начала при переходе к следующему индексу. Итак, если мой array.length равно 5, и я на 4-м индексе, а значение равно 5, я бы вышел за пределы. Так что мы можем сделать?
Самый простой способ решить эту проблему — использовать оператор по модулю. Мы можем найти остаток от currentIndex + скачок , деленный на длину массива. Этот остаток всегда будет давать нам именно то, что нам нужно, даже если значение зацикливает нас на массиве миллион раз.
W3Schools использует W3.CSS.
Вам дан массив целых чисел, где каждое целое число представляет скачок своего значения в массиве. Например, целое число 2 представляет собой переход на два индекса вперед в массиве; целое число -3 представляет собой переход на три индекса назад в массиве.
Если прыжок выходит за пределы массива, он переходит на другую сторону. Например, скачок на -1 по индексу 0 приводит нас к последнему индексу в массиве. Точно так же скачок на 1 по предыдущему индексу в массиве приводит к индексу 0.
Напишите функцию, которая возвращает логическое значение, указывающее, образуют ли переходы в массиве один цикл. Один цикл возникает, если, начиная с любого индекса в массиве и после переходов, каждый элемент посещается ровно один раз, прежде чем вернуться к начальному индексу.