Русский
Русский
English
Статистика
Реклама

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

Микрософт сказал, что прекращает развитие языка 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
К списку статей
Опубликовано: 04.03.2021 06:14:22
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Программирование

Visual basic

C

C++

Javascript

Python

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru