Трудности перевода

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Микрософт сказал, что прекращает развитие языка Visual Basic. Значит, пришла пора в Ситилинк переписывать код.

Вне зависимости от этого эпохального решения, самому потребовалось перевести один пет-проект с VBA на C#. Я обычно все прототипирую на MS Access, и потом уже код переезжает на более серьезную базу данных (читай: SQL Server) и другой язык программирования.

И вот циклы.
В Basic и Pascal есть процедура цикла
 
for i = Lower to Upper step Step
              …
next

Она универсальна в том смысле, что может ехать как снизу вверх, так и сверху вниз. Ее можно использовать и если Step>0, и если Step<0.

А как записать то же самое в нотации C/C++/C#/JavaScript? Оказывается, что ихний цикл for вовсе не эквивалент Basic-овскому:

  for (i = Lower; i < Upper+1; i+=Step) { … }

Как модифицировать это, чтобы работало и для случая, когда Step<0? Приходит в голову такое, не самое изящное, решение:

for (i = Lower; Sign(Step)*i <= Sign(Step)*Upper; i+=Step) { … }

Он, как и изначальный for… next, зациклится при Step =0.

Коллеги предложили еще вариант:

for ( i=Lower; Step>0? i<=Upper: i>=Upper; i+=Step)  {… }

На самом деле, поскольку нам надо, чтобы последним значением переменной цикла было Upper, и она тоже поучаствовала в теле цикла, это можно запрограммировать как цикл с постусловием:

i = Lower — Step;
do
i += Step;

while (i != Upper)

но этот код не годится, если Step не делит нацело диапазон Lower … Upper

Оказывается, цикл с использованием range на Python также не позволяет двигаться от большего значения к меньшему, range(b, a) при b>a задает просто пустой диапазон.

Какое решение предложите вы?
Источник: https://habr.com/ru/post/545398/


Интересные статьи

Интересные статьи

Маркетплейс – это сервис от 1С-Битрикс, который позволяет разработчикам делиться своими решениями с широкой аудиторией, состоящей из клиентов и других разработчиков.
Вам приходилось сталкиваться с ситуацией, когда сайт или портал Битрикс24 недоступен, потому что на диске неожиданно закончилось место? Да, последний бэкап съел все место на диске в самый неподходящий...
Если в вашей компании хотя бы два сотрудника, отвечающих за работу со сделками в Битрикс24, рано или поздно возникает вопрос распределения лидов между ними.
В 1С Битрикс есть специальные сущности под названием “Информационные блоки, сокращенно (инфоблоки)“, я думаю каждый с ними знаком, но не каждый понимает, что это такое и для чего они нужны
Согласно многочисленным исследованиям поведения пользователей на сайте, порядка 25% посетителей покидают ресурс, если страница грузится более 4 секунд.