Как раз это и нужно сделать, не всю прогу а только функцию разделения на множители и нахождение наибольшего общего делителя. То что я красным выделил. Вывод массивов для наглядности в асме можно выкинутьAlexeyslav писал(а):
А в общем, не так все плохо... на ассемблере надо реализовать сам алгоритм - чтобы не парится с вводом-выводом, этот алгоритм можно вставить в паскалевскую оболочку как процедуру сделанную полностью INLINE на ассемблере.
Паскаль в Ассемблер
- Реклама
Не помощи ты просишь, а чтобы за тебя сделали. Это разные вещи. Вдруг прокатит. А тут желающих делать за кого-то контрольные, курсовые или дипломы не много.Andrew-77 писал(а):Балаболов много, а дела мало. Это не курсовая, всего лишь половина небольшой контрольной, я просто по времени не успеваю разобраться в этом полность, потому и прошу помощи.
Да не "в лом", можно и помочь, не жалко, просто настроение что то неважное..
Я тут "выкопал" с дальней полки учебник "ФОРТ", но там этой программы нема.. Значит в другом учебнике - точно помню, что на форте был пример. Зато в этом оказался учебный пример программы - "генератор бессмысленных сообщений"
"Прикольно"- выдаёт нечто вроде : "В ДАННОМ СООБЩЕНИИ МЫ РАССКАЖЕМ ВАМ О ТОМ ЧТО ВКЛАДЫВАЯ ИМЕЮЩИЕСЯ В НАЛИЧИИ СРЕДСТВА В ИНТЕГРИРОВАННЫЙ ЦИФРОВОЙ КОМПЛЕКС ПРИМЕНЯЯ АВТОНОМНЫЙ КУЛЬТУРНЫЙ ПРОДУКТ ПРЕДСТАВЛЯЕТСЯ ВОЗМОЖНЫМ ДАЖЕ НЕСМОТРЯ НА КВАЛИФИЦИРОВАННЫЙ ЦИФРОВОЙ ПРОЕКТ ЕЩЁ БОЛЬШЕ УКРЕПИТЬ УНИКАЛЬНЫЙ ПРОГРАММНЫЙ ОБЪЁМ". ну и т.д.
Ещё пошукаю. Если найду - выложу.
Ещё можно в WWW попробовать запрос "оптимальный алгоритм нахождения н.о.д." Пока нашлось вот это :
Не ассемблер, конечно, зато для 6 класса даже подходит..
Попробовал ещё, и не ya.ru , а google и запрос на аглицком..
На запрос "greatest common divisor algorythm"- уже лучше - выдаёт меньше всякой шелухи и даже несколько текстов на "C".
Вот из википедии - пожалуйста :
Я тут "выкопал" с дальней полки учебник "ФОРТ", но там этой программы нема.. Значит в другом учебнике - точно помню, что на форте был пример. Зато в этом оказался учебный пример программы - "генератор бессмысленных сообщений"
Ещё пошукаю. Если найду - выложу.
Ещё можно в WWW попробовать запрос "оптимальный алгоритм нахождения н.о.д." Пока нашлось вот это :
Спойлер
Методы нахождения НОД и НОК чисел
/фио/
/фио/
МОУ СОШ № x
6б класс
Руководитель
/фио/
В школьном курсе математики нахождение наибольшего общего делителя (НОД), наименьшего общего кратного (НОК), наименьшего общего знаменателя и дополнительных множителей для дробей предлагается через разложение чисел на простые множители. Это связано с большим количеством однообразных механических вычислений.
Быстрое нахождение НОД и НОК чисел необходимо в дальнейшем для нахождения наименьшего общего знаменателя и дополнительных множителей для дробей при сравнении, сложении и вычитании дробей с разными знаменателями.
Цель работы: рассмотреть и оценить все методы нахождения НОД, НОК чисел. С учетом их эффективности, простоты в использовании разработать алгоритм нахождения НОД и НОК для двух и более чисел. Он позволит сделать оптимальный выбор метода.
Зачастую элементарный анализ исходных чисел может привести к быстрому нахождению НОД, НОК этих чисел без разложения на простые множители. С этой целью в работе рассмотрены частные случаи нахождения НОД и НОК чисел, когда исходные числа взаимно простые или когда одно из них кратно другому.
Попытка заменить разложение чисел на простые множители менее затратной процедурой привела к созданию метода одновременного деления. Разложение на множители в этом методе также необходимо, только множители не обязательно должны быть простыми, но обязательно общими. В этом случае количество действий значительно уменьшается, тем самым упрощается нахождение НОД и НОК чисел.
Каждый из предложенных в работе методов имеет свои ограничения, поэтому невозможно обойтись каким-то одним.
Рассмотренные в работе методы нахождения НОД и НОК чисел как частные (для взаимно простых чисел или кратных чисел), так и метод одновременного деления требуют меньшего количества вычислений и просты в применении. Они могут быть использованы в первую очередь для нахождения НОД и НОК двух и более чисел. Они удобны и для нахождения дополнительных множителей при приведении дробей к общему знаменателю. Основным результатом работы можно считать создание алгоритма для оптимально быстрого нахождения НОД и НОК чисел.
Алгоритм нахождения НОД и НОК чисел.
1 шаг. Если числа а, b взаимно простые, то
НОД(а, b) = 1, НОК(а, b) = а?b
2 шаг. Если число а кратно b, то
НОД(а, b) = b, НОК(а, b) = а
3 шаг. Использовать метод одновременного деления.
Одновременное разложение чисел на одинаковые множители до получения взаимно простых чисел.
Для нахождения НОД нужно найти произведение одинаковых множителей.
Для нахождения НОК нужно одно из исходных чисел умножить на оставшееся число в разложении другого числа.
4 шаг. Использовать разложение на простые множители для нахождения НОК для количества чисел более двух.
Попробовал ещё, и не ya.ru , а google и запрос на аглицком..
На запрос "greatest common divisor algorythm"- уже лучше - выдаёт меньше всякой шелухи и даже несколько текстов на "C".
Вот из википедии - пожалуйста :
А что сам T.S. ничего не нашёл ещё разве ?Iterative version in C++ using ctz (count trailing zeros)
Using a count trailing zeros (CTZ) function can improve the performance of the binary gcd algorithm. A randomly distributed number has an exponentially declining distribution of trailing zeros: 0.50 have no trailing zeros, 0.25 have 1 trailing zeros, 0.125 have 2 trailing zeros, 0.0625 have 3 trailing zeros, .... Iterations are only saved if there are two or more trailing zeros, so the expected number of saved iterations is not large. Although there are occasions where counting trailing zeros can gain a lot in one step, big gains would not be expected unless the numbers had unusual properties.
// ctz(x) counts trailing zeros in x
unsigned int gcd(unsigned int x, unsigned int y)
{
if (x == 0)
return y;
if (y == 0)
return x;
unsigned int cf2 = ctz(x | y);
x >>= ctz(x);
for (;;)
{
y >>= ctz(y);
if (x == y)
break;
if (x > y)
std::swap(x, y);
if (x == 1)
break;
y -= x;
}
return x << cf2;
}
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
Спасибо тем кто не ослеп в собственном величии и важности то есть хоть чем то попытался помочь. Кое что помогло разобраться с массивами в ассемблере (petrenko). В общем разобрался сам, все сделал, хоть и после сессии, буду просить о дополнительном времени чтобы сдать экзамен.
Для petrenko: алгоритм Евклида это самое простое для нахождения НОД, но в задаче сказано разложить два числа на множители, а уже из ник сделать НОД, то есть перемножить однократно совпадающие. Загвоздка была в выборке из массивов именно однократно повторяющихся. Но успешно решено. Респект
Для petrenko: алгоритм Евклида это самое простое для нахождения НОД, но в задаче сказано разложить два числа на множители, а уже из ник сделать НОД, то есть перемножить однократно совпадающие. Загвоздка была в выборке из массивов именно однократно повторяющихся. Но успешно решено. Респект
Здорово !
За Вас можно порадоваться, так держать.
Только Паскаль ( он - не забывайте - только для обучения ! ) для серьёзного программирования не подходит.
Чтобы переходить "плавно", без "переламывания" советую перейти на язык "Модула-2" того же товарища Вирта - тоже учебный, но убраны многие "неправильности" Паскаля.
Для развития мышления и создания близких к маш.коду-ассемблеру по эффективности и компактности программ хорошо изучить язык Форт .
А для перспективы взгляните на Эрланг ..
Удачи !
За Вас можно порадоваться, так держать.
Только Паскаль ( он - не забывайте - только для обучения ! ) для серьёзного программирования не подходит.
Чтобы переходить "плавно", без "переламывания" советую перейти на язык "Модула-2" того же товарища Вирта - тоже учебный, но убраны многие "неправильности" Паскаля.
Для развития мышления и создания близких к маш.коду-ассемблеру по эффективности и компактности программ хорошо изучить язык Форт .
А для перспективы взгляните на Эрланг ..
Удачи !
< виртуальная "кнопочка" >--( WWW ) <- Убедительная просьба интересующимся старыми компьютерами типа РК86 - не пишите в теме в барахолке, пишите Ваши вопросы в ( лс ) пожалуйста
- Реклама
я пишу на С(и верхний(иногда делфи), и нижний), паскаль давнее прошлое, только из-за задания, а ассеблер так редко использовал, что практически каждую работу которую нужно было сделать, как с нуля(учебники, справочники). по сути какая разница какой язык, база все равно алгоритм, но вот синтаксис у каждого свой и помнить все языки не реально
- Сообщения: 3761
- Зарегистрирован: Чт янв 26, 2012 14:44:34
Ну да. А, например, Skype и Altium Designer конечно же не в счет.petrenko писал(а):Только Паскаль ... для серьёзного программирования не подходит.
Like the eyes of a cat in the black and blue...
- Сообщения: 30
- Зарегистрирован: Пт июл 27, 2012 22:51:52
- Сообщения: 3761
- Зарегистрирован: Чт янв 26, 2012 14:44:34
- Сообщения: 30
- Зарегистрирован: Пт июл 27, 2012 22:51:52
Эх, хорошую тему прозевал:)
Можно было очень просто сделать, пишем на Делфи а потом Ctrl-F7 и видим код на ассемблере.
PS: из-за конвейеров и выравнивания в новых процессорах, практически очень трудно написать на ассемблере код быстрее чем оптимизатор это сделает из С или Паскаля. Если внимательно посмотреть на код после оптимизатора, можно заметить добавленные NOP для выравнивания и "перепутанные" местами операторы для возможности одновременного выполнения. Ассемблер так не делает.
Можно было очень просто сделать, пишем на Делфи а потом Ctrl-F7 и видим код на ассемблере.
PS: из-за конвейеров и выравнивания в новых процессорах, практически очень трудно написать на ассемблере код быстрее чем оптимизатор это сделает из С или Паскаля. Если внимательно посмотреть на код после оптимизатора, можно заметить добавленные NOP для выравнивания и "перепутанные" местами операторы для возможности одновременного выполнения. Ассемблер так не делает.
[size=70]Жадность порождает бедность[/size]
То что ты увидишь в дизассемблере это будет жуткого вида исполнимый код, который без огромного количества дополнительных библиотек попросту НИЧЕГО не стоит. Толку-то от этого кода, если его надо обрабатывать потом напильником до полной неузнаваемости? Проще с нуля написать...
- Сообщения: 606
- Зарегистрирован: Вт июн 25, 2013 18:45:07
И всё же ассемблер остаётся единственным языком, где всё действительно только в ваших руках
Непопулярность его для написания хороших native code приложений объясняется во многом коммерцией, а во многом попросту политикой Microsoft и ей подобных глобалистов. Ведь хорошо знающий асм - это не только хороший программист, это потенциальный крякер. Поэтому никому не выгодна пропаганда ассемблера в частности и компиляторов native code в целом, за то всем выгодно пересаживать на дотнет и прочие фреймворки, чтобы сторонние особо не совали нос в системные дела. Да извинят меня за пошлость, но со стороны это выглядит как надевание ещё одного презерватива поверх имеющихся
Непопулярность его для написания хороших native code приложений объясняется во многом коммерцией, а во многом попросту политикой Microsoft и ей подобных глобалистов. Ведь хорошо знающий асм - это не только хороший программист, это потенциальный крякер. Поэтому никому не выгодна пропаганда ассемблера в частности и компиляторов native code в целом, за то всем выгодно пересаживать на дотнет и прочие фреймворки, чтобы сторонние особо не совали нос в системные дела. Да извинят меня за пошлость, но со стороны это выглядит как надевание ещё одного презерватива поверх имеющихся


