Лабораторна робота №4 на тему Масиви і стандартні класи C#
« Назад Лабораторна робота №4 Масиви і стандартні класи C# Мета роботи: 1. Робота з масивами в C# 2. Оператор foreach 3. Генерація випадкових чисел 4. Робота з математичними функціями 5. Лінійний пошук 6. Двійковий пошук
Методичні рекомендації до виконання лабораторної роботи 1. Прочитайте лекцію 5. Спробуйте відповісти на наведені в кінці лекції запитання 2. Прочитайте цю лабораторну роботу та виконайте наведені в ній приклади (вони всі працездатні) 3. При виконанні завдань зверніть увагу на приклад застосування до масивів циклу foreach 4. Також зверніть увагу на опис і реалізацію методу бісекцій (ділення навпіл) знаходження коренів нелінійних рівнянь. Те також задача на одновимірні масиви і цикли 5. Для поглибленого вивчення цього матеріалу прочитайте розділ 5 книги [2].
Приклади виконання завдань 1. Робота з масивами в C# Розглянемо приклад програми з лекції 5, яка визначає суму і кількість від'ємних елементів, а також максимальний елемент масиву, що складається з 6 цілочисельних елементів. Тут елементи масиву а ініціалізуються при створенні масиву. Далі в циклі з параметром елементи масиву виводяться на консоль. Зверніть увагу, що для виводу використовується метод Console.Write а не Console.WriteLine, тому всі елементи виводяться в один рядок. Символ табуляциії "\t" в методі Console.Write розділяє елементи при виводі. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Console_Lab4 { class Program { static void Main(string[] args) { const int n = 6; int[] a = new int[n] { 3, 12, 5, -9, 8, -4 }; Console.WriteLine( "Початковий масив:" ); for ( int i = 0; i < n; ++i ) Console.Write( "\t" + a[i] ); Console.WriteLine(); long sum = 0; // сума від'ємних елементів int num = 0; // кількість від'ємних елементів for ( int i = 0; i < n; ++i ) if ( a[i] < 0 ) { sum += a[i]; ++num; } Console.WriteLine( "Сума від'ємних = " + sum ); Console.WriteLine( "Кількість від'ємних = " + num ); int max = a[0]; // максимальний елемент for ( int i = 1; i < n; ++i ) if ( a[i] > max ) max = a[i]; Console.WriteLine( "Максимальний елемент = " + max ); Console.ReadKey(); } } } Розглянемо ще одну "класичну" задачу – генерація чисел Фібоначчі: послідовності чисел, яка задовольняє умовам F1 = 1; F2 = 1; Fk = Fk-1 + Fk-2 для k>2. Цю задачу можна реалізувати з використанням масивів. В наступному прикладі кількість чисел вводиться з консолі, потім створюється одновимірний масив вказаної розмірності, який заповнюється згенерованими числами. Генерація чисел Фібоначчі using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Console_Lab4 { class Program { static void Main(string[] args) { Console.WriteLine("Введіть кількість чисел послідовності"); int n = int.Parse(Console.ReadLine()); int[] fibonachi = new int[n]; fibonachi[0] = 1; fibonachi[1] = 1; for (int i = 2; i < n; i++) { fibonachi[i] = fibonachi[i - 2] + fibonachi[i - 1]; } for (int i = 0; i < n; i++) Console.WriteLine("fibonachi[" + i + "]=" + fibonachi[i]); Console.ReadKey(); } } }
Генерація простих чисел Алгоритм Ератосфена Простим є число, яке ділиться тільки на 1 і на себе. Алгоритм пошуку послідовності простих чисел запропонував древньогрецький математик Ератосфен, і він отримав назву Решето Ератосфена. Ідея і загальний опис алгоритму. Є розташована в ряд за збільшенням послідовність цілих чисел. Спочатку в ній викреслюються усі числа кратні 2, окрім її самої, і так до N. Далі із списку, що вийшов, береться число, що йде за двійкою, - трійка, викреслюються усі кратні 3 числа, окрім її самої. У такому вигляді алгоритм триває для частини послідовності, що залишилася, і у результаті отримаємо усі прості числа у вказаному діапазоні.
У таблиці наведені усі цілі числа від 2 до 100. Червоним помічені ті, які були видалені в процесі виконання алгоритму Решето Ератосфену. Тепер розглянемо алгоритм детальніше, розбивши його на декілька частин. Отже, для пошуку простих чисел методом Решета Ератосфену треба:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace SimpleNumber { class Program { //Нахождение простых чисел. Алгоритм "Решето Эратосфена" //Запишем подряд все числа от 2 до N. //Дальше вычеркнем из этого списка все числа кратные 2, // исключая саму двойку, потом вычеркнем все числа кратные 3, //исключая само число 3, число 4 уже вычеркнуто, вычеркиваем числа кратные 5 и т.д. //Продолжаем этот процесс, пока квадрат очередного числа не превысит N. static void Main(string[] args) { bool[] table = new bool[100]; int i, j; // Отмечаем все числа как простые for (i = 0; i < table.Length; i++) table[i] = true; // Вычеркиваем лишнее for (i = 2; i * i < table.Length; i++) if (table[i]) for (j = 2 * i; j < table.Length; j += i) table[j] = false; // Выводим найденное for (i = 2; i < table.Length; i++) { if (table[i]) Console.WriteLine(i); } Console.ReadKey(); } } }
2. Оператор foreach Оператор foreach використовується для перебору елементів в масивах та інших колекціях і є новим типом циклу, реалізованому в C#. В цьому прикладі створюється ступінчастий масив, який заповнюється даними. За допомогою вкладених операторів циклу елементи масиву виводяться на консоль у вигляді матриці. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Console_Lab4 { class Program { static void Main(string[] args) { //оператор foreach і ступінчасті масиви int[][] а = new int[3][]; а[0] = new int[5] { 24, 50, 18, 3, 16 }; а[1] = new int[3] { 7, 9, -1 }; а[2] = new int[4] { 6, 15, 3, 1 }; Console.WriteLine("Початковий масив:"); foreach (int[] mas1 in а) { foreach (int x in mas1) Console.Write("\t" + x); Console.WriteLine(); } Console.ReadKey(); } } }
3. Генерація випадкових чисел Потреба в генерації випадкових чисел часто виникає в програмуванні. В C# є нестатичний клас Random, методи якого дозволяють генерувати різні послідовності випадкових чисел. Нижче наведено приклад з лекції 4 в якому в методі ValsGenerator створюється об'єкт aRand. Далі в циклі викликається метод aRand.Next(100), який при кожному виклику генерує одне випадкове число від 1 до100 і призначає його черговому елементу масиву. Зверніть увагу, що метод ValsGenerator є статичним. В методі Main створюється масив Data, викликається метод ValsGenerator для його заповнення, потім викликається метод Array.Sort(Data) для його сортування. Після чого елементи масиву виводяться в циклі на консоль. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Console_Lab4 { class Program { // генератор даних static void ValsGenerator(int[] Vals) { // Random - клас для генерації випадкових чисел Random aRand = new Random(); // заповнення масиву for (int i = 0; i < Vals.Length; i++) Vals[i] = aRand.Next(100); } static void Main(string[] args) { const int N = 10; int[] Data = new int[N]; ValsGenerator(Data); Array.Sort(Data); Console.WriteLine("Друк відсортованих даних"); for (int i = 0; i < Data.Length; i++) Console.WriteLine("Data[" + i + "] = " + Data[i]); Console.ReadLine(); } } } Зверніть увагу, що при виводі масиву Console.WriteLine("Data[" + i + "] = " + Data[i]); виконується неявне приведення з типу int до типу string.
4. Робота з математичними функціями Клас Math містить методи для роботи з математичними функціями. Приклад 4.9. з лекції 5 демонструє використання методів обчислення математичних функцій, які містяться в класі Math.
5. Варіанти завдань для Лабораторної роботи № 4 Номер варіанта відповідає номеру прізвища студента у списку групи
Література 1. Лекція 4 2. C# 2005 и платформа .Net 3.0 для профессионалов. Нейгел К., Ивьен Б. и др. –М.: ООО “И.Д. Вильямс", 2008. –1376 с. 3. Шилдт Г. С# 4.0: полное руководство. : Пер. с англ. — М. : ООО "И.Д. Вильямс", 2011. — 1056 с. 4. Д.М. Златопольский. Сборник задач по программированию. 2-е издание. // СПб.: БХВ-Петербург, 2007.-240 с. З повагою ІЦ "KURSOVIKS"! |