Лабораторная работа циклы. Поволжский государственный университет телекоммуникаций и информатики
Скачать 3.57 Mb.
|
12. Подпрограммы Предмет исследований Правила объявления подпрограмм. Связь формальных и фактических параметров. Способы передачи фактических параметров в подпрограмму. Обращение к функциям. Контрольные вопросы Что такое подпрограмма? Ее назначение. 1. Правила объявления функций в программе. 2. Правила обращения к функции в программе. 3. Формальные и фактические параметры. 4. Задание. Создать программу, использующую 2 подпрограммы-функции: Первая функция должна возвращать наибольший общий делитель NOD двух целых чисел. Вторая функция должна возвращать наименьшее общее делимое NOK двух целых чисел. Обе функции в главной программе доложны использоваться с тремя разными целыми числами. Проект – консольное приложение. Варианты задания Число 1 – первая с конца пара цифр в номере зачетной книжки. Число 2 – вторая с конца пара цифр в номере зачетной книжки. Число 3 – третья с конца пара цифр в номере зачетной книжки. Пример. Создать программу, использующую 2 подпрограммы-функции: Первая функция должна возвращать наибольший общий делитель NOD двух целых чисел. Вторая функция должна возвращать наименьшее общее делимое NOK двух целых чисел. Обе функции в главной программе доложны использоваться с тремя разными целыми числами, вводимыми с клавиатуры. Проект – консольное приложение. Листинг программы using System; using System.Collections.Generic; using System.Linq; 74 using System.Text; class PodProgram { // Функция NOD определения наибольшего общего делителя static int NOD(int x, int y) // Функция NOD { if (x != 0) return NOD((y % x), x); // Рекурсивный вызов else return y; } // Функция NOK определения наименьшего общего делимого static int NOK(int x, int y) // Функция NOK { return (x / NOD(x, y)) * y; } // Главная программа static void Main() { int a, b, c; Console.WriteLine("Введите через Enter 3 целых числа a b c:"); a = Int32.Parse(Console.ReadLine()); b = Int32.Parse(Console.ReadLine()); c = Int32.Parse(Console.ReadLine()); Console.WriteLine(); Console.WriteLine("Наименьшие общие делимые NOK двух целых чисел"); Console.WriteLine("NOK {0}, {1} = {2}", a, b, NOK(a, b)); Console.WriteLine("NOK {0}, {1} = {2}", a, c, NOK(a, c)); Console.WriteLine("NOK {0}, {1} = {2}", b, c, NOK(b, c)); Console.WriteLine(); Console.WriteLine("Наибольшие общие делители NOD двух целых чисел"); Console.WriteLine("NOD {0}, {1} = {2}", a, b, NOD(a, b)); Console.WriteLine("NOD {0}, {1} = {2}", a, c, NOD(a, c)); Console.WriteLine("NOD {0}, {1} = {2}", b, c, NOD(b, c)); Console.WriteLine("Нажмите любую клавишу"); Console.ReadKey(); } } Консоль перед закрытием программы: 75 76 13. Операции со строками Предмет исследований Строки и их обработка. Методы работы состроками.. Разработать алгоритмы решения задач. Составить программы решения задач. Контрольные вопросы Класс String. 1. Объявление строковой переменной 2. Сравнение строк. 3. Объдинение строк 4. Разбиение строк 5. Варианты заданий Варианты задания используют строки, набранные из Фамилии, Имени и Отче- ства студента. 13.1. Сравнение строк Создать программу сравнения строк. Проект – консольное приложение. Пример. Листинг программы using System; namespace StrokSravnenie { class Program { static void Main() { string s1 = "Basic,C++,C#" ; string s2 = "C++,C#" ; Console .WriteLine( "Сравниваемые строки" ); Console .Write( "s1 = " ); Console .WriteLine(s1); Console .Write( "s2 = " ); Console .WriteLine(s2); Console .WriteLine(); Console .WriteLine( "Нажмите любую клавишу" ); 77 Console .ReadKey(); Console .WriteLine(); Console .WriteLine( "Сравниваем s2 с s1" ); int r = s2.CompareTo(s1); Console .WriteLine( "Результат = " + r.ToString()); Console .WriteLine(); Console .WriteLine( "Нажмите любую клавишу" ); Console .ReadKey(); Console .WriteLine(); Console .WriteLine( "Сравниваем s2 с s2" ); r = s2.CompareTo(s2); Console .WriteLine( "Результат = " + r.ToString()); Console .WriteLine(); Console .WriteLine( "Нажмите любую клавишу" ); Console .ReadKey(); Console .WriteLine(); Console .WriteLine( "Сравниваем s1 с s2" ); r = s1.CompareTo(s2); Console .WriteLine( "Результат = " + r.ToString()); Console .WriteLine(); Console .WriteLine( "Нажмите любую клавишу" ); Console .ReadKey(); } } } Консоль перед закрытием программы: 78 13.2. Объединение строк Создать программу объединения строк. Проект – консольное приложение. Пример. Листинг программы using System; namespace StrokObyedinenie { class Program { static void Main() { string Фамилия; char Символ; Фамилия = "Акчурин" ; // тип string Символ = '!' ; // тип char Console .WriteLine(Фамилия + Символ); 79 Console .WriteLine(); // Пропуск строки Console .WriteLine( "Нажмите любую клавишу" ); Console .ReadKey(); // Пауза } } } Консоль перед закрытием программы: 13.3. Разбиение строк Создать программу разбиения строк. Проект – консольное приложение. Пример. Листинг программы using System; namespace StrokRazbienie { class Program { static void Main() { string s1 = "Basic,C++,C#" ; string [] s2; //Массив строк Console .WriteLine( "Исходная строка" ); Console .WriteLine(s1); Console .WriteLine(); s2 = s1.Split( ',' ); // символ раэделения в массиве // Вывод подстрок string output = "" ; int ctr = 1; 80 foreach ( string substring in s2) { output += ctr++; output += ": " ; output += substring; output += "\n" ; } Console .WriteLine( "Выделенные подстроки" ); Console .WriteLine(output); Console .WriteLine( "Нажмите любую клавишу" ); Console .ReadKey(); } } } Консоль перед закрытием программы: 81 14. Исключения Предмет исследований Класс исключений и их обработка. Инструкции try, catch, finally. Разработать алгоритмы решения задач. Составить программы решения задач. Контрольные вопросы Что такое исключение? 1. Классы исключений и их свойства. 2. Инструкция try,catcht. Назначение, структура и применение. 3. Инструкция try, catch,finally. Назначение, структура и применение. 4. Исключение EZeroDivide для целых чисел. 5. Исключение EZeroDivide для вещественных чисел. 6. Исключение ERangeError. 7. Как включить отработку исключения ERangeError. 8. Как отключить перехват исключения системой. 9. 14.1. Операции с вещественными числами Задание. Создать программу, обрабатывающую исключения при работе с ве- щественными числами с использованием инструкции try… catch…finally. Про- ект – консольное приложение. В задании надо рассчитывать массив f [ x ] = 1 / (x – N) при x =0…k. Варианты заданий. N – последняя цифра номера зачетной книжки плюс 5. Необходимо отслеживать два исключения: Деление на 0. Выход за пределы диапазона. При работе с программой менять k, чтобы получать разные условия возможно- го возникновения исключений. Пример. Вариант задания: f[x] = 1 / (x-5). N=10/ Листинг программы using System; namespace TryCatchDouble { class Program { 82 static void Main() { int k=0; Console.WriteLine("Введите k в пределах 0...10"); Console.Write(" k="); // Приглашение ввода string v = Console.ReadLine(); // Ввод строки k = Convert.ToInt32(v); double[] f = new double[10]; // Определен массив размером 10 try // Инициализация исключения { for (int x = 0; xi < k + 1;x ++) { f[x] = (double) 1 / (x - 5); // Вычисление элемента массива Console.WriteLine("x= {0}, f[x]= {1}", x, f[x]); } } // Перехватить попытку деления на 0 catch (DivideByZeroException e) { Console.WriteLine("Попытка деления на 0"); Console.WriteLine(e.ToString()); } // Перехватить выход за пределы диапазона catch (IndexOutOfRangeException e) { Console.WriteLine("Выход за пределы диапазона"); Console.WriteLine(e.ToString()); } // Перехватить другие исключения catch (Exception e) { Console.WriteLine("Фатальная ошибка"); Console.WriteLine(e.ToString()); }finally { Console.WriteLine("Нажмите любую клавишу"); Console.ReadKey(); } } } } 83 Консоль перед закрытием программы (3 варианта): Исключений нет. Задаем k = 4. Ошибка деления на 0. Задаем k = 6. Ожидается деление на 0 при x = 5. В языке C# эта ошибка нефатальна. Результат деления на 0 интерпретиру- ется как бесконечность. Ошибка диапазона. Задаем k = 15. Ожидается выход за пределы диапазо- на массива при x = 10. Эта ошибка фатальна. Она обрабатывается в сек- ции catch. 84 14.2. Операции с целыми числами Задание. Создать программу, обрабатывающую исключения при работе с це- лыми числами с использованием инструкции try… catch…finally. Проект – кон- сольное приложение. В задании надо рассчитывать массив f [ x ] = 1 / (x – N) при x =0…k. Варианты заданий. N – последняя цифра номера зачетной книжки плюс 5. Необходимо отслеживать исключение деление на 0. Пример. N=10, k = 5. Ожидается ошибка деления на ноль. Листинг программы using System; namespace TryCatchInt { class Program { static void Main() { int k = 5; 85 int [] f = new int [10]; // Определен массив размером 10 try // Инициализация исключения { for ( int x = 0; x < k + 1; x++) { f[x] = x / (x - 5); // Вычисление элемента массива Console .WriteLine( "x= {0}, f[x]= {1}" , x, f[x]); } } // Перехватить попытку деления на 0 catch ( DivideByZeroException e) { Console .WriteLine( "x= {0} Попытка деления на 0" , k); Console .WriteLine(e.ToString()); } finally { Console .WriteLine( "Нажмите любую клавишу" ); Console .ReadKey(); } } } } 86 87 15. Работы с классами и объектами Предмет исследований Исследование объектов. Работа с объектами Использование своих объектов в программах. Объекты среды .NET Framework Контрольные вопросы Классы в программах 1. Объекты в программах. 2. Создание пользовательских классов в С#. 3. Использование встроенных классов среды .NET Framework. 4. Работа с созданными классами. 5. Преимущества ОПП. 6. Задание. Напишите программу, в которой вы создаете собственный класс и используете его объекты в процессе работы программы. Пример. В пример представлена простая программ в которой создается класс описывающий автомобиль объекты этого класса являются параметры автомо- биля. Происходит ввод параметров и вывод результата. Листинг программы using System; namespace LabOb { public class Vehicle { public string model; public string manufacturer; public int numOfDoors; public int numOfWheels; } class Program { static void Main() { Console.WriteLine("Введите информацию о машине"); Vehicle myCar = new Vehicle(); 88 Console.Write("Модель = "); string s = Console.ReadLine(); myCar.model = s; Console.Write("Производитель = "); myCar.manufacturer = Console.ReadLine(); Console.Write("Колличество дверей ="); s = Console.ReadLine(); myCar.numOfDoors = Convert.ToInt32(s); Console.Write("Количество колес ="); s = Console.ReadLine(); myCar.numOfWheels = Convert.ToInt32(s); Console.WriteLine("\nВаша машина: "); Console.WriteLine(myCar.manufacturer + " " + myCar.model); Console.WriteLine("c " + myCar.numOfDoors + " дверями, " + "на " + my- Car.numOfWheels + " колесах"); Console.WriteLine("Нажмите Console.Read(); } } } Консоль перед завершением 89 16. Использование командной строки при запуске программ Предмет исследований Задание параметров выполнения программы при запуске в командной строке. Задание значения переменных через параметры командной строки при запуске программы. Использование оператора Switch. Встраивание в консольную программу справки. Контрольные вопросы Использование параметров командной строки в программах. 1. Реализация параметров запуска в программах. 2. Использование Switch. 3. Встраивание справки в консольные программы. 4. Чем удобно использования функций 5. Работа с if.. else 6. Использование объекта Length. 7. Работа со " string [] args". 8. Задание. Напишите программу, в которой обеспечивается вызов справки, за- дание значения переменной через параметр в командной строке и выполне- ниие вычисления факториала числа, равного номеру варианта. Пример. В примере показана программа, которая выполняет одно из двух дей- ствий в зависимости от заданных параметров командной строки: вывод справ- ки, либо вычисление факториала заданного в параметрах значения. Если запустить программу без параметров, то она не выполняет никаких дей- ствий. Для вызова справки используется параметр "LabParametrCOM /?". При использовании параметра "LabParametrCOM -f 10" происходит вычисление факториала указанного значения. Листинг программы using System; namespace LabParametrCOM { class Program 90 { static void Main(string[] args) { if (args.Length != 0) { switch (args[0]) { case "-f": pid(args[1]); break; case "/?": help(); break; default: break; } } } static void help() { Console.WriteLine("LabParametrCOM [-f] [значение]"); Console.WriteLine("LabParametrCOM [/?] [help]"); Console.ReadLine(); } static void pid(string b) { double n = 1; double d = 0; for (double i = 0; i < Convert.ToDouble(b); i++) { d++; n = n * d; } Console.WriteLine("Факториал n = {0}", n); Console.ReadLine(); } } } Консоль перед закрытием. 91 92 17. Отладка и тестирование в С# Предмет исследований Отладка программ. Способы отладки. Тестирование созданных программ. Контрольные вопросы 1. Возможности по отладке в Visual C# 2010. 2. Использование точек останова при отладке программ. 3. Проверка значения отдельных переменных в процесс отладки. 4. Настройка параметров отладки в Visual C# 2010. 5. Одновременный просмотр значения нескольких переменных в процесс отладки. Задание. Напишите и протестируйте программу. Пример. В примере представлена программа, в которой по паре вводимых чисел c, d в цикле для i=1...10 вычисляятся значения пары других параметров a=(c+d)*i, b=(c-d)*i. Функция Ample вычисляет квадратный корень из суммы квадратов целых частей от a, b, и эти значения суммируются в переменной s. По завершении цикла вычисляется среднее арифметическое sm от выходных параметров функции Ample. Функция Ample оформлена в виде подпрограммы. В программе определены метки, задающие точки останова. Протестировать учебную программу с условиями: С помощью отладочной печати контролировать массив s[i]. Переменные для окна «Список наблюдения» - a,b,s,i. Точки останова - m1,m2,m4. 93 В программе использован графичесчкий интерфейс. Форма окна 94 Листинг программы using System; using System.Windows.Forms; namespace LabDeb { public partial class Form1 : Form { double a, b, c, d, s, f, sm; public Form1() { InitializeComponent(); } public static double Aml(double x, double y) { double x1, y1; x1 = Math.Truncate(x); y1 = Math.Truncate(y); double result = Math.Sqrt(x1 * x1 + y1 * y1); return result; } private void button1_Click(object sender, EventArgs e) { string z; c = Convert.ToDouble(textBox1.Text); d = Convert.ToDouble(textBox2.Text); s = 0; for (double i = 0; i < 10; i++) { a = (c + d) * i; b = (c - d) * i; f = Aml(a, b); s = s + f; z = "s[" + Convert.ToString(i) + "] =" + Convert.ToString(s); listBox1.Items.Add(z); } sm = s / 10; listBox1.Items.Add(" "); z = "Результат = " + sm; listBox1.Items.Add(z); } 95 private void button2_Click(object sender, EventArgs e) { listBox1.Items.Clear(); } } Выполнение 1. Создаем приложение Windows Form. 2. Размещаем в нем код учебной программы. 3. Проверка значений s[i] с помощью отладочной печати. Отладочная печать - вывод значений переменных в окно приложения осуществляется при прогоне программы. Ниже показано окно приложения при прогоне Настройка параметров отладки производится в меню "Отладка => Параметры и настройки. 96 4.Создание точек останова в Visual C# производится следующим образом: Выбираем нужную строку за тем "Отладка => Точка останова" или нажать F9 Ниже показан просмотр результата в точке останова при запущенной програм- ме. 5. Проверяем значения переменных при остановке программы в точках оста- нова наведя на переменны курсор мыши . 97 6. Для проверки значения нескольких переменных в процессе выполнения про- граммы выделяем нужную переменную щелкаем правой кнопкой мыши и "До- бавить контрольное значение" после этого возможен просмотр значения пере- менных в момент остановки программ в точках останова. |