else
if(*(a+i)<0)
printf("%ldx^%d",*(a+i),i);
else
if(*(a+i)>0)
printf("+%ldx^%d",*(a+i),i);
else n++;
}
if(a[0]<0) printf("%ld",a[0]);
else
if(a[0]>0) printf("+%ld",a[0]);
else n--;
printf("=0");
printf("\n\nСпасибо, что пользовались моим прогаммным продуктом!:)");
printf("\n\nНажмите любую кнопку.");
}
free(a);
free(b);
free(c);
free(m);
free(s);
getch();
}
Входные данные: числа типа long.
Выходные данные: числа типа long.
1. При введенных значениях степени и корней генерируемого полинома, не допускающих выход за диапазон типа long, – коэффициенты генерируемого многочлена с соответствующими степенями переменных.
2. При не корректно введенных значениях:
1. Если при вводе степени введено число меньше двух и больше 100, то выдается сообщение о не корректном вводе с просьбой повторить ввод заново.
2. Если не было введено значение степени или корня полинома, то выдается сообщение о не корректном вводе с просьбой повторить ввод заново.
3. Если было введено более девяти символов, то выдается сообщение о не корректном вводе с просьбой повторить ввод.
4. Если был введен символ или пробел, то выдается сообщение о не корректном вводе с просьбой повторить ввод.
5. Если произошел выход за диапазон типа long, то выдается сообщение о не корректном вводе с просьбой при следующем использовании данного программного продукта быть аккуратными при вводе степени генерируемого полинома и его корней, чтобы не допустить выход за диапазон используемого типа.
Результаты теста данного программного продукта можно увидеть в Приложении.
В заключение данной курсовой работы хотелось бы кратко сказать о проделанной работе, о проблемах, с которыми столкнулся при выполнении поставленной цели, и о перспективах развития и улучшения данного программного продукта.
Целью данной курсовой работы было составить алгоритм генерации полиномов по введенной степени и корням и написать программу, реализующую этот алгоритм.
Чтобы выполнить поставленную цель, необходимо было решить три задачи:
1. Поиск литературы по предмету данной курсовой работы.
2. Составление алгоритма для выполнения поставленной цели.
3. Написание программы, реализующей составленный алгоритм.
При решении третьей задачи столкнулся с рядом трудностей:
1. Организацией ввода значений и проверки его корректности. Необходимо было проверять, чтобы введенные значения являлись только числами.
2. Организацией хранения введенных данных для удобного обращения к ним в ходе написания и работы программы.
3. Проверки, чтобы при работе программы не произошел выход за диапазон используемого типа.
Основными источниками, помогавшими выполнить поставленную цель, явились:
1. Книги по линейной алгебре, в которых содержался материал по теории полиномов.
2. Книги по информатике и программированию.
3. Курс лекций, прочитанных в рамках дисциплин «Программирование на языке Си», «Информатика», «Структуры и алгоритмы компьютерной обработки данных», «Алгебра и теория чисел».
Результатом данной курсовой работы стал алгоритм генерации полиномов и написанная на его основе программа. Данная программа предназначена для работы с целыми числами, хотя алгоритм является действенным и при работе с вещественными числами, а при некоторых его усовершенствованиях (организации работы с мнимой частью) и с комплексными. Следовательно, одной из перспектив развития данного алгоритма является его улучшение для работы с комплексными числами, а программы – написание ее для работы со всеми числами: целыми, вещественными, комплексными.
Так же реально улучшить временную характеристику алгоритма и программы, если после проверки «не вышло ли произведение или сумма коэффициентов многочлена» за диапазон типа, если все же выход произошел, сразу же остановить работу алгоритма и программы и выдать пользователю сообщение об ошибке.
Чтобы более полно использовать возможности алгоритма, его лучше реализовывать на тех языках программирования, у которых типы данных имеют достаточно большие диапазоны.
Решив последнюю задачу, можно сразу решить такие задачи, как увеличение вводимого значения степени генерируемого полинома и количества вводимых символов и буфера.
Не трудно заметить, что при перемножении вещественных чисел с дробной частью количество цифр в дробной части их произведения будет равно, в общем случае, сумме количества символов перемножаемых чисел, поэтому количество символов в дробной части произведения при большом количестве символов в дробной части перемножаемых чисел достаточно быстро увеличивается.
Следовательно, одной из серьезнейших проблем при работе с вещественными и комплексными числами встает проблема точности, которую, в принципе на все сто процентов разрешить никогда не удастся, так как программист всегда будет ограничен в ресурсах, поэтому представить вещественные можно только лишь с определенной точностью, иногда вполне достаточной.
Надеюсь, что мой опыт в разработке подобных программных продуктов будет полезен другим людям, и данная программа из области исследования при выполнении курсовой работы, при условии, конечно же, его усовершенствования, выйдет в свет как полностью готовый к использованию программный продукт и будет востребован не только в целях методических разработок.
Список использованных источников и литературы
1. КурошА.Г. Курс высшей алгебры / А.Г. Курош. – М.: Наука, 1968. – 431с.
2. Шафаревич И.Р. Основные понятия алгебры / И.Р. Шафаревич. – Ижевск: Ижевская республиканская типография, 1999. – 348с.
3. Варден ван дер Б.Л. Алгебра / Б.Л. ван дер Варден. – М.: Наука, 1979. – 623с.
4. Математика. Большой энциклопедический словарь / Гл. ред. Ю.В. Прохоров. – 3-е изд. – М.: Большая Российская энциклопедия, 1998. – 848 с.: ил.
5. Подбельский В.В. Язык Си++: Учебное пособие. – 5 –е изд. / В.В. Подбельский. – М.: Финансы и статистика, 2003. – 560с.: ил.
6. Устян А.Е. Методические материалы по курсу «Алгебра и теория чисел» для студентов – государственников / А.Е. Устян. – Тула: Тул.гос.пед.ун –т им. Л.Н. Толстого, 1992. – 86с.
7. Зарисский О. Коммутативная алгебра. Том I / О. Зарисский, П. Самюэль. – М.: Издательство иностранной литературы, 1963. – 371с.
8. Ленг С. Алгебра / С. Ленг. – М.: Наука, 1999. – 564с.
Приложение
Таблица тестов
В таблице приведены результаты некоторых тестов программы.
Обратите внимание на то, что в скобках показаны некорректно введенные данные и сообщения программы об ошибках с просьбами повторить ввод.
номер теста | входные данные | выходные данные |
1 | 2; 1, 2 | x^2-3x+2=0 |
2 | 3; 1, 2, 3 | x^3-6x^2+11-6=0 |
3 | 10; 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 | x^10-10x^9+45x^-120x^7+210x^6--252x^5+210x^4-120x^3 + 45x^2-10x+1 |
4 | 4;1234, 4321, 23 ,32 | Произошел выход за диапазон типа |
5 | 2;999999999, 1 | x^2-10000000000x+999999999 |
6 | 2;0 , 0 | x^2=0 |
7 | (-4),(1), 3;(q), ( ), 0, 1, 100 | (Введен символ или пробел повторите ввод), (Введите степень не меньшую, чем 2, и не большую, чем 100), (Введен символ или пробел повторите ввод), (Не было введено значения),x^3-101x^2+100x=0 |
8 | 5;-1, 1, -2, 2, 0 | x^5-5x^3+4x=0 |
9 | 10;0, 1, 2, 3, 4, 5, 6, 7, 8, 9 | x^10-45x^9+870x^8-9450x^7+63273x^6--269325x^5+723680x^4-1172700x^3++1026576x^2-362880x |
10 | 25;1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 8, 7, 6, 5, 4, 3, 2, 1, 1, 2, 3, 4, 5, 6, 7 | Произошел выход за диапазон типа |