Статус: Advanced Member
Группы: Registered
Зарегистрирован: 02.12.2010(UTC)
Сообщений: 93
Сказал «Спасибо»: 311 раз Поблагодарили: 7 раз в 6 постах
Возникла необходимость в прерывании цикла. В MathCAD использую break. Как же в SMath Studio это сделать? Или существует другой подход к решению проблемы. Есть матрица, в которой каждой из строк соответствуют некие значения. Цель заключается в определении номера строки по заданному условию. Файл прилагается.
Ученье свет!
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 21.01.2009(UTC)
Сообщений: 182
Откуда: Волгоград
Сказал «Спасибо»: 126 раз Поблагодарили: 36 раз в 22 постах
Открыть в Облаке SMath З.ы. Если не сложно, потом поделись расчетом
З.З.ы В компьютерной версии лист будет правильно отображаться, лайв версия почему то переносы не понимает ...
З.З.З.ы В функции find, в строке result:=( "" ) - возвращается матрица размером 1 на 1, для того, что бы
можно было при помощи функции el(2) или el(3) получить 1 ячейку результата работы функции в любом случае,
если бетон найден, или не найден!
Отредактировано пользователем 27 февраля 2011 г. 22:16:12(UTC)
| Причина: Не указана
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 02.12.2010(UTC)
Сообщений: 93
Сказал «Спасибо»: 311 раз Поблагодарили: 7 раз в 6 постах
Спасибо за помощь. Все работает. Насчет расчета - это всего лишь начало большого расчета. Как будет сделан поделюсь.
Ученье свет!
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 21.05.2009(UTC)
Сообщений: 155
Откуда: Россия, Новочеркасск
Сказал «Спасибо»: 21 раз Поблагодарили: 13 раз в 9 постах
Насколько я понял, выходите из цикла путем жесткого задания велечины переменной цикла? Вроде бы подобные дела всегда не айс считались... Не лучше ли подобные вещи на while крутить?
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 21.01.2009(UTC)
Сообщений: 182
Откуда: Волгоград
Сказал «Спасибо»: 126 раз Поблагодарили: 36 раз в 22 постах
kasper написал: Насколько я понял, выходите из цикла путем жесткого задания велечины переменной цикла? Вроде бы подобные дела всегда не айс считались... Не лучше ли подобные вещи на while крутить?
Можно и с while, просто человек хотел на for сделать...
Отредактировано пользователем 28 февраля 2011 г. 13:21:33(UTC)
| Причина: Не указана
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 02.12.2010(UTC)
Сообщений: 93
Сказал «Спасибо»: 311 раз Поблагодарили: 7 раз в 6 постах
mikka написал: kasper написал: Насколько я понял, выходите из цикла путем жесткого задания велечины переменной цикла? Вроде бы подобные дела всегда не айс считались... Не лучше ли подобные вещи на while крутить?
Можно и с while, просто человек хотел на for сделать...
А как через while? Будет ли проще. Вот выкладываю 2 варианта решения - за первый спасибо mikka.
Ученье свет!
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 21.05.2009(UTC)
Сообщений: 155
Откуда: Россия, Новочеркасск
Сказал «Спасибо»: 21 раз Поблагодарили: 13 раз в 9 постах
Да в принципе на while будет так же, только циклы сменятся... Паскалевская привычка - если неизвестно на какой итерации цикл прекращать, ставь while.
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 02.12.2010(UTC)
Сообщений: 93
Сказал «Спасибо»: 311 раз Поблагодарили: 7 раз в 6 постах
kasper написал: Да в принципе на while будет так же, только циклы сменятся... Паскалевская привычка - если неизвестно на какой итерации цикл прекращать, ставь while.
Ясно. Спасибо.
Ученье свет!
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 02.12.2010(UTC)
Сообщений: 93
Сказал «Спасибо»: 311 раз Поблагодарили: 7 раз в 6 постах
В MathCAD использую break для прерывания цикла в приведенном алгоритме (все считается). В SMath Studio это сделать не получается. Пытался сделать по аналогии с выбором значений характеристик бетона (см. выше) - не вышло. Буду признателен за любую помощь в решении данной проблемы (проблемные места выделены красным)
Ученье свет!
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 21.01.2009(UTC)
Сообщений: 182
Откуда: Волгоград
Сказал «Спасибо»: 126 раз Поблагодарили: 36 раз в 22 постах
Напишите пожалуйста прямо в расчете, что нужно сделать... Можете даже вставить надпись "break" прям в кавычках, туда где должен быть настоящий BREAk
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 02.12.2010(UTC)
Сообщений: 93
Сказал «Спасибо»: 311 раз Поблагодарили: 7 раз в 6 постах
mikka написал: Напишите пожалуйста прямо в расчете, что нужно сделать... Можете даже вставить надпись "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 стоит где нужно в кавычках.
Отредактировано пользователем 8 марта 2011 г. 14:08:32(UTC)
| Причина: Не указана
Ученье свет!
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 21.01.2009(UTC)
Сообщений: 182
Откуда: Волгоград
Сказал «Спасибо»: 126 раз Поблагодарили: 36 раз в 22 постах
Используйте вместо цикла For(3) - цикл FOR(4), а там для выхода манипулируйте переменной цикла или используйте while! Еще заметил такой глюк, что программа почему то не присваивает результат вычисления программного блока переменной с индексами (функция el(3), число присваивает а результат программного блока нет)... Так что лучше сделать просто программный блок, который ничему не присваивается и в конце присваивать переменной N_слоя результат ... З.ы после праздников инет гребет, пишу с телефона, так что подправленный пример пока выложить не могу...
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 02.12.2010(UTC)
Сообщений: 93
Сказал «Спасибо»: 311 раз Поблагодарили: 7 раз в 6 постах
mikka написал: Используйте вместо цикла For(3) - цикл FOR(4), а там для выхода манипулируйте переменной цикла или используйте while! Еще заметил такой глюк, что программа почему то не присваивает результат вычисления программного блока переменной с индексами (функция el(3), число присваивает а результат программного блока нет)... Так что лучше сделать просто программный блок, который ничему не присваивается и в конце присваивать переменной N_слоя результат ... З.ы после праздников инет гребет, пишу с телефона, так что подправленный пример пока выложить не могу...
Спасибо за подсказку на счет того, почему программа не присваивает результат вычисления программного блока переменной с индексами. Кое что подправил также с циклом For(3), но не выходит при значении hd менее толщины первого слоя. см. приложенный файл.
Ученье свет!
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 21.01.2009(UTC)
Сообщений: 182
Откуда: Волгоград
Сказал «Спасибо»: 126 раз Поблагодарили: 36 раз в 22 постах
У Вас в расчете N_слоя_ст=1 а при вычислении <сумма>Подслоя в первой строке условие: |if N_слоя_ст>1 | for i<принадлежит>1..N_слоя_ст-1 | ... |else | "Ошибка" |... |<сумма>N_слоя_ст Все дело в том, что программный блок возвращает результат действия последней своей строчки, в этом случае он возвращает результат действия выражения "<сумма>N_слоя_ст" Поскольку это выражение состоит из одной переменной, он должен вернуть ее значение... Но значение вычислено не было ... Для того, чтобы функции могла вернуть значение "Ошибка" , Вы должны присвоить его переменной, а в последней строке присвоить результату значение этой переменной...
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 02.12.2010(UTC)
Сообщений: 93
Сказал «Спасибо»: 311 раз Поблагодарили: 7 раз в 6 постах
mikka написал: У Вас в расчете N_слоя_ст=1 а при вычислении <сумма>Подслоя в первой строке условие: |if N_слоя_ст>1 | for i<принадлежит>1..N_слоя_ст-1 | ... |else | "Ошибка" |... |<сумма>N_слоя_ст Все дело в том, что программный блок возвращает результат действия последней своей строчки, в этом случае он возвращает результат действия выражения "<сумма>N_слоя_ст" Поскольку это выражение состоит из одной переменной, он должен вернуть ее значение... Но значение вычислено не было ... Для того, чтобы функции могла вернуть значение "Ошибка" , Вы должны присвоить его переменной, а в последней строке присвоить результату значение этой переменной...
Спасибо за подсказку. Вроде как получилось
Ученье свет!
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 02.12.2010(UTC)
Сообщений: 93
Сказал «Спасибо»: 311 раз Поблагодарили: 7 раз в 6 постах
Рано обрадовался. Все таки не выходит при N_слоя.ст=1. Файл прилагаю. Ошибка в вычислении не только N_слоя.ст, но еще и при вычислении суммыПодслоя при N_слоя.ст=1. Если в исходную матрицу вместо значения 1,54 ввести значение больше 2 м, то получим неправильнвй результат. Может как то по другому решить нахождение N_слоя.сб и суммуПодслоя?
Отредактировано пользователем 11 марта 2011 г. 8:11:32(UTC)
| Причина: Не указана
Ученье свет!
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 02.12.2010(UTC)
Сообщений: 93
Сказал «Спасибо»: 311 раз Поблагодарили: 7 раз в 6 постах
trunc - Правда или ложь. Попытался решить проблему через trunc возникла непонятная ситуация "ошибка деления на ноль", хотя там "ноля" и в помине нет.
Ученье свет!
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 21.01.2009(UTC)
Сообщений: 182
Откуда: Волгоград
Сказал «Спасибо»: 126 раз Поблагодарили: 36 раз в 22 постах
genf написал: trunc - Правда или ложь. Попытался решить проблему через trunc возникла непонятная ситуация "ошибка деления на ноль", хотя там "ноля" и в помине нет.
Напиши об этом в ошибках...
И еще по поводу предпоследнего поста - опиши что ты хочешь посчитать, а конкретно:
- исходные данные
- пункты СНиП (ну и номер самого СНиП разумеется)
я покумекаю
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 22.03.2010(UTC)
Сообщений: 223
Откуда: Beer-Sheva
Сказал «Спасибо»: 173 раз Поблагодарили: 256 раз в 133 постах
Чтобы избежать ошибки,используйте "eval": F:=eval(trunc(hd/2))+1
Статус: Advanced Member
Группы: Registered
Зарегистрирован: 02.12.2010(UTC)
Сообщений: 93
Сказал «Спасибо»: 311 раз Поблагодарили: 7 раз в 6 постах
Ber7 написал: Чтобы избежать ошибки,используйте "eval": F:=eval(trunc(hd/2))+1
Спасибо. Все работает!
Ученье свет!
Быстрый переход
Форум проекта SMath
SMath Studio
- Скачать SMath Studio
--- Архив
--- Ночные сборки
- Примеры использования
- Вопросы по использованию
- Предложения
- Ошибки
Математика
- Документы
- Алгоритмы
- Математические задачи
Общение
- О проекте
- Общение
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.