close

Вход

Забыли?

вход по аккаунту

?

записка Баранов (Восстановлен)

код для вставкиСкачать
 Федеральное агентство по образованию
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ
ПОЛИТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Институт информационных технологий и управления
Кафедра систем и технологий управления
Курсовая работа
по теме
"Работа с массивами"
Курс "Программирование и основы алгоритмизации"
Студент гр.13503/1 Баранов М.Е.
Старший Преподаватель Иванова Л.В. Санкт- Петербург
2013
Оглавление
Задание на выполнение курсовой работы01
Введите название главы (уровень 2)02
Введите название главы (уровень 3)03
Введение04
Введите название главы (уровень 2)05
Введите название главы (уровень 3)06
Техническое задание. Описание работы меню программы.04
Описание главной программы04
Введите название главы (уровень 2)02
Введите название главы (уровень 2)02
Введите название главы (уровень 2)02
Введите название главы (уровень 2)02
Введите название главы (уровень 2)02
Введите название главы (уровень 2)02
Введите название главы (уровень 2)02
Введите название главы (уровень 2)02
Введите название главы (уровень 2)02
Введение04
Задание на выполнение курсовой работы
1.Задание на выполнение курсовой работы
Студенту группы 13503_1 Баранову Максиму Евгеньевичу
1. Тема работы: Работа с массивами.
2. Срок сдачи студентом законченной работы: 20.12.13
3. Исходные данные к работе - вариант 3.
3.1. Тип массива: целочисленный.
3.2. Размерность: ступенчатый. Минимальное число элементов в строке: ввод с клавиатуры, максимальное: ввод с клавиатуры. Число строк в массиве: ввод с клавиатуры..
3.3. Номер элемента точки отсчета: ввод с клавиатуры.
3.4. Число строк в подматрице s-3, число столбцов в подматрице st-3.
3.5. Результаты решения выводятся в файл и на консоль.
3.6. В работе надо реализовать следующие функции:
3.6.1. поменять местами заданные столбцы фрагмента.
3.6.2. В каждой строке найти элемент , наименее отличающийся от среднего, и вывести его индекс.
3.6.3. В каждой строчке фрагмента матрицы трапециевидной формы найти элемент, наименее отличающийся от среднего, и вывести его индекс.
3.6.4. Найти сумму четных элементов главной диагонали фрагмента.
3.6.5. Найти среднее арифметическое всех элементов, стоящих выше побочной диагонали.
4. В проекте должны быть разработаны в соответствии с вариантом задания:
4.1.1. Текстовое описание алгоритмов заданных функций на естественном языке.
4.1.2. Визуальные алгоритмы.
4.1.3. Трассировочные таблицы для заданных исходных данных. Если тестовые исходные данные не заданы, сформировать их самостоятельно.
4.1.4. Программа на языке C#. (Программы и текст пояснительной записки представляются на сайт в виде архивного файла).
5. Техническое задание. Описание работы меню программы.
5.1.1. Описание работы меню.
6. Содержание пояснительной записки
6.1. Введение, основная часть, заключение, список использованных источников, приложение (тексты программ). 7. Дата получения задания: 7 октября 2013 г.
Руководитель: ст. преподаватель _________________ Иванова Л.В.
Задание принял к исполнению _____________ Баранов М.Е.
_________________ (дата)
2. Введение
В данной курсовой работе поставлена цель: изучение программирования и основ алгоритмизации, в том числе решение таких задач как:
1) работа с массивами: различные преобразования массива, операции над массивом, поиск необходимых элементов в массиве, выделение подматрицы и работа с ней;
2) обработка исключительных ситуаций в программе и их устранение с помощью соответствующих программных методов;
3) создание иерархии классов, применение классов для упрощения решения задач с массивами;
4) осуществление ввода с консоли и из файла, вывода на консоль и в файл;
3.Техническое задание. Описание работы меню программы.
"1. Ввод массива с клавиатуры" - задаёт с консоли количество строк матрицы, задаёт длины строк, задаёт целочисленный массив построчно.
"2. Ввод массива из файла" - считывает количество строк, длины строк, координаты заданной точки, размеры подматрицы, считывает целые числа и преобразует их в массив из файла in.txt.
"3. Заполнение массива случайными числами" - задаёт размеры массива, задаёт диапазон случайных целых чисел, заполняет массив случайными числами из заданного диапазона.
подменю
"1. Ввод количества строк матрицы" - задаёт с консоли количество строк подматрицы n.
"2. Ввод длин строк" - задаёт длины строк для n строк с консоли.
"3. Задать диапазон" - задаёт начало и конец диапазона для случайных чисел
"4. Заполнение массива случайными числами" - заполняет массив целыми числами
"5. Возврат в главное меню"
"4. Задание подматрицы" - задаёт номер строки, номер столбца заданной точки, число строк и столбцов подматрицы.
подменю
"1. Задать координаты точки отсчёта" - задаёт номер столбца и строки точки отсчёта с консоли
"2. Задать размеры подматрицы" - задаёт число строк и столбцов в подматрице с консоли.
"3. Возврат в главное меню"
"5. Выполнение функций" - выполняет все необходимые функции с подматрицей
подменю
"1. Поменять местами столбцы в подматрице" - задаёт два номера столбцов с консоли и меняет эти столбцы местами. Выводит на экран исходную и получившуюся подматрицы.
"2. В каждой строке найти элемент , наименее отличающийся от среднего, и вывести его индекс." - находит суммы всех элементов в строках, делит их на количества элементов соответствующих строк, находит минимальные разницы между элементами и средними значениями в соответствующих строках, выводит на консоль номера элементов строк.
"3. В каждой строчке подматрицы найти элемент, наименее отличающийся от среднего, и вывести его индекс." - находит строки в подматрице, отличающиеся по длине, находит суммы элементов в каждой строке, делит эти суммы на количество элементов в строке, находит наименее отличающиеся элементы в строках от средних значений, выводит индексы этих элементов.
"4. Найти сумму чётных элементов главной диагонали" - находит чётные элементы в главной диагонали в массиве, считает их сумму, выводит сумму на экран.
"5. Найти среднее арифметическое всех элементов, стоящих выше побочной диагонали." - считает количество элементов выше побочной диагонали, считает их сумму, делит сумму на количество элементов, выводит сумму на экран.
"6. Выход в главное меню"
"6. Вывод исходных данных и получившихся результатов на консоль" - выводит исходную матрицу, заданную подматрицу, результаты вычислений функций на консоль.
"7. Вывод в файл" - выводит исходные, выходные данные в файл out.txt "8. Выход из программы."
"9. Вывод исходных данных на экран"
Примечание:
Изначально задан массив из 10 строк, каждая из которых длиной от 6 до 10, заполнен случайными целыми числами в диапазоне от 10 до 99. После выполнения первой функции (смена столбцов подматрицы) дальнейшие вычисления будут проводиться с изначальной подматрицей. Изначально заданная точка определена в координатах [0,0] (в первой строке, первом столбце массива). Изначальное количество столбцов и строк равно 3. Если координаты заданной точки выходят за границы массива или является не целым положительным числом, выдаётся предупреждение и даётся попытка ввести координаты ещё раз. Все получившиеся значения выводятся в файл out.txt по нажатию седьмого пункта главного меню, а также на консоль по нажатию шестого пункта меню. Целочисленная константа leng является пределом для всех массивов в программе. Число элементов в строке может быть от 1 до 10. При нажатии второго пункта меню исходные данные будут браться из файла in.txt. в первой строке файла указывается количество строк в массиве, для того, чтобы программа понимала, до каких пор ей считывать файл. Во второй строке указываются количества столбцов и строк в подматрице через пробел. В третей строке указываются координаты заданной точки, для строки - от 1 до числа строк, для столбцов - от 1 до длины строки. 4. Описание главной программы
Структура данных:
номеридентефикатортипвидназначение1arrintСтупенчатый массивЗначения массива2nintпеременнаяКоличество строк в массиве 3lenintОдномерный массивДлины строк массива 4xintпеременнаяНачальная координата строки подматрицы 5yintпеременнаяНачальная координата столбца подматрицы6stintпеременнаяЧисло столбцов в подматрице 7sintпеременнаяЧисло строк в подматрице8lengintГлобальная константаМаксимальное число строк в массиве Максимальное число элементов в строке 9exitboolЛогическая переменнаяФлаг для меню и подменю10randRandomгенераторГенератор случайных чисел11caseswitchstringпеременнаяСоздание главного меню12сsstIntГлобальная константаИзначальное число строк и столбцов в подматрице
Меню:
"Курсовая работа по теме: Работа с массивами.
Главное меню:
1. Ввод массива с клавиатуры.
2. Ввод массива из файла.
3. Заполнение массива случайными числами.
Подменю:
1. Ввод количества строк матрицы.
2. Ввод длин строк.
3. Задать диапазон.
4. Заполнение массива случайными числами из диапазона.
5. Возврат в главное меню.
Введите пункт подменю..."
4. Задание подматрицы. Подменю: 1. Задать координаты точки отсчёта.
2. Задать размеры подматрицы.
3. Выход в главное меню.
Введите пункт подменю... 5. Выполнение функций.
Подменю:
1. Поменять местами столбцы в подматрице.
2. В каждой строке массива найти элемент, наименее отличающийся от среднего, и вывести его индекс.
3. В каждой строчке подматрицы найти элемент, наименее отличающийся от среднего, и вывести его индекс.
4. Найти сумму чётных элементов главной диагонали подматрицы.
5. Найти среднее арифметическое всех элементов, стоящих выше побочной диагонали.
6. Выход в главное меню.
Введите пункт подменю...
6. Вывод входных и выходных данных на консоль.
7. Вывод в файл.
8. Выход из программы.
9. Вывести исходные данные на экран.Меню программы:
Введите пункт меню:"
Словесное описание алгоритма:
1. Инициализация переменных (rand,exit,caseswitch,arr[leng][], n,len[leng],x,y,s,st)
2. Создание десяти строк длиной от 6 до 10. Генерация целочисленного ступенчатого массива (диапазон чисел от 10 до 99) (DefaultGen).
3. Создание меню (Main).
3.1 Задание массива с клавиатуры построчно(Caseswitch1);
3.2 Загрузка массива из файла(Caseswitch2);
3.3 Задание массива случайными числами(Caseswitch3);
3.3.1 Задать количество строк
3.3.2 Задать длины строк
3.3.3 Задать диапазон случайных чисел
3.3.4 Заполнить массив случайными числами из диапазона
3.4 Задание подматрицы(Caseswitch4);
3.4.1 Ввод номера строки и номера столбца точки отсчёта.
3.4.2 Ввод количества столбцов в подматрице
3.5 Поменять местами, заданные столбцы фрагмента(Caseswitch51);
3.6 В каждой строке массива найти элемент, наименее отличающийся от среднего, и вывести его индекс(Caseswitch52);
3.7 В каждой строке подматрицы найти элемент, наименее отличающийся от среднего, и вывести его индекс(Caseswitch53);
3.8 В главной диагонали подматрицы вычисление суммы чётных элементов (Caseswitch54)
3.9 Вычисление среднего арифметического элементов, расположенных выше побочной диагонали массива(Caseswitch55)
3.10 Вывести все данные на консоль(WriteArrC);
3.11 Вывести все данные в файл out.txt(WriteArrF);
3.12 Выход;
Код (Main program)
static void Main(string[] args)//<<<<<<<<<<<<<<<<<<<<<<<<<<<__MAIN___>>>>>>>
{
string caseswitch="";
bool exit=true;
int[] len, index52, index53;
int[][] arr = new int[leng][]; int[][] podmatr= new int[leng][];
double sred55 = 0; double sum55 = 0;
double sum5253 = 0; double sred5253 = 0 ;
double[][] ddx=new double[leng][];
int n, x, y, st1, st2, s, st, sum54;
Random rand = new Random();
n = 10; x = 0; y = 0; s = 3; st = 3; sum54 = 0; st1 = 0; st2 = 0; len = new int[leng]; index52 = new int[leng]; index53 = new int[leng]; for (int i = 0; i < leng; i++)
{
ddx[i] = new double[leng]; arr[i] = new int[leng+1]; podmatr[i] = new int[leng]; len[i] = rand.Next(6,10);
for (int j = 0; j < leng; j++)
{ arr[i][j] = 111; ddx[i][j] = 0; podmatr[i][j] = 0; }
}
Методы m = new Методы();
for (int i = 0; i < leng; i++)
for (int j = 0; j < len[i]; j++)
arr[i][j] = rand.Next(10, 99);
DefaultGen(ref arr, ref len, ref n, ref s, ref st, ref x, ref y, ref rand);
do
{Console.Clear();
try
{
exit = true;
//ГЛАВНОЕ МЕНЮ
Console.WriteLine(@"
Курсовая работа по теме: Работа с массивами.
Главное меню:
1. Ввод массива с клавиатуры.
2. Ввод массива из файла.
3. Заполнение массива случайными числами.
4. Задание подматрицы. 5. Выполнение функций.
6. Вывод входных и выходных данных на консоль.
7. Вывод в файл.
8. Выход из программы.
9. Вывести исходные данные на экран.
Введите пункт меню:
");
caseswitch=Console.ReadLine();
switch (caseswitch)
{
case "1":
Caseswitch1(ref arr, ref len, ref n);
break;
case "2":
Caseswitch2(ref arr, ref len, ref n ,ref x, ref y, ref s, ref st);
break;
case "3":
Caseswitch3(ref arr, ref len ,ref n);
break;
case "4":
Caseswitch4(ref arr,ref len, ref n, ref x, ref y, ref s, ref st);
Console.Clear();
break;
case "5":
if (x >= n) { Console.Clear(); Console.WriteLine("Правильно задайте подматрицу и массив (укажите правильный\n номер строки точки отсчёта для подматрицы"); Console.ReadLine(); return; }
if (y > len[x]) { Console.Clear(); Console.WriteLine("Правильно задайте подматрицу (укажите правильный номер\nстолбца точки отсчёта"); Console.ReadLine(); return; }
{
do
{Console.Clear();
try
{
exit = true;
Console.WriteLine(@"1. Поменять местами столбцы в подматрице.
2. В каждой строке массива найти элемент, наименее отличающийся от среднего, и вывести его индекс.
3. В каждой строчке подматрицы найти элемент, наименее отличающийся от среднего, и вывести его индекс.
4. Найти сумму чётных элементов главной диагонали подматрицы.
5. Найти среднее арифметическое всех элементов, стоящих выше побочной диагонали.
6. Выход в главное меню.
Введите пункт подменю...");
switch (Console.ReadLine())
{
case "1":
m.Caseswitch51(ref arr,ref n,ref x, ref y, ref st1,ref st2,ref len,ref st,ref s,ref podmatr);
exit = true;
Console.Clear();
break;
case "2":
m.Caseswitch52(ref len,ref n, ref arr, ref sum5253,ref ddx, ref sred5253, ref index52);
exit = true;
Console.Clear();
break;
case "3":
m.Caseswitch53(ref len,ref sred5253, ref sum5253,ref x,ref y,ref n, ref arr, ref st, ref s, ref ddx, ref index53);
exit = true;
Console.Clear();
break;
case "4":
m.Caseswitch54(ref n, ref x, ref y, ref s, ref st, ref len, ref sum54, ref arr);
exit = true;
Console.Clear();
break;
case "5":
m.Caseswitch55(ref len,ref x, ref y, ref sum55, ref sred55, ref n, ref st, ref s, ref arr);
Console.Clear();
exit = true;
break;
case "6":
exit = false;
break;
default:
Console.WriteLine("Неправильный пункт меню"); break;
}
}
catch { Console.WriteLine("Неправильный пункт меню"); }
}
while (exit == true);
exit = true;
} Console.Clear();
break;
case "6":
Console.Clear();
WriteArrC(ref arr, ref len, ref n, ref x, ref y, ref s, ref st, ref podmatr, ref sum54, ref sred55, ref index53, ref index52);
break;
case "7":
WriteArrF(ref arr, ref len, ref n, ref x, ref y, ref s, ref st, ref podmatr, ref sum54, ref sred55,ref index53, ref index52);
break;
case "8":
exit = false;
break;
case "9":
Console.Clear();
WriteC(ref len, ref arr, ref n, ref x, ref y, ref s, ref st);
Console.ReadLine();
Console.Clear();
exit = true;
break;
default:
Console.WriteLine("Неправильный пункт меню");
break;
}
}
catch (FormatException)
{
Console.WriteLine(@"Неправильный пункт меню");
}
}
while (exit == true);
}
Блок-схема, описывающая алгоритм главной программы.
4.1.Генерация массива (DefaultGen)
Структура данных:
ИдентификаторНазначениеТипВид данныхarrМассив Ступенчатый ВыходноеlengконстантаЦелочисленноеВходнойcsstконстантаЦелочисленноеВходнойiпеременная цикла ЦелочисленноеЛокальнаяjпеременная циклаЦелочисленноеЛокальнаяnчисло строкЦелочисленноеВыходноеlenдлины строкЦелочисленный одномерный Выходноеxномер строки отсчётаЦелочисленноеВыходноеyномер столбца отсчётаЦелочисленноеВыходноеsчисло строк в подматрицеЦелочисленноеВыходноеstчисло столбцов в подматрицеЦелочисленноеВыходноеБлок схема(DefaultGen):
Тестирование(DefaultGen)
Исходные данные: leng=10,csst=3,
Ожидаемый результат: Массив ступечатый.Длина строк в случайном порядке равна от 6 до 10;
Выделенная подматрица и вывод исходных данных.
Итог теста: числа оказались в заданном диапазоне, выделение подматрицы прошло успешно.
static void DefaultGen(ref int[][] arr, ref int[] len, ref int n, ref int s, ref int st, ref int x, ref int y, ref Random rand
{
n = leng; x = 0; y = 0; s = csst; st = csst; rand = new Random(); len=new int[n];
for (int i = 0; i < n; i++) { len[i] = rand.Next(6, 10); arr[i] = new int[len[i]]; for (int j = 0; j < len[i]; j++) arr[i][j] = 111; }
for (int i=0;i<n;i++)
{Console.WriteLine();
for (int j = 0; j < len[i]; j++)
arr[i][j] = rand.Next(10, 99);
}
}
2.Заполнения массива построчно(Caseswitch1)
Структура данных:
ИдентификаторНазначениеТипВид данныхarrМассив Ступенчатый ВыходноеiПеременная цикла ЦелочисленноеЛокальнаяjПеременная циклаЦелочисленноеЛокальнаяsubstrПеременная разбитой строки массиваОдномерный массив строкЛокальнаяstrПеременная введённой строкистрокаВходнаяnчисло строкЦелочисленноеВходнаяlenДлины строкЦелочисленный одномерныйВходнойlengИсходное число строк и столбцовЦелочисленная константаВходная
Словесное описание:
1. Инициализация переменных;
2. Ввод числа строк;
3. Ввод длин строк;
4. Задание цикла с переменной i 5. ввод i-той строки(ввод элементов через пробел);
Блок схема(Caseswitch1):
Тестирование (Caseswitch1)
Исходные данные: str,len[0]=3,len[1]=6,len[2]=3,len[3]=5,len[4]=2,n=5;
Ожидаемый результат: Массив ступечатый.Число строк равно n, длина строки равна len[i];
Итог теста: из проведенного теста видно,что массив заполняется целыми числами от 3 до Полученные значения: совпадают с введёнными с клавиатуры (от 0 до 9)
Kод (Caseswitch1)
static void Caseswitch1(ref int[][] arr, ref int[] len, ref int n) {
bool exit = true;
string[] substr = new string[leng * 4];
string str = "";
Console.Clear();
do
{
Console.WriteLine("Введите количество строк в массиве:");
try
{
exit = true;
n = Convert.ToInt32(Console.ReadLine());
if ((n <= 0)||(n>leng)) throw new Exception();
for (int i = 0; i < leng; i++)
{
arr[i] = new int[leng];
for (int j = 0; j < leng; j++)
arr[i][j] = 111;
}
}
catch (FormatException)
{
Console.WriteLine("Неправильное количество строк"); exit = false;
}
catch (Exception)
{
Console.WriteLine("Неправильное количество строк"); exit = false;
}
}
while (exit == false);
exit = true;
for (int i = 0; i < n; i++)
{do
{
try
{
exit = false;
Console.Clear();
Console.WriteLine("Введите длину {0}-й строки", i + 1);
len[i] = Convert.ToInt32(Console.ReadLine());
if ((len[i] <= 0)||(len[i]>leng)) throw new Exception();
}
catch (FormatException)
{
Console.WriteLine("Неправильное количество строк"); exit = true;
}
catch (Exception)
{
Console.WriteLine("Неправильное количество строк"); exit = true;
}
}
while (exit == true);
}
Console.Clear();
for (int i = 0; i < n; i++)
{
do
{
try
{
exit = true;
Console.WriteLine("Введите {0}-ю строку (длина равна - {1})", i + 1, len[i]);
str = Console.ReadLine();
substr = str.Split();
if (substr.Length > len[i]) throw new Exception();
for (int j = 0; j < len[i]; j++)
arr[i][j] = Convert.ToInt32(substr[j]);
}
catch (FormatException)
{
Console.WriteLine("Неправильная строка"); exit = false;
}
catch (Exception)
{
Console.WriteLine("Неправильная строку"); exit = false;
}
}
while (exit == false);
}
}
3.Создание меню (Main);
1.Вывод пунктов меню.
Код (фрагмент Main)
Console.WriteLine(@"
Курсовая работа по теме: Работа с массивами.
Главное меню:
1. Ввод массива с клавиатуры.
2. Ввод массива из файла.
3. Заполнение массива случайными числами.
4. Задание подматрицы. 5. Выполнение функций.
6. Вывод входных и выходных данных на консоль.
7. Вывод в файл.
8. Выход из программы.
9. Вывести исходные данные на экран.
Введите пункт меню:
"); Визуальное представление меню:
3.1. Вывод массива на экран(фрагмент Main)
3.2 Загрузка массива из файла(Caseswitch2);
Структура данных
ИдентификаторНазначениеТипВид данныхarrМассив Ступенчатый ВыходноеlengконстантаЦелочисленноеВходнойcsstконстантаЦелочисленноеВходнойiпеременная цикла ЦелочисленноеЛокальнаяjпеременная циклаЦелочисленноеЛокальнаяnчисло строкЦелочисленноеВыходноеlenдлины строкЦелочисленный одномерный Выходноеxномер строки отсчётаЦелочисленноеВыходноеyномер столбца отсчётаЦелочисленноеВыходноеsчисло строк в подматрицеЦелочисленноеВыходноеstчисло столбцов в подматрицеЦелочисленноеВыходноеstrстрока из файлаСтрокаЛокальнаяsubstrразбитая строка strОдномерный массив строкЛокальныйrисходный файл in.txtReaderВходной
Словестное описание:
1. чтение файла "in.txt"; Инициализация переменных (n,len,x,y,s,st);
2. Цикл for (int i=0;i<3;i++);
3. чтение строк из файла;
4. деление строк на отдельные значения и конвертирование в целочисленный формат;
5. присвоение переменным значений из файла;
6. Проверка на целочисленность переменных
7. Создание массива arr(знаем кол-во строк и их длины len);
8. Цикл for(int i = 0; i < n; ++i);
8.1 Чтение строки с файла
8.2 Деление строки на значения и конвертация их в целочисленный формат;
8.3. Цикл for(int j=0;j<len[i];j++)
7.3.1 Присвоение элементу arr[i][j] значение с файла;
9. Закрытие файла r;
код(Caseswitch2)
static void Caseswitch2(ref int[][] arr, ref int[] len, ref int n, ref int x, ref int y, ref int s, ref int st) {
string[] substr = new string[leng];
string str = "";
arr = new int[leng][];
try
{
StreamReader r = new StreamReader("in.txt");
str = r.ReadLine();
n = int.Parse(str); //Число строк в массиве
for (int i = 0; i < n; i++)
{
arr[i] = new int[leng];
for (int j = 0; j < leng; j++)
arr[i][j] = 111;
}
for (int i = 0; i < 3; i++)
{
if ((i == 0) || (i == 1) || (i == 2))
{
if (i == 0)
{
str = r.ReadLine();
substr = str.Split();
s = int.Parse(substr[0]); //Число строк в подматрице
st = int.Parse(substr[1]);
} //Число столбцов в подматрице
if (i == 1)
{
str = r.ReadLine();
substr = str.Split();
x = int.Parse(substr[0]); //номер строки заданной точки y = int.Parse(substr[1]);
x = x - 1;
y = y - 1;
} //номер столбца заданной точки
if (i == 2)
{
str = r.ReadLine();
substr = str.Split();
for (int j = 0; j < n; j++)
len[j] = Convert.ToInt32(substr[j]);
}
}
}
if ((n <= 0) || (s <= 0) || (st <= 0) || (x < 0) || (y < 0) || (x >= n) || (y >= leng)) throw new Exception();
for (int i = 0; i < n; i++)
{
str = r.ReadLine();
substr = str.Split();
for (int j = 0; j < len[i]; j++)
arr[i][j] = int.Parse(substr[j]);
}Console.Clear();
Console.WriteLine(@"Чтение файла in.txt прошло успешно
нажмите Enter для продолжения..."); Console.ReadLine();
r.Close();
}
catch (IOException) { Console.Clear(); Console.WriteLine("Файл in.txtне найден"); Console.ReadLine(); Console.Clear(); }
catch (Exception) { Console.Clear(); Console.WriteLine("Ошибка формата данных"); Console.ReadLine(); Console.Clear(); }
}
Блоксхема(Caseswitch2):
Тестирование (Caseswitch2)
Исходные данные: файл in.txt.
Ожидаемый результат: вывод ступенчатого массива на консоль по строкам с равным интервалом, вывод всех исходных данных;
Итог теста:
in.txt. в файле:
in.txt на консоле:
Примечание: Елси файл не обнаружен - выдаётся ошибка "файл не найден", если ошибка в заполнении файла, то выдаётся ошибка - "ошибка формата данных"
Вывод исходных данных на консоль(WriteC)
Структура данных:
ИдентификаторНазначениеТипВид данныхarrМассив Ступенчатый Выходноеnчисло строкЦелочисленноеВыходноеlenдлины строкЦелочисленный одномерныйВыходнойxстрока отсчётаЦелочисленноеВыходнойyстолбец отсчётаЦелочисленноеВыходнойsчисло строк подматрицыЦелочисленноеВыходнойstчисло столбцов подматрицыЦелочисленноеВыходнойjПеременная циклаЦелочисленноеЛокальнаяiПеременная циклаЦелочисленноеЛокальная
Словесное описание:
1. Вывод всех исходных данных на консоль.
Тест (WriteC)
Исходные данные: arr,len,n,x,y,s,st - задаются тремя способами
Ожидаемый результат: Вывод исходных данных на консоль вне зависимости от способа задания массива.
Из файла:
С помощью генератора (от -10 до 10):
С клавиатуры:
Результаты совпали с исходными данными.
3.3 Задание массива и заполнение случайными числами из заданного диапазона (Caseswitch3).
Структура данных:
ИдентификаторНазначениеТипВид данныхarrМассив Ступенчатый Выходноеiпеременная цикла ЦелочисленноеЛокальнаяjпеременная циклаЦелочисленноеЛокальнаяnчисло строкЦелочисленноеВходноеlenдлины строкЦелочисленный одномерный Входноеrandгенератор случайных целых чиселReaderЛокальнаяa2конец диапазонаЦелочисленнаяВходнаяa1начало диапазонаЦелочисленнаяВходная
Словесное описание алгоритма:
1. Ввод числа строк n;
2. Цикл for( int i=0;i<n;i++)
2.1.Ввод длины строки len[i]
3. Ввод начала диапазона
4. Ввод конца диапазона
5. Цикл for (int i=0;i<n;i++)
5.1 Цикл for (int j=0;j<len[i];j++)
5.1.1. Присвоение элементу arr[i][j] случайного целого значения из диапазона (a1,a2);
Блок-схема (Caseswitch3):
Тестирование (Caseswitch3)
Исходные данные: len[0]=1,len[1]=5,len[2]=2,len[3]=6,len[4]=3,len[5]=7,len[6]=2,len[7]=5,len[8]=2,n=9,a1=-20,a2=20;
Ожидаемый результат: вывод ступенчатого массива на консоль по строкам с равным интервалом, вывод всех исходных данных;
Подменю:
Результаты: совпадают с введёнными данными.
3.4 Задание подматрицы (Caseswitch4)
Структура данных
ИдентификаторНазначениеТипВид данныхarrМассив Ступенчатый Входноеiпеременная цикла ЦелочисленноеЛокальнаяjпеременная циклаЦелочисленноеЛокальнаяnчисло строкЦелочисленноеВходноеlenдлины строкЦелочисленный одномерный Входноеxномер строки отсчётаЦелочисленноеВходноеyномер столбца отсчётаЦелочисленноеВходноеsЧисло строк подматрицыЦелочисленноеВходноеstЧисло столбцов в подматрицеЦелочисленноеВходное
Словесный алгоритм:
1. Ввод номера строки точки отсчёта;
2. Ввод номера столбца точки отсчёта;
3. Ввод числа строк в подматрице;
4. Ввод числа столбцов в подматрице;
5. Проверка на попадание точки отсчёта в элемент массива, на целочисленность введённых данных.
Блок-схема.
Тест (Caseswitch4)
Исходные данные: len[0]=2, len[1]=3,len[2]=1, len[3]=5,len[4]=3,n=5,x=0,y=0,s=3,st=3
Ожидаемый результат: правильное выделение подматрицы, вывод данных на консоль
Примечание: На экран выводятся координаты на 1 больше, чем на самом деле для удобства пользования)
Подменю: Результаты: совпадают с ожидаемыми.
3.5 Поменять местами два столбца из подматрицы(Caseswitch51)
Структура данных:
ИдентификаторНазначениеТипВид данныхarrМассив Ступенчатый Входноеiпеременная цикла ЦелочисленноеЛокальнаяjпеременная циклаЦелочисленноеЛокальнаяxномер строки отсчётаЦелочисленноеВходноеyномер столбца отсчётаЦелочисленноеВходноеsЧисло строк подматрицыЦелочисленноеВходноеstЧисло столбцов в подматрицеЦелочисленноеВходноеpodmatrИзменённый фрагмент ступенчатого массиваЦелочисленный ступенчатыйВыходнойst1Первый заменяемый столбецЦелочисленноеВходноеst2Второй заменяемый столбецЦелочисленноеВходноеbПеременная, запоминающая член.ЦелочисленнаяЛокальная
Словесный алгоритм:
1.Инициализация переменных (st1,st2,podmatr)
2.Ввод номера первого столбца.
3.Ввод второго заменяемого столбца.
4.Цикл for(int i=x;i<x+s;i++)
4.1 Цикл for(int j=y,j<y+st,j++)
4.1.1 Создание подматрицы
5. Цикл for(int i=0;i<s;i++)
5.1. Присвоение podmatr[i][st1] переменной b;
5.2 Присвоение podmatr[i][st2] элементу podmatr[i][st1];
5.3 Присвоение podmatr[i][st2] значения переменной b;
6. Проверка введённых данных на допустимость;
7. Вывод входных и выходных данных на консоль.
Блок-схема
Тест(Caseswitch51)
Исходные данные: st1=1,st2=3;arr,s=3,st=3, x=1, y=1 (нумерация начинается с 1, а не с 0)
Ожидаемый результат: правильная смена столбцов в подматрице несмотря на пустые ячейки.
Результат: совпадает с ожидаемымu.
Таблица верификации:
Исходные значения для трассировки:
st1= 1; st2=3;s=3;st=3;x=1;y=1;
№st1st2stbpodmatr[i][st1]podmatr[i][st2]sxyi,i<sj,j<st(st1>st)||(st2>st)1003311213340,да4.10,да4.1.134.11,да4.1.1741,да4.10,да4.1.1350,да5.135.275.336нет
3.6.Поиск наименее отличающегося элемента в строке от среднего значения строки в массиве, вывод индекса на экран. (Caseswitch52)
Структура данных:
ИдентификаторНазначениеТипВид данныхarrМассив Ступенчатый Входноеiпеременная цикла ЦелочисленноеЛокальнаяjпеременная циклаЦелочисленноеЛокальнаяsred5253среднее значение строкиВещественноеЛокальноеsum5253сумма элементов строкиВещественноеЛокальноеddxРазницы между элементом и среднимВещественный ступенчатый массивЛокальноеlenДлины строк массиваЦелочисленный одномерный массивВходноеnЧисло строкЦелочисленноеВходноеminМинимальная разница между элементом и средним в строкеВещественноеЛокальноеindex52Индекс наименее отличающегося элемента minЦелочисленный одномерный массивВыходное
Словесное описание:
1.Инициализация переменных.
2. Цикл for(int i=0;i<n;i++)
2.1 Цикл for(int j=0;j<len[i]l;j++)
2.1.1 Вычисление суммы [i] той строки
2.2 Вычисление среднего путём деления найденной суммы строки на длину строки
3. Цикл for(int i=0;i<n;i++)
3.1. Цикл for(int j=0;j<len[i];j++)
3.1.1. Вычисление ddx[i][j] модуля разности между средним и членом строки.
4 Цикл for(int i=0;i<n;i++)
4.1 min:=arr[i][0], присвоение минимальному значению первого элемента строки i; присвоение индексу минимального значения индекс первого элемента в строке index52[i]=0;
4.2 Цикл for(int j=0;j<len[i];j++)
4.2.1. Условие: Если ddx[i][j]<min
4.2.1.1 Если да: min:=ddx[i][j];
4.2.1.2 Присвоение номеру наименее отличающегося элемента номер столбца
5. Цикл for(int i=0;i<n;i++)
5.1 Вывод index52[i]+1;
Блок-схема:
Тестирование (Caseswitch52)
Исходные значения для тестирования:
arr, len, n=5.
Ожидаемый результат: вывод исходного массива и индексы наименее отличающихся членов строк от средних значений.
Результаты: сходятся с ожидаемыми.
Таблица верификации
Исходные значения для трассировки n=5,len[0]=2,len[1]=5,len[2]=2,len[3]=6,len[4]=4, arr (rand 10,99) (Будут рассмотрены первые итерации циклов)
№nsred5253minsum5253ddx[i][j]index52[i]i,i<nj,j<len[i]ddx[i][j]<min150000020,да2.10,да2.1.1672.11,да2.1.11422.27121,да2.10,да2.1.1252.237.630,да3.10,да3.1.1430,да3.11,да3.1.1440,да4.1400,да4.20,да4.2.1нет4.2.1.144.2.1.203.7. Поиск наименее элемента в строке подматрицы, наименее отличающегося от среднего значения строки подматрицы (Caseswitch53)
Структура данных:
ИдентификаторНазначениеТипВид данныхarrМассив Ступенчатый целочисленныйВходноеsum5253Сумма Вещественный ВыходноеiПеременная цикла ЦелочисленноеЛокальноеjПеременная циклаЦелочисленноеЛокальноеxстрока отсчётаЦелочисленноеВходнаяyстолбец отсчётаЦелочисленноеВходноеsЧисло строк в подматрицеЦелочисленноеВходноеstЧисло столбцов в подматрицеЦелочисленноеВходноеsred5253Среднее значение в строкеВещественное Локальноеindex53Номер наименее отличающегося от среднего элементаЦелочисленный одномерный массивВыходной
Словесное описание:
1.Инициализация переменных.
2. Цикл for(int i=x;i<x+s;i++)
2.1 Цикл for(int j=y;j<y+st;j++)
2.1.1 Вычисление суммы [i] той строки
2.2 Вычисление среднего путём деления найденной суммы строки на длину строки
3. Цикл for(int i=x;i<x+s;i++)
3.1. Цикл for(int j=y;j<y+st;j++)
3.1.1. Вычисление ddx[i][j] модуля разности между средним и членом строки.
4 Цикл for(int i=x;i<x+s;i++)
4.1 min:=arr[i][y], присвоение минимальному значению первого элемента строки i; присвоение индексу минимального значения индекс первого элемента в строке index52[i]=x;
4.2 Цикл for(int j=0;j<len[i];j++)
4.2.1. Условие: Если ddx[i][j]<min
4.2.1.1 Если да: min:=ddx[i][j];
4.2.1.2 Присвоение номеру наименее отличающегося элемента номер столбца
5. Цикл for(int i=x;i<x+s;i++)
5.1 Вывод index53[i]-x+1;
Блок схема(Caseswitch3):
Тестирование (Caseswitch53)
Исходные значения для тестирования:
arr, x=1,y=1,s=3,st=3.
Ожидаемый результат: вывод исходной подматрицы и индексы наименее отличающихся членов строк от средних значений несмотря на наличие пустот.
Результаты: сходятся с ожидаемыми.
Таблица верификации
Исходные значения для трассировки x=1,y=1,s=3,st=3, arr (rand 10,99) (Будут рассмотрены первые итерации циклов)
№nsred5253minsum5253ddx[i][j]index53[i]i,i<nj,j<len[i]ddx[i][j]<min150000020,да2.10,да2.1.1572.11,да2.1.11182.25921,да2.10,да2.1.1162.24530,да3.10,да3.1.1230,да3.11,да3.1.1240,да4.1200,да4.20,да4.2.1нет4.2.1.124.2.1.20
3.7 Вычисление суммы чётных элементов главной диагонали подматрицы (Caseswitch54)
Структура данных:
ИдентификаторНазначениеТипВид данныхarrМассив Ступенчатый целочисленныйВходноеiПеременная цикла ЦелочисленноеЛокальноеjПеременная циклаЦелочисленноеЛокальноеxстрока отсчётаЦелочисленноеВходнаяyстолбец отсчётаЦелочисленноеВходноеsЧисло строк в подматрицеЦелочисленноеВходноеstЧисло столбцов в подматрицеЦелочисленноеВходноеsum54Сумма чётных элементов диагоналиЦелочисленноеВыходное
Словесное описание алгоритма:
1. Инициализация переменных.
2. Цикл for(int i=x;i<x+s;i++)
2.1 Цикл for(int j=y;j<y+st;j++)
2.1.1 Условие: (i==g)&&(arr[i][j]!=null)&&(arr[i][j]%2=0))
2.1.1.1 Если да: sum54=sum54+arr[i][j];
3. Вывод суммы на экран.
Блок-схема
Тест (Caseswitch54)
Исходные данные: x=1,y=1,s=3,st=3;
Ожидаемый результат: вывод суммы чётных элементов главной диагонали подматрицы несмотря на наличие пустот в подматрице.
Результат: получившийся результат сходится с ожидаемым.
Таблица верификации:
Исходные данные для трассировки: x=1,y=1,s=3,st=3, arr (rand 10-99)
(Будут рассмотрены первые несколько итераций циклов)
№xysstsum54i,i<x+sj,j<y+st(i==j)&&(arr[i][j]!=null)&&(arr[i][j]%2==0)111330020,да2.10,да2.1.1да2.1.1.12020,да2.11,да2.1.1нет2.1.1.12020,да2.12,да2.1.1нет2.1.1.120 3.8 Вычисление среднего значения элементов, стоящих выше побочной диагонали массива (Caseswitch55)
Структура данных:
ИдентификаторНазначениеТипВид данныхarrМассив Ступенчатый целочисленныйВходноеiПеременная цикла ЦелочисленноеЛокальноеjПеременная циклаЦелочисленноеЛокальноеnчисло строкЦелочисленноеВходноеlenдлины строкЦелочисленный одномерный массивВходноеsum55сумма элементовВещественноеЛокальноеsred55среднее значение элементовВещественноеВыходноеcounterСчётчик элементовЦелочисленноеЛокальное Словесное описание алгоритма:
1. Инициализация переменных
2. Цикл for(int i=0;i<n;i++)
2.1 Цикл for(int j=len[i]-2-i;j>=0;j--)
2.1.1 Условие: (arr[i][j]!=null)
2.1.1.1 Если да: sum54=sum55+arr[i][j]; counter=counter+1;
3. Вычисление среднего значения sred55: деление sum55 на counter;
4. Вывод среднего значения на экран.
Тест(Caseswitch55)
Исходные данные: len[0]=5,len[1]=4,len[2]=1,len[3]=3,len[4]=1 n=5, arr (random 10-99)
Ожидаемый результат: Вывод правильного среднего значения несмотря на наличие пустых ячеек.
Результаты: соответствуют ожидаемым.
Блок-схема.
Таблица верификации.
Исходные данные для трассировочной таблицы: n=5, len[0]>len[1]>=len[2]>=len[3]>=len[4]
len[0]=5;
№nsum55sred55counteri,i<nj,j<len[i]arr[i][j]!=null)1500020,да2.10,да2.1.1да2.1.1.150120,да2.11,да2.1.1да2.1.1.114773.5220,да2.12,да2.1.1да2.1.1.116454,673
2
Документ
Категория
Рефераты
Просмотров
50
Размер файла
300 Кб
Теги
баранова, восстановлен, записка
1/--страниц
Пожаловаться на содержимое документа