Программирование математических задач
Основные особенности создания работоспособных программ по решению математических задач. Рассмотрение и характеристика типовых структурных элементов схемы алгоритма: внутренний цикл, ветвление. Анализ результатов машинного тестирования программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 07.01.2013 |
Размер файла | 502,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Введение
математический задача программа алгоритм
Целью курсовой работы является закрепление теоретического материала, приобретение практических навыков проектирования и отладки консольных приложений написанных на языке высокоуровневого программирования С#, предназначенного для платформы .NET. Данная курсовая работа направлена на подробное изучение методов языка C# и на совместное использование всех базовых конструкций языка. С этой целью будет реализовано программирование математических задач. Знания, полученные на занятиях, заложили фундамент для дальнейшего изучения возможностей C#.
Формулировка задачи
Дано натуральное число N. Определить длину периода 1/n. Период дроби равен периоду в последовательности остатков. Построить график зависимости периода от N.
Спецификация задачи
Входные данные:
- число N.
Выходные данные:
- получить значение частного 1/N;
- определить период в последовательности остатков.
Таблица. Математическая постановка задачи
Характеристика переменных |
||||
Имя переменной |
Смысл переменной |
Назначение переменной |
Ограничения |
|
N |
Десятичная число |
Исходная |
От 1 до …. |
|
S |
Десятичное число |
Промежуточная |
После ввода числа N, производим деление 1 на N, результат которой записываем в переменной S. Потом берем из этого числа остаток от деления и перезаписываем его в переменную S. Далее каждую цифру числа S, мы помещаем в целочисленный массив m. Следом идет ряд условных операторов, определяющих период числа S.
Схема алгоритма. Описание
Схема алгоритма содержит следующие типовые структурные элементы: внутренний цикл, ветвление, внешний цикл. При выполнении внешнего цикла, мы последовательно, начиная с первого элемента, сравниваем их с 0 элементом. Если значение какого-либо элемента равняется 0-ому элементу, мы запоминаем его порядковый номер и записываем в переменную index. В переменную P записываем значение переменной index. Во внутреннем цикле идет сравнение элементов от 0 по inedex - 1 с элементами от index до длины массива m.length - 1. В результате в зависимости от наличия или отсутствия периода выводится, то или иное сообщение.
Код программы и схема алгоритма
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
/*Вариант 2 Дано натуральное число N. Определить длину периода 1/n. Период дроби равен периоду в последовательности остатков. Построить гра-фик зависимости периода от N. */
int n = Convert.ToInt32(Console.ReadLine());
string s = (1.0 / n).ToString(); // Результат от деления записываем в стороковую переменную s
Console.WriteLine(s);
s = s.Substring(2, s.Length - 2); // Убираем целую часть и запятую и перезаписываем значение в переменную s
Console.WriteLine(s);
int[] m = new int[s.Length];
for (int i = 0; i < s.Length; i++) // Каждую цифру числа, записываем в массив m
{
m[i] = Convert.ToInt32(s.Substring(i, 1));
Console.Write(m[i]);
} Console.ReadLine();
for (int i = 1; i < m.Length; i++) // Сравниваем числа с 0 элементом
{
if (m[i] == m[0])
{
int index = i; // Запоминаем его порядковый номер
int P = index;
for (i = 0; i < index; i++) // Сравниваем числа от 0 до index - 1 с элементами от index до m.length - 1
{
if (m[i] == m[index])
{
if (index < m.Length - 1)
{
index++;
Console.WriteLine("Период равен P=" + P);
Console.ReadLine();
}
}
}
}
else
{
{
Console.WriteLine("Периода нет");
Console.ReadLine();
}
}
}
}
}
Схема.
Результат машинного тестирования программы
При N равное 3, период остатка от деления 1/N будет равняться 1.
Рис.
Формулировка задачи
Даны два массива: x[1] ?… ? x[k], y[1] ? … ? y[l] и число q. Найти сумму вида x[i] + y[j], наиболее близкую к числу q (число действий порядка k + l, дополнительная память - фиксированное число переменных, массивы не изменять).
Спецификация задачи.
Входные данные:
- число q;
- массив x;
- массив y.
Выходные данные:
- значение суммы самой близкой к числу q;
- порядковый номер числа q в массиве.
Таблица. Математическая постановка задачи
Характеристика переменных |
||||
Имя переменной |
Смысл переменной |
Назначение переменной |
Ограничения |
|
q |
Десятичное число |
Исходная |
||
k |
Размерность массива x |
Исходная |
||
x |
Одномерный массив |
Исходная |
||
l |
Размерность массива y |
Исходная |
||
y |
Одномерный массив |
Исходная |
||
z |
Одномерный массив |
Промежуточная |
||
we |
Булева переменная |
Промежуточная |
||
nomer |
Порядковый номер числа q |
Промежуточная |
||
v, v1 |
Определяют ближ. сумму к числу q |
Результат |
Как только ввели число q, начинаем складывать элементы массивов x и y. Результат суммы записываем в массив z. Далее сортируем элементы массива по возрастанию и перезаписываем их. Следующим шагов выполняется ряд условий, которые и находят самую близкую сумму двух массивов x и y к числу q.
Схема алгоритма. Описание
Схема алгоритма содержит следующие типовые структурные элементы: внешний цикл и вложенные друг в друга структуры ветвления. В цикле начинается перебор массива z, до тех пор пока не найдем число q в массиве z. Далее проверяем, если число q - это последний элемент массива, то самой близкой суммой к числу q будет равняться стоящий перед ним элемент. Если же это не так, то в следующем условии проверяем, не является ли число q нулевым элементов массива. Тогда ближайшей к нему суммой будет следующий после него элемент. В конце задаем структуры ветвления, на случай если наше число q стоит в середине массива. В них сравнивается число, стоящее перед и после значения q. В зависимости от их значения, выводится ближайшая сумма элементов массива x и y к числу q.
Код программы и схема алгоритма
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication16
{
class Program
{
static void Main(string[] args)
{
/*
2. Даны два массива: x[1] ?… ? x[k], y[1] ? … ? y[l] и число q. Найти сумму вида x[i] + y[j], наиболее близкую к
числу q (число действий порядка k + l, дополнительная память - фиксированное число переменных, массивы не изменять).
*/
Console.Write("Введите число q= ");
int q = Convert.ToInt32(Console.ReadLine());
Console.Write("Введите размерность массива x, k= ");
int k = Convert.ToInt32(Console.ReadLine());
int[] x = new int[k];
for (int i = 0; i < k; i++)
{
Console.Write("Введите x[" + i + "] элемент ");
x[i] = Convert.ToInt32(Console.ReadLine());
}
Console.Write("Введите размерность массива y, l= ");
int l = Convert.ToInt32(Console.ReadLine());
int[] y = new int[l];
for (int i = 0; i < l; i++)
{
Console.Write("Введите y[" + i + "] элемент ");
y[i] = Convert.ToInt32(Console.ReadLine());
}
int p = 0;
int[] z = new int[k * l + 1];
for (int i = 0; i < k; i++) // Записываем сумму элементов массива x и y в массив z
{
for (int j = 0; j < l; j++)
{
int n = x[i] + y[j];
z[p] = n;
Console.WriteLine("Вывод суммы:" + z[p]);
p++;
}
} Console.ReadLine();
int f = z.Length - 1;
z[f] = q; // Записываем число q в массив z
int nomer = 0;
Array.Sort(z);
Console.WriteLine("Сортированный массив z= ");
bool we = false;
for (int i = 0; i < z.Length; i++)
{
bool re = we;
if ((z[i] == q) && (re == false)) // Находим первое вхождение числа q в массиве z и запоминаем порядковый номер
{
nomer = i;
we = true;
Console.ForegroundColor = ConsoleColor.Green;
}
Console.Write(" " + z[i]);
Console.ResetColor();
}
Console.WriteLine();
Console.WriteLine("Порядковый номер = " + nomer);
Console.ReadLine();
for (int i = 0; i < z.Length; i++)
{
if (z[i] == q)
{
int a = i;
if (!(q == z[z.Length - 1]))
{
if (q == z[0])
{
Console.WriteLine("Число " + z[1] + " является самой близкой суммой к числу q= " + q);
}
else
{
int v = Math.Abs(z[a] - z[a - 1]); // Находим число стоящее перед q
int v1 = Math.Abs(z[a] - z[a + 1]); // Находим число стоящее после q
if (v < v1)
{
Console.WriteLine("Число " + z[a - 1] + " является самой близкой суммой к числу q= " + q);
}
if (v > v1)
{
Console.WriteLine("Число " + z[a + 1] + " является самой близкой суммой к числу q= " + q);
}
if (v == v1)
{
Console.WriteLine("Числа " + z[a - 1] + " и " + z[a + 1] + " является самой близкой суммой к числу q= " + q);
}
}
}
else
Console.WriteLine("Число " + z[z.Length - 2] + " является самой близкой суммой к числу q= " + q);
} Console.ReadKey();
}
}
}
}
Схема.
Результат машинного тестирования программы
Вводим число q = 8 и заполняем массивы x и y. Далее сортируем массив z по возрастанию и находим первое вхождение числа q. Определяем его порядковый номер.
Рис.
Заключение
В ходе выполнения курсовой работы были реализованы алгоритмы решения поставленных задач и написаны соответствующие коды программ. Программы были написаны с использованием методов, что позволило значительно сократить и оптимизировать коды.
В результате были созданы две работоспособные программы по решению математических задач. Первая находит длину периода дроби 1/n в последовательности остатков. Вторая находит сумму вида x[i] + y[j], наиболее близкую к числу q.
Список рекомендуемой литературы
1.Павловская Т.А. C#. Программирование на языке высокого уровня: учебник для вузов. - СПб.: Питер, 2007. - 432 с.
2.Шилдт Г. C# 2.0. Серия «Полное руководство». Пер. с англ. - М.: ЭКОМ Паблишерз, 2007. - 976 с.
3.Фаронов В.В. Создание приложений с помощью C#. Руководство программиста. - М.: Эксмо, 2008. - 576 с.
4.Малыхина М.П. Программирование на языке высокого уровня: учеб. пособие. - СПб.: БХВ-Петербург, 2006.
5.Малыхина М.П., Частикова В.А., Миклашевская Л.Н. Программирование на языке высокого уровня. Методические указания к курсовой работе по дисциплине «Программирование на языке высокого уровня» для студентов всех форм обучения специальности 220400. -Краснодар: Изд. КубГТУ, 2004.
6.Фролов А.В., Фролов Г.В. Язык C#. Самоучитель. - М.: ДИАЛОГ-МИФИ, 2003.
7.Шильд Г. Полный справочник по C#. Пер. с англ. - М.: Вильямс, 2004.
Размещено на Allbest.ru
Подобные документы
Методы языка программирования C#. Алгоритмизация и программирование задач на языке высокого уровня C#. Внутренний цикл, ветвление, внешний цикл, вложенные друг в друга структуры ветвления. Вывод элементов массива на экран. Остальные элементы матрицы.
курсовая работа [250,2 K], добавлен 27.02.2015Формулировка, спецификация и математическая постановка задачи. Описание схемы алгоритма. Рассмотрение результата машинного тестирования программы. Получение на занятиях навыков алгоритмизации и программирования задач на языке высокого уровня C#.
курсовая работа [268,2 K], добавлен 22.03.2015Обзор и сравнительный анализ современных математических пакетов. Вычислительные и графические возможности системы MATLAB, а также средства программирования в среде MATLAB. Основные возможности решения задач оптимизации в табличном процессоре MS Excel.
дипломная работа [6,6 M], добавлен 04.09.2014Использование объектно-ориентированной методологии при программировании математических процессов. Среда языка программирования Delphi для решения математических задач. Объектно-ориентированные, декларативные и императивные языки программирования.
дипломная работа [1,8 M], добавлен 14.09.2011Использование математических функций для алгоритмизации задач и отладки программ. Операторы сравнения и логические функции; реализация циклического процесса. Организация и обработка данных при помощи массивов. Функции преобразования и работы со строками.
методичка [135,5 K], добавлен 24.10.2012Составление блок-схемы и алгоритма программы для решения уравнения с приближенным значением корня по методу Ньютона, расчета приближенного значения интеграла по формуле трапеций, вычисления уравнения длины вектора. Типы формул общего члена суммы.
курсовая работа [41,3 K], добавлен 15.12.2012Си - стандартизированный процедурный язык программирования. Алгоритм и программа на языке Си для формирования двух матриц с определенной размерностью и значением элементов. Применение матриц в математике. Исходный текст программы и результаты выполнения.
реферат [1,4 M], добавлен 23.12.2010Написание программ для решения различных выражений и задач. При решении каждой задачи предусмотрены: анализ введенных с клавиатуры исходных данных, выведение условия для выхода и вывод результатов. Проиллюстрированы результаты работы каждой программы.
контрольная работа [259,8 K], добавлен 22.05.2010Основные этапы создания алгоритмов, представление в виде программы. Рассмотрение методов решения задач. Метод поэтапных уточнений. Различие между численными и логическими алгоритмами. Реализация цикла со счетчиком. Процесс разработки сложного алгоритма.
презентация [1,3 M], добавлен 22.10.2013Исходные данные по предприятию ОАО "Красногорсклексредства". Разработка математических моделей задач по определению оптимальных планов производства продукции с использованием пакетов прикладных программ для решения задач линейного программирования.
курсовая работа [122,5 K], добавлен 16.10.2009