Как прервать цикл?

Как прервать цикл? - Сообщения

#1 Опубликовано: 27.02.2011 15:13:01
Serg

Serg

7 сообщений из 105 понравились пользователям.

Группа: Moderator

Возникла необходимость в прерывании цикла. В MathCAD использую break. Как же в SMath Studio это сделать? Или существует другой подход к решению проблемы. Есть матрица, в которой каждой из строк соответствуют некие значения. Цель заключается в определении номера строки по заданному условию. Файл прилагается.
Цикл.rar (1 КиБ) скачан 30 раз(а).
Ученье свет!
#2 Опубликовано: 27.02.2011 16:08:53
Mikka

Mikka

36 сообщений из 206 понравились пользователям.

Группа: User

[LIVE width=1290 height=874]http://smath.info/live/?file=2419[/LIVE]
З.ы. Если не сложно, потом поделись расчетом
З.З.ы В компьютерной версии лист будет правильно отображаться, лайв версия почему то переносы не понимает ...
З.З.З.ы В функции find, в строке result:=( "" ) - возвращается матрица размером 1 на 1, для того, что бы
можно было при помощи функции el(2) или el(3) получить 1 ячейку результата работы функции в любом случае,
если бетон найден, или не найден!
Не официальный справочник http://sites.google.com/site/mikkhalichlab/ jabber конференция smath@conference.jabber.ru
#3 Опубликовано: 27.02.2011 17:23:13
Serg

Serg

7 сообщений из 105 понравились пользователям.

Группа: Moderator

Спасибо за помощь. Все работает. Насчет расчета - это всего лишь начало большого расчета. Как будет сделан поделюсь.
Ученье свет!
#4 Опубликовано: 28.02.2011 06:58:45
Медведев Виктор

Медведев Виктор

13 сообщений из 157 понравились пользователям.

Группа: User

Насколько я понял, выходите из цикла путем жесткого задания велечины переменной цикла? Вроде бы подобные дела всегда не айс считались... Не лучше ли подобные вещи на while крутить?
#5 Опубликовано: 28.02.2011 07:15:29
Mikka

Mikka

36 сообщений из 206 понравились пользователям.

Группа: User

Wrote

Насколько я понял, выходите из цикла путем жесткого задания велечины переменной цикла? Вроде бы подобные дела всегда не айс считались... Не лучше ли подобные вещи на while крутить?


Можно и с while, просто человек хотел на for сделать...
Не официальный справочник http://sites.google.com/site/mikkhalichlab/ jabber конференция smath@conference.jabber.ru
#6 Опубликовано: 28.02.2011 11:25:50
Serg

Serg

7 сообщений из 105 понравились пользователям.

Группа: Moderator

Wrote

Wrote

Насколько я понял, выходите из цикла путем жесткого задания велечины переменной цикла? Вроде бы подобные дела всегда не айс считались... Не лучше ли подобные вещи на while крутить?


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


А как через while? Будет ли проще. Вот выкладываю 2 варианта решения - за первый спасибо mikka.
Циклы.rar (3 КиБ) скачан 32 раз(а).
Ученье свет!
#7 Опубликовано: 01.03.2011 09:17:27
Медведев Виктор

Медведев Виктор

13 сообщений из 157 понравились пользователям.

Группа: User

Да в принципе на while будет так же, только циклы сменятся... Паскалевская привычка - если неизвестно на какой итерации цикл прекращать, ставь while.
#8 Опубликовано: 01.03.2011 09:28:31
Serg

Serg

7 сообщений из 105 понравились пользователям.

Группа: Moderator

Wrote

Да в принципе на while будет так же, только циклы сменятся... Паскалевская привычка - если неизвестно на какой итерации цикл прекращать, ставь while.


Ясно. Спасибо.
Ученье свет!
#9 Опубликовано: 07.03.2011 16:14:12
Serg

Serg

7 сообщений из 105 понравились пользователям.

Группа: Moderator

В MathCAD использую break для прерывания цикла в приведенном алгоритме (все считается). В SMath Studio это сделать не получается. Пытался сделать по аналогии с выбором значений характеристик бетона (см. выше) - не вышло. Буду признателен за любую помощь в решении данной проблемы (проблемные места выделены красным)
Перерасчет_L_по_п.12.4.rar (53 КиБ) скачан 23 раз(а).
Ученье свет!
#10 Опубликовано: 08.03.2011 04:12:52
Mikka

Mikka

36 сообщений из 206 понравились пользователям.

Группа: User

Напишите пожалуйста прямо в расчете, что нужно сделать... Можете даже вставить надпись "break" прям в кавычках, туда где должен быть настоящий BREAk
Не официальный справочник http://sites.google.com/site/mikkhalichlab/ jabber конференция smath@conference.jabber.ru
#11 Опубликовано: 08.03.2011 07:57:48
Serg

Serg

7 сообщений из 105 понравились пользователям.

Группа: Moderator

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 раз(а).
Ученье свет!
#12 Опубликовано: 09.03.2011 03:43:41
Mikka

Mikka

36 сообщений из 206 понравились пользователям.

Группа: User

Используйте вместо цикла For(3) - цикл FOR(4), а там для выхода манипулируйте переменной цикла или используйте while!

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

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

Serg

7 сообщений из 105 понравились пользователям.

Группа: Moderator

Wrote

Используйте вместо цикла For(3) - цикл FOR(4), а там для выхода манипулируйте переменной цикла или используйте while!

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

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



Спасибо за подсказку на счет того, почему программа не присваивает результат вычисления программного блока переменной с индексами. Кое что подправил также с циклом For(3), но не выходит при значении hd менее толщины первого слоя. см. приложенный файл.
Перерасчет_L_по_п.12.4 (1).rar (1 КиБ) скачан 21 раз(а).
Ученье свет!
#14 Опубликовано: 10.03.2011 02:40:11
Mikka

Mikka

36 сообщений из 206 понравились пользователям.

Группа: User

У Вас в расчете N_слоя_ст=1
а при вычислении <сумма>Подслоя в первой строке условие:

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

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

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

Serg

7 сообщений из 105 понравились пользователям.

Группа: Moderator

Wrote

У Вас в расчете N_слоя_ст=1
а при вычислении <сумма>Подслоя в первой строке условие:

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

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

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



Спасибо за подсказку. Вроде как получилось
Ученье свет!
#16 Опубликовано: 10.03.2011 17:06:40
Serg

Serg

7 сообщений из 105 понравились пользователям.

Группа: Moderator

Рано обрадовался. Все таки не выходит при N_слоя.ст=1. Файл прилагаю. Ошибка в вычислении не только N_слоя.ст, но еще и при вычислении суммыПодслоя при N_слоя.ст=1. Если в исходную матрицу вместо значения 1,54 ввести значение больше 2 м, то получим неправильнвй результат. Может как то по другому решить нахождение N_слоя.сб и суммуПодслоя?
Перерасчет_L_по_п.12.4 (2).rar (1 КиБ) скачан 24 раз(а).
Ученье свет!
#17 Опубликовано: 11.03.2011 03:06:23
Serg

Serg

7 сообщений из 105 понравились пользователям.

Группа: Moderator

trunc - Правда или ложь. Попытался решить проблему через trunc возникла непонятная ситуация "ошибка деления на ноль", хотя там "ноля" и в помине нет.
trunc.rar (759 Б) скачан 47 раз(а).
Ученье свет!
#18 Опубликовано: 11.03.2011 04:29:19
Mikka

Mikka

36 сообщений из 206 понравились пользователям.

Группа: User

Wrote

trunc - Правда или ложь. Попытался решить проблему через trunc возникла непонятная ситуация "ошибка деления на ноль", хотя там "ноля" и в помине нет.


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

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

я покумекаю
Не официальный справочник http://sites.google.com/site/mikkhalichlab/ jabber конференция smath@conference.jabber.ru
#19 Опубликовано: 11.03.2011 10:56:56
Fridel Selitsky

Fridel Selitsky

256 сообщений из 225 понравились пользователям.

Группа: Moderator

Чтобы избежать ошибки,используйте "eval":

F:=eval(trunc(hd/2))+1
Метод расчета рычажных механизмов : http://www.exponenta.ru/educat/systemat/selitskiy-ivanov/index.asp
#20 Опубликовано: 11.03.2011 11:09:52
Serg

Serg

7 сообщений из 105 понравились пользователям.

Группа: Moderator

Wrote

Чтобы избежать ошибки,используйте "eval":

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


Спасибо. Все работает!
Ученье свет!
  • Новые сообщения Новые сообщения
  • Нет новых сообщений Нет новых сообщений