Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

ВОЛГОГРАДСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

КАМЫШИНСКИЙ ТЕХНОЛОГИЧЕСКИЙ ИНСТИТУТ (ФИЛИАЛ)

ВОЛГОГРАДСКОГО ГОСУДАРСТВЕННОГО ТЕХНИЧЕСКОГО УНИВЕРСИТЕТА

КАФЕДРА «АВТОМАТИЗИРОВАННЫЕ СИСТЕМЫ ОБРАБОТКИ

ИНФОРМАЦИИ И УПРАВЛЕНИЯ»

ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ

Часть II. Язык C#

Методические указания к лабораторным работам

Волгоград

2009

УДК 519.

П 78

Программирование на языке высокого уровня. Часть II. Язык C#: методические указания к лабораторным работам / Сост. ; Волгоград. гос. техн. ун-т. – Волгоград, 2009. – 31 с.

Содержатся необходимые теоретические сведения и рекомендации для выполнения лабораторных работ, даны задания для самостоятельной работы.

Предназначены для студентов, обучающихся по направлению 552800 «Информатика и вычислительная техника». Выполняются в компьютерном классе.

Библиогр.: 2 назв.

Рецензент

Печатается по решению редакционно-издательского совета

Волгоградского государственного технического университета

Составитель: Владимир Иванович Кручинин

Программирование на языке высокого уровня.

Часть II. Язык C#

Методические указания к лабораторным работам

Под редакцией автора

Темплан 2009 г., поз. № 29К.

Подписано в печать г. Формат 60×84 1/16.

Бумага листовая. Печать офсетная.

Усл. печ. л. 1,94. Усл. авт. л. 1,81.

Тираж 70 экз. Заказ №

Волгоградский государственный технический университет

НЕ нашли? Не то? Что вы ищете?

400131 Волгоград, просп. им. , 28.

РПК «Политехник»

Волгоградского государственного технического университета

400131 Волгоград, ул. Советская, 35.

ã Волгоградский

государственный

технический

университет, 2009

Лабораторная работа № 3.

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

Цель работы: Знакомство с правилами использования операторов ветвления в программах на языке C# на примере решения двух задач.

Продолжительность работы: 2 часа.

Оценка в баллах: минимум – 2 максимум – 4.

Условие задачи № 1.

Выяснить, поместится ли круг площади S2 в квадрат площади S1

Анализ условия задачи.

Для нахождения алгоритма решения задачи построим чертеж.

 

a

Площадь квадрата вычисляется по формуле:

Площадь круга вычисляется так:

Из рисунка видно, что если радиус круга не превосходит половины длины стороны, то круг поместится внутри квадрата. Это и будет условием решения задачи.

Текст программы.

Создайте проект и наберите следующий текст:

float a, R;

string temp;

Console. WriteLine("Введите радиус:");

temp = Console. ReadLine();

R = Convert. ToDouble(temp);

Console. WriteLine("Введите сторону квадрата:");

temp = Console. ReadLine();

a = Convert. ToDouble(temp);

if (R<a/2) Console. WriteLine("Поместится\n");

else Console. WriteLine("Не поместится");

Уже первая компиляция программы покажет наличие ошибок. Ошибки получились из-за несоответствия типов данных. Вы уже имеете опыт исправления таких ошибок. Внесите необходимые исправления и проверьте правильность работы программы.

Условие задачи № 2.

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

Анализ условия задачи.

Для вычисления площадей фигур можно использовать следующие формулы:

- для прямоугольника

- для треугольника

-для трапеции

- для круга

- для сектора

Исполнение программы.

Cкопируйте в папку Study папку LR3 из той же папки, где находится описание данной работы. Затем запустите решение LR3.

Замечания к решению LR3.

1.  Программа построена по принципу «меню». На экран выдаётся список вариантов. Пользователь может выбрать один из них.

2.  Выбранный вариант обрабатывается одной из ветвей оператора switch. При неправильном выборе работает ветвь по умолчанию (default).

3.  В четвертой и пятой ветви используются математические функции. Функция Pow обеспечивает возведение числа в нужную степень (в нашем случае – во вторую). Использование функции Atan (арктангенс числа) является маленькой хитростью, т. к. Atan(1) – это четверть числа ПИ.

Скомпилируйте программу и исправьте ошибки. Ошибки возникли при использовании функций Atan (вычисление арктангенса числа) и Pow (возведение в степень). Учтите тот факт, что эти функции доступны из пространства имен Math.

Затем проверьте правильность работы программы по разным вариантам.

Обратите внимание, что при неправильном выборе варианта выходит сообщение об этом, но только в том случае, если набрано число. Если же набирается символьное значение (буква или цифра с буквой), то программа завершается аварийно (суть аварии и квалифицированный путь ее обработки мы подробно исследуем в следующей лабораторной работе). Это связано с тем, что функция преобразования строки в число не умеет преобразовывать символы. Следовательно, необходимо проверять, что именно ответил пользователь при выборе варианта. Если ответ численный, то его можно преобразовывать из строки в число. Если же нет, то надо обойти преобразование и сформировать искусственно числовое значение, не совпадающее ни с одним вариантом.

Замените оператор преобразования на следующий текст:

if (temp. Length == 1)

{

char c = (char)temp[0];

if (char. IsDigit(c))

{

variant = Convert. ToInt32(temp);

}

else variant = 0;

}

else

{

variant = 0;

}

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

За выполненную работу вы уже имеете право на 2 балла.

Задания для разработки отдельных программ.

1.  (2 балла) По трем введенным числам установить, существует ли треугольник со сторонами, равными этим числам.

2.  (2 балла) Вычислить действительные корни квадратного уравнения по трем введенным коэффициентам а, b, c (считать, что а не равно 0).

3.  (2 балла) Дано трехзначное натуральное число. Выяснить, не являются ли все три цифры этого числа различными.

4.  (2 балла) По трем заданным числам определить, могут ли они быть сторонами треугольника. Если да, то определить его тип.

Лабораторная работа № 3_1.

Обработка исключений.

Цель работы: Знакомство с приёмами обработки исключений в программах на языке C#.

Продолжительность работы: 2 часа.

Оценка в баллах: минимум – 3, максимум – 4.

Проект Excep.

Скопируйте в папку Study папку EXCEP из той же папки, где находится описание данной работы. Загрузите решение.

Как видите, это почти тот же текст, с которым вы работали в предыдущей лабораторной работе. Просто исправлены ошибки в вызовах методов Atan и Pow – добавлено имя пространства имен Math. Вместе с тем, остались проблемы с неправильными данными. Попробуем разобраться.

При вводе любых данных требуется аккуратность. Нельзя допускать случайного набора данных, не соответствующих типу используемой переменной.

Начинаем работать.

Попробуйте при выборе варианта решения ввести двузначное число. Например, 10. Этот вариант благополучно ловится как неправильный выбор, и аварийного завершения программы не происходит. Попробуйте ввести буквенный вариант. Например, z. Во-первых, появится сообщение:

Нажимаем кнопку Закрыть. Теперь в черном окне появится следующий текст:

Обратите внимание на сообщение в первой строке после введенной варианта (z). Это сообщение появилось потому, что функция преобразования строки в число (ToInt32) «не умеет» преобразовывать символы. Более правильно сказать, что она требует, чтобы переменная temp содержала цифровые целочисленные данные. Тот же эффект будет, если ввести вещественное число, например, 5,2. программа завершается аварийно, но «не молча» - на экран выводится сообщение об исключительной ситуации. Слово Exception переводится как «исключение». По тексту сообщения можно понять, что введенная строка «имеет некорректный формат» («Input string was not in a correct format»). Однако, это все, что имеет программист. Можно нажать любую клавишу – и все.

Введем правильный ответ. Например, выберем вариант 1. А вот когда появится вопрос «Сторона А = », введем вещественное число, но с ошибкой – вместо запятой, отделяющей целую часть от дробной, введем точку. Итак, вводим число с точкой: 5.2. Получим точно такое же исключение. Проверим, как будет вести себя программа, если мы будем вводить в разных местах по разным вариантам данные, не соответствующие типу, в который преобразуется веденная строка. Мы обнаружим, что в каждом случае будет выбрасываться исключение. А так как в программе один раз вызывается метод ToInt32 и десять раз вызывается метод ToDouble, то сколько же возможностей у пользователя ошибиться при работе с нашей программой!

Вспомним, как мы решали проблему в прошлый раз. При вводе варианта мы вставили в программу следующий блок:

if (temp. Length == 1)

{

char c = (char)temp[0];

if (char. IsDigit(c))

{

variant = Convert. ToInt32(temp);

}

else variant = 0;

}

else

{

variant = 0;

}

В чем смысл? Да мы просто сами исключили неверные данные. Если введено более одного символа, то переменной variant присвоили нулевое значение – такого варианта нет. Если введен один символ и это не цифра – тоже нулевое значение. И только в случае ввода одного цифрового символа обеспечили преобразование строки (из одного символа!) в целое число.

Корректное решение? Абсолютно. Годится такое решение для других случаев, когда вводятся другие данные, например, вещественное число как значение стороны прямоугольника? Увы, не годится. Ведь вещественное значение состоит из нескольких символов. Что, каждый символ проверять на цифру? А десятичный разделитель проверять, чтобы была запятая, а не точка? А сколько символов проверять? Ведь неизвестно, сколько цифр в числе введет пользователь.

Подобные ситуации в языке C# разрешаются значительно проще. Существует специальный механизм, дающий программисту возможность перехватить и обработать исключение. Для этого программный блок, где возможно выбрасывание исключения, оформляется особым образом. Он описывается как охраняемый блок с помощью зарезервированного слова try. Вслед за ним может идти один или несколько блоков обработки исключительных ситуаций – блоков catch. В блоках обработки записываются операторы, которые выполняются только тогда, когда возникает исключение – в нормальных ситуациях эти операторы не работают.

Итак, что надо сделать нам? Во-первых, заключим оператор variant = Convert. ToInt32(temp); в блок try:

try

{

variant = Convert. ToInt32(temp); // преобразование в число

}

Сразу после него запишем следующий блок:

catch ()

{

variant = 0;

}

Нам нужно, чтобы при возникновении исключения сработал оператор: variant = 0;

Это случится только тогда, когда блок catch будет помечен как блок, обрабатывающий именно неправильный формат данных. Пометка об этом должна размещаться внутри круглых скобок после слова catch. Но что должно быть такой пометкой? Что должно быть записано?

Установите указатель мышки на вызов метода ToInt32. Появится краткое описание сущности этого метода. Внизу описания есть список исключений, которые выбрасывает этот метод. Их три, и одно из них – то, что нам нужно: System.FormatExceptuon. Слово System можно опустить – в начале программы у нас есть описание пространства имен System. А вот все остальное запишем в круглых скобках. Итак, окончательно:

catch (FormatExceptuon)

{

variant = 0;

}

Пробуем ввести любой неверный вариант. С буквами, точками, и прочими «цветочками». Все работает.

Сдача лабораторной работы.

1.  За всю проведенную вами работу вам обеспечен всего лишь 1 балл.

2.  Попробуйте обработать все остальные исключительные ситуации. При правильном решении вы можете заработать 2 балла, а при правильном и эффективном – даже 3 балла.

Лабораторная работа № 4-1.

Решение задач с использованием операторов организации циклов

(обработка массивов)

Цель работы: Знакомство с правилами использования операторов цикла в программах на языке C#.

Продолжительность работы: 2 часа.

Оценка в баллах: минимум – 3, максимум – 4.

Проект Cikl. Циклическая организация меню.

Скопируйте в папку Study папку Cikl из той же папки, где находится описание данной работы. Загрузите проект. Исправьте синтаксические ошибки, если они есть.

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

Работа выполняется циклически с помощью оператора do_while. После выдачи меню пользователь выбирает вариант, выполняется расчет и вновь на экран выдается меню. Цикл прекращается только тогда, когда с клавиатуры вводится число 6 – признак конца работы. Обратите внимание, что в оператор switch также добавлен анализ этого ответа: сообщение о неверном выборе выдается только в случае ответа более 6.

Проверьте правильность работы программы.

Проект Summa. Суммирование элементов одномерного массива

Скопируйте в папку Study папку Summa из той же папки, где находится описание данной работы. Загрузите проект. Ознакомьтесь с текстом программы и исправьте синтаксические ошибки, если они есть.

В программе объявлен одномерный целочисленный массив. Сначала выясняется, сколько элементов будет в обрабатываемом массиве. Их не может быть больше, чем размер объявленного массива, что и проверяется в первом цикле (do_while).

Во втором цикле вводятся элементы массива. В третьем – вычисляется сумма тех элементов, которые делятся нацело на 7.

За один вызов программы можно обработать несколько массивов. Конец работы определяется по ответу пользователя. Неправильный ответ пользователя пресекается.

Проверьте правильность работы программы.

Замечания.

1.  Обратите внимание на то, как объявлен массив:

int [] mas=new int [100]; // массив

Такое объявление размещает массив вне тела программы - в динамической памяти (в «куче»).

2.  Обратите внимание на метод Parse из пространства имен Char. Метод преобразует строку (состоящую из одного символа Unicode) в символ. Попробуйте ввести строку, состоящую из двух символов. Сбой. Попытайтесь избавиться от этого.

За выполненную работу и правильные ответы на вопросы по программному коду – 3 балла.

Задания для самостоятельной работы.

(суммарный балл не более 6 за любое количество решенных задач)

1.  (1 балл) По заданному трехзначному целому числу N определить:

·  Какая первая цифра в числе?

·  Чему равна сумма цифр числа?

2.  (2 балла) По заданному четырехзначному целому числу выяснить, что больше: сумма крайних или сумма средних цифр.

3.  (2 балла) Ввести массив вещественных чисел. Подсчитать и вывести произведение положительных и сумму отрицательных чисел.

4.  (2 балла) Ввести массив вещественных чисел. Вычислить среднее значение элементов массива.

5.  (3 балла) Ввести массив целых чисел. Расположить элементы массива в том же массиве в обратном порядке.

6.  (4 балла) Ввести массив целых чисел. Построить другой массив, в который включить только те числа, которые делятся нацело на заданное целое число С. Новый массив вывести на экран.

7.  (5 баллов) Ввести массив целых чисел. Составить новый массив, в который записать индексы тех элементов исходного массива, которые больше среднего значения всех элементов массива.

8.  (6 баллов) Ввести массив вещественных чисел. Найти и вывести на экран индексы локальных максимумов, т. е. таких элементов, которые больше своих соседей.

9.  (6 балла) Ввести массив целых чисел. Заменить все элементы массива, начиная со второго, суммой всех предыдущих элементов.

10.  (5 баллов) Ввести массив вещественных чисел. Подсчитать, сколько одинаковых элементов имеется в массиве.

Лабораторная работа № 4-2.

Решение задач с использованием операторов организации циклов (матрицы).

Цель работы: Знакомство с правилами использования операторов цикла в программах на языке C#.

Продолжительность работы: 2 часа.

Оценка в баллах: минимум – 3, максимум – 4.

Проект № 1.

Скопируйте в папку Study папку Matrica из той же папки, где находится описание данной работы. Загрузите решение.

Ознакомьтесь:

1.  Как задана константа:

const int RAZM = 200;

2.  Как объявлен двумерный массив:

int [,] M=new int[RAZM, RAZM];

Суть задачи.

Данное приложение обеспечивает ввод квадратной матрицы, ее преобразование и вывод новой матрицы на экран. Суть преобразования – деление элементов каждой строки матрицы на значение, которое указано в той же строке на главной диагонали.

Например, если будет введена матрица

то в результате преобразования должно получиться

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

Примечание. Если с поиском ошибки имеются трудности, то вспомните, что вы делали в лабораторной работе №2.

«Стоимость» исправленной программы – 3 балла.

Задания для самостоятельной работы.

(максимальное число баллов – не более 8)

1.  (1 балл) Ввести две прямоугольные матрицы A[2,3] и B[2,3]. Вычислить матрицу C[2,3] = A[2,3] + B[2,3].

2.  (2 балла) Найти и вывести на экран индексы отрицательных элементов матрицы A[m, m]. Например, для элемента A[1,2] это будет выглядеть так: (1,2). Если отрицательных элементов нет, то сообщить об этом.

3.  (3 балла) В целочисленной матрице B[10,10] заменить все элементы с максимальным значением на нулевые значения.

4.  (3 балла) В действительной квадратной матрице X[n, n] поменять местами максимальный элемент каждой строки и соответствующий элемент большой диагонали.

5.  (3 балла) В матрице A[k, m] поменять местами столбцы с наименьшим и наибольшим значением.

6.  (4 балла) В квадратной матрице D[m, m] заменить все элементы выше главной диагонали на сумму элементов соответствующей строки.

7.  (5 баллов) Найти и вывести на экран индексы тех элементов матрицы X[k, m], которые являются наибольшими в своей строке, но наименьшим в своем столбце.

Лабораторная работа № 4-3.

Решение задач с использованием операторов организации циклов (вычисления с заданной точностью).

Цель работы: Знакомство с правилами использования операторов цикла в программах на языке C#.

Продолжительность работы: 2 часа.

Оценка в баллах: минимум – 2, максимум – 3.

Проект Sinus.

Скопируйте в папку Study папку SINUS из той же папки, где находится описание данной работы. В проекте организовано вычисление синуса заданного аргумента x с помощью разложения в ряд:

Значение синуса вычисляется с точностью, которую задает пользователь. Кроме того, вычисляется значение синуса с помощью стандартной функции sin(x). Оба вычисленных значения и абсолютная величина их разницы выводятся на экран.

Задание.

1.  Протестируйте работу программы для разных значений аргумента и для разной точности вычислений.

2.  Как вы думаете, почему, чем больше значение аргумента, тем больше погрешность вычислений? (придется вспомнить математику )

Оценка выполненной работы – 2 балла.

Задания для самостоятельной работы.

(максимальный балл - 7)

1.  (1 балл) Вычислить первый замечательный предел с заданной точностью при x -> 0:

2.  (2 балла) Вычислить второй замечательный предел с заданной точностью при неограниченном возрастании x:

3.  (3 балла) Вычислить число Пи с заданной точностью, используя формулу:

4.  (3 балла) Известно равенство: . Сколько сомножителей надо взять в произведение, чтобы равенство выполнялось до пятой значащей цифры, то есть с погрешностью не более 0.00001?

Лабораторная работа № 5.

Решение задач на обработку строк.

Цель работы: Знакомство с приёмами обработки строковой информации в программах на языке C#.

Продолжительность работы: 2 часа.

Оценка в баллах: минимум – 3, максимум – 4.

Проект STROKA.

Скопируйте в папку Study папку STROKA из той же папки, где находится описание данной работы. Загрузите решение.

Приложение решает следующую задачу.

Вводится текстовая строка. Выполняется поиск самого длинного слова, которое и выводится на экран. Слова могут отделяться одно от другого одним пробелом или одной запятой.

Ознакомьтесь с текстом программы. В процессе сдачи работы вам предстоит ответить на ряд вопросов по организации программы.

Задание.

1.  Проверьте правильность работы программы с помощью таких тестовых строк:

·  Мужик съел лук

·  Я изловил кошку

·  Кот ел рыбу

2.  Исправьте имеющиеся ошибки. Для поиска ошибок можно использовать режим отладки (см. лабораторную работу № 2).

Сдача лабораторной работы.

1.  Ответы на вопросы по организации программы. При правильных ответах – максимум 2 балла.

2.  Исправление первой ошибки (в течение текущего занятия) – 1 балл.

3.  Исправление второй ошибки (в течение текущего занятия) – 2 балла.

Демонстрация исправлений обеих ошибок после завершения текущего занятия – 1 балл.

Задания для самостоятельной работы.

(3 балла) Разработать программу, которая вводит произвольную строку и определяет, является ли строка палиндромом.

Примечание. Палиндром – это выражение, которое читается одинаково и слева направо, и справа налево. Например, «КАЗАК», «АРОЗАУПАЛАНАЛАПУАЗОРА», «КИТНАМОРЕНЕРОМАНТИК», «УТЕНИИЛИМАФИИФАМИЛИИНЕТУ».

Лабораторная работа № 6.

Решение задач с использованием форматирования данных.

Цель работы: Знакомство с примерами форматирования данных при выводе данных.

Продолжительность работы: 2 часа.

Оценка в баллах: минимум – 2, максимум – 3.

Проект Form.

Скопируйте в папку Study папку Form из той же папки, где находится описание данной работы. Загрузите среду и вызовите проект Form из папки Study. В данном проекте демонстрируются примеры использования методов Format, Split и Join.

Сведения о форматировании.

При выполнении операторов WriteLine данные могут выводиться «как есть» или с форматированием. Если используется форматная строка, то эта строка полностью соответствует строке, которая используется в операторе Format. Поэтому говорят, что в операторе используется неявно метод Format. Сам метод Format может вызываться с разным числом параметров. Первый необязательный параметр метода задает провайдера, определяющего национальные особенности, которые используются в процессе форматирования. В качестве такого параметра должен быть задан объект, реализующий интерфейс System. IFormatProvider. Если этот параметр не задан, то используется культура, заданная по умолчанию. Вот примеры двух реализаций этого метода:

Format(string, object);

Format(IFormatProvider, string, object[]);

Параметр типа string задает форматируемую строку. Заданная строка содержит один или несколько форматов, они распознаются за счет окружающих формат фигурных скобок. Число форматов, вставленных в строку, определяет и число объектов, передаваемых при вызове метода Format. Каждый формат определяет форматирование объекта, на который он ссылается и который, после преобразования его в строку, будет подставлен в результирующую строку вместо формата. Метод Format в качестве результата возвращает переданную ему строку, где все спецификации формата заменены строками, полученными в результате форматирования объектов.

Общий синтаксис, специфицирующий формат, таков:

{N [,M [:<коды_форматирования>]]}

Обязательный параметр N задает индекс объекта, заменяющего формат. Можно считать, что методу всегда передается массив объектов, даже если фактически передан один объект. Индексация объектов начинается с нуля, как это принято в массивах. Второй параметр M, если он задан, определяет минимальную ширину поля, которое отводится строке, вставляемой вместо формата. Третий необязательный параметр задает коды форматирования, указывающие, как следует форматировать объект. Например, код C (Currency) говорит о том, что параметр должен форматироваться как валюта с учетом национальных особенностей представления. Код P (Percent) задает форматирование в виде процентов с точностью до сотой доли.

Сведения о методах Split и Join.

Методы Join и Split выполняют над строкой текста взаимно обратные преобразования. Динамический метод Split позволяет осуществить разбор текста на элементы. Статический метод Join выполняет обратную операцию, собирая строку из элементов.

Заданный строкой текст зачастую представляет собой совокупность структурированных элементов – абзацев, предложений, слов, скобочных выражений и т. д. При работе с таким текстом необходимо разделить его на элементы, пользуясь специальными разделителями элементов, – это могут быть пробелы, скобки, знаки препинания. Практически подобные задачи возникают постоянно при работе со структурированными текстами. Методы Split и Join облегчают решение этих задач.

Динамический метод Split имеет следующий синтаксис:

Split(char[])

На вход методу Split передается один или несколько символов, интерпретируемых как разделители. Объект типа string, вызвавший метод, разделяется на подстроки, ограниченные этими разделителями. Из этих подстрок создается массив, возвращаемый в качестве результата метода.

Синтаксис статического метода Join таков:

Join(string delimiters, string[] items )

В качестве результата метод возвращает строку, полученную конкатенацией элементов массива items, между которыми вставляется строка разделителей delimiters. Как правило, строка delimiters состоит из одного символа, который и разделяет в результирующей строке элементы массива items; но в отдельных случаях ограничителем может быть строка из нескольких символов.

Задание.

1.  Разберитесь в структуре программы и проверьте ее работоспособность.

2.  Уясните по комментариям, что выполняет каждый оператор.

Оценка выполненной работы – 1 балл.

Задания для самостоятельной работы (1 балл каждая).

1.  Разработать собственную программу, использующую метод Format.

Программа должна выводить на экран таблицу значений функции COS(X) на отрезке от 0.01 до 1.55 с шагом 0.01 в виде:

------

X | значение функции

------

0.01

0.02

2.  Разработать собственную программу, демонстрирующую возможности методов Split и Join.

 

Лабораторная работа № 7.

Решение задач на обработку структур данных.

Цель работы: Знакомство с приёмами обработки структур в программах на языке C#.

Продолжительность работы: 4 часа.

Оценка в баллах: минимум – 2, максимум – 3.

Проект BIBLIO.

Скопируйте в папку Study папку BIBLIO из той же папки, где находится описание данной работы. Загрузите среду и вызовите проект BIBLIO из папки Study.

Приложение представляет собой программу решения следующей задачи:

В детской библиотеке заведены карточки на 900

читателей. Информация об одном читателе содержит

следующие данные:

- фамилию читателя

- его пол (1, если пол Мужской, и 2, если пол Женский)

- возраст (число полных лет).

Разработать программу, обеспечивающую:

1) Ввод данных о читателях

2) Определение числа девочек школьного возраста

(от 7 до 16 лет)

В программе описана структура под именем chita. Структура состоит из трех полей, которые описывают данные ОДНОГО читателя. В главной (main) функции объявляется массив нужного размера. Тип массива – chita, т. е. все элементы массива являются структурами типа chita и содержат одинаковые поля.

Именно с этим массивом и работает программа. В него вводятся и в нем хранятся данные о читателях библиотеки. Он же используется при подсчете числа девочек школьного возраста.

Работа программы организована обычным образом. Имеется цикл, в котором пользователь может выбрать из меню один из вариантов. Можно вводить новые данные, можно подсчитывать количество девочек, а можно завершить работу. Выбор варианта обеспечен оператором switch.

Задание.

·  Ознакомьтесь с текстом программы.

·  Проверьте, правильно ли работает программа. Для этого придумайте тестовые примеры, содержащие сведения о нескольких читателях разного пола и возраста.

Оценка выполненной работы – 1 балл.

Задания для самостоятельной работы.

1.  Добавьте в программу возможность вывода на экран данных обо всех читателях. Оформите это в виде отдельной строчки меню, отдельного варианта в операторе switch. (1 балл)

2.  Добавьте в программу возможность поиска и выдачи на экран данных о самом юном читателе (кто это будет – девочка или мальчик – не важно). Оформите это в виде отдельной строчки меню, отдельного варианта в операторе switch. (1 балл).

Дополнительные задания.

1.  Добавьте в программу возможность поиска и выдачи на экран данных о том читателе, возраст которого самый большой. Обеспечьте пользователю возможность выбора, кого именно искать – мальчика или девочку. Оформите это также в виде отдельной строчки меню, отдельного варианта в операторе switch. (1 балл дополнительно).

2.  Добавьте в программу возможность подсчета числа читателей-девочек или читателей мальчиков (по выбору пользователя), попадающих в заданный пользователем интервал возрастов (например, от 8 до 12 лет). Оформите это в виде отдельной строчки меню, отдельного варианта в операторе switch. (2 балла дополнительно).

Лабораторная работа № 8.

Решение задач на обработку структур данных.

Цель работы: Закрепление знаний, полученных в лабораторной работе № 6. Самостоятельное решение задачи, предполагающее структурирование данных.

Продолжительность работы: 2 часа.

Оценка в баллах: минимум – 3, максимум – 4.

Условие задачи.

Имеются данные о времени, затраченном студентами разных групп института при работе в сети Интернет. В частности известно: группа, ФИО студента, количество минут работы. Разработайте программу, обеспечивающую:

Ввод и хранение данных в одном массиве

Подсчет и выдачу на экран времени, затраченного всеми студентами заданной группы

Поиск и выдачу на экран данных о самом расточительном студенте (затратившем наибольшее время)

Скопируйте в папку Study папку INTER из той же папки, где находится описание данной работы. Загрузите среду и вызовите проект INTER из папки Study. Как видите, файл в данном проекте пуст, потому что это – файл-заготовка. Текст программы вам предстоит написать самостоятельно.

Работа засчитывается, если обеспечен хотя бы один пункт задания из трех. Количество баллов начисляется в зависимости о числа реализованных пунктов (по одному баллу за каждый пункт) За полное решение - максимум.

Лабораторная работа № 9

Решение задач с использованием функций (часть 1).

Цель работы: Знакомство с правилами использования функций при разработке программы.

Продолжительность работы: 4 часа.

Оценка в баллах: минимум – 1, максимум – 3

Постановка задачи.

Необходимо разработать программу нахождения корней квадратного уравнения

по заданным коэффициентам A, B, C.

Алгоритм решения изучается на уроках математики в средней школе и известен. Известно, что квадратное уравнение может иметь два действительных корня, один или ни одного. Число корней зависит от значения дискриминанта D, который вычисляется по формуле:

Возможно три случая:

·  D>0, когда уравнение имеет два корня, вычисляемых по формулам

·  D=0, когда уравнение имеет один корень, вычисляемый по формуле

·  D<0, когда действительных корней нет.

Решение задачи в процедурном стиле.

Скопируйте в папку Study папку KVUR из той же папки, где находится описание данной работы. Загрузите среду и вызовите проект KVUR из папки Study.

Задание.

·  Ознакомьтесь с текстом программы.

·  Проверьте, правильно ли работает программа. Для этого придумайте тестовые примеры, позволяющие проверить все три случая.

Обратите внимание, что программа составлена по принципу простой программы, т. е. имеет только одну функцию (метод) – главную функцию main(). В этой функции описан весь алгоритм решения задачи: и ввод исходных данных, и вычисления по формулам, и вывод результатов на экран. Такой порядок написания программы может быть оправдан ТОЛЬКО для небольших программ. Когда алгоритм программы достаточно сложен, ее СТРУКТУРИРУЮТ, разбивая на отдельные функции.

Структурирование алгоритма.

Выполним структурирование программы. Для этого опишем процедуры ввода данных, вычисления дискриминанта и вычисления корней в виде отдельных функций. Другими словами, вынесем соответствующие операторы в ОТДЕЛЬНЫЕ функции. Условимся, что эти функции будут иметь следующие имена: vvod, discr, korni.

Функция vvod.

static void vvod(out double a, out double b, out double c)

{ Console. WriteLine("Введите A, B,C ");

Console. Write("A = ");

a=Convert. ToDouble(Console. ReadLine());

Console. Write("B = ");

b=Convert. ToDouble(Console. ReadLine());

Console. Write("C = ");

c=Convert. ToDouble(Console. ReadLine());

}

Никаких исходных данных для работы функции не требуется – все значения она вводит сама. Но у нее есть три параметра: a, b, c. Все параметры – вещественные Они предназначены для ввода коэффициентов уравнения. Особенность их в том, что они являются выходными параметрами (out) – ссылками. Значения, которые будут введены в них, автоматически попадут в АРГУМЕНТЫ. В результате выполнения функции будут введены три числа. Как и функция main() эта функция также имеет тип void. Это значит, что после своего завершения она НЕ ВОЗВАРАЩАЕТ никакого значения.

Функция discr.

static double discr(double a, double b, double c)

{ double d;

d=b*b-4*a*c;

return d;

}

Для работы функции требуются те значения, по которым она сможет вычислить дискриминант. Это коэффициенты уравнения, введенные ранее функцией vvod. Функция discr получает их через ПАРАМЕТРЫ вещественного типа. Внутри функции объявлена локальная переменная d, в которой получается результат вычисления. Этот результат после завершения функции ВОЗВРАЩАЕТСЯ оператором return в то место, откуда была вызвана функция. Возвращение обеспечивается тем, что тип функции – не void, а double.

Функция korni

static int korni(double a, double b, double d, out double x1,out double x2)

{

x1 = 0; x2 = 0;

if (d<0) return 0;

if (d>0)

{ x1=(-b+Math. Sqrt(d))/(2*a);

x2=(-b-Math. Sqrt(d))/(2*a);

return 2;

} else

{ x1=-b/(2*a); return 1;}

Эта функция имеет три обычных параметра (в них она получает значения, нужные для вычислений) и два выходных параметра-ссылки (в них она записывает результаты вычислений – корни). Завершая работу, функция ВОЗВРАЩАЕТ целое число 0, 1 или 2 – в зависимости от того, сколько корней найдено.

Решение задачи в стиле структурного программирования.

Скопируйте в папку Study папку KVUR_F из той же папки, где находится описание данной работы. Загрузите среду и вызовите проект KVUR_F из папки Study. В этой программе также решается поставленная задача, но с использованием разработанных выше функций.

·  Разберитесь с текстом программы.

·  Проверьте, правильно ли она работает.

·  Обратите внимание на одну особенность. В описании функции korni параметры X1 и X2 помечены как выходные. Такая пометка требует, чтобы при любом завершении функции – по любой ветви – в этих переменных ОБЯЗАТЕЛЬНО были сформированы значения. Если дискриминант окажется равным нуля, то функция сразу завершает работу. Именно поэтому добавлены операторы присваивания X1=0 и X2=0 – без них компилятор даст сообщение об ошибке. Проверьте это. Закомментируйте оба оператора и выполните компиляцию. Появятся ошибки при return 0 и при return 1, потому что по этим ветвям не формируются значения X1 и X2.

Оценка выполненной работы – 1 балл.

Задание для самостоятельной работы (2 балла).

Измените программу KVUR_F, выделив в самостоятельную функцию процедуру выдачи результатов на экран. Составьте описание функции и обеспечьте вызов этой функции из функции main().

Лабораторная работа № 10.

Решение задач с использованием функций (часть 2).

Цель работы: Знакомство с правилами использования функций при работе со структурами данных.

Продолжительность работы: 4 часа.

Оценка в баллах: минимум – 5, максимум – 7

Проект STRBIB.

Скопируйте в папку Study папку STRBIB из той же папки, где находится описание данной работы. Загрузите среду и вызовите решение STRBIB из папки Study. Приложение представляет собой программу решения задачи из лабораторной работы № 8, но решение выполнено в стиле структурного программирования.

Программа состоит из трех функций: главная (main), функция ввода сведений о читателе и функция подсчета числа девочек. В каждой из функций имеется два параметра:

-  имя массива читателей:

-  количество читателей.

В функции ввода параметр k описан как ссылка, но не в виде выходного параметра, а как универсальный – ref. Смысл такого задания в том, чтобы было можно увеличить его на 1 после ввода очередного читателя. Отличие от выходного параметра в том, что здесь параметр k в момент начала работы функции уже имеет значение, т. е. этот параметр одновременно является и входным, и выходным. После ввода данных число читателей в массиве увеличивается на 1, и это увеличение изменяет переменную kol в главной функции. А добавление новых данных происходит в массив mas.

Задание.

·  Ознакомьтесь с текстом программы.

·  Проверьте, правильно ли работает программа. Для этого придумайте тестовые примеры, содержащие сведения о нескольких читателях разного пола и возраста.

.

Оценка выполненной работы – 2 балла.

Задание для самостоятельной работы (3 балл).

Добавьте в программу возможность вывода на экран данных обо всех читателях. Оформите это в виде отдельной строчки меню, отдельного варианта в операторе switch. Выдачу данных на экран должна выполнять новая функция, которая должна вызываться из соответствующей строки case оператора switch.

Дополнительные задания.

Добавьте в программу возможность поиска и выдачи на экран данных о самом юном читателе (кто это будет – девочка или мальчик – не важно). Оформите это в виде отдельной функции. (1 балл дополнительно). Добавьте в программу возможность поиска и выдачи на экран данных о том читателе, возраст которого самый большой. Обеспечьте пользователю возможность выбора, кого именно искать – мальчика или девочку. Оформите это в виде отдельной функции. (1 балл дополнительно). Добавьте в программу возможность подсчета числа читателей-девочек или читателей мальчиков (по выбору пользователя), попадающих в заданный пользователем интервал возрастов (например, от 8 до 12 лет). Оформите это в виде отдельной функции. (2 балла дополнительно).

Лабораторная работа № 11.

Решение задач с использованием функций (часть 3).

Цель работы: Закрепление знаний, полученных в лабораторных работах № 8 и № 9. Самостоятельная переработка программы, написанной ранее в процедурном стиле, в структурированную программу.

Продолжительность работы: 2 часа.

Оценка в баллах: минимум – 5, максимум – 7.

Условие задачи.

Имеются данные о времени, затраченном студентами разных групп института при работе в сети Интернет. В частности известно: группа, ФИО студента, количество минут работы. Разработайте программу, обеспечивающую:

Ввод и хранение данных в одном массиве

Подсчет и выдачу на экран времени, затраченного всеми студентами заданной группы

Поиск и выдачу на экран данных о самом расточительном студенте (затратившем наибольшее время)

Условие задачи совпадает с условием лабораторной работы № 7, которая была самостоятельной работой. При выполнении лабораторной работы № 7 вы писали текст программы в процедурном стиле. Теперь необходимо представить решение в виде структурированной программы, использующей функции. Должно быть не менее трех функций: ввод, подсчет и поиск.

Скопируйте в папку Study папку STRINTER из той же папки, где находится описание данной работы. Загрузите среду и вызовите проект STRINTER из папки Study. Как видите, файл в данном проекте пуст, потому что это – файл-заготовка. Текст программы вам предстоит написать самостоятельно.

Работа засчитывается, если обеспечены все три пункта задания.

Лабораторная работа № 12.

Решение задач на рекурсии.

Цель работы: Знакомство с правилами разработки рекурсивных функций в структурированных программах.

Продолжительность работы: 4 часа.

Оценка в баллах: минимум – 3, максимум – 5

Задача.

Составить рекурсивную функцию подсчета факториала натурального числа.

Очевидно, что задача имеет простое итеративное решение. Формула для подсчета факториала известна:

N! = 1.N-2)(N-1)N,

причем по определению 0!=1. Обычная функция может иметь следующий вид:

int fact(int k)

{ int n, i;

for (n=1,i=1;i<=k;i++) n=n*i;

return n;

}

Попробуем увидеть в задаче не одну, а несколько задач. Ведь шаги цикла заставляют нас решать последовательно ряд задач: на первом шаге подсчитываем значение 1!, на втором – 2!, на третьем – 3!, причем каждый новый шаг опирается на решение, полученное на предыдущем шаге. При этом мы опираемся на известное решение: 0! = 1. Если будет известно значение P(N-1) для (N-1)-го шага, то легко получить значение для N-го: P(N) = Р(n-1).N.

Нам удалось представить задачу в виде нескольких задач. Начиная с задачи, которая имеет известное решение (0!=1), каждая последующая задача имеет размерность на 1 большую, т. е. требует в качестве исходных данных на одно число больше. Очевидно, что если будет известно решение (N-1)-ой задачи, то мы решим и N-ую, но для решения (N-1)-ой нам придется воспользоваться тем же алгоритмом. Наконец, нет необходимости решать «ноль»-задачу – ее решение известно: 0!=1.

Подведем итог. Мы имеем ситуацию с известным решением, когда N=0 (факториал равен 1) и неизвестным решением, когда N>0 – в этом случае сделаем шаг рекурсии. Мы можем различить эти ситуации по текущему значению N. Рекурсивная функция может иметь следующий вид:

int fact_rek(int k)

{ if (k==0) return 1;

return k*fact_rek(k-1);

}

Задание.

1.  Скопируйте в папку Study папку REKURS из той же папки, где находится описание данной работы. Загрузите среду и вызовите проект REKURS из папки Study.

2.  В проекте – программа, использующая функции fact и fact_rek. Проверьте правильность работы программы, подобрав несколько тестовых примеров.

Оценка выполненной работы – 1 балл.

Задание для самостоятельной работы.

1.  В тексте программы REKURS есть закомментированные фрагменты. Откройте их, убрав знаки комментария. Что обеспечивает новый фрагмент в главной функции? Какой алгоритм реализован в функции maximum? Проверьте правильность работы нового фрагмента, подобрав тестовый пример (2 балла).

Дополнительное задание.

Разработайте рекурсивную функцию поиска заданного символа в заданной строке. Функция должна возвращать индекс искомого символа. Предусмотреть случай отсутствия нужного символа. Продемонстрируйте работу функции, добавив соответствующий текст в главную функцию (2 балла).

Лабораторная работа № 13.

ООП. Простые классы.

Цель работы: Знакомство с основами ООП – организация простого класса.

Продолжительность работы: 2 часа.

Оценка в баллах: минимум – 1, максимум – 1

Задание.

Скопируйте в папку Study папку OOP. Выполните программу. Получив окно с результатами работы, подробно ознакомьтесь с текстом программы по комментариям.

Пояснения.

В программе кроме класса Program имеется еще один класс – класс Cilindr. Класс содержит описание объектов-цилиндров. В класс включены данные – радиус и высота. С помощью этих данных (полей) задаются свойства объекта. Поля недоступны для вызова вне класса. Задавать и изменять эти значения, а также получать сведения об объекте можно только с помощью методов класса, каждый их которых описан с использованием спецификатора public.

Обратите внимание, как вызывается метод класса. Указывается имя объекта, а через точку после имени объекта – имя метода. Так мы обращались к полю структуры. Не к любому элементу класса можно обращаться через точку, а только к тем, которые имею спецификатор public.

Отдельный разговор о конструкторах класса. Так называются методы, не имеющие типа возвращаемого значения и имеющие имя, совпадающее с именем класса. В нашем случае имеется два конструктора. Первый не имеет параметров. Он определяет свойства объекта по умолчанию (в нашем случае – нулевые радиус и высота у объекта В). Второй имеет два параметра, что позволяет пользователю задать значения высоты и радиуса в момент объявления объекта – у объекта C они равны соответственно 10 и 20.

Оценка выполненной работы – 1 балл.

Задание для самостоятельной работы (дополнительно 2 балла).

Разработайте класс PARALLELEPIPED. Включите в состав класса необходимые данные, позволяющие однозначно описать объект – прямоугольный параллелепипед. Опишите и сделайте доступными необходимые методы работы с объектом-параллелепипедом. Продемонстрируйте работу с этим классом.

Лабораторная работа № 14.

Решение задач на использование файлов (простые файлы).

Цель работы: Знакомство с правилами обработки числовых файлов.

Продолжительность работы: 4 часа.

Оценка в баллах: минимум – 2, максимум – 4

Задание.

Скопируйте в папку Study папку File_digit. Выполните программу. Получив окно с результатами работы, подробно ознакомьтесь с текстом программы.

Пояснения.

Добавлено еще одно пространство имен – IO. В нем содержатся все необходимые компоненты для работы с файлами (и не только …). В главной функции объявлены 3 объекта:

·  f – файловый поток, переменная, которая будет связана с некоторым файлом

·  g – объект, с помощью которого будет производиться чтение из файла

·  p – объект, с помощью которого будет выполняться запись в файл

Файл будет содержать два вида данных. В начале файла – несколько целых чисел, в конце – несколько вещественных чисел.

Открытие файла происходит в момент инициализации объекта f. Файл открывается на диске d в папке Study. Имя файла – file_did. Опция Create указывает, что файл должен быть создан заново. Если такой файл уже есть, то он будет уничтожен, и образован новый пустой файл. Опция ReadWrite указывает режим работы с файлом: данные из него можно читать, данные в него можно писать. Это файл произвольного доступа. Инициализация объектов g и p осуществляется с указанием, что и чтение, и запись будут выполняться через поток f, т. е. работа будет выполняться с файлом, связанным с этим потоком.

В первом цикле с клавиатуры вводятся целые числа и записываются подряд в файл. Ввод выполняется до тех пор, пока пользователь не введет нулевое значение. После цикла по общей длине файла (в байтах) формируется количество введенных чисел (размер одного числа – 4 байта). Второй цикл аналогичен первому, но вводятся вещественные числа.

Основной цикл построен по принципу меню. Пользователь может выбрать любой из шести вариантов, после чего будет выполнено то, что указано (не все варианты доработаны – кое-что вам предстоит доделать…). Обратите внимание на дополнительный блок, в котором обеспечивается ввод номера для поиска и числа для замены.

Прокомментируем блок case 1. В нем проверяется, существует ли число с заданным номером. Счет номеров чисел идет с 1, но самое первое число в файле начинается с нулевого байта файла. Куда именно надо подвести указатель, вычисляется по формуле. Аргумент SeekOrigin.Begin означает смещение от начала файла.

Оценка выполненной работы – 1 балл.

Задания для самостоятельной работы.

Доработайте вариант 4 (1 балл). Доработайте варианты 5 и 8 (2 балла).

Дополнительные задания. (Задания могут выполняться при условии выполнения основной работы)

1.  Переработайте программу из процедурного в структурный вид, выделив в отдельные функции все, что делается в вариантах 1 – 6 (4 балла).

2.  В переработанной программе обеспечьте контроль ввода данных с помощью исключений (3 балла).

Лабораторная работа № 15.

Решение задач на использование файлов (структуры).

Цель работы: Знакомство с правилами обработки файлов, содержащих структуры.

Продолжительность работы: 6 часов.

Оценка в баллах: минимум – 4, максимум – 6

Задание № 1.

Скопируйте в папку Study папку File_baza. Проверьте работоспособность программы по тем вариантам, которые в ней есть. Убедитесь, что данные можно вводить, изменять и смотреть по одной записи. Убедитесь, что данные в файле сохраняются после завершения программы.

Промежуточный итог №1:

Если Вы успешно справились с заданием № 1, то как пользователь Вы уже состоялись. За что и имеете право на 1 балл.

Задание № 2. (для студентов-минималистов)

Изучите текст программы, используя имеющиеся в ней комментарии. Комментарии откроются, если аккуратно нажать на нераскрытые «плюсики»… В случае успешных ответов на вопросы по тексту программы Вы может заработать еще 3 балла.

Задание № 3. (для студентов-максималистов)

(2 балла). Доработайте вариант 4. Обеспечьте выдачу на экран всех данных, имеющихся в файле. Примерный вид экранной формы:

= = = = = = = = = = = = = = = = = = = = = = = = = = = == = = = = = = = № записи | Вид животного | Регион | Дл. жизни

= = = = = = = = = = = = = = = = = = = = = == = = = = = = = = = = = = =

Примечание. Не исключено, что придется использовать возможности форматирования вывода, изученные в начале семестра в лабораторной работе № 6..

Задание № 4. (для нормальных программистов)

(2 балла). Программа позволяет работать с файлом, имеющим заданное фиксированное имя. Доработайте программу так, чтобы пользователь мог сам по своему желанию указать имя файла и его местонахождение.

Задание № 5. (для настоящих программистов)

(5 баллов). Разработайте аналогичную программу для ведения файла, хранящего записи данных о странах:

·  Название страны

·  Площадь в кв. километрах

·  Число жителей

Литература.

, С#, Программирование на языке высокого уровня. – СПб: Питер, 2007. – 432 с. Г. Шилдт C#. Учебный курс. – СПб: Питер,2003,. – 512 с.

СОДЕРЖАНИЕ

Лабораторная работа № 3……………………………………..3 Лабораторная работа № 3-1…………………………………...6 Лабораторная работа № 4-1…………………………………...9 Лабораторная работа № 4-2………………………………….11 Лабораторная работа № 4-3………………………………….13 Лабораторная работа № 5……………………………………14 Лабораторная работа № 6……………………………………15 Лабораторная работа № 7……………………………………18 Лабораторная работа № 8……………………………………19 Лабораторная работа № 9……………………………………20 Лабораторная работа № 10…………………………………..23 Лабораторная работа № 11…………………………………..25 Лабораторная работа № 12…………………………………..25 Лабораторная работа № 13…………………………………..27 Лабораторная работа № 14…………………………………..28 Лабораторная работа № 15…………………………………..30 Литература.................................................................................31