- •Введение
- •Рекомендуемая литература
- •Содержание отчета
- •Сохранение проекта
- •Порядок работы при выполнении задания в интегральной среде разработки (иср) Visual c# 2010 Express
- •1. Изучение иср Visual c# 2010 Express
- •2. Программирование алгоритмов линейной структуры
- •3. Программирование алгоритмов разветвляющейся структуры
- •4. Программирование алгоритмов циклической структуры.
- •5. Обработка одномерных и двумерных массивов
- •6. Процедуры и функции
5. Обработка одномерных и двумерных массивов
Подготовка к работе
1. По указанной литературе изучить:
способы описания размеров массивов;
способы ввода и вывода массивов;
реализацию приемов накопления суммы или произведения элементов массивов, запоминания результатов, нахождение наибольшего и наименьшего.
2. Разработать алгоритмы решения в соответствии с заданием.
3. Составить программы решения задач.
Контрольные вопросы
Дайте понятие массива.
Как объявляются массивы?
Как осуществляется доступ к элементу массива?
Какому типу принадлежат индексы массива, и его элементы?
Как задаются одномерные и двумерные массивы?
Какие операции можно производить над элементами массива?
Какие способы ввода элементов массива Вы знаете?
Какие инструкции языка С# можно использовать для ввода, вывода и обработки массивов?
Каковы особенности организации цикла при обработке массивов?
Каковы особенности программирования при обработке массивов?
Как производится накопление суммы, произведения элементов массива?
Как вывести на экран монитора одномерный массив в виде строки/столбца?
Как вывести на экран монитора двумерный массив в виде матрицы?
Задание и порядок выполнения работы
Задача1. Составить алгоритм, написать программу и создать проект – консольное приложение, которое позволяет произвести вычисление по заданию 1, приведенному в в табл. 5.1.
По всем вариантам задан одномерный массив из вещественных чисел в диапазоне –20 . . . +20. Необходимо:
описать массив (имя массива и его размерность заданы в табл. 5.1);
задать элементы массива из заданного диапазона;
вывести для контроля на экран элементы исходного массива;
выполнить с элементами массива действия, заданные в табл. 5.1;
вывести результаты решения задания на экран;
сохранить проект решения в своей папке на диске D:\Temp\ …\Prg \Р5\P5_1 под именем Mas1 в папке P5_1.
Таблица 5.1
N |
Имя массива |
Задание 1 |
1 |
А(10) |
Вывести на печать подряд все четные положительные элементы массива А |
2 |
В(12) |
Вычислить среднее арифметическое значение отрицательных элементов массива В. |
3 |
G(16) |
Вывести последовательность g1, g9, g2, g10, ... , g8, g16 и вычислить произведения образовавшихся пар (g1 g9)…(g8 g16) элементов массива G. |
4 |
С(10) |
Найти сумму s элементов массива С. Вычислить (s – c1, s – c2, …, s – c10). Результат вывести в одной строке. |
5 |
H(14) |
Вывести последовательность h1, h14, h2, h13, ... , h7, h8 и вычислить суммы образовавшихся пар (h1+ h14)… (h7+ h8) элементов массива H. |
6 |
D(10) |
Найти произведение p элементов массива D. Вычислить (p + d1, p + d2, …, p + d10 ). Результат вывести в виде столбца. |
7 |
F(12) |
Вычислить максимальный элемент массива сформированных пар (f1+ f12, f2 + f11, ... , f6 + f7 ). |
8 |
L(16) |
Переписать в массив L подряд положительные элементы массива M. |
9 |
K(12) |
Вычислить минимальный элемент массива сформированных пар ( k1· k7, k2 · k8, ... , k6 · k12 ). |
10 |
P(12) |
Переписать в массив Q подряд отрицательные элементы массива P. |
11 |
F(10) |
Вычислить среднее арифметическое значение m элементов массива F. Вычислить (f1 + m, f 2 + m, …, f10 + m). |
12 |
N(8) |
Вывести на печать подряд все нечетные отрицательные элементы массива N. |
Задача2. Составить алгоритм, написать программу и создать консольное приложение для решения задания 2, приведенного в табл. 5.2. Для всех вариантов задана квадратная целочисленная матрица размером 4х4, элементы которой находятся в диапазоне 0 . . . 99. Необходимо:
описать двумерный массив;
ввести элементы матрицы из заданного диапазона, используя функцию случайных чисел;
вывести элементы в виде матрицы 4х4;
выполнить с элементами матрицы действия, заданные в табл. 5.2;
вывести результаты решения задания на экран;
сохранить проект под именем Mas в своей папке на диске D:\Temp\ …\ Prg\ Р5\P5_2 в папке P5_2.
Таблица 5.2
№ |
Имя массива |
Задание 2 |
1 |
F |
Вычислить произведение элементов второго и третьего столбца матрицы. |
2 |
D |
Вывести на печать подряд четные элементы матрицы. |
3 |
C |
Вычислить среднее арифметическое матрицы. |
4 |
B |
Найти произведение элементов нечетных столбцов матрицы. |
5 |
A |
Вычислить произведение элементов двух последних столбцов матрицы. |
6 |
F |
Найти сумму элементов главной диагонали матрицы. |
7 |
C |
Вывести на печать подряд нечетные элементы матрицы. |
8 |
B |
Вычислить сумму элементов, расположенных по периметру матрицы. |
9 |
D |
Вычислить произведение элементов двух первых строк матрицы. |
10 |
A |
Найти сумму элементов побочной диагонали матрицы. |
11 |
M |
Найти сумму элементов четных строк матрицы. |
12 |
D |
Найти сумму элементов, расположенных в углах матрицы. |
Проекты отладить, исполнить и проверить результат вычисления в соответствии с заданием.
Cкопировать созданные проекты (папки P5_1 и Р5_2 с их содержимым) на свою Flash-память.
Завершить работу и подготовить отчет. В отчете для каждого задание (п.п.2, 3) отразить: условие, алгоритм решения, программу, полученные результаты.
На защите уметь составлять программы по любому варианту заданий, приведенных в табл. 5.1 и 5.2.
Методические указания по выполнению задания
Задача 1. В массиве А из 10 элементов действительных чисел вычислить наименьший элемент массива и его номер.
Рассмотрим вариант, когда одномерный массив инициализирован заранее, например:
Р
езультаты
выполнения программы:
Рис. 5.1. Блок-схема алгоритма Задачи1
Задача 2. Задана матрица М, размером 44. Получить матрицу T транспонированную по отношению к матрице М, т.е. поменять местами строки и столбцы ( i-я строка матрицы М становится i-м столбцом матрицы T, а j-й столбец матрицы М становится j-й строкой матрицы T).
Рассмотрим вариант, когда массив формируется с помощью генератора случайных чисел Random, например:
Результаты вычисления:
Рис. 5.2. Блок-схема алгоритма Задачи2
Задания дом для самостоятельного решения.
Составить блок-схему и написать программу решения задачи по предложенному варианту таблицы 5.3. По всем вариантам задан массив из целых чисел.
Таблица 5.3
-
N
Задание 3
1
Переставьте соседние элементы массива (0-й элемент поменять с 1-м, 2-й с 3-м и т.д.) Если элементов нечетное число, то последний остается на своем месте.
2
Дан массив из 20 элементов. Подсчитать сумму положительных чисел, находящихся между максимальным и минимальным значениями.
3
Отсортировать одномерный массив из 10 элементов по возрастанию.
4
Элементы одномерного массива циклически сдвинуть на 2 позиции влево
5
Отсортировать одномерный массив из 16 элементов по убыванию.
6
Элементы одномерного массива циклически сдвинуть на 3 позиции вправо
7
Дан массив из 20 элементов. Подсчитать количество отрицательных чисел, находящихся между максимальным и минимальным значениями.
8
Элементы одномерного массива сдвинуть на 3 позиции вправо
9
Дана квадратная матрица размера 66. Найти номера столбцов, все элементы которых – нули
10
Дана квадратная матрица размера 66. Найти номера столбцов, элементы которых образуют возрастающую последовательность (x1i < x2i < ... < xni ).
11
Дана квадратная матрица размера 66. Найти номера столбцов, элементы в каждом из которых одинаковы
12
Элементы одномерного массива циклически сдвинуть на 3 позиции вправо.
Составить блок-схему и написать программу решения задачи по предложенному варианту таблицы 5.4. По всем вариантам задан массив из символов.
Таблица 5.4
-
№
Задание 4
1
Элементы одномерного массива A сдвинуть на 3 позиции вправо
2
В заданной строке G заменить последовательность символов (nl)i на символ yi и подсчитать число произведенных замен
3
Элементы одномерного массива B циклически сдвинуть на 3 элемента влево
4
В веденной строке C заменить все символы ki на символы (ab)i и подсчитать число произведенных замен
5
Элементы одномерного массива H циклически сдвинуть на 2 элемента вправо
6
В заданной строке D заменить последовательность символов (xyz)i на символ ti и подсчитать число произведенных замен.
7
Элементы одномерного массива F циклически сдвинуть на 2 элемента влево
8
В заданной строке K заменить все символы xi на ai и подсчитать число произведенных замен
9
Элементы одномерного массива M циклически сдвинуть на 3 элемента вправо.
10
В веденной строке P заменить все символы yi на ki и подсчитать число произведенных замен произведенных замен
11
Элементы одномерного массива N циклически сдвинуть на 3 элемента влево.
12
В заданной строке F заменить последовательность xi на (cd)i и подсчитать число произведенных замен
Проанализировать результат на соответствие поставленной задачи.
Методические указания по выполнению задания
Символьная информация может быть представлена: отдельными символами и строками.
Для отдельных символов используются переменные типа char. Для строк - типа string.
В C# имеется символьный класс char, используемый двухбайтовую кодировку Unicode представления символов. Для этого типа в языке определены символьные константы. Константу можно задавать:
- символом, заключенным в одинарные кавычки;
- escape-последовательностью;
- Unicode-последовательностью, задающей Unicode код символа.
Примеры объявления символьных переменных и работа с ними:
static void Main(string[] args)
{char ch1 = 'A', ch2 = '\x59', ch3 = '\u0058'; //буква A,
//буква Y Escape-последовательность \x59,буква X кодировка Юникода \u0058
char ch = new Char(); //символьный класс, используемый двухбайтовую кодировку
int code;
string s;
ch = ch1; // ch объявляется в объектном стиле
code = ch; //преобразование символьного типа в тип int
ch1 = (char)(code + 1); //формирование кода буквы B
//преобразование символьного типа в строку
s = ch1.ToString() + ch2.ToString() + ch3.ToString();
Console.WriteLine("s = {0}, ch = {1}, code = {2}", s, ch, code); Console.ReadKey();}
Массив символов можно преобразовать в строку методом ToString(), но можно выполнить и обратное преобразование. В C# имеется строковый класс string, задающий строки переменной длины. У класса string есть метод ToCharArray, преобразующий строку в массив символов. Строку можно задавать из:
- символа, повторенного заданное число раз;
- массива символов char[];
- части массива символов.
Примеры объявления строковых переменных и работа с ними:
static void Main(string[] args)
{string world = "Мир"; //объявление переменной world
string sssss = new string('s', 5); //строковый класс, с буквой s повторяется 5 раз
char[ ] yes = "Yes".ToCharArray(); //объявление символьного класса для строки Yes
string stryes = new string(yes); //объявление строкового класса stryes
string strye = new string(yes, 0, 2); //объявление строкового класса для символьного
// массива yes с начальной позицией знака = 0 и длиной = 2 символа
Console.WriteLine("world ={0}, sssss ={1}, stryes ={2}"+" strye ={3}", world, sssss, stryes, strye);
Console.ReadKey();}
Над строками определены операции: присваивание = ,
эквивалентности (==) и (!=), конкатенации или объединение строк (+) и взятие индекса ([])
Получить доступ к отдельному символу строки можно, указав его номер в квадратных скобках после имени переменной. Например, s[i], где i – номер строки s.
Рекомендации для решения задач, связанных со сдвигом элементов в массиве, например, Х.
Пусть задан массив из 4 элементов, например х1, х2, х3, х4. Необходимо сдвинуть элементы этого массива на 2 элемента влево. В результате однократного сдвига элементы в массиве распределяются следующем образом: х2, х3, х4, 0. При повторном сдвиге – х3, х4, 0, 0.
При
циклическом сдвиге элементы х1, х2, х3,
х4 перемещаются по кольцу и однократный
циклический сдвиг например, вправо
приведет к следующему распределению
элементов х4, х1, х2, х3, а повторный
циклический сдвиг распределит элементы
– х3, х4, х1, х2. Во избежание потери
элементов при циклическом сдвиге
необходимо выдвигаемый элемент временно
поместить в буфер с последующей
перезаписью его на соответствующее
место массива после сдвига.
Рис. 5.3. Блок-схема
алгоритма Задачи3.
