[Программирование] Трудности перевода

Автор Сообщение
news_bot ®

Стаж: 6 лет 9 месяцев
Сообщений: 27286

Создавать темы news_bot ® написал(а)
04-Мар-2021 08:30

Микрософт сказал, что прекращает развитие языка 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 задает просто пустой диапазон.
Какое решение предложите вы?
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_programmirovanie (Программирование), #_programmirovanie (Программирование), #_visual_basic, #_c#, #_c++, #_javascript, #_python, #_programmirovanie (
Программирование
)
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 22-Ноя 13:47
Часовой пояс: UTC + 5