Как прервать цикл? - Сообщения
Цикл.rar (1 КиБ) скачан 30 раз(а).
З.ы. Если не сложно, потом поделись расчетом

З.З.ы В компьютерной версии лист будет правильно отображаться, лайв версия почему то переносы не понимает ...
З.З.З.ы В функции find, в строке result:=( "" ) - возвращается матрица размером 1 на 1, для того, что бы
можно было при помощи функции el(2) или el(3) получить 1 ячейку результата работы функции в любом случае,
если бетон найден, или не найден!
WroteНасколько я понял, выходите из цикла путем жесткого задания велечины переменной цикла? Вроде бы подобные дела всегда не айс считались... Не лучше ли подобные вещи на while крутить?
Можно и с while, просто человек хотел на for сделать...
WroteWroteНасколько я понял, выходите из цикла путем жесткого задания велечины переменной цикла? Вроде бы подобные дела всегда не айс считались... Не лучше ли подобные вещи на while крутить?
Можно и с while, просто человек хотел на for сделать...
А как через while? Будет ли проще. Вот выкладываю 2 варианта решения - за первый спасибо mikka.
Циклы.rar (3 КиБ) скачан 32 раз(а).
WroteДа в принципе на while будет так же, только циклы сменятся... Паскалевская привычка - если неизвестно на какой итерации цикл прекращать, ставь while.
Ясно. Спасибо.
Перерасчет_L_по_п.12.4.rar (53 КиБ) скачан 23 раз(а).
WroteНапишите пожалуйста прямо в расчете, что нужно сделать... Можете даже вставить надпись "break" прям в кавычках, туда где должен быть настоящий BREAk
Смысл расчета состоит в том, чтобы на основе матрицы слоев грунта разбитого на слои толщиной не более 2 м (матрица L) получить матрицу L1 путем вычета значения hd из матрицы L. Но вычитание производится таким образом, чтобы начиная с первого элемента матрицы L вычесть не более значения самой матрицы и в тоже время не более значения hd. Например как в данном случае:
из значения 1 строки матрицы L (1.54 0 0) вычитаем значение hd=2.737 м, так как первое значение меньше чем hd, а последующие равны 0, то мы получим 1 строку матрицы L1 (0 0 0);
из значения 2 строки матрицы L (2 2 0.4) вычитаем остаток от значения hd (так как часть было вычтено из первой строки), в итого получаем 2 строку матрицы L1 (0.803 2 0.4);
Как видно все значение hd вычтено послойно и соответственно 3 и 4 строки матрицы L1 идентичны строкам 3 и 4 матрицы L.
Вообщем как то так.
Вот файл, там break стоит где нужно в кавычках.
Перерасчет_L_по_п.12.4_1.rar (1 КиБ) скачан 23 раз(а).
Еще заметил такой глюк, что программа почему то не присваивает результат вычисления программного блока переменной с индексами (функция el(3), число присваивает а результат программного блока нет)...
Так что лучше сделать просто программный блок, который ничему не присваивается и в конце присваивать переменной N_слоя результат ...
З.ы после праздников инет гребет, пишу с телефона, так что подправленный пример пока выложить не могу...
WroteИспользуйте вместо цикла For(3) - цикл FOR(4), а там для выхода манипулируйте переменной цикла или используйте while!
Еще заметил такой глюк, что программа почему то не присваивает результат вычисления программного блока переменной с индексами (функция el(3), число присваивает а результат программного блока нет)...
Так что лучше сделать просто программный блок, который ничему не присваивается и в конце присваивать переменной N_слоя результат ...
З.ы после праздников инет гребет, пишу с телефона, так что подправленный пример пока выложить не могу...
Спасибо за подсказку на счет того, почему программа не присваивает результат вычисления программного блока переменной с индексами. Кое что подправил также с циклом For(3), но не выходит при значении hd менее толщины первого слоя. см. приложенный файл.
Перерасчет_L_по_п.12.4 (1).rar (1 КиБ) скачан 21 раз(а).
а при вычислении <сумма>Подслоя в первой строке условие:
|if N_слоя_ст>1
| for i<принадлежит>1..N_слоя_ст-1
| ...
|else
| "Ошибка"
|...
|<сумма>N_слоя_ст
Все дело в том, что программный блок возвращает результат действия последней своей строчки,
в этом случае он возвращает результат действия выражения "<сумма>N_слоя_ст"
Поскольку это выражение состоит из одной переменной, он должен вернуть ее значение...
Но значение вычислено не было ...
Для того, чтобы функции могла вернуть значение "Ошибка" , Вы должны присвоить его переменной, а в последней строке присвоить результату значение этой переменной...
WroteУ Вас в расчете N_слоя_ст=1
а при вычислении <сумма>Подслоя в первой строке условие:
|if N_слоя_ст>1
| for i<принадлежит>1..N_слоя_ст-1
| ...
|else
| "Ошибка"
|...
|<сумма>N_слоя_ст
Все дело в том, что программный блок возвращает результат действия последней своей строчки,
в этом случае он возвращает результат действия выражения "<сумма>N_слоя_ст"
Поскольку это выражение состоит из одной переменной, он должен вернуть ее значение...
Но значение вычислено не было ...
Для того, чтобы функции могла вернуть значение "Ошибка" , Вы должны присвоить его переменной, а в последней строке присвоить результату значение этой переменной...
Спасибо за подсказку. Вроде как получилось
Перерасчет_L_по_п.12.4 (2).rar (1 КиБ) скачан 24 раз(а).
Wrotetrunc - Правда или ложь. Попытался решить проблему через trunc возникла непонятная ситуация "ошибка деления на ноль", хотя там "ноля" и в помине нет.
Напиши об этом в ошибках...
И еще по поводу предпоследнего поста - опиши что ты хочешь посчитать, а конкретно:
- исходные данные
- пункты СНиП (ну и номер самого СНиП разумеется)
я покумекаю

F:=eval(trunc(hd/2))+1
-
Новые сообщения
-
Нет новых сообщений