Лабораторная работа циклы. Поволжский государственный университет телекоммуникаций и информатики
Скачать 3.57 Mb.
|
7. Циклы с неизвестным числом повторений Предмет исследований Организация циклов с неизвестным числом повторений. Инструкции циклов while и do…while. Вычисление суммы членов бесконечного ряда. Разработать алгоритмы решения задачи. Составить программы решения задачи. Контрольные вопросы Циклический процесс с неизвестным числом повторений. 1. Его отличия от цикла с заданным числом повторений. 2. Инструкции языка C# для организации таких циклов. Их сравнение. 3. Синтаксис инструкции while. 4. Как выполнить группу операторов в цикле while? 5. Синтаксис инструкции do…while. 6. Синтаксис инструкции foreach. 7. Прямое вычисление суммы членов бесконечного ряда. 8. Вычисление суммы членов бесконечного ряда по рекуррентной формуле. 9. Условие выхода из цикла при вычислении суммы членов бесконечного 10. ряда. 7.1. Цикл while Вычислить значение суммы членов бесконечного ряда с заданной точностью Е с использованием инструкции цикла while. На печать вывести значение суммы и число членов ряда, вошедших в сумму. Проект – консольное приложение. 48 Пример. Вычислить значение суммы членов бесконечного ряда при x = 0.1 с точностью до члена ряда с модулем, меньшим E=0.00001. Для вычисления очередного члена ряда будем использовать рекуррентное соотношение, связывающее его с предыдущим членом a(n+1) = q*a(n). Приме- нение рекуррентных формул позволяет избежать вычисления факториала и возведения в произвольную степень. Рекуррентный коэффициент q найдем из выражений для текущего и следующего членов ряда 49 Деля второе выражение на первое, получим Значение начального члена ряда задаем до цикла путем прямого присваива- ния (номер начального члена n в разных вариантах равен 0 или 1, правильное значение определяется по формуле текущего члена). В нашем задании n=0, a=x. Листинг программы using System; namespace ConsoleWhile { class Program { static void Main() { double a=0, e=0.00001, q=0, s=0, x=0.1; int n = 0; a = x; // Инициализация цикла s = a; while ( Math .Abs(a) > e) // Цикл { q = -x * x / (2 * n + 2) / (2 * n + 3); a *= q; s += a; n++; } Console .WriteLine(); Console .WriteLine( "Результат" ); Console .WriteLine(); Console .WriteLine( "Сумма s=" + Convert .ToString(s)); Console .WriteLine( "Число членов ряда n=" + Convert .ToString(n)); Console .WriteLine(); Console .WriteLine( "Нажмите любую клавишу" ); Console .ReadKey(); // Пауза 50 } } } Консоль перед закрытием программы: 7.2. Цикл do…while Выполнить ту же задачу с применением инструкции цикла do…while. Проект – консольное приложение. Пример. Листинг программы using System; namespace DoWhile { class Program { static void Main() { double a = 0, e = 0.00001, q = 0, s = 0, x = 0.1; int n = 0; a = x; // Инициализация цикла s = a; do // Тело цикла { q = -x * x / (2 * n + 2) / (2 * n + 3); a *= q; 51 s += a; n++; } while ( Math .Abs(a) > e); // Цикл повторять Console .WriteLine(); Console .WriteLine( "Результат" ); Console .WriteLine(); Console .WriteLine( "Сумма s = {0}" ,s); Console .WriteLine( "Число членов ряда n = {0}" ,n); Console .WriteLine(); Console .WriteLine( "Нажмите любую клавишу" ); Console .ReadKey(); // Пауза } } } Результат работы программы такой же, как для задания 1. 52 8. Циклы с заданным числом повторений Предмет исследований Организация циклов с известным числом пвторений. Инструкция циклов for. Разработать алгоритмы решения задач. Составить программы решения задач. Контрольные вопросы Преимущества использования инструкций циклов в программе. 1. Инструкция цикла for. 2. Как организовать цикл с нарастанием индекса? 3. Как организовать цикл с убыванием индекса? 4. Организация вычисления суммы. 5. Организация вычисления произведения. 6. 8.1. Команда Goto и метки Вывести последовательность чисел (их число две последние цифры в номере зачетной книжки) с использованием инструкции goto и метки. Проект – кон- сольное приложение. Пример. Вычислить последовательность 10 чисел с использованием инструк- ции goto и метки. Проект – консольное приложение. Листинг программы using System; namespace Goto { class Program { static void Main() { int i = 0; M: Console .WriteLine( "i: {0 } " , i); i = i + 1; if (i < 10) goto M; Console .WriteLine( "Нажмите любую клавишу" ); Console .ReadKey(); } } } 53 Результат прогона. 8.2. Цикл for Вычислить значения функции с использованием инструкции цикла for. Проект – консольное приложение. 54 Пример. Вычислить значения функции с использованием инструкции цикла for. Проект – консольное приложение. Листинг программы using System; 20 1 2 / i i x z 55 namespace For1 { class Program { static void Main() { double z = 0, x = 2; for ( int i = 1; i < 21; i++) z += x * x / i; Console .WriteLine( "z = {0}" , z); Console .WriteLine( "Нажмите любую клавишу" ); Console .ReadKey(); } } } Консоль перед закрытием программы: 8.3. Вложенные циклы for Вычислить значения функции с использованием вложенных инструкций цикла for. Проект – консольное приложение. Пример. Вычислить В алгоритме для разнообразия один цикл реализован инструкцией for нарас- танием индекса, а другой - инструкцией for с убыванием индекса. Листинг программы using System; namespace For2 56 { class Program { static void Main() { double t = 1, s = 0, x = 2; for ( int i = 1; i < 11; i++) { for ( int j = 10; j > 0; j--) { s += Math .Cos(i * j * x); t *= s; } } Console .WriteLine( "t: {0 } " , t); Console .WriteLine( "Нажмите любую клавишу" ); Console .ReadKey(); } } } Консоль перед закрытием программы: 8.4. Команда break Создать программу с иcпользованием команды break. Проект – консольное приложение. В программе ищется первое не простое число из последователь- 57 ности чисел от N до 1. Варианты заданий – N = две последние цифры номера зачетной книжки. Пример. Создать программу с иcпользованием команды break. Проект – кон- сольное приложение. В программе ищется первое не простое число из после- довательности чисел от i = 8 до 1. Число не простое, если при его делении на целые числа, меньшие его, получается нулевой остаток. Во внешнем цикле пербираются числа делимые от i = 8 до 1. Во внутреннем цикле перебираются делители от j = i -1 до 1. При обнаружении нулевого остатка сбрасывается флаг простого числа, по которму команда break прекращает итерации, так как ответ уже найден. Листинг программы using System; namespace Break { class Program { static void Main() { // объявляем флаг с именем bool для обозначения простых чисел bool IsPrimeNumber = true ; for ( int i = 8; i > 1; i--) { // устанавливаем флаг //IsPrimeNumber = true; for ( int j = i - 1; j > 1; j--) { // если существует делитель с нулевым остатком // сбрасываем флаг if (i % j == 0) { IsPrimeNumber = false ; // дальнейшая проверка бессмысленна // если с нулевым остатком - то число простое if (IsPrimeNumber == true ) Console .WriteLine( "{0}— простое число" , i); else Console .WriteLine( "{0}— не простое число" , i); Console .WriteLine( "Нажмите любую клавишу" ); Console .ReadKey(); } if (IsPrimeNumber == false ) break ; 58 } } } } } Консоль перед закрытием программы: 8.5. Команда continue Создать программу с использованием команды continue. Проект – консольное приложение. В программе ищется первое нечетное число из последовательно- сти чисел от N до 1. Варианты заданий – N = две последние цифры номера зачетной книжки. Пример. В программе ищется первое нечетное число из последовательности чисел от N до 1. Признак нечетности – остаток от деления на 2 не равен нулю. Если он равен нулю, то команда continue прерывает текущую итерацию и пе- реъодит к следующей. Листинг программы using System; class PoiskNechet { static void Main() { for ( int i = 100; i > 0; i--) { if ( i%2 ==0 ) continue ; Console .WriteLine( "{0} - нечетное число" , i); Console .WriteLine( "Нажмите любую клавишу" ); Console .ReadKey(); 59 } } } Консоль перед закрытием программы: 60 9. Логические операции Предмет исследований Логические операции в C#. Разработать алгоритмы решения в соответствии с заданием. Составить программы решения задач. Контрольные вопросы Операция НЕ – Not. 1. Операция ИЛИ – OR. 2. Операция И – AND. 3. Операция исключающее ИЛИ – XOR. 4. Логические сдвиги. 5. Выполнить над операндами i1 и i2 операции НЕ – Not, ИЛИ – OR, И – AND,, исключающее ИЛИ – XOR. Выполнить над операндом i1 логические двиги влево и вправо на j разрядов. Проект – консольное приложение. Варианты задания Число i1– первая с конца пара цифр в номере зачетной книжки. Число i2 – вторая с конца пара цифр в номере зачетной книжки. Число j – третья с конца пара цифр в номере зачетной книжки. Пример. Выполнить над операндами i1 = 10 и i2 = 16 операции НЕ – Not, ИЛИ – OR, И – AND, исключающее ИЛИ – XOR. Выполнить над операндом i1 = 10 логическис двиги влево и вправо на j = 4 разряда. Проект – консольное прило- жение. Листинг программы using System; namespace ConsoleLogic { class Program { static void Main() { int i = -16, i1 = 10, i2 = 16; bool b = true; int j = 4; // Размер свига Console.WriteLine("Операция НЕ - Not"); Console.WriteLine(); 61 Console.WriteLine("Операнд = {0}",b); Console.WriteLine("Not(Операнд) = {0}", !b); Console.WriteLine(); Console.WriteLine("Операция ИЛИ - OR"); Console.WriteLine(); i = i1 | i2; Console.WriteLine("Операнды = {0}, {1}",i1 ,i2); Console.WriteLine("(Оп1) OR (Оп2) = {0}", i); Console.WriteLine(); Console.WriteLine("Операция И - AND"); Console.WriteLine(); i = i1 & i2; Console.WriteLine("Операнды = {0}, {1}", i1, i2); Console.WriteLine("(Оп1) AND (Оп2) = {0}", i ); Console.WriteLine(); Console.WriteLine("Операция исключающее ИЛИ - XOR"); Console.WriteLine(); i = i1 ^ i2; Console.WriteLine("Операнды = {0}, {1}", i1, i2); Console.WriteLine("(Оп1) XOR (Оп2) = {0}", i); Console.WriteLine(); Console.WriteLine("Логический сдвиг"); Console.WriteLine(); Console.WriteLine("Исходное число = {0}", i); i = i1 >> j; Console.WriteLine("Cдвиг вправо на 4 бита = {0}", i); i = i1 << j; Console.WriteLine("Cдвиг влево на 4 бита = {0}", i); Console.WriteLine(); Console.WriteLine("Нажмите любую клавишу"); Console.ReadKey(); } } } Консоль перед закрытием программы: 62 63 10. Массивы Предмет исследований Способы описания размеров массивов. Способы ввода и вывода массивов. Реализация приемов накопления суммы или произведения элементов массивов, запоминания результатов, нахождения наибольшего и наименьшего. Контрольные вопросы Что такое массив? 1. Описание типа - массив. 2. Какие операторы языка можно использовать для описания массивов? 3. Особенности организации цикла при обработке массивов? 4. Особенности программирования при обработке массивов? 5. Особенность ввода и вывода массивов? 6. Представление строковых переменных типа String, как одномерных мас- 7. сивов. Вложенные массивы. 8. 10.1. Одномерный массив Обработка одномерного массива. Проект – консольное приложение 64 Пример. Вычислить наибольший элемент Xmax массива Х и его порядковый номер Nmax. Размерность массива N=10. Результат – консольное приложение. В программе элементы массива создаются генератором случайных чисел. Листинг программы using System; namespace Massiv { class Program { static void Main() { int n = 0, N=10, Nmax=0, Mmax=0; // Переменные типа int Console .WriteLine(); Random r = new Random (); // Для случайных чисел int [] M = new int [N]; // Массив типа int 65 Console .WriteLine( "Создан массив M случайных целых чисел" ); Console .WriteLine(); Console .Write( "Номер n" + " Значение M[n]" ); Console .WriteLine(); for (n = 0; n < N; n++) { int Mm = r.Next(0, 100); // Генерация случайного числа M[n] = Mm; if (Mm > Mmax) // Обнаружение максимума { Mmax = Mm; Nmax = n; } Console .WriteLine( "{0} {1,10}" ,n, Mm); } Console .WriteLine(); Console .WriteLine( "Результаты" ); Console .WriteLine(); Console .Write( "Nmax=" ); // Вывод Nmax Console .WriteLine(Nmax.ToString()); Console .Write( "Mmax=" ); // Вывод Mmax Console .WriteLine(Mmax.ToString()); Console .WriteLine(); Console .WriteLine( "Нажмите любую клавишу" ); Console .ReadKey(); // Пауза } } } Консоль перед закрытием программы: 66 10.2. Матрица Обработка матрицы. Проект – консольное приложение 67 Пример. Вывести квадратную матрицу X размером RxC в виде таблицы. Найти максимальное значание элемента и его ккординаты: номер строки R и номер столбца C. Листинг программы using System; namespace Matrix { class Program { static void Main() { int r=0,R=0,Rmax=0,c=0,C=0,Cmax=0,Mmax=0; // Переменные типа int Console.WriteLine("Введите число строк R и столбцов матрицы"); Console.Write("Число строк R="); // Введите R R = Convert.ToInt32(Console.ReadLine()); Console.Write("Число столбцов C="); // Введите C C = Convert.ToInt32(Console.ReadLine()); Console.WriteLine(); Random rnd = new Random(); // Для случайных чисел int[,] M = new int[R, C]; // Матрица M[R,C] типа int for (r = 0; r < R; r++) { for (c = 0; c < C; c++) { int Mm = rnd.Next(0, 100); // Генерация случайного числа M[r,c] = Mm; if (Mm > Mmax) // Обнаружение максимума { Mmax = Mm; // Значение Rmax = r; // Номер строки Cmax = c; // Номер столбца } } } // Вывод матрицы Console.WriteLine("Создана матрица M[R,C] случайных целых чисел"); Console.WriteLine(); for (r = 0; r < R; r++) { for (c = 0; c < C; c++) 68 { Console.Write(M[r, c].ToString("D2")+" "); } Console.WriteLine(); } Console.WriteLine(); Console.WriteLine("Результаты"); Console.WriteLine(); Console.Write("Максимальное значение Mmax="); // Вывод Mmax Console.WriteLine(Mmax.ToString()); Console.Write("Номер строки Rmax="); // Вывод Rmax Console.WriteLine(Rmax.ToString()); Console.Write("Номер столбца Cmax="); // Вывод Cmax Console.WriteLine(Cmax.ToString()); Console.WriteLine(); Console.WriteLine("Нажмите любую клавишу"); Console.ReadKey(); // Пауза } } } Консоль перед закрытием программы: 69 По нему нужно проверить правильность исполнения алгоритма. 70 11. Файлы Предмет исследований Типы файлов, определенные в C#. Связь с дисковыми файлами. Операции с типизированными файлами. Операции с текстовыми файлами. Операции с нетипизированными файлами. Контрольные вопросы Типы файлов, определенные в C#.. 1. Способы связи с файлами. 2. Директива using System.IO 3. Тип FileStream для связи с файлами. 4. Метод FileMode.Create. 5. Метод FileMode.Append. 6. Тип StreamWrite для связи с типом FileStream. 7. Файловая переменная. 8. Как связать файловую переменную с дисковым файлом? 9. Процедуры создания, открытия, закрытия файлов. 10. Задание. Создать программу создания и дополнения текстового файла. Сна- чала создать текстовый файл из заданного числа строк и посмотреть его со- держимое. Затем добавить в этот файл строки и проверить содержимое итого- вого файла. Пример. Листинг программы using System; using System.IO; namespace Files { class Program { static void Main() { string ПутьКФайлу = "e:\\"; string ИмяФайла = "data.txt"; string ПолноеИмяФайла = ПутьКФайлу + ИмяФайла; FileStream f = new FileStream(ПолноеИмяФайла, FileMode.Create); 71 StreamWriter str = new StreamWriter(f); int ЧислоСтрокБлока = 4; // Запись в файл блока строк for (int i = 1; i <= ЧислоСтрокБлока; i++) { Console.Write("Строка {0} = ", i); string s = Console.ReadLine(); str.WriteLine(s); } str.Close(); f.Close(); Console.WriteLine(); Console.WriteLine("Проверьте создание файла, затем нажмите любую клавишу"); Console.ReadKey(); Console.WriteLine(); FileStream f1 = new FileStream(ПолноеИмяФайла, FileMode.Append); StreamWriter str1 = new StreamWriter(f1); // Добавление в файл блока строк for (int i = 1; i <= ЧислоСтрокБлока; i++) { Console.Write("Строка {0} = ", i + ЧислоСтрокБлока); string s = Console.ReadLine(); str1.WriteLine(s); } str1.Close(); f1.Close(); Console.WriteLine(); Console.WriteLine("Проверьте добавление файла, затем нажмите любую клавишу"); Console.ReadKey(); } } } Консоль перед закрытием программы: 72 |