Программирование математических задач - Контрольная работа

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


Аннотация к работе
Если значение какого-либо элемента равняется 0-ому элементу, мы запоминаем его порядковый номер и записываем в переменную index. for (i = 0; i <index; i ) // Сравниваем числа от 0 до index - 1 с элементами от index до m.length - 1 Найти сумму вида x[i] y[j], наиболее близкую к числу q (число действий порядка k l, дополнительная память - фиксированное число переменных, массивы не изменять). Имя переменной Смысл переменной Назначение переменной Ограничения q Десятичное число Исходная k Размерность массива x Исходная x Одномерный массив Исходная l Размерность массива y Исходная y Одномерный массив Исходная z Одномерный массив Промежуточная we Булева переменная Промежуточная nomer Порядковый номер числа q Промежуточная v, v1 Определяют ближ. сумму к числу q Результат Далее проверяем, если число q - это последний элемент массива, то самой близкой суммой к числу q будет равняться стоящий перед ним элемент.В ходе выполнения курсовой работы были реализованы алгоритмы решения поставленных задач и написаны соответствующие коды программ.

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

Целью курсовой работы является закрепление теоретического материала, приобретение практических навыков проектирования и отладки консольных приложений написанных на языке высокоуровневого программирования С#, предназначенного для платформы .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.

Размещено на
Заказать написание новой работы



Дисциплины научных работ



Хотите, перезвоним вам?