Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ЛР 4 МАссивы и строки CSharp

.pdf
Скачиваний:
9
Добавлен:
06.02.2016
Размер:
523.23 Кб
Скачать

Кафедра спеціалізованих комп’ютерних систем

МЕТОДИЧНІ ВКАЗІВКИ

до виконання лабораторної роботи № 3

« Масиви і рядки C#.NET»

за курсом «Програмування»

(для студентів I курсу напрямку 6.050102 «Комп’ютерна інженерія» усіх форм навчання)

Рекомендовано на засіданні кафедри СКС

Протокол № __ від _________

Затверджено на засіданні методради ДонДТУ

Протокол № ___ від ________

Алчевськ

ДонДТУ

2012

ББК У.в6

Методичні вказівки до виконання лабораторної роботи № 3 «Масиви і рядки C#.NET» за курсом «Програмування» (для студ. I курсу напрямку 6.050102 «Комп’ютерна інженерія» усіх форм навчання) /Укл.: Є.Є. Бізянов, С.В. Гонтовий, А.Ю. Кривцов. - Алчевськ: ДонДТУ, 2012. – 46с.

Розглянуто роботу з масивами і рядками у C#.NET. Наведено приклади виконання основних прийомів роботи, вимоги до звіту, сформульований ряд питань для самоперевірки.

Укладачі:

Є.Є. Бізянов, доц.,

 

С.В. Гонтовий, доц.

 

А.Ю.Кривцов, ас.

Відповідальний редактор

С.В. Гонтовий, доц.

Відповідальний за випуск

 

2

 

ЗМІСТ

 

ЗМІСТ ..........................................................................................................

 

3

1 МАСИВИ ..................................................................................................

 

4

1.1

Оголошення й ініціалізація масивів .....................................

5

1.2

Основні операції з масивами ................................................

7

2 РЯДКИ ......................................................................................................

 

9

2.1 Оголошення й ініціалізація змінних-рядків............................

10

2.2

Перетворення рядків у числа ..............................................

10

2.3

Функції класу String для роботи з рядками .......................

11

2. 4 Форматування рядків..........................................................

12

3 ПРИКЛАД ВИКОРИСТАННЯ МАСИВІВ І РЯДКІВ ........................

13

ЗАВДАННЯ ДО ЛАБОРАТОРНОЇ РОБОТИ.........................................

17

ВИМОГИ ДО ЗВІТУ.................................................................................

20

КОНТРОЛЬНІ ПИТАННЯ .......................................................................

21

СПИСОК РЕКОМЕНДОВАНОЇ ЛІТЕРАТУРИ.....................................

22

3

Ціль роботи: навчитися працювати з масивами і рядками в програмах C#.NET.

1 МАСИВИ

Масив – це впорядкована послідовність даних одного типу, що зберігаються в пам'яті машини та мають індекси. У C#.NET масив не є основним типом даних, він утворюється з комбінації інших типів. Масив може складатися з елементів, що належать до основних типів C#.NET або типів користувача. Масиви можуть бути одномірними (вектори, рисунок 1.1), двомірними (матриці, рисунок 1.2), трьохмірними (куби) і n-мірними.

Адреса елементу в масиві

0

1

2

3

23.4-46.05 2 1.1

Елементи масиву

Рисунок 1.1 – Одномірний масив-вектор

Індекс

Стовпця

 

Рядка

 

0

1

2

 

 

 

 

0

0.55

123.5

-11

 

 

 

 

1

-13.5

0.006

-33.4

 

 

 

 

Рисунок 1.2 – Двомірний масив – матриця

Всі елементи масиву мають однакову довжину і належать до одного типу даних. Отже, масив не може містити дані різних типів. Однак, якщо елементом даних масиву є структура, масив може містити дані різного типу, що відносяться до полів структури.

Вимога однорідності елементів масиву необхідна для того, щоб компілятор знав місце розташування кожного елемента в пам'яті

4

комп'ютера. Саме тому елементи масиву розташовуються в пам'яті послідовно, друг за другом. На рисунку 1.3 показане розміщення масиву з 5 цілих чисел типу ushort у пам'яті комп'ютера.

Рисунок 1.3 – Розміщення масиву з 5 цілих чисел у пам'яті

Нехай початкова адреса масиву в пам'яті (адреса елемента a[0]) дорівнює 999. Тоді адреса елемента a[1] 999+2 = 1001, елемента a[2] 1001+2=1003 і т.д. Згадайте, що кожна змінна типу ushort займає в пам'яті 2 байти. Отже, для розміщення кожного елемента масиву потрібні 2 комірки пам'яті.

Двомірні масиви розташовуються в пам'яті в такий спосіб: спочатку йдуть елементи першого рядка, потім другого, третього і т.д.

1.1 Оголошення й ініціалізація масивів

Ідентифікатор масиву являє собою постійну адресу першого елемента масиву, який не може бути змінений під час виконання програми.

Формат оголошення змінної типу масив наступний:

ТД [,…,]ІЗ = new [Р1,…,Рn];

тут: ТД – тип даних елементів масиву;

5

ІЗ – ім'я змінної; Р – розмірність.

Приклади оголошень змінних-масивів.

//Вектор A із 5 цілих елементів int[] A = new int[5];

//Матриця C 10х10 із 100 елементів

//речовинного типу

float [,] C = new float[10, 10];

//Трьохмірний масив DS 4х5х6,

//який містить 120 елементів речовинного типу double[,,] DS = new double [4, 5, 6];

УВАГА! Індекс першого елемента масиву завжди дорівнює нулю та не може бути змінений! Індекс останнього елементу j-ї розмірності є таким, що дорівнює Рj-1.

Так, для оголошених вище масивів А та С перший елемент має

індекс: A[0] – для масиву А, C[0, 0] – для масиву С; відповідно останній елемент має індекс: A[4] – для масиву А та C[9, 9] для масиву С.

Вправа. Визначте самостійно індекси першого й останнього елементів для таких масивів:

int[] Ar_Int = new int[12];

float[] Ar_Float = new float[5, 18]; char[] Ar_Char = new char[10, 3, 11];

Якщо змінну-масив оголошено так, як показано вище, то при старті програми всі елементи масиву дорівнюють нулю. Це так названа

неявна ініціалізація. При явній ініціалізації значення елементів масиву задаються при його оголошенні:

int[] A = {0, 2, -10, 8 ,45};

float [,] C = new float [,] {{2.2,3.08}, {-4.1,5.0}};

Зверніть увагу, що при явній ініціалізації ми не вказуємо розмірності масиву. Компілятор визначить їх самостійно.

Інший спосіб – це ініціалізація під час виконання програми. При цьому необхідно звернутися до кожного елемента масиву за індексом, наприклад, так:

6

A[0]=2; A[1]=3; A[2]=-4; A[3]=0; A[4]=3;

або так

A[0]=A[1]=A[2]=3; A[3]=8; A[5]=6;

1.2 Основні операції з масивами

При розгляді операцій з масивами виділимо окремо операції з векторами, операції з матрицями й операції з векторами і матрицями. Відразу відзначимо, що всі операції доцільно виконувати з використанням циклів.

Операції з векторами:

додавання Ci = Ai + Bi;

Приклад програмної реалізації:

float[] AV = {-11.8f, 10.4f, 0.567f};//

Вихідні

float[]

BV = {7.65f, -0.8f, -9.4f};

//

масиви

float[]

CV

=

new float [3];

//

Результат

for (int i

=

1;i<3;i++)

CV[i] = AV[i] + BV[i];

вирахування Ci Ai Bi ;

Приклад програмної реалізації:

float[] AV = {-11.8f, 10.4f, 0.567f};//

Вихідні

float[]

BV = {7.65f, -0.8f, -9.4f};

//

масиви

float[]

CV

=

new float [3];

//

Результат

for (int i

=

1;i<3;i++)

CV[i] = AV[i] - BV[i];

множення вектора на константу Ci CS Ai ;

Приклад програмної реалізації:

float[]

AV = {-11.8f, 10.4f, 0.567f};//

Вихідні

float const CS =

-1.65f;

//

дані

float[]

CV

=

new

float [3];

// Результат

for (int i

=

1;i<3;i++)

CV[i] = СІ*AV[i];

скалярний добуток CP Ai Bi ;

i

Приклад програмної реалізації:

7

float AV[3] = {-11.8f, 10.4f, 0.567f}; float BV[3] = {7.65f, -0.8f, -9.4f};

float CVP = 0.0f;

 

// Скалярний добуток

for (int

i = 1;i<3;i++)

CVP += AV[i]*BV[i];

 

векторний добуток

Ci Ai Bi ;

Приклад програмної реалізації:

float[] AV = {-11.8f, 10.4f, 0.567f};// Вихідні float[] BV = {7.65f, -0.8f, -9.4f}; // масиви

float[] CVP = new float [3];

 

 

 

 

 

 

 

 

 

 

 

// Векторний добуток

 

 

 

 

 

 

 

 

 

 

 

 

 

 

for (int

i = 1;i<3;i++)

CVP[i] = AV[i]*BV[i];

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

обчислення довжини вектора L

Ai2 ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

1

 

 

n

 

 

 

 

 

 

середнє арифметичне AСР

 

 

Ai ;

 

 

 

 

 

 

 

 

 

 

 

 

 

n i 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

n

 

 

 

 

 

 

 

середнє квадратичне SК

 

 

Ai2 ;

 

 

 

 

 

 

 

 

 

 

 

 

 

n i 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n

 

 

 

 

 

 

середнє геометричне S ГМ n Ai

;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

n

1

 

 

 

 

 

середнє гармонійне S ГРМ

 

 

 

 

;

 

 

 

 

n

 

 

x

 

 

 

 

 

 

 

 

 

 

 

i 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i

 

 

 

 

 

 

дисперсія d

і середньоквадратичне відхилення :

 

 

n

 

1

n

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

d

 

 

 

 

Ai2

AСР2

, d ,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

n 1 n i 1

 

 

 

 

 

 

 

 

 

 

 

 

тут: A і B – вихідні вектори, C – результуючий вектор, CS – константа.

Умова: вектори повинні мати однакову розмірність. Операції з матрицями:

8

додавання Ci, j Ai, j Bi, j ;

вирахування Ci, j Ai, j Bi, j ;

транспонування AiT, j Aj, i ;

множення матриці A розмірністю m n на матрицю B

n

розмірністю n l Ck, j Ak,i Bi, j ; i 1

обчислення визначника матриці.

Умова: при додаванні та відніманні матриці повинні мати однакову розмірність.

Операції з векторами та матрицями:

множення матриці A розмірністю m n на вектор B ро-

m

змірністю m Ci Aij B j . j 1

Крім перерахованих вище операцій використовують також:

пошук максимального й мінімального елемента масиву (матриці або вектора);

пошук елемента масиву (матриці або вектора), що задовольняє заданій умові;

обертання квадратної матриці.

Застосування більшості цих операцій розглянуто нами у прикладі в розділі 3.

2 РЯДКИ

Рядок – це набір символів, укладений у подвійні лапки:

“Це рядок” “І це рядок 12345 ??? !!!”

“222 333 444 ”

Рядкові значення в програмах C#.NET можна зберігати у змінних і обробляти подібно до того, як обробляються дані інших типів.

9

2.1 Оголошення й ініціалізація змінних-рядків

Змінна-рядок – це ні що інше, як масив символів. Синтаксис оголошення рядкової змінної є таким:

string Iм'я_рядкової_змінної [=”Початкове значення”];

Приклад.

string svar, s1, as;

Рядкову змінну варто (але не обов’язково) ініціалізувати під час оголошення, наприклад, так:

string hello = “Усім привіт!”;

Якщо рядок – це масив, то логічно припустити, що і звертатися до його елементів можна так само, як ми звертаємося до елементів масиву, тобто за індексом:

string my_string = “Приклад рядка”;

. . .

Console.WriteLine(my_string[4]); // Виведе ‘л'

Для роботи з рядками визначені наступні операції:

відносин (порівняння): = =, !=, >, <, >=, <=;

присвоювання =, +=;

конкатенації (об'єднання, склеювання) +;

індексації [ ].

Рядки порівнюються посимвольно, з урахуванням регістра си-

мволів.

2.2 Перетворення рядків у числа

Рядок «123» і число 123 – це різні речі. Рядок – це послідовність будь яких символів, а число – це число. Часто зручніше здійснити введення у вигляді рядка, відредагувати цей рядок, потім перетворити в число і далі працювати з числом. Так, наприклад, користувач може вводити грошові суми або відсотки, дописуючи (або не дописуючи) наприкінці «грн.», «USD», «$», «%». Ми повинні передбачити цю ситуацію, видаливши непотрібні символи з уведеного рядка, після чого в

10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]