|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
16.02.2013, 14:21 | #1 |
Пользователь
Регистрация: 11.02.2013
Сообщений: 32
|
Правильно построить цикл Repeat-Until
Добрый день, уважаемые форумчане!
В моей программе из массивов Kol, Gar, Rem вычитаются массивы m1 и m2, после этого действия получаются массивы Dm1 и Dm2. После того, как мы получили массивы Dm1 и Dm2, массивам In1 и In2 присваиваются нули и единицы, если выполняется условие "Dm1<Dm2". Ищется ошибка "Е1" - сумма квадратов массивов Dm1 и Dm2. Затем массивы m1 и m2 пересчитываются и снова вычитаются из массивов Kol, Gar, Rem и снова ищется ошибка "Е". Самая первая ошибка "Е1" получается очень большой. А мне нужно, чтобы поиск новых значений массивов m1 и m2 и вычитание из массивов Kol, Gar, Rem массивов m1 и m2 продолжалось до тех пор, пока ошибка "Е" не станет меньше самой первой ошибки "Е1" в тысячу раз. Т.е., при самом первом вычитании из массивов Kol, Gar, Rem массивов m1 и m2 мы получили ошибку "Е1"=272. Вычислили новые значения массивов m1 и m2, отняли эти значения из массивов Kol, Gar, Rem, посчитали массивы Dm1 и Dm2, присвоили массивам In1 и In2 нули и единицы, считаем ошибку "Е". Если не выполняется условие E<E1/1000, то мы снова ищем новые значения массивов m1 и m2, отнимаем, получаем массивы Dm1 и Dm2, присваиваем массивам In1 и In2 нули и единицы, считаем ошибку "Е", и так далее. Это я реализую через цикл Repeat-Until. У меня не получается правильно построить этот цикл, программа зависает (зацикливается). Я думаю, это потому что я вычитаю из массивов Kol, Gar, Rem не новые найденные значения массивов m1 и m2, а старые, полученные в самом начале программы с помощью поиска максимумов и минимумов... Пробовала в Repeat-Until переименовывать массивы m1 и m2 - всё равно зацикливается... В архиве прилагается весь проект, а текст программы не умещается, ограничение до 5000 символов |
16.02.2013, 14:40 | #2 |
Форумчанин
Регистрация: 07.02.2013
Сообщений: 267
|
Не, не то..
Upd. Код:
Upd. 2 Я к тому, что важно знать, ЧТО в массивах.. Мне кажется, что при определенных значениях Ваша "ошибка" может никогда не приблизиться к нулю, а, наоборот, бесконечно возрастать. Там же квадрат.. вот если бы был корень из суммы значений (а лучше из разности), то это было бы похоже на какую-то ошибку.. а так.. не понимаю..
Μολὼν λαβέ
Последний раз редактировалось alexander13; 16.02.2013 в 14:50. |
16.02.2013, 14:51 | #3 |
Пользователь
Регистрация: 11.02.2013
Сообщений: 32
|
alexander13, ошибка Е - это сумма квадратов массивов. Т.е. (Dm1[i])^2+(Dm2[i])^2. Это я получается ещё и ошибку неправильно вычисляю...
|
16.02.2013, 14:55 | #4 | |
Форумчанин
Регистрация: 07.02.2013
Сообщений: 267
|
Цитата:
А по какому методу вычисляется ошибка? Вот если бы там была сумма квадратов элементов,а потом корень из всего.. Не могу сказать точно, что нужно исправить в программе, т.к. нет возможности запустить код... Upd. (Dm1[i])^2+(Dm2[i])^2 - это сумма квадратов i-х элементов массива. Upd. 2 Кстати, у Вас Код:
Если вы хотите найти сумму квадратов всех элементов двух массивов, то как-нибудь так это должно быть: Код:
Μολὼν λαβέ
Последний раз редактировалось alexander13; 16.02.2013 в 15:00. |
|
16.02.2013, 15:03 | #5 |
Пользователь
Регистрация: 11.02.2013
Сообщений: 32
|
alexander13, спасибо за помощь, поиск ошибки я исправлю, но вот дипл.рук-ль сказала, что именно сумма, а не разность... Может она перепутала...
|
16.02.2013, 15:07 | #6 | |
Форумчанин
Регистрация: 07.02.2013
Сообщений: 267
|
Цитата:
В общем, обратите внимание на вычисление E. Я вечером гляну прогу и, если к тому времени еще не разберетесь, отпишусь. Upd. А исходный текст задания имеется?
Μολὼν λαβέ
Последний раз редактировалось alexander13; 16.02.2013 в 15:11. |
|
16.02.2013, 15:13 | #7 |
Пользователь
Регистрация: 11.02.2013
Сообщений: 32
|
alexander13, вся эта байда называется "Алгоритм кластеризации k-means (к-средних)", там просто ёлки-палки-лес густой)) Нахождение суммы квадратов я исправила, но это не подействовало, всё равно зацикливается... Большое Вам спасибо =)
|
16.02.2013, 15:31 | #8 | |
Форумчанин
Регистрация: 07.02.2013
Сообщений: 267
|
Цитата:
Попробуйте последить за переменной E и посмотреть, какие там вообще значения. Upd. На 99% уверен, что ошибка в способе нахождения ошибки. Upd. 2 Потестил программу. В общем, я только сильнее убедился в том, что проблема в способе вычисления ошибки. Что-то тут не так, таким образом ошибки не вычисляются. Возможно, Вы неправильно поняли преподавателя.
Μολὼν λαβέ
Последний раз редактировалось alexander13; 16.02.2013 в 17:25. |
|
17.02.2013, 11:14 | #9 |
Пользователь
Регистрация: 11.02.2013
Сообщений: 32
|
alexander13, могу отскринить лист с заданием, где преподаватель своей рукой написала мне формулу вычисления ошибки)) Может, запарилась к концу рабочего дня и действительно ошиблась, в "свободных источниках" ошибка ищется как
Е= (Dm1[i])^2 - (Dm2[i])^2, т.е. именно вычитание. Сделала так в программе-не помогло всё равно( |
17.02.2013, 11:22 | #10 | |
Форумчанин
Регистрация: 07.02.2013
Сообщений: 267
|
Цитата:
Кстати, а корня там не должно быть? В ошибке-то? =) Upd. Листы с заданием тоже давайте, лишним не будет.
Μολὼν λαβέ
Последний раз редактировалось alexander13; 17.02.2013 в 11:46. |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Цикл repeat until | ac1d_buRn | Помощь студентам | 4 | 06.10.2009 21:55 |
Как правильно построить цикл для выборки? | Tanuska___:) | БД в Delphi | 1 | 12.01.2009 14:50 |
Цикл с предусловием. ( цикл while) Цикл с постусловием. (цикл repeat ... until) | Mr.User | Помощь студентам | 9 | 23.11.2007 01:34 |