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

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

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

ньому залишаться тільки цифри.

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

Клас String призначений для створення об’єктів, що призначені для зберігання та обробки рядкових значень. Цей клас містить велику кількість корисних функцій, деякі з яких подано у таблиці 1.

Таблиця 1 – Функції класу String

Функція

Опис

 

Приклад

 

 

 

 

застосування

Compare

Порівнює два рядки

int cs =

 

 

 

String.Compare(s1, s2);

 

 

 

 

Concat

Об’єднує

два

або

s3 =

кілька рядків

 

String.Concat(s1, s2);

 

 

 

Створює новий ря-

string s4 =

Copy

док, у який перено-

String.Copy(s3);

сить зміст базового

 

 

 

 

рядка

 

 

 

 

Визначає, чи дорів-

bool bstr =

Equals

нюють один одному

String.Equals(s3, s4);

 

два рядки

 

 

 

Insert

Робить вставку

од-

s4 = s3.Insert(2, s1);

ного рядка у інший

 

 

 

 

Повертає

масив

Дивись розділ 3

 

рядків, що

містить

 

Split

рядки, які є елемен-

 

тами вихідного

ря-

 

 

 

 

дку і розділені сим-

 

 

волами

 

 

 

 

Перетворює усі си-

s3 = s2.ToLower();

ToLower

мволи рядка у ниж-

 

 

ній регістр

 

 

 

 

Перетворює усі си-

s3 = s2.ToUpper();

ToUpper

мволи рядка у вер-

 

 

хній регістр

 

 

 

Видаляє задані зна-

s2= s3.Trim();

Trim

ки, що мітяться на

 

початку та наприкі-

 

 

 

 

нці рядка.

 

 

 

 

Видаляє задані зна-

s2= s3.TrimEnd(null);

TrimEnd

ки, що мітяться на-

 

 

прикінці рядка.

 

 

11

Видаляє задані зна- s2= s3.TrimStart(null);

TrimStart ки, що мітяться на початку рядка.

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

Форматування рядка – це операція приведення рядка до потрібного вигляду. Це здійснюється за допомогою рядка формату при виведенні.

Загальний синтаксис методу WriteLine об’єкту Console такий:

Console.WriteLine {"текст{Формат0) текст{Формат1)

текст, ...", Елемент0, Елемент1, ...);

Тут позначено:

текст – рядок, що виводиться; Форматj – j-й формат для виведення; Елементj – j-й елемент для виведення.

Для правильної роботи метод WriteLine повинен містити стільки ж специфікацій формату, скільки потім зазначено елементів для виведення.

Специфікації формату розміщують у фігурних дужках й нумеруються від нуля. Формати й елементи повинні відповідати один одному. Нижче описані можливі випадки при виконанні такого положення:

Console. WriteLine (format, a, b, c, d);

1.Усі формати відповідають елементам — виводяться чотири

елементи.

string format = "{0} {1} {2} {3}"

2.Зазначений інший порядок – у рядку формату специфікації не обов'язково повинні випливати один по одному номерів елементів виводу; зміна порядку специфікацій іноді виявляється зручною. Рядорк формату

string format = "{0} {2} {1} {3}"

виведе елементи в такому порядку: а, с, b, d.

3. Занадто мало специфікацій — будуть виведені тільки елементи, що відповідають наявним специфікаціям, тому с и d надруковані не будуть.

string format = "{0} {1}"

12

4. Номери, що повторюються – якщо ми повторюємо номер елемента, він буде виведений повторно. Рядок формату

string format = "{0) {1} {1} {3}"

виведе елементи a, b, b і d, а елемент с буде опущений.

5. Занадто багато специфікацій – буде сгенеровано помилку. string format = "{0} {1} {2} {3} {4}"

Оскільки у список елемент немає елемент, що відповідає {4}, ці специфікації не може бути реалізовано, тому С# зупинить виконання програми.

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

Метеорологічній станції необхідно проаналізувати дані про кількість опадів протягом 5 років. Кількість опадів реєструється щомісяця у міліметрах. Отже, загальна кількість чисел, які потрібно проаналі-

зувати: N = кількість років кількість місяців у році = 5 12 = 60.

Для збереження даних доцільно вибрати масив розміром 5 х 12. Тоді кожен рядок буде містити дані за рік (по місяцях), а кожен стовпець – дані за місяць (по роках).

Які ж дані потрібні метеорологам? Їм потрібно знати: середню кількість опадів за всі п'ять років і за кожен рік окремо; місяці, у яких була найменша та найбільша кількість опадів і в якому році; у якому місяці, якого року кількість опадів була нижче (або вище) за норму. Вихідні дані подано у вигляді таблиці нижче:

 

 

 

Кількість опадів, мм, по місяцях

 

 

 

Рік

Січень

Лютий

Березень

Квітень

Травень

Червень

Липень

Серпень

Вересень

 

Жовтень

Листопад

Грудень

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2008

10.2

8.1

6.8

4.2

3.1

1.8

0.5

0.3

1.1

 

2.3

6.1

7.4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2009

9.2

9.8

3.3

2.8

1.6

4.4

5.6

3.3

0.7

 

2.2

5.6

6.0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2010

6.6

5.5

3.8

3.0

2.0

3.5

5.7

2.2

1.5

 

2.2

6.6

3.4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

13

2011

4.3

4.3

4.3

1.6

2.4

2.2

5.8

4.4

3.0

4.5

3.4

9.2

 

 

 

 

 

 

 

 

 

 

 

 

 

2012

8.5

8.2

1.2

6.2

2.5

6.4

1.1

5.6

0.8

0.3

2.1

1.5

 

 

 

 

 

 

 

 

 

 

 

 

 

Норма

5.5

6.5

4.8

4.0

3.0

4.0

5.0

5.0

1.6

2.2

5.3

5.0

 

 

 

 

 

 

 

 

 

 

 

 

 

Програму, що вирішує цю задачу, подано нижче.

using System;

using System.Collections.Generic; using System.Linq;

using System.Text; namespace Meteo

{

class Program

{

static string[] Months = {"Сiч.","Лютий","Берез.","Квiт.",

"Трав.","Черв.","Липень", "Серп.", "Верес.","Жовт.","Лист.","Груд."}; static float[] RNorm =

{5.5f,6.5f,4.8f,4.0f,3.0f,4.0f,

5.0f,5.0f,1.6f,2.2f,5.3f,5.0f}; static string s0 = "===================="; static string s1 = "Уведiть вихiднi данi";

static string s2 = "Початковий рiк спостереження:"; static string s3 = "Кiнцевий рiк спостереження :"; static string s4 = "Кiнцевий рiк спостереження повинний бути бiльше початкового на 1-5 рокiв "; static string s5 = "Уведiть данi за ";

static string s6 = " рiк"; static void Main(string[] args)

{

string SData;

int BYear, LYear, DifYear; int i, j, k, Mmin, Mmax;

double sum = 0.0d, RainMean = 0.0d, min, max; double[,] Rains = new double[5, 12]; Console.Title = "Розрахунки метеоумов"; Console.SetWindowSize(120,40); Console.BackgroundColor = ConsoleColor.White; Console.ForegroundColor = ConsoleColor.Black; Console.Clear();

Console.WriteLine(s1); Console.WriteLine(s0);

14

do

{

Console.WriteLine(s4);

Console.WriteLine(s2);

BYear = Convert.ToInt32(Console.ReadLine()); Console.WriteLine(s3);

LYear = Convert.ToInt32(Console.ReadLine()); DifYear = LYear - BYear + 1; Console.WriteLine();

} while (DifYear > 5 || DifYear < 0); for (i=0; i<=DifYear; i++)

{

Console.WriteLine(s5 + Convert.ToString(BYear + i) + s6);

for (j=0; j<12; j++) Console.Write(Months[j] + " ");

Console.WriteLine();

SData = Console.ReadLine();

//Виділяємо фрагменти рядку string[] p = SData.Split(' ');

//Записуємо у масив

for (k = 0; k < 12; k++)

Rains[i, k] = Convert.ToDouble(p[k]);

}

//Обробка введеної інформації

//Розрахунок середньої кількості опадів за всі роки

for (i=0;i<DifYear;i++) for (j=0;j<12;j++) sum += Rains[i, j];

RainMean = sum/(12*DifYear);

SData = "Середня кiлькiсть опадiв за ";

SData += Convert.ToString(DifYear)+" рокiв: "; Console.WriteLine(SData);

//Визначення місяців, у яких була найбільша й найменша

//кількість опадів по роках

SData = "Рiк Max Min";

Console.WriteLine(SData); for (i=0;i<DifYear;i++)

{

SData = Convert.ToString(BYear + i) + " "; Console.Write(SData);

max = Rains[i, 0]; min = Rains[i, 0];

15

Mmax = 0; Mmin = 0;

for (j = 1; j < 12; j++)

{

if (Rains[i, j] > max)

{max = Rains[i, j]; Mmax = j; } if (Rains[i, j] < min)

{min = Rains[i, j]; Mmin = j; }

}

SData = Convert.ToString(min) + " , " + Months[Mmin];

Console.Write(SData);

SData = " " + Convert.ToString(max) + " , " + Months[Mmax];

Console.WriteLine(SData);

}

Console.WriteLine();

//Визначення місяців, у яких кількість опадів

//була нижче і вище норми по роках

SData = " Мiсяцi, у яких опади вище або "; SData += "нижче за норму (Н - норма)";

Console.WriteLine(SData);

SData = "------------------------------------------

";

Console.WriteLine(SData);

SData = "Рiк ";

Console.WriteLine(SData); SData = "";

for (j = 0; j < 12; j++) SData += Months[j] + " "; Console.WriteLine(SData);

for (i = 0; i < DifYear; i++)

{

SData = Convert.ToString(BYear + i) + " "; Console.Write(SData);

for (j = 0; j < 12; j++)

if (Rains[i, j] == RNorm[j])

 

Console.Write("H

");

else

if (Rains[i, j] > RNorm[j])

 

Console.Write("+

");

else

 

 

 

Console.Write("-

");

Console.WriteLine();

}

Console.ReadKey();

16

}

}

}

Радимо самостійно розібратися у приведеному прикладі.

На рисунку 4 подано результат роботи програми при введенні вихідних даних, приведених у таблиці вище.

Рисунок 4 – Результат роботи програми

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

1. Організуйте введення елементів матриць A і B розміром n m у діалоговому режимі. Значення n і m вибирайте з таблиці 1 відповідно до номера варіанта за списком. Матрицю заповните довільними речовинними числами: позитивними і негативними.

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

17

(використовуйте функцію Split).

2.Розрахуйте вираження C (A B)T (B A)T .

3.Виконайте завдання з таблиці 1 для матриці C .

4.Виведіть на екран й у текстовий файл вихідні дані і результати обчислень. Числа слід форматувати, та вивести із двома знаками після десятинної коми.

5.Роздрукуйте текст програми та результати обчислень.

Таблиця 1 – Варіанти завдань

n

m

Завдання

 

 

 

 

 

 

 

Сформувати вектор з максимальних елементів стовпців

1.

4

6

матриці і знайти його довжину

 

 

 

 

 

 

 

 

 

 

Сформувати вектор із сум індексів мінімальних елемен-

2.

7

3

тів рядків матриці і знайти його середнє гармонійне

 

 

 

 

 

 

 

 

 

 

Сформувати вектор із сум елементів стовпців матриці і

3.

3

8

відсортувати його за убуванням

 

 

 

 

 

 

 

 

 

 

Сформувати вектор з добутків елементів рядків матриці і

4.

5

4

знайти його середнє гармонійне

 

 

 

 

 

 

 

Транспонувати матрицю і знайти середнє арифметичне

5.

5

5

елементів побічної діагоналі транспонованої матриці

 

 

 

 

 

 

 

Сформувати вектор з мінімальних елементів рядків мат-

6.

6

4

риці і знайти його середнє геометричне

 

 

 

 

18

Продовження табл.1

n

m

Завдання

 

 

 

 

 

 

 

Сформувати вектор із середніх значень елементів стовпців

7.

4

5

матриці і знайти його максимальний елемент

 

 

 

 

 

 

 

Сформувати вектор із сум індексів максимальних елемен-

8.

8

3

тів рядків матриці і знайти його дисперсію

 

 

 

 

 

 

 

Сформувати вектор із середніх геометричних стовпців

9.

3

7

матриці і відсортувати його за зростанням

 

 

 

 

 

 

 

Сформувати вектор з елементів головної та побічної діа-

10.

4

4

гоналей матриці і знайти їхній скалярний добуток

 

 

 

 

 

 

 

Сформувати вектор з добутків індексів мінімальних еле-

11.

6

3

ментів рядків матриці і знайти його середнє геометричне

 

 

 

 

 

 

 

Сформувати вектор з добутків стовпців матриці і знайти

12.

3

5

індекс його мінімального елемента

 

 

 

 

 

 

 

Сформувати вектор із сум елементів рядків матриці і знай-

13.

7

3

ти його середнє квадратичне

 

 

 

 

 

 

 

Сформувати вектор з елементів, розташованих вище голо-

14.

5

5

вної діагоналі матриці, і знайти його довжину

 

 

 

 

 

 

 

Сформувати вектор з добутків елементів рядків матриці і

15.

6

4

відсортувати його по убуванню

 

 

 

 

 

 

 

Сформувати вектор з добутків елементів рядків матриці і

16.

3

7

знайти його середнє геометричне

 

 

 

 

 

 

 

Сформувати вектор з мінімальних елементів стовпців мат-

17.

4

5

риці і знайти його середнє гармонійне

 

 

 

 

 

 

 

Транспонувати матрицю і знайти середнє геометричне

18.

4

4

елементів побічної діагоналі транспонованої матриці

 

 

 

 

 

 

 

Сформувати вектор із середніх значень елементів стовпців

19.

3

8

матриці і знайти його мінімальний елемент

 

 

 

 

 

 

 

Сформувати вектор із сум індексів мінімальних елементів

20.

6

4

рядків матриці і знайти його дисперсію

 

 

 

 

 

 

 

Сформувати вектор із середніх арифметичних стовпців

21.

3

7

матриці і відсортувати його за зростанням

 

 

 

 

 

 

 

19

Продовження табл.1

n

m

Завдання

 

 

 

 

 

 

 

Сформувати вектора з елементів головної та побічної діа-

22.

5

5

гоналей матриці і знайти їхню суму

 

 

 

 

 

 

 

Сформувати вектор з добутків індексів максимальних

23.

4

6

елементів стовпців матриці і знайти його довжину

 

 

 

 

 

 

 

Сформувати вектор з добутків рядків матриці і знайти ін-

24.

7

3

декс його максимального елемента

 

 

 

 

 

 

 

Сформувати вектор із сум елементів рядків матриці і знай-

25.

5

4

ти його середнє квадратичне відхилення

 

 

 

 

 

 

 

Сформувати вектор з добутків елементів рядків матриці і

26.

3

6

відсортувати його по зростанню

 

 

 

 

 

 

 

Сформувати вектор з елементів, розташованих вище побі-

27.

4

4

чної діагоналі матриці, і знайти його довжину

 

 

 

 

 

 

 

Сформувати вектор з максимальних елементів рядків мат-

28.

6

4

риці і знайти його дисперсію

 

 

 

 

 

 

 

Сформувати вектор із сум індексів максимальних елемен-

29.

3

7

тів рядків матриці і знайти його середнє геометричне

 

 

 

 

 

 

 

Сформувати вектор із сум елементів рядків матриці і від-

30

5

4

сортувати його за убуванням

 

 

 

 

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

1.Звіт оформлюється на стандартних аркушах білого паперу формату А4 (210x297 мм). Текст пишеться з однієї сторони листа чорнилом синього або чорного кольору або друкується на принтері.

2.Бланк звіту готується під час домашньої підготовки до роботи і повинний містити:

2.1Дані про студента: прізвище й ініціали, шифр групи.

2.2Тему і ціль роботи.

2.3Дату виконання роботи.

2.4Набір даних, необхідних для виконання роботи: завдан-

ня до роботи, код програми, короткі теоретичні відомості про функції і

20

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