Файл: Отчет по лабораторным работам оп. 04 Основы алгоритмизации и программирование ккоо. Оаип4211121. 000 Студент Самойлова К. А.docx

ВУЗ: Не указан

Категория: Отчет по практике

Дисциплина: Не указана

Добавлен: 06.11.2023

Просмотров: 178

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
numb = numb + 1;

sum = sum + mass[i, j];

}
}

}
}

int srarf = sum / numb;

Console.WriteLine($"4) среднее арифметическое над побочной диагональю = {srarf}");

}
static void SummDownAditional(int[,] mass)

{

int sum = 0;

int numb = 0;

int test = mass.GetLength(0) - 1;

for (int i = 0; i < mass.GetLength(0); i++)

{
for (int j = 0; j < mass.GetLength(1); j++)

{

if (test < i + j)

{

numb = numb + 1;

sum = sum + mass[i, j];
}

}
}

int srarf = sum / numb;

Console.WriteLine($"5) среднее арифметическое под побочной диагональю = {srarf}");

}
static void Transform(ref int[,] a)

{

int n = a.GetLength(0);

int buff;

for (int i = 0; i < a.GetLength(0); i++)

{

for (int j = 0; j <= a.GetLength(1) / 2; j++)

{

buff = a[i, j];

a[i, j] = a[i, n - j - 1];

a[i, n - j - 1] = buff;

}

}

}

static void Print(int[,] a)

{

for (int i = 0; i < a.GetLength(0); i++)

{

for (int j = 0; j < a.GetLength(1); j++)

{

Console.Write("{0,5} ", a[i, j]);

}

Console.WriteLine();

}

}

static void Transform2 (int[,] a) // 7 number

{

int row1;

int row2;

if (a.GetLength(0) % 2 == 0)

{

row1 = a.GetLength(0) / 2;

row2 = row1 - 1;

}

else

{

row1 = a.GetLength(0) / 2;

row2 = 0;

}

for (int i = 0; i < a.GetLength(1); i++)

{

int tmp = a[row1, i];

a[row1, i] = a[row2, i];

a[row2, i] = tmp;

}

}

static void Transform3(int[,] a) // 8 number

{

int col1;

int col2;

if (a.GetLength(0) % 2 == 0)

{

col1 = a.GetLength(1) / 2;

col2 = col1 - 1;

}

else

{

col1 = a.GetLength(1) / 2;

col2 = 0;

}

for (int i = 0; i < a.GetLength(0); i++)

{

int tmp = a[i , col1];

a[ i,col1] = a[ i,col2];

a[i, col2] = tmp;

}

}
static void Transform4(ref int[,] a) //9 не совсем

{

int n = a.GetLength(0);

int buff;

if (n%2 == 0)

{
for (int i = 0; i < a.GetLength(0)-1; i++)

{

for (int j = 0; j < a.GetLength(1); j++)

{

if (i != n-2)

{

buff = a[i, j];

a[i, j] = a[i + 1, j];

a[i + 1, j] = buff;

}
}

}

}

}

static void Main(string[] args)

{

Console.Write("Введите высоту массива: ");

int n = int.Parse(Console.ReadLine());

Console.Write("Введите длину массива: ");

int m = int.Parse(Console.ReadLine());

int[,] array1 = new int[n, m];

array1 = formirov2(array1, n, m);

Console.WriteLine("-------------------------------------------------------------------------------");

SRarf1(array1);

Console.WriteLine("-------------------------------------------------------------------------------");

SRarf2(array1);

Console.WriteLine("-------------------------------------------------------------------------------");

SummOnAditional(array1);

Console.WriteLine("-------------------------------------------------------------------------------");

SummUpAditional(array1);

Console.WriteLine("-------------------------------------------------------------------------------");

SummDownAditional(array1);

Console.WriteLine("-------------------------------------------------------------------------------");

Transform(ref array1);

Console.WriteLine("6) Массив A - transform");

Print(array1);

Console.WriteLine("-------------------------------------------------------------------------------");

Transform2(array1);

Console.WriteLine("7) Массив A - transform");

Print(array1);

Console.WriteLine("-------------------------------------------------------------------------------");

Transform3(array1);

Console.WriteLine("8) Массив A - transform");

Print(array1);

Console.WriteLine("-------------------------------------------------------------------------------");


Transform4(ref array1);

Console.WriteLine("9) Массив A - transform");

Print(array1);

Console.WriteLine("-------------------------------------------------------------------------------");

Console.ReadKey();


}

}

}





internal class Program

{

static Random rand = new Random();
static int[,] formirov2(int[,] mass, int n, int m)

{

{
for (int i = 0; i < mass.GetLength(0); i++)

{

for (int j = 0; j < mass.GetLength(1); j++)

{

mass[i, j] = rand.Next(100);

Console.Write("{0,4}", mass[i, j]);

}

Console.WriteLine();

}

return mass;

}

}
static int[,] Max (int[,] mass)

{

{

int max = 0;
for (int i = 0; i < mass.GetLength(0); i++)

{

for (int j = 0; j < mass.GetLength(1); j++)

{

if (max < mass[i, j])

{

max = mass[i, j];


}

}

Console.WriteLine( max);

max = 0;

}

return mass;

}

}
static int[,] Min(int[,] mass)

{

{

int min = 9999;
for (int i = 0; i < mass.GetLength(0); i++)

{

for (int j = 0; j < mass.GetLength(1); j++)

{

if (min > mass[i, j])

{

min = mass[i, j];

}
}

Console.WriteLine(min);

min = 9999;

}

return mass;

}

}
static void Main(string[] args)

{

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

int n = int.Parse(Console.ReadLine());

int[,] array1 = new int[n, n];

array1 = formirov2(array1, n, n);

Console.WriteLine("");

Max(array1);

Console.WriteLine");

Min(array1);

Console.WriteLine("");
Console.ReadKey();

}

}

}
Контрольная работа. Двумерные массивы.

Критерии оценивания:

решено одно задание – «удовлетворительно»;

решено два задания – «хорошо»;

решено три задания – «отлично».

Задание 1.
Дан двумерный массив. Размерность массива вводится с

клавиатуры. Элементами массива являются целые числа. Для заданной

последовательности целых чисел:

1) заменить все положительные элементы противоположными им

числами;

internal class Program

{

static void Print(int[,] a)

{

for (int i = 0; i < a.GetLength(0); i++)

{

for (int j = 0; j < a.GetLength(1); j++)

{

Console.Write("{0,5} ", a[i, j]);

}

Console.WriteLine();

}

}

static void Input(out int[,] a)

{

Console.Write("n = ");

int n = int.Parse(Console.ReadLine());

Console.Write("m = ");

int m = int.Parse(Console.ReadLine());

Random rnd = new Random((int)DateTime.Now.Ticks);

a = new int[n, m];

for (int i = 0; i < a.GetLength(0); i++)

{

for (int j = 0; j < a.GetLength(1); j++)

{

a[i, j] = rnd.Next(-100, 100);

}

}

}

static void Pol(int[,] a)

{

for (int i = 0; i < a.GetLength(0); i++)

{

for (int j = 0; j < a.GetLength(1); j++)

{

if (a[i, j] > 0) a[i, j] *= -1;

}

}

Console.WriteLine("Изменённый массив: ");

Print(a);

}

static void Main(string[] args)

{

int[,] A;

Input(out A);

Console.WriteLine("Массив А:");

Print(A);

Console.WriteLine();

Pol(A);

Console.ReadKey();

}

}



Задание 2.
Дан двумерный массив. Размерность массива вводится с

клавиатуры. Элементами массива являются целые числа. Для заданного


массива n*n:

7) поменять местами две средних строки если количество строк четное

и первую со средней строкой, если количество строк четное и первую со

средней строкой, если количество строк нечетное;
Лабораторная работа №11. Методы сортировки массива

Постановка задачи. Для решения многих задач необходимо

упорядочить данные по определенному признаку. Процесс упорядочения

заданного множества объектов по заданному признаку называется

сортировкой. Для простоты изложения рассматривается одномерный массив

из целых чисел. Суть большинства алгоритмов сортировки от такого

упрощения не изменяется. Алгоритмы сортировки отличаются друг от друга

степенью эффективности, под которой понимается количество сравнений и

количество обменов, произведенных в процессе сортировки. В основном мы

будем оценивать эффективность количеством операций сравнения (порядком этого значения). Заметим, что элементы массива можно сортировать:

по возрастанию – каждый следующий элемент больше

предыдущего;

по неубыванию – каждый следующий элемент не меньше

предыдущего, то есть больше или равен;

по убыванию – каждый следующий элемент меньше

предыдущего;

по невозрастанию – каждый следующий элемент не больше

предыдущего, то есть меньше или равен.

Научившись выполнять одну сортировку, изменить ее, чтобы получить

другую, не составляет особого труда.

Задание 1.

Ознакомьтесь с алгоритмами сортировки простого выбора,

простого обмена, простой вставки.

Задание 2.

Запрограммируйте эти методы, стараясь не использовать

подсказки. Ниже приведены программные коды, реализующие эти методы.

Комментарий.

Класс предоставляет набор методов и свойств, которые можно

использовать для точного измерения затраченного времени.

Метод Start() запускает таймер, который измеряет время выполнения

Задание 3.

Проведите испытание. Задайте количество элементов в массиве 100,1000,10000,100000 и сравните время выполнения алгоритма. Какой алгоритм эффективнее? Для ответа на этот вопрос заполните таблицу (* заменить на полученные данные)


n

метод

100

1000

10000

100000

Метод простого выбора

0мс

0 сек

243 тик

1мс

0 сек

19971 тик

201мс

0сек

2018233тик

19256мс

19 сек

192566079тик

Метод простых обменов

0мс

0 сек

229 тик

2мс

0 сек

28525 тик

293мс

0 сек

2939699 тик

27185мс

27 сек

271852247 тик

Метод простых вставок

0мс

0 сек

110 тик

0мс

0 сек

7276 тик

74мс

0 сек

741018 тик

7561мс

7 сек

75613789 тик



Задание 4. Как изменятся алгоритмы, если сортировать массив надо по убыванию.

static void Main(string[] args)

{

int n = 5;

int[] a = new int[n];

Random r = new Random();

for (int i = 0; i < n; i++)

{

a[i] = r.Next(0, 10);

Console.Write(a[i] + " ");

}

Stopwatch watch = new Stopwatch();

watch.Start();

for (int i = 1; i < n; i++)

{

int w = a[i];

int j = i - 1;

while (j >= 0 && w > a[j])

{

a[j + 1] = a[j];

j--;

}

a[j + 1] = w;

}

watch.Stop();

Console.WriteLine();

for (int i = 0; i < n; i++) Console.Write(a[i] + " ");

Console.WriteLine();

Console.WriteLine("Методпростогообмена");

Console.WriteLine("Сортировка массива из {0} элементов", n);

Console.WriteLine("Время выполнения программы в милисекундах:" + watch.ElapsedMilliseconds + "мс");

Console.WriteLine("Время выполнения программы в секундах:" + watch.Elapsed.Seconds + "сек");

Console.WriteLine("Время выполнения программы в тиках:" + watch.ElapsedTicks);

Console.ReadLine();

}



internalclassProgram

{

staticvoid Main(string[] args)

{

int n = 4;

int[] a = newint[n];

Random r = newRandom();

for (inti = 0; i< n; i++)

{

a[i] = r.Next(0,7);

Console.Write(a[i] + " ");

}

Stopwatch watch = newStopwatch();

watch.Start();

for (inti = 0; i< n - 1; i++)

{

int w;

for (int j = 0; j < n - i - 1; j++)

{

if (a[i] <= a[j+1])

{

w = a[j];

a[j] = a[j + 1]; a[j + 1] = w;

}

}

}

watch.Stop();

Console.WriteLine();

for (inti = 0; i< n; i++) Console.Write(a[i] + " ");

Console.WriteLine();

Console.WriteLine("Методпростоговыбора");

Console.WriteLine("Сортировка массива из {0} элементов", n);

Console.WriteLine("Время выполнения программы в миллесекундах: " + watch.ElapsedMilliseconds + "мс");

Console.WriteLine("Время выполненияпрограммы в секундах: " + watch.Elapsed.Seconds + "сек");

Console.WriteLine("Время выполнения программы в тиках: " + watch.ElapsedTicks);

Console.ReadLine();

}

}

}

Задание 5.

Известны значения роста 25 учащихся класса, заданные в

алфавитном порядке фамилий. Определить рост учащегося, который при

построении учащихся по росту в порядке возрастания занимал бы 10-е место

при счете от самого высокого ученика.

static void Print(int[] a)

{

for (int i = 0; i < a.Length; i++)

{

Console.Write(" {0,3} см |", a[i]);

}

}

static int[] Input()

{

Random rnd = new Random();

Console.Write("n=");

int n = int.Parse(Console.ReadLine());

int[] a = new int[n];

for (int i = 0; i < a.Length; i++)

{

a[i] = rnd.Next(150, 190);

}

return a;

}

static void Sort(int[] a)

{

int temp;

for (int i = 0; i < a.Length - 1; i++)

{

for (int j = a.Length - 1; j > i; j--)

{

if (a[j] < a[j - 1])

{

temp = a[j];

a[j] = a[j - 1];

a[j - 1] = temp;

}

}

}

}

static void Vibor(int[] a)

{

int temp1;

for (int i = 0; i < a.Length; i++)

{

for (int j = 0; j < a.Length; j++)