Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 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 символов
Вложения
Тип файла: rar k-means1.rar (200.3 Кб, 13 просмотров)
Ягодка вне форума Ответить с цитированием
Старый 16.02.2013, 14:40   #2
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

Не, не то..

Upd.
Код:
E:=sqr(Dm1[i]+Dm2[i]);
Тогда в E будет сумма последних двух элементов массивов. Не понимаю, как вычисляется ошибка.

Upd. 2
Я к тому, что важно знать, ЧТО в массивах.. Мне кажется, что при определенных значениях Ваша "ошибка" может никогда не приблизиться к нулю, а, наоборот, бесконечно возрастать. Там же квадрат.. вот если бы был корень из суммы значений (а лучше из разности), то это было бы похоже на какую-то ошибку.. а так.. не понимаю..
Μολὼν λαβέ

Последний раз редактировалось alexander13; 16.02.2013 в 14:50.
alexander13 вне форума Ответить с цитированием
Старый 16.02.2013, 14:51   #3
Ягодка
Пользователь
 
Аватар для Ягодка
 
Регистрация: 11.02.2013
Сообщений: 32
По умолчанию

alexander13, ошибка Е - это сумма квадратов массивов. Т.е. (Dm1[i])^2+(Dm2[i])^2. Это я получается ещё и ошибку неправильно вычисляю...
Ягодка вне форума Ответить с цитированием
Старый 16.02.2013, 14:55   #4
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

Цитата:
Сообщение от Ягодка Посмотреть сообщение
alexander13, ошибка Е - это сумма квадратов массивов. Т.е. (Dm1[i])^2+(Dm2[i])^2. Это я получается ещё и ошибку неправильно вычисляю...
Само предложение неправильное. Как Вы определяете "квадрат массива"? Это может быть "квадрат суммы элементов массивов" или "сумма квадратов элементов массивов".. но не "сумма квадратов массивов".
А по какому методу вычисляется ошибка? Вот если бы там была сумма квадратов элементов,а потом корень из всего..

Не могу сказать точно, что нужно исправить в программе, т.к. нет возможности запустить код...

Upd.
(Dm1[i])^2+(Dm2[i])^2 - это сумма квадратов i-х элементов массива.

Upd. 2
Кстати, у Вас
Код:
E:=sqr(Dm1[i]+Dm2[i]);
что никак не равно (Dm1[i])^2+(Dm2[i])^2, если вспомнить школьную математику.
Если вы хотите найти сумму квадратов всех элементов двух массивов, то как-нибудь так это должно быть:
Код:
E:=E+Dm1[i]*Dm1[i]+Dm2[i]*Dm2[i];
Естественно, надо следить, чтобы перед началом цикла E равнялось нулю.
Μολὼν λαβέ

Последний раз редактировалось alexander13; 16.02.2013 в 15:00.
alexander13 вне форума Ответить с цитированием
Старый 16.02.2013, 15:03   #5
Ягодка
Пользователь
 
Аватар для Ягодка
 
Регистрация: 11.02.2013
Сообщений: 32
По умолчанию

alexander13, спасибо за помощь, поиск ошибки я исправлю, но вот дипл.рук-ль сказала, что именно сумма, а не разность... Может она перепутала...
Ягодка вне форума Ответить с цитированием
Старый 16.02.2013, 15:07   #6
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

Цитата:
Сообщение от Ягодка Посмотреть сообщение
alexander13, спасибо за помощь, поиск ошибки я исправлю, но вот дипл.рук-ль сказала, что именно сумма, а не разность... Может она перепутала...
Может и сумма, я просто хочу узнать, что это за метод вычисления ошибки) Или это просто называется "ошибкой", а на самом деле ей не является?
В общем, обратите внимание на вычисление E.
Я вечером гляну прогу и, если к тому времени еще не разберетесь, отпишусь.

Upd.
А исходный текст задания имеется?
Μολὼν λαβέ

Последний раз редактировалось alexander13; 16.02.2013 в 15:11.
alexander13 вне форума Ответить с цитированием
Старый 16.02.2013, 15:13   #7
Ягодка
Пользователь
 
Аватар для Ягодка
 
Регистрация: 11.02.2013
Сообщений: 32
По умолчанию

alexander13, вся эта байда называется "Алгоритм кластеризации k-means (к-средних)", там просто ёлки-палки-лес густой)) Нахождение суммы квадратов я исправила, но это не подействовало, всё равно зацикливается... Большое Вам спасибо =)
Ягодка вне форума Ответить с цитированием
Старый 16.02.2013, 15:31   #8
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

Цитата:
Сообщение от Ягодка Посмотреть сообщение
alexander13, вся эта байда называется "Алгоритм кластеризации k-means (к-средних)", там просто ёлки-палки-лес густой))
Понятно. Но насчет ошибки - все равно непонятно... Я что-то не помню, чтобы в k-means ошибка так вычислялась..
Попробуйте последить за переменной E и посмотреть, какие там вообще значения.

Upd.
На 99% уверен, что ошибка в способе нахождения ошибки.

Upd. 2
Потестил программу.
В общем, я только сильнее убедился в том, что проблема в способе вычисления ошибки. Что-то тут не так, таким образом ошибки не вычисляются. Возможно, Вы неправильно поняли преподавателя.
Μολὼν λαβέ

Последний раз редактировалось alexander13; 16.02.2013 в 17:25.
alexander13 вне форума Ответить с цитированием
Старый 17.02.2013, 11:14   #9
Ягодка
Пользователь
 
Аватар для Ягодка
 
Регистрация: 11.02.2013
Сообщений: 32
По умолчанию

alexander13, могу отскринить лист с заданием, где преподаватель своей рукой написала мне формулу вычисления ошибки)) Может, запарилась к концу рабочего дня и действительно ошиблась, в "свободных источниках" ошибка ищется как
Е= (Dm1[i])^2 - (Dm2[i])^2, т.е. именно вычитание. Сделала так в программе-не помогло всё равно(
Ягодка вне форума Ответить с цитированием
Старый 17.02.2013, 11:22   #10
alexander13
Форумчанин
 
Аватар для alexander13
 
Регистрация: 07.02.2013
Сообщений: 267
По умолчанию

Цитата:
Сообщение от Ягодка Посмотреть сообщение
alexander13 ошибка ищется как
Е= (Dm1[i])^2 - (Dm2[i])^2, т.е. именно вычитание.
Вот! А я о чем.. теперь надо смотреть дальше, вполне могут быть и другие неточности в коде. Опять же, не раньше вечера смогу посмотреть. Вы скиньте какой-нибудь набор входных данных что ли.. А-то без них тяжело тестить.
Кстати, а корня там не должно быть? В ошибке-то? =)

Upd.
Листы с заданием тоже давайте, лишним не будет.
Μολὼν λαβέ

Последний раз редактировалось alexander13; 17.02.2013 в 11:46.
alexander13 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Цикл 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