Основные особенности создания работоспособных программ по решению математических задач. Рассмотрение и характеристика типовых структурных элементов схемы алгоритма: внутренний цикл, ветвление. Анализ результатов машинного тестирования программы.
Если значение какого-либо элемента равняется 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("Введите размерность массива 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.
Размещено на
Вы можете ЗАГРУЗИТЬ и ПОВЫСИТЬ уникальность своей работы