Роздрукувати сторінку
Главная \ Методичні вказівки \ Методичні вказівки \ 1653 Лабораторна робота №4 на тему Масиви і стандартні класи C#

Лабораторна робота №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

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

У таблиці наведені усі цілі числа від 2 до 100. Червоним помічені ті, які були видалені в процесі виконання алгоритму Решето Ератосфену.

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

  1. Організувати список з чисел від 2 до N, а також логічний масив розмірністю N;

  2. У вільну змінну R записати число 2;

  3. Виключити усі числа кратні R, починаючи з R*2;

  4. Записати в R наступне за R не закреслене число;

  5. Повторювати дії, описані в двох попередніх кроках. 

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

Номер варіанта відповідає номеру прізвища студента у списку групи

№ варі-анту

Зміст завдання

7

1. Реалізувати функцію знаходження всіх простих чисел в діапазоні від 11 до 51.  Згенеровані числа зберегти в масиві. Елементи масиву вивести на консоль. При реалізації використати алгоритм Ератосфена.

 

2. Створити масив для зберігання значень ваги  студентів групи (20 чоловік). Заповнити масив за допомогою класу Random цілими числами в діапазоні від 50 до 100 включно.  Відсортувати масив і вивести на консоль його елементи.

 

3. В двовимірному масиві зберігається інформація про оцінки  кожного із 20 студентів групи по кожній з 10 дисциплін. Перший рядок – інформація про оцінки першого студента, друга – другого і т.д. Обчислити середню успішність кожного студента.

 

Література

1. Лекція 4

2. C# 2005 и платформа .Net 3.0 для профессионалов. Нейгел К., Ивьен Б. и др. –М.: ООО “И.Д. Вильямс", 2008. –1376 с.

3. Шилдт Г. С# 4.0: полное руководство. : Пер. с англ. — М. : ООО "И.Д. Вильямс", 2011. — 1056 с.

4. Д.М. Златопольский. Сборник задач по программированию. 2-е издание. // СПб.: БХВ-Петербург, 2007.-240 с.

З повагою ІЦ "KURSOVIKS"!