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

Основные особенности создания работоспособных программ по решению математических задач. Рассмотрение и характеристика типовых структурных элементов схемы алгоритма: внутренний цикл, ветвление. Анализ результатов машинного тестирования программы.

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.