
- •Лекция 1. Платформа Microsoft .Net Framework 2.0
- •Понятия приложения, проекта, решения
- •Среда разработки Visual Studio .Net
- •Создание первого проекта
- •Компиляция и выполнение программы в среде clr
- •1.2. Рекомендации по выполнению практикума
- •1.3. Рекомендации по самостоятельной работе
- •Лекция 2. Технология объектно-ориентированного программирования
- •Состав языка
- •Типы данных
- •Переменные и константы
- •Организация ввода-вывода данных. Форматирование
- •Вывод данных
- •Ввод данных
- •Практикум
- •Самостоятельная работа
- •Лекция 3. Операции
- •Выражения и преобразование типов
- •Практикум
- •Самостоятельная работа
- •Лекция 4. Операторы языка c#
- •Операторы следования
- •Операторы ветвления
- •Условный оператор if
- •Оператор выбора switch
- •Операторы цикла
- •Цикл с предусловием while
- •Цикл с постусловием do while
- •Цикл с параметром for
- •Вложенные циклы
- •Операторы безусловного перехода
- •Оператор безусловного перехода goto
- •Оператор выхода break
- •Оператор перехода к следующей итерации цикла continue
- •Практикум
- •Самостоятельная работа
- •Лекция 5. Методы: основные понятия
- •Методы: основные понятия. Перегрузка методов. Методы: основные понятия
- •Перегрузка методов
- •Практикум
- •Самостоятельная работа Теоретический материал
- •Практическое задание
- •Лекция 6. Рекурсивные методы
- •Практикум
- •Самостоятельная работа
- •Лекция 7. Обработка исключений
- •Оператор try
- •Операторы checked и unchecked
- •Генерация собственных исключений
- •Полезные совет
- •Практикум
- •Самостоятельная работа Теоретический материал Вычисление конечных сумм и произведений
- •Вычисление бесконечных сумм
- •Практическое задание
- •Лекция 8. Массивы
- •Одномерные массивы
- •Массивы и исключения
- •Массив как параметр
- •Массив как объект
- •Многомерные массивы
- •Ступенчатые массивы
- •Оператор foreach и его использование при работе с массивами
- •Практикум
- •Самостоятельная работа Теоретический материал Вставка и удаление элементов в массивах
- •Практические задания
- •Лекция 9. Символы и строки
- •Символы char
- •Неизменяемые строки string
- •Изменяемые строки
- •Практикум
- •Самостоятельная работа
- •Запуск программы из командной строки
- •Передача параметров в метод Main из командной строки
- •Практические задачи
- •Лекция 10. Регулярные выражения
- •Метасимволы в регулярных выражениях
- •Поиск в тексте по шаблону
- •Редактирование текста
- •Практикум
- •Самостоятельная работа Теоретический материал
- •Практическое задание
- •Лекция 11. Организация с#-системы ввода-вывода
- •Байтовый поток
- •Символьный поток
- •Двоичные потоки
- •Перенаправление стандартных потоков
- •Практикум
- •Самостоятельная работа
- •Лекция 12. Работа с файловой системой
- •12.1.Работа с файловой системой: классы Directory и Filе и классы DirectoryInfo и FileInfo Работа с файловой системой
- •Работа с каталогами Абстрактный класс FileSystemInfo
- •Класс DirectoryInfo
- •Класс Directory
- •Работа с файлами Класс Filelnfo
- •Класс File
- •12.2. Практикум
- •12.3. Самостоятельная работа
- •Данные: поля и константы
- •Конструкторы
- •Конструкторы экземпляра
- •Конструкторы класса
- •Свойства
- •"Один класс - один файл",
- •13.2. Практикум
- •13.3. Самостоятельная работа
- •13.4. Классы: деструкторы, индексаторы, операции класса, операции преобразования типов Деструкторы
- •Индексаторы
- •Операции класса
- •Унарные операции
- •Бинарные операции
- •Операции преобразования типов
- •13.5. Практикум (продолжение практикума 13)
- •13.6. Самостоятельная работа
- •Лекция 14. Иерархия классов
- •14.1 Иерархия
- •Наследование
- •Использование защищенного доступа
- •Наследование конструкторов
- •Многоуровневая иерархия
- •Переменные базового класса и производного класса
- •Виртуальные методы
- •Абстрактные методы и классы
- •Запрет наследования
- •14.2. Практикум
- •14.3. Самостоятельная работа
- •Лекция 15. Интерфейсы и структуры
- •15.1. Пользовательские и стандартные интерфейсы. Структуры Интерфейсы
- •Стандартные интерфейсы .Net
- •Структуры
- •15.2. Практикум
- •15.3. Самостоятельная работа Теоретический материал
- •Задание
- •Лекция 16. Коллекции
- •16.1. Классификация коллекций. Коллекции общего назначения: стек. Очередь, динамический массив, хеш-таблица Коллекции
- •Коллекции общего назначения
- •Класс Stack
- •Класс Queue
- •Класс ArrayList
- •Класс Hashtable
- •16.2. Практикум
- •16.3. Самостоятельная работа
- •Дополнения Дополнение. Операции с#
- •Дополнение. Математические функции языка с#
- •Литература
Оператор foreach и его использование при работе с массивами
Оператор foreach применяется для перебора элементов в специальным образом организованной группе данных, в том числе и в массиве. Удобство этого вида цикла заключается в том, что нам не требуется определять количество элементов в группе и выполнять перебор по индексу - мы просто указываем на необходимость перебрать все элементы группы. Синтаксис оператора:
foreach (<тип> <имя> in <группа>) <тело цикла>
где имя определяет локальную по отношению к циклу переменную, которая будет по очереди принимать все значения из указанной группы, а тип соответствует базовому типу элементов группы.
Ограничением оператора foreach является то, что с его помощью можно только просматривать значения элементов в группе данных, но нельзя их изменять.
Рассмотрим несколько примеров использования оператора foreach:
для работы с одномерными массивами:
static void PrintArray(string a, int [] mas)
{
Console.WriteLine(a);
foreach (int x in mas)Console.Write("{0} ", x);
Console.WriteLine();
}
для работы с двумерными массивами:
static int Sum (int [,] mas)
{
int s=0;
foreach (int x in mas) s += x;
return s;
}
для работы со ступенчатыми массивами:
static void PrintArray3(string a, int[][] mas)
{
Console.WriteLine(a);
for (int i = 0; i < mas.Length; i++)
{
foreach (int x in mas[i]) Console.Write("{0} ", x);
Console.WriteLine();
}
}
Практикум
Дана последовательность целых чисел.
Замечание. Задачи из данного пункта решить двумя способами, используя одномерный массив, а затем двумерный. Размерность массива вводится с клавиатуры.
Заменить все положительные элементы противоположными им числами.
Пример 1: для одномерного массива
using System;
namespace ConsoleApplication2
{
class Class
{
static int [] Input ()
{
Console.WriteLine("введите размерность массива");
int n=int.Parse(Console.ReadLine());
int []a=new int[n];
for (int i = 0; i < n; ++i)
{
Console.Write("a[{0}]= ", i);
a[i]=int.Parse(Console.ReadLine());
}
return a;
}
static void Print(int[] a)
{
for (int i = 0; i < a.Length; ++i) Console.Write("{0} ", a[i]);
Console.WriteLine();
}
static void Change(int[] a)
{
for (int i = 0; i < a.Length; ++i)
if (a[i] > 0) a[i] = -a[i];
}
static void Main()
{
int[] myArray=Input();
Console.WriteLine("Исходный массив:");
Print(myArray);
Change(myArray);
Console.WriteLine("Измененный массив:");
Print(myArray);
}
}
}
Пример 2: для двумерного массива
using System;
namespace ConsoleApplication
{
class Class
{
static int [,] Input (out int n, out int m)
{
Console.WriteLine("введите размерность массива");
Console.Write("n = ");
n=int.Parse(Console.ReadLine());
Console.Write("m = ");
m=int.Parse(Console.ReadLine());
int [,]a=new int[n, m];
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j)
{
Console.Write("a[{0},{1}]= ", i, j);
a[i, j]=int.Parse(Console.ReadLine());
}
return a;
}
static void Print(int[,] a)
{
for (int i = 0; i < a.GetLength(0); ++i,Console.WriteLine() )
for (int j = 0; j < a.GetLength(1); ++j)
Console.Write("{0,5} ", a[i, j]);
}
static void Change(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] = -a[i, j];
}
static void Main()
{
int n,m;
int[,] myArray=Input(out n, out m);
Console.WriteLine("Исходный массив:");
Print(myArray);
Change(myArray);
Console.WriteLine("Измененный массив:");
Print(myArray);
}
}
}
Заменить все элементы, меньшие заданного числа, этим числом.
Заменить все элементы, попадающие в интервал
, нулем.
Заменить все отрицательные элементы, не кратные
, противоположными им числами.
Все элементы, меньшие заданного числа, увеличить в два раза.
Подсчитать среднее арифметическое элементов.
Подсчитать среднее арифметическое отрицательных элементов.
Подсчитать количество нечетных элементов.
Подсчитать сумму элементов, попадающих в заданный интервал.
Подсчитать сумму элементов, кратных 9.
Подсчитать количество элементов, не попадающих в заданный интервал.
Подсчитать сумму квадратов четных элементов.
Вывести на экран номера всех элементов больших заданного числа.
Вывести на экран номера всех нечетных элементов.
Вывести на экран номера всех элементов, которые не делятся на 7.
Вывести на экран номера всех элементов, не попадающих в заданный интервал.
Определить, является ли произведение элементов трехзначным числом.
Определить, является ли сумма элементов двухзначным числом.
Вывести на экран элементы с четными индексами (для двумерного массива - сумма индексов должна быть четной).
Вывести на экран положительные элементы с нечетными индексами (для двумерного массива - первый индекс должен быть нечетным).
Дана последовательность из n действительных чисел.
Замечание. Задачи из данного пункта решить, используя одномерный массив.
Подсчитать количество максимальных элементов.
Пример.
using System;
namespace ConsoleApplication
{
class Class
{
static int [] Input ()
{
Console.WriteLine("введите размерность массива");
int n=int.Parse(Console.ReadLine());
int []a=new int[n];
for (int i = 0; i < n; ++i)
{
Console.Write("a[{0}]= ", i);
a[i]=int.Parse(Console.ReadLine());
}
return a;
}
static int Max(int[] a)
{
int max=a[0];
for (int i = 1; i < a.Length; ++i)
if (a[i] > max) max=a[i];
return max;
}
static void Main()
{
int[] myArray=Input();
int max=Max(myArray);
int kol=0;
for (int i=0; i<myArray.Length;++i)
if (myArray[i]==max)++kol;
Console.WriteLine("Количество максимальных элементов = "+kol);
}
}
}
Вывести на экран номера всех минимальных элементов.
Заменить все максимальные элементы нулями.
Заменить все минимальные элементы на противоположные.
Поменять местами максимальный элемент и первый.
Вывести на экран номера всех элементов, не совпадающих с максимальным.
Найти номер первого минимального элемента.
Найти номер последнего максимального элемента.
Подсчитать сумму элементов, расположенных между максимальным и минимальным элементами (минимальный и максимальный элементы в массиве единственные). Если максимальный элемент встречается позже минимального, то выдать сообщение об этом.
Найти номер первого максимального элемента.
Найти номер последнего минимального элемента.
Подсчитать сумму элементов, расположенных между первым максимальным и последним минимальными элементами. Если максимальный элемент встречается позже минимального, то выдать сообщение об этом.
Поменять местами первый минимальный и последний максимальный элементы.
Найти максимум из отрицательных элементов.
Найти минимум из положительных элементов.
Найти максимум из модулей элементов.
Найти количество пар соседних элементов, разность между которыми равна заданному числу.
Подсчитать количество элементов, значения которых больше значения предыдущего элемента.
Найти количество пар соседних элементов, в которых предыдущий элемент кратен последующему.
Найти количество пар соседних элементов, в которых предыдущий элемент меньше последующего.
Дан массив размером n×n, элементы которого целые числа.
Замечание. При решении задач из данного пункта использовать двумерный массив.
Подсчитать среднее арифметическое нечетных элементов, расположенных выше главной диагонали.
Пример.
using System;
namespace ConsoleApplication
{
class Class
{
static int [,] Input (out int n)
{
Console.WriteLine("введите размерность массива");
Console.Write("n = ");
n=int.Parse(Console.ReadLine());
int [,]a=new int[n, n];
for (int i = 0; i < n; ++i)
for (int j = 0; j < n; ++j)
{
Console.Write("a[{0},{1}]= ", i, j);
a[i, j]=int.Parse(Console.ReadLine());
}
return a;
}
static void Print(int[,] a)
{
for (int i = 0; i < a.GetLength(0); ++i,Console.WriteLine() )
for (int j = 0; j < a.GetLength(1); ++j)
Console.Write("{0,5} ", a[i, j]);
}
static double Rezalt(int[,] a)
{
int k=0;
double s=0;
for (int i = 0; i < a.GetLength(0); ++i)
for (int j = i+1; j < a.GetLength(1); ++j)
if (a[i, j] %2!= 0) {++k; s+=a[i, j];}
if (k!=0) return s/k;
else return 0;
}
static void Main()
{
int n;
int[,] myArray=Input(out n);
Console.WriteLine("Исходный массив:");
Print(myArray);
double rez=Rezalt(myArray);
Console.WriteLine("Среднее арифметическое ={0:f2}", rez);
}
}
}
Подсчитать среднее арифметическое четных элементов, расположенных ниже главной диагонали.
Подсчитать сумму элементов, расположенных на побочной диагонали.
Подсчитать среднее арифметическое ненулевых элементов, расположенных над побочной диагональю.
Подсчитать среднее арифметическое элементов, расположенных под побочной диагональю.
Поменять местами столбцы по правилу: первый с последним, второй с предпоследним и т.д.
Поменять местами две средних строки, если количество строк четное, и первую со средней строкой, если количество строк нечетное.
Поменять местами два средних столбца, если количество столбцов четное, и первый со средним столбцом, если количество столбцов нечетное.
Если количество строк в массиве четное, то поменять строки местами по правилу: первую строку со второй, третью - с четвертой и т.д. Если количество строк в массиве нечетное, то оставить массив без изменений.
Если количество столбцов в массиве четное, то поменять столбцы местами по правилу: первый столбец со вторым, третий - с четвертым и т.д. Если количество столбцов в массиве нечетное, то оставить массив без изменений.
Вычислить
, где
- натуральное число.
Подсчитать норму матрицы по формуле
Подсчитать норму матрицы по формуле
Вывести элементы матрицы в следующем порядке:
Выяснить, является ли матрица симметричной относительно главной диагонали.
Заполнить матрицу числами от 1 до n (где
, а
- количесто строк, а
- количество столбцов прямоугольной матрицы) следующим образом:
Определить, есть ли в данном массиве строка, состоящая только из положительных элементов.
Определить, есть ли в данном массиве столбец, состоящий только из отрицательных элементов.
В каждой строке найти максимум и заменить его на противоположный элемент.
В каждом столбце найти минимум и заменить его нулем.
Дан массив размером n×n, элементы которого целые числа.
Замечание. Для хранения массив n?n использовать ступенчатый массив.
Найти максимальный элемент в каждой строке и записать данные в новый массив.
Пример
using System;
namespace ConsoleApplication
{
class Class
{
static int [][] Input ()
{
Console.WriteLine("введите размерность массива");
Console.Write("n = ");
int n=int.Parse(Console.ReadLine());
int [][]a=new int[n][];
for (int i = 0; i < n; ++i)
{
a[i]=new int [n];
for (int j = 0; j < n; ++j)
{
Console.Write("a[{0},{1}]= ", i, j);
a[i][j]=int.Parse(Console.ReadLine());
}
}
return a;
}
static void Print1(int[] a)
{
for (int i = 0; i < a.Length; ++i)
Console.Write("{0,5} ", a[i]);
}
static void Print2(int[][] a)
{
for (int i = 0; i < a.Length; ++i,Console.WriteLine() )
for (int j = 0; j < a[i].Length; ++j)
Console.Write("{0,5} ", a[i][j]);
}
static int Max(int[] a)
{
int max=a[0];
for (int i = 1; i < a.Length; ++i)
if (a[i] >max) {max=a[i];}
return max;
}
static void Main()
{
int[][] myArray=Input();
Console.WriteLine("Исходный массив:");
Print2(myArray);
int[]rez=new int [myArray.Length];
for (int i=0;i<myArray.Length; ++i)
rez[i]=Max(myArray[i]);
Console.WriteLine("Новый массив:");
Print1(rez);
}
}
}
Найти минимальный элемент в каждом столбце и записать данные в новый массив.
Четные столбцы таблицы заменить на вектор
.
Нечетные строки таблицы заменить на вектор
.
Вычислить
, где
- двумерная матрица,
- вектор.
Для каждой строки подсчитать количество положительных элементов и записать данные в новый массив.
Для каждого столбца подсчитать сумму отрицательных элементов и записать данные в новый массив.
Для каждого столбца подсчитать сумму четных положительных элементов и записать данные в новый массив.
Для каждой строки подсчитать количество элементов, больших заданного числа, и записать данные в новый массив.
Для каждого столбца найти первый положительный элемент и записать данные в новый массив.
Для каждой строки найти последний четный элемент и записать данные в новый массив.
Для каждого столбца найти номер последнего нечетного элемента и записать данные в новый массив.
Для каждой строки найти номер первого отрицательного элемента и записать данные в новый массив.
Для каждой строки найти сумму элементов с номерами от
до
и записать данные в новый массив.
Для каждого столбца найти произведение элементов с номерами от
до
и записать данные в новый массив.
Для каждой строки подсчитать сумму элементов, не попадающих в заданный интервал, и записать данные в новый массив.
Подсчитать сумму элементов каждой строки и записать данные в новый массив. Найти максимальный элемент нового массива.
Подсчитать произведение элементов каждого столбца и записать данные в новый массив. Найти минимальный элемент нового массива.
Для каждой строки найти номер первой пары неравных элементов. Данные записать в новый массив.
Для каждого столбца найти номер первой пары одинаковых элементов. Данные записать в новый массив.