- •Лекция 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. Самостоятельная работа
- •Дополнения Дополнение. Операции с#
- •Дополнение. Математические функции языка с#
- •Литература
Перенаправление стандартных потоков
Тремя стандартными потоками, доступ к которым осуществляется через свойства Console.Out, Console.In и Console.Error, могут пользоваться все программы, работающие в пространстве имен System. Свойство Console.Out относится к стандартному выходному потоку. По умолчанию это консоль. Например, при вызове метода Console.WriteLine() информация автоматически передается в поток Console.Out. Свойство Console.In относится к стандартному входному потоку, источником которого по умолчанию является клавиатура. Например, при вводе данных с клавиатуры информация автоматически передается потоку Console.In, к которому можно обратиться с помощью метода Console.ReadLine(). Свойство Console.Error относится к ошибкам в стандартном потоке, источником которого также по умолчанию является консоль. Однако эти потоки могут быть перенаправлены на любое совместимое устройство ввода-вывода, например, на работу с физическими файлами.
Перенаправить стандартный поток можно с помощью методов SetIn(), SetOut() и SetError(), которые являются членами класса Console:
static void Setln(TextReader input)
static void SetOut(TextWriter output)
static void SetError(TextWriter output)
Пример перенаправления потоков проиллюстрирован следующей программой, в которой двумерный массив вводится из файла input.txt, а выводится в файл output.txt
static void Main()
{
try
{
int[,] MyArray;
StreamReader file=new StreamReader("input.txt");
Console.SetIn(file); // перенаправляем стандартный входной поток на file
string line=Console.ReadLine();
string []mas=line.Split(' ');
int n=int.Parse(mas[0]);
int m=int.Parse(mas[1]);
MyArray = new int[n,m];
for (int i = 0; i < n; i++)
{
line = Console.ReadLine();
mas = line.Split(' ');
for (int j = 0; j < m; j++)
{
MyArray[i,j] = int.Parse(mas[j]);
}
}
PrintArray("исходный массив:", MyArray, n, m);
file.Close();
}
static void PrintArray(string a, int[,] mas, int n, int m)
{
StreamWriter file=new StreamWriter("output.txt"); // перенаправляем стандартный входной поток на file
Console.SetOut(file);
Console.WriteLine(a);
for (int i = 0; i < n; i++)
{
for (int j=0; j<m; j++) Console.Write("{0} ", mas[i,j]);
Console.WriteLine();
}
file.Close();
}
___input.txt_________
3 4
1 4 2 8
4 9 0 1
5 7 4 2
При необходимости восстановить исходное состояние потока Console.In можно следующим образом:
TextWriter str = Console.In; // первоначально сохраняем исходное состояние входного потока
…
Console.SetIn(str); // при необходимости восстанавливаем исходное состояние входного потока
Аналогичным образом можно восстановить исходное состояние потока Console.Out:
TextWriter str = Console.Out; // первоначально сохраняем исходное состояние выходного потока
…
// при необходимости восстанавливаем исходное состояние выходного потока
Console.SetOut(str);
Задание. Подумайте для чего нужно два потока Console.Out и Console.Error, если они оба при стандартной работе выводят информацию на экран.
Практикум
Работа с двоичными файлами:
Создать файл и записать в него вещественные числа из диапазона от a до b с шагом h. Вывести на экран все компоненты файла с нечетными порядковыми номерами.
Пример:
using System;
using System.Text;
using System.IO;
namespace MyProgram
{
class Program
{
static void Main()
{
Console.Write("a= ");
double a=double.Parse(Console.ReadLine());
Console.Write("b= ");
double b=double.Parse(Console.ReadLine());
Console.Write("h= ");
double h=double.Parse(Console.ReadLine());
//Записываем в файл t.dat вещественные числа из заданного диапазона
FileStream f=new FileStream("t.dat",FileMode.Open);
BinaryWriter fOut=new BinaryWriter(f);
for (double i=a; i<=b; i+=h)
{
fOut.Write(i);;
}
fOut.Close();
//Объекты f и fIn связаны с одним и тем же файлом
f=new FileStream("t.dat",FileMode.Open);
BinaryReader fIn=new BinaryReader(f);
long m=f.Length; //определяем количество байт в потоке
//Читаем данные из файла t.dat начиная с элемента с номером 1, т.е с 8 байта,
//перемещая внутренний указатель на 16 байт, т.е. на два вещественных числа
for (long i=8; i<m; i+=16)
{
f.Seek(i,SeekOrigin.Begin);
a=fIn.ReadDouble();
Console.Write("{0:f2} ",a);
}
fIn.Close();
f.Close();
}
}
}
Создать файл и записать в него степени числа 3. Вывести на экран все компоненты файла с четным порядковым номером.
Создать файл и записать в него обратные натуральные числа 1,1/2,...,1/n. Вывести на экран все компоненты файла с порядковым номером, кратным 3.
Создать файл и записать в него n первых членов последовательности Фибоначчи. Вывести на экран все компоненты файла с порядковым номером, не кратным 3.
Дана последовательность из n целых чисел. Создать файл и записать в него все четные числа последовательности. Вывести содержимое файла на экран.
Дана последовательность из n целых чисел. Создать файл и записать в него все отрицательные числа последовательности. Вывести содержимое файла на экран.
Дана последовательность из n целых чисел. Создать файл и записать в него числа последовательности, попадающие в заданный интервал. Вывести содержимое файла на экран.
Дана последовательность из n целых чисел. Создать файл и записать в него числа последовательности, не кратные заданному числу. Вывести содержимое файла на экран.
Дана последовательность из n вещественных чисел. Записать все эти числа в файл. Вывести на экран все компоненты, не попадающие в данный диапазон.
Дана последовательность из n вещественных чисел. Записать все эти числа в файл. Вывести на экран все компоненты файла с нечетными номерами, большие заданного числа.
Дана последовательность из n вещественных чисел. Записать все эти числа в файл. Вывести на экран все компоненты файла с четными номерами, меньшие заданного числа.
Дана последовательность из n вещественных чисел. Записать все эти числа в файл. Вывести на экран все положительные компоненты файла.
Дана последовательность из n вещественных чисел. Записать все эти числа в файл. Подсчитать среднее арифметическое компонентов файла, стоящих на четных позициях.
Дана последовательность из n вещественных чисел. Записать все эти числа в файл. Найти максимальное значение среди компонентов файла, стоящих на нечетных позициях.
Дано предложение. Создать файл и записать в него все символы данного предложения, отличные от знаков препинания. Вывести содержимое файла на экран.
Дано предложение. Создать файл и записать в него все символы данного предложения, отличные от цифр. Вывести содержимое файла на экран.
Создать файл, состоящий из слов. Вывести на экран все слова, которые начинаются на заданную букву.
Создать файл, состоящий из слов. Вывести на экран все слова, длина которых равна заданному числу.
Создать файл, состоящий из слов. Вывести на экран все слова, которые начинаются и заканчиваются одной буквой.
Создать файл, состоящий из слов. Вывести на экран все слова, которые начинаются на ту же букву, что и последнее слово.
Работа с текстовым (символьным) файлом.
Дан текстовый файл. Найти количество строк, которые начинаются с данной буквы.
Пример:
Замечание: Напоминаем, что файл text.txt должен содержать английский текст
using System;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;
namespace MyProgram
{
class Program
{
static void Main()
{
Console.Write("Введите заданную букву: ");
char a=char.Parse(Console.ReadLine());
StreamReader fileIn = new StreamReader("text.txt");
string text=fileIn.ReadToEnd(); //считываем из файла весь текст
fileIn.Close();
int k=0;
//разбиваем текст на слова используя регулярные выражения
string []newText=Regex.Split(text,"[ ,.:;]+");
//подсчитываем количество слов, начинающихся на заданную букву
foreach( string b in newText)
if (b[0]==a)++k;
Console.WriteLine("k= "+k);
}
}
}
Дан текстовый файл. Найти количество строк, которые начинаются и заканчиваются одной буквой.
Дан текстовый файл. Найти самую длинную строку и ее длину.
Дан текстовый файл. Найти самую короткую строку и ее длину.
Дан текстовый файл. Найти номер самой длинной строки.
Дан текстовый файл. Найти номер самой короткой строки.
Дан текстовый файл. Выяснить, имеется ли в нем строка, которая начинается с данной буквы. Если да, то напечатать ее.
Дан текстовый файл. Напечатать первый символ каждой строки.
Дан текстовый файл. Напечатать символы с k1 по k2 в каждой строке.
Дан текстовый файл. Напечатать все нечетные строки.
Дан текстовый файл. Напечатать все строки, в которых имеется хотя бы один пробел.
Дан текстовый файл. Напечатать все строки, длина которых равна данному числу.
Дан текстовый файл. Напечатать все строки, длина которых меньше заданного числа.
Дан текстовый файл. Напечатать все строки с номерами от k1 до k2.
Дан текстовый файл. Получить слово, образованное k-ыми символами каждой строки.
Дан текстовый файл. Переписать в новый файл все его строки, вставив в конец каждой строки ее номер.
Дан текстовый файл. Переписать в новый файл все его строки, вставив в конец каждой строки количество символов в ней.
Дан текстовый файл. Переписать в новый файл все его строки, длина которых больше заданного числа.
Дан текстовый файл. Переписать в новый файл все его строки четной длины.
Дан текстовый файл. Переписать в новый файл все его строки, удалив из них символы, стоящие на четных местах.