Программирование математических задач

  • Вид работы:
    Контрольная работа
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    327,64 Кб
  • Опубликовано:
    2012-12-17
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Программирование математических задач

Введение

математический задача программа алгоритм

Целью курсовой работы является закрепление теоретического материала, приобретение практических навыков проектирования и отладки консольных приложений написанных на языке высокоуровневого программирования С#, предназначенного для платформы .NET. Данная курсовая работа направлена на подробное изучение методов языка C# и на совместное использование всех базовых конструкций языка. С этой целью будет реализовано программирование математических задач. Знания, полученные на занятиях, заложили фундамент для дальнейшего изучения возможностей C#.

Формулировка задачи

1. Дано натуральное число 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.

Рис.

Формулировка задачи

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.

Код программы и схема алгоритма

System;

using System.Collections.Generic;System.Linq;System.Text;ConsoleApplication16

{Program

{void Main(string[] args)

{

/*

.        Даны два массива: x[1] ≤… ≤ x[k], y[1] ≤ … ≤ y[l] и число q. Найти сумму вида x[i] + y[j], наиболее близкую к

числу q (число действий порядка k + l, дополнительная память - фиксированное число переменных, массивы не изменять).

int q = Convert.ToInt32(Console.ReadLine());

Console.Write("Введите размерность массива x, k= ");

int k = Convert.ToInt32(Console.ReadLine());[] x = new int[k];(int i = 0; i < k; i++)

{.Write("Введите x[" + i + "] элемент ");[i] = Convert.ToInt32(Console.ReadLine());

}.Write("Введите размерность массива y, l= ");

int l = Convert.ToInt32(Console.ReadLine());[] y = new int[l];(int i = 0; i < l; i++)

{.Write("Введите y[" + i + "] элемент ");[i] = Convert.ToInt32(Console.ReadLine());

}p = 0;[] z = new int[k * l + 1];

for (int i = 0; i < k; i++) // Записываем сумму элементов массива x и y в массив z

{(int j = 0; j < l; j++)

{n = x[i] + y[j];[p] = n;.WriteLine("Вывод суммы:" + z[p]);++;

}

} Console.ReadLine();f = z.Length - 1;

z[f] = q; // Записываем число q в массив z

int nomer = 0;.Sort(z);

Console.WriteLine("Сортированный массив z= ");

bool we = false;(int i = 0; i < z.Length; i++)

{re = we;((z[i] == q) && (re == false)) // Находим первое вхождение числа q в массиве z и запоминаем порядковый номер

{= i;= true;.ForegroundColor = ConsoleColor.Green;

}.Write(" " + z[i]);.ResetColor();

}.WriteLine();.WriteLine("Порядковый номер = " + nomer);.ReadLine();(int i = 0; i < z.Length; i++)

{(z[i] == q)

{a = i;(!(q == z[z.Length - 1]))

{(q == z[0])

{.WriteLine("Число " + z[1] + " является самой близкой суммой к числу q= " + q);

}

{v = Math.Abs(z[a] - z[a - 1]); // Находим число стоящее перед qv1 = Math.Abs(z[a] - z[a + 1]); // Находим число стоящее после q(v < v1)

{.WriteLine("Число " + z[a - 1] + " является самой близкой суммой к числу q= " + q);

}(v > v1)

{.WriteLine("Число " + z[a + 1] + " является самой близкой суммой к числу q= " + q);

}(v == v1)

{.WriteLine("Числа " + z[a - 1] + " и " + z[a + 1] + " является самой близкой суммой к числу q= " + q);

}

}

}.WriteLine("Число " + z[z.Length - 2] + " является самой близкой суммой к числу q= " + q);

} Console.ReadKey();

}

}

}

}

Схема.

Результат машинного тестирования программы

Вводим число q = 8 и заполняем массивы x и y. Далее сортируем массив z по возрастанию и находим первое вхождение числа q. Определяем его порядковый номер.

Рис.

Заключение

В ходе выполнения курсовой работы были реализованы алгоритмы решения поставленных задач и написаны соответствующие коды программ. Программы были написаны с использованием методов, что позволило значительно сократить и оптимизировать коды.

В результате были созданы две работоспособные программы по решению математических задач. Первая находит длину периода дроби 1/n в последовательности остатков. Вторая находит сумму вида x[i] + y[j], наиболее близкую к числу q.

Список рекомендуемой литературы

.Павловская Т.А. C#. Программирование на языке высокого уровня: учебник для вузов. - СПб.: Питер, 2007. - 432 с.

.Шилдт Г. C# 2.0. Серия «Полное руководство». Пер. с англ. - М.: ЭКОМ Паблишерз, 2007. - 976 с.

.Фаронов В.В. Создание приложений с помощью C#. Руководство программиста. - М.: Эксмо, 2008. - 576 с.

.Малыхина М.П. Программирование на языке высокого уровня: учеб. пособие. - СПб.: БХВ-Петербург, 2006.

.Малыхина М.П., Частикова В.А., Миклашевская Л.Н. Программирование на языке высокого уровня. Методические указания к курсовой работе по дисциплине «Программирование на языке высокого уровня» для студентов всех форм обучения специальности 220400. -Краснодар: Изд. КубГТУ, 2004.

.Фролов А.В., Фролов Г.В. Язык C#. Самоучитель. - М.: ДИАЛОГ-МИФИ, 2003.

.Шильд Г. Полный справочник по C#. Пер. с англ. - М.: Вильямс, 2004.

Похожие работы на - Программирование математических задач

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!