ЛР 4 МАссивы и строки CSharp
.pdfньому залишаться тільки цифри.
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