Русскоязычный форум закрыт из-за отсутствия активности (доступен только для чтения).
Пожалуйста, пользуйтесь англоязычной его версией. Приносим извинения за неудобства
Добро пожаловать, Гость! Чтобы использовать все возможности Вход. Новые регистрации запрещены.

Уведомление

Icon
Error

Вход


2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline genf  
#1 Оставлено : 27 февраля 2011 г. 21:13:01(UTC)
genf


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 02.12.2010(UTC)
Сообщений: 93
Мужчина
Российская Федерация

Сказал «Спасибо»: 311 раз
Поблагодарили: 7 раз в 6 постах
Возникла необходимость в прерывании цикла. В MathCAD использую break. Как же в SMath Studio это сделать? Или существует другой подход к решению проблемы. Есть матрица, в которой каждой из строк соответствуют некие значения. Цель заключается в определении номера строки по заданному условию. Файл прилагается.
Вложение(я):
Цикл.rar (2kb) загружен 26 раз(а).
Ученье свет!

Wanna join the discussion?! Login to your Форум проекта SMath forum account. Новые регистрации запрещены.

Offline mikka  
#2 Оставлено : 27 февраля 2011 г. 22:08:53(UTC)
mikka


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 21.01.2009(UTC)
Сообщений: 182
Мужчина
Откуда: Волгоград

Сказал «Спасибо»: 126 раз
Поблагодарили: 36 раз в 22 постах
Открыть в Облаке SMath
З.ы. Если не сложно, потом поделись расчетом Wink
З.З.ы В компьютерной версии лист будет правильно отображаться, лайв версия почему то переносы не понимает ...
З.З.З.ы В функции find, в строке result:=( "" ) - возвращается матрица размером 1 на 1, для того, что бы
можно было при помощи функции el(2) или el(3) получить 1 ячейку результата работы функции в любом случае,
если бетон найден, или не найден!

Отредактировано пользователем 27 февраля 2011 г. 22:16:12(UTC)  | Причина: Не указана

Не официальный справочник http://sites.google.com/site/mikkhalichlab/
jabber конференция smath@conference.jabber.ru
Offline genf  
#3 Оставлено : 27 февраля 2011 г. 23:23:13(UTC)
genf


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 02.12.2010(UTC)
Сообщений: 93
Мужчина
Российская Федерация

Сказал «Спасибо»: 311 раз
Поблагодарили: 7 раз в 6 постах
Спасибо за помощь. Все работает. Насчет расчета - это всего лишь начало большого расчета. Как будет сделан поделюсь.
Ученье свет!
Offline kasper  
#4 Оставлено : 28 февраля 2011 г. 12:58:45(UTC)
kasper


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 21.05.2009(UTC)
Сообщений: 155
Мужчина
Российская Федерация
Откуда: Россия, Новочеркасск

Сказал «Спасибо»: 21 раз
Поблагодарили: 13 раз в 9 постах
Насколько я понял, выходите из цикла путем жесткого задания велечины переменной цикла? Вроде бы подобные дела всегда не айс считались... Не лучше ли подобные вещи на while крутить?
Offline mikka  
#5 Оставлено : 28 февраля 2011 г. 13:15:29(UTC)
mikka


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 21.01.2009(UTC)
Сообщений: 182
Мужчина
Откуда: Волгоград

Сказал «Спасибо»: 126 раз
Поблагодарили: 36 раз в 22 постах
kasper написал:
Насколько я понял, выходите из цикла путем жесткого задания велечины переменной цикла? Вроде бы подобные дела всегда не айс считались... Не лучше ли подобные вещи на while крутить?

Можно и с while, просто человек хотел на for сделать...

Отредактировано пользователем 28 февраля 2011 г. 13:21:33(UTC)  | Причина: Не указана

Не официальный справочник http://sites.google.com/site/mikkhalichlab/
jabber конференция smath@conference.jabber.ru
Offline genf  
#6 Оставлено : 28 февраля 2011 г. 17:25:50(UTC)
genf


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 02.12.2010(UTC)
Сообщений: 93
Мужчина
Российская Федерация

Сказал «Спасибо»: 311 раз
Поблагодарили: 7 раз в 6 постах
mikka написал:
kasper написал:
Насколько я понял, выходите из цикла путем жесткого задания велечины переменной цикла? Вроде бы подобные дела всегда не айс считались... Не лучше ли подобные вещи на while крутить?

Можно и с while, просто человек хотел на for сделать...

А как через while? Будет ли проще. Вот выкладываю 2 варианта решения - за первый спасибо mikka.
Вложение(я):
Циклы.rar (4kb) загружен 26 раз(а).
Ученье свет!
Offline kasper  
#7 Оставлено : 1 марта 2011 г. 15:17:27(UTC)
kasper


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 21.05.2009(UTC)
Сообщений: 155
Мужчина
Российская Федерация
Откуда: Россия, Новочеркасск

Сказал «Спасибо»: 21 раз
Поблагодарили: 13 раз в 9 постах
Да в принципе на while будет так же, только циклы сменятся... Паскалевская привычка - если неизвестно на какой итерации цикл прекращать, ставь while.
Offline genf  
#8 Оставлено : 1 марта 2011 г. 15:28:31(UTC)
genf


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 02.12.2010(UTC)
Сообщений: 93
Мужчина
Российская Федерация

Сказал «Спасибо»: 311 раз
Поблагодарили: 7 раз в 6 постах
kasper написал:
Да в принципе на while будет так же, только циклы сменятся... Паскалевская привычка - если неизвестно на какой итерации цикл прекращать, ставь while.

Ясно. Спасибо.
Ученье свет!
Offline genf  
#9 Оставлено : 7 марта 2011 г. 22:14:12(UTC)
genf


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 02.12.2010(UTC)
Сообщений: 93
Мужчина
Российская Федерация

Сказал «Спасибо»: 311 раз
Поблагодарили: 7 раз в 6 постах
В MathCAD использую break для прерывания цикла в приведенном алгоритме (все считается). В SMath Studio это сделать не получается. Пытался сделать по аналогии с выбором значений характеристик бетона (см. выше) - не вышло. Буду признателен за любую помощь в решении данной проблемы (проблемные места выделены красным)
Вложение(я):
Перерасчет_L_по_п.12.4.rar (54kb) загружен 17 раз(а).
Ученье свет!
Offline mikka  
#10 Оставлено : 8 марта 2011 г. 10:12:52(UTC)
mikka


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 21.01.2009(UTC)
Сообщений: 182
Мужчина
Откуда: Волгоград

Сказал «Спасибо»: 126 раз
Поблагодарили: 36 раз в 22 постах
Напишите пожалуйста прямо в расчете, что нужно сделать... Можете даже вставить надпись "break" прям в кавычках, туда где должен быть настоящий BREAk
Не официальный справочник http://sites.google.com/site/mikkhalichlab/
jabber конференция smath@conference.jabber.ru
Offline genf  
#11 Оставлено : 8 марта 2011 г. 13:57:48(UTC)
genf


Статус: 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)  | Причина: Не указана

Вложение(я):
Перерасчет_L_по_п.12.4_1.rar (2kb) загружен 18 раз(а).
Ученье свет!
Offline mikka  
#12 Оставлено : 9 марта 2011 г. 9:43:41(UTC)
mikka


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 21.01.2009(UTC)
Сообщений: 182
Мужчина
Откуда: Волгоград

Сказал «Спасибо»: 126 раз
Поблагодарили: 36 раз в 22 постах
Используйте вместо цикла For(3) - цикл FOR(4), а там для выхода манипулируйте переменной цикла или используйте while!

Еще заметил такой глюк, что программа почему то не присваивает результат вычисления программного блока переменной с индексами (функция el(3), число присваивает а результат программного блока нет)...
Так что лучше сделать просто программный блок, который ничему не присваивается и в конце присваивать переменной N_слоя результат ...

З.ы после праздников инет гребет, пишу с телефона, так что подправленный пример пока выложить не могу...
Не официальный справочник http://sites.google.com/site/mikkhalichlab/
jabber конференция smath@conference.jabber.ru
Offline genf  
#13 Оставлено : 9 марта 2011 г. 22:49:24(UTC)
genf


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 02.12.2010(UTC)
Сообщений: 93
Мужчина
Российская Федерация

Сказал «Спасибо»: 311 раз
Поблагодарили: 7 раз в 6 постах
mikka написал:
Используйте вместо цикла For(3) - цикл FOR(4), а там для выхода манипулируйте переменной цикла или используйте while!

Еще заметил такой глюк, что программа почему то не присваивает результат вычисления программного блока переменной с индексами (функция el(3), число присваивает а результат программного блока нет)...
Так что лучше сделать просто программный блок, который ничему не присваивается и в конце присваивать переменной N_слоя результат ...

З.ы после праздников инет гребет, пишу с телефона, так что подправленный пример пока выложить не могу...


Спасибо за подсказку на счет того, почему программа не присваивает результат вычисления программного блока переменной с индексами. Кое что подправил также с циклом For(3), но не выходит при значении hd менее толщины первого слоя. см. приложенный файл.
Вложение(я):
Перерасчет_L_по_п.12.4 (1).rar (2kb) загружен 15 раз(а).
Ученье свет!
Offline mikka  
#14 Оставлено : 10 марта 2011 г. 8:40:11(UTC)
mikka


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 21.01.2009(UTC)
Сообщений: 182
Мужчина
Откуда: Волгоград

Сказал «Спасибо»: 126 раз
Поблагодарили: 36 раз в 22 постах
У Вас в расчете N_слоя_ст=1
а при вычислении <сумма>Подслоя в первой строке условие:

|if N_слоя_ст>1
| for i<принадлежит>1..N_слоя_ст-1
| ...
|else
| "Ошибка"
|...
|<сумма>N_слоя_ст

Все дело в том, что программный блок возвращает результат действия последней своей строчки,
в этом случае он возвращает результат действия выражения "<сумма>N_слоя_ст"
Поскольку это выражение состоит из одной переменной, он должен вернуть ее значение...
Но значение вычислено не было ...

Для того, чтобы функции могла вернуть значение "Ошибка" , Вы должны присвоить его переменной, а в последней строке присвоить результату значение этой переменной...
Не официальный справочник http://sites.google.com/site/mikkhalichlab/
jabber конференция smath@conference.jabber.ru
Offline genf  
#15 Оставлено : 10 марта 2011 г. 22:43:17(UTC)
genf


Статус: 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_слоя_ст"
Поскольку это выражение состоит из одной переменной, он должен вернуть ее значение...
Но значение вычислено не было ...

Для того, чтобы функции могла вернуть значение "Ошибка" , Вы должны присвоить его переменной, а в последней строке присвоить результату значение этой переменной...


Спасибо за подсказку. Вроде как получилось
Ученье свет!
Offline genf  
#16 Оставлено : 10 марта 2011 г. 23:06:40(UTC)
genf


Статус: 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)  | Причина: Не указана

Вложение(я):
Перерасчет_L_по_п.12.4 (2).rar (2kb) загружен 18 раз(а).
Ученье свет!
Offline genf  
#17 Оставлено : 11 марта 2011 г. 9:06:23(UTC)
genf


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 02.12.2010(UTC)
Сообщений: 93
Мужчина
Российская Федерация

Сказал «Спасибо»: 311 раз
Поблагодарили: 7 раз в 6 постах
trunc - Правда или ложь. Попытался решить проблему через trunc возникла непонятная ситуация "ошибка деления на ноль", хотя там "ноля" и в помине нет.
Вложение(я):
trunc.rar (1kb) загружен 23 раз(а).
Ученье свет!
Offline mikka  
#18 Оставлено : 11 марта 2011 г. 10:29:19(UTC)
mikka


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 21.01.2009(UTC)
Сообщений: 182
Мужчина
Откуда: Волгоград

Сказал «Спасибо»: 126 раз
Поблагодарили: 36 раз в 22 постах
genf написал:
trunc - Правда или ложь. Попытался решить проблему через trunc возникла непонятная ситуация "ошибка деления на ноль", хотя там "ноля" и в помине нет.

Напиши об этом в ошибках...

И еще по поводу предпоследнего поста - опиши что ты хочешь посчитать, а конкретно:
- исходные данные
- пункты СНиП (ну и номер самого СНиП разумеется)

я покумекаю Wink
Не официальный справочник http://sites.google.com/site/mikkhalichlab/
jabber конференция smath@conference.jabber.ru
Offline Ber7  
#19 Оставлено : 11 марта 2011 г. 16:56:56(UTC)
Ber7


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 22.03.2010(UTC)
Сообщений: 223
Мужчина
Израиль
Откуда: Beer-Sheva

Сказал «Спасибо»: 173 раз
Поблагодарили: 256 раз в 133 постах
Чтобы избежать ошибки,используйте "eval":

F:=eval(trunc(hd/2))+1
Метод расчета рычажных механизмов :
http://www.exponenta.ru/...litskiy-ivanov/index.asp
Offline genf  
#20 Оставлено : 11 марта 2011 г. 17:09:52(UTC)
genf


Статус: Advanced Member

Группы: Registered
Зарегистрирован: 02.12.2010(UTC)
Сообщений: 93
Мужчина
Российская Федерация

Сказал «Спасибо»: 311 раз
Поблагодарили: 7 раз в 6 постах
Ber7 написал:
Чтобы избежать ошибки,используйте "eval":

F:=eval(trunc(hd/2))+1

Спасибо. Все работает!
Ученье свет!
Пользователи, просматривающие эту тему
Guest
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.