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

ЛабРаб_ООП

.pdf
Скачиваний:
145
Добавлен:
27.05.2015
Размер:
1.37 Mб
Скачать

Вказівки до завдання 3.

Елементам управління рекомендується дати такі імена: lhsOperand, rhsOperand, expression, result

для полів типа TextBox; remainder, division, multiplication, subtraction, addition – для елементів типа RadioButton; quit, calculate – для кнопок Button.

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

private void subtractValues()

{

int lhs = int.Parse(lhsOperand.Text); int rhs = int.Parse(rhsOperand.Text); int outcome;

outcome = lhs – rhs;

expression.Text = lhsOperand.Text + " – " + rhsOperand.Text; result.Text = outcome.ToString();

}

Тут значення, що вводяться користувачем, перетворяться до цілого типу за допомогою методу int.Parse().

Вказівки до завдання 4.

На форму треба помістити два елементи управління типа DateTimePicker, назвавши їх first і second. (Ці елементи управління відображають календар, в якому можна вибрати дату.) У початковий момент ці елементи управління повинні відображати поточну дату.

Обробник натиснення на кнопку Compare може мати приблизно такий вигляд:

private int compare_Click(object sender, System.EventArgs e)

{

int diff = dateCompare(first.Value, second.Value);

info.Text =

"";

show("first

== second", diff == 0);

show("first

!= second", diff != 0);

show("first

< second", diff < 0);

show("first

<= second", diff <= 0);

show("first

> second", diff > 0);

show("first >= second", diff >= 0);

}

Тепер залишилося написати методи dateCompare і show. Структура методу dateCompare може бути така:

private int dateCompare(DateTime leftHandSide, DateTime rightHandSide)

{

// TO DO return . . .;

}

Параметри типа DateTime мають властивості Year, Month, Day. Їх треба використовувати в методі dateCompare.

Метод show показує результати порівняння в полі info типа TextBox.

21

Приклади [29]

Приклад #1: Прості типи даних

 

class TestMain

 

 

{

 

 

public static void Main( ) // Code Starts Here

{

 

 

bool b=true;

System.Console.WriteLine(b);

// boolean

byte by=200;

System.Console.WriteLine(by);

// byte

sbyte sby=-100; System.Console.WriteLine(sby); // signed byte

decimal dec=10m; System.Console.WriteLine(dec);//decimal(28-29 signif)

double dbl=12.2e23; System.Console.WriteLine(dbl); // double prec. float fl=12.2f; System.Console.WriteLine(fl); // single prec.

char c='A';

System.Console.WriteLine(c);

 

// unicode character

short sh=10;

System.Console.WriteLine(sh);

//

signed 16 bit

ushort ush=10;

System.Console.WriteLine(ush);

// unsigned 16 bit

int i=10;

System.Console.WriteLine(i);

//

signed 32 bit

uint ui=10;

System.Console.WriteLine(ui);

// unsigned 32 bit

long l=10;

System.Console.WriteLine(l);

// signed 64 bit

ulong ul=10;

System.Console.WriteLine(ul);

// unsigned 64 bit

}

 

 

 

 

 

 

}

 

 

 

 

 

 

Приклад #2: Приведення типів

 

 

 

 

class TestMain

 

 

 

 

 

{

 

 

 

 

 

 

public static void Main( )

// Code Starts Here

 

{

 

 

 

 

 

 

int x;

 

 

 

 

 

 

x='A';

// implicit cast (неявне приведення)

 

x= (int) 34.34F; // explicit cast (явне приведення)

decimal dec=x; // implicit cast

 

 

 

dec = (decimal)6.673e-11 ;

//explicit cast

 

 

dec=12+'A';

// implicit cast

 

 

 

System.Console.WriteLine(dec);

 

 

 

}

 

 

 

 

 

 

}

 

 

 

 

 

 

Приклад #3: Функції

using System; class TestMain

{

private static int Sum(int x,int у) int total;

total=x+y; return total;

}

private static void Sum(int x,int у,out int total) // out modifier

{

total=x+y;

}

private static void Sum(int x,int у,ref int total) // by ref

{

Console.WriteLine("Total = "+total); total=x+y;

}

public static void Main( )

22

{

Console.WriteLine("Sum="+Sum(10,20)); int ans;

Sum(20,30,out ans); // Must call with out Console.WriteLine("Sum="+ans);

ans=123;

Sum(30,40,ref ans); // Must Call with ref Console.WriteLine("Sum="+ans);

}

}

Приклад #4: Призначене для користувача введення

using System;

class TestMain

{

public static void Main( )

{

Console.Write("Enter A Line: "); String line=Console.ReadLine(); Console.WriteLine("You Entered: "+line);

}

}

Приклад #5: Операція ==

using System;

class Disk

{

private String mName;

public Disk(String name) { mName=name; } String GetName() { return mName; }

}

class TestMain

{

public static void Main( )

{

Disk x=new Disk("One"); Disk y=new Disk("Two");

if(x==y) // Check if x references same object as у Console.WriteLine("x+y reference same object"); }

x=y;

if(x==y) // Check if x references same object as у Console.WriteLine("Now x+y reference same object"); }

// In Strings the == operator is overloaded to compare the values of strings Console.Write("Enter а string:");

String str1=Console.ReadLine(); // Read а string in Console.Write("Enter а string:");

String str2=Console.ReadLine(); // Read а string in

if(str1==str2)

Console.WriteLine("Both strings are the same"); } else

Console.WriteLine("Strings are different"); }

}

}

23

Приклад #6: Перетворення типа String в будь-який простий тип using System;

class TestMain

{

public static void Main( )

{

String one="111111";

int i=Convert.ToInt32(one); // Conversions may throw exceptions double db=Convert.ToDouble(one);

decimal dec=Convert.ToDecimal(one);

}

}

Приклад #7: Структури

using System;

struct Point

{

public int x,y;

}

class TestMain

{

public static void Main( ) Point pt;

pt.x=10; pt.y=20;

}

}

Приклад #8: Перерахування

using System;

enum Colors { BLUE=0xFF0000,GREEN=0x00FF00,RED=0x0000FF}

class TestMain

{

static void Main()

{

Console.WriteLine("Data: "+Colors.BLUE);

Colors x=Colors.GREEN;

Console.WriteLine("Data: "+x);

}

}

Приклад #9: Форматоване виведення

using System; class TestMain

{

private static void Main()

{

Console.WriteLine("{0}={1}+{2}",23,20,3);

Console.WriteLine("{0} {1} {1} {1} {2} {2} {2}","Hello",123,45.5); Console.WriteLine("{0}"");

// format specifier

Console.WriteLine("{0:c}",123); // Print in Currency Console.WriteLine("{0:x}",2222321); // print in hexidecimal Console.WriteLine("{0:f}",1.2343); // print as float

// Total Space

24

Console.WriteLine("--

>{0,10}<--

",800);

// 10 spaces on right

Console.WriteLine("--

>{0-10}<--",800);

//

10 spaces on left

Console.WriteLine("--

>{0,10}<--

",1234.5);

 

Console.WriteLine("-->{0-10}<--",1234.5);

// Total Space+format specifier Console.WriteLine("-->{0,10:f}<--",56); Console.WriteLine("-->{0,10:x}<--",56); Console.WriteLine("-->{0-10:x}<--",561);

// Extra modifers

Console.WriteLine("-->{0:f4}<--",1.23); // 4 spaces after decimal Console.WriteLine("-->{0:x6}<--",1234);//Print 6 spaces + pad with zero Console.WriteLine("-->{0:c2}<--",1234.2323); // print 2 spaces after zero

// What is the output? Console.WriteLine("-->{0,10:f4}<--",123); Console.WriteLine("-->{0-10:f4}<--",123); Console.WriteLine("-->{0,20:c2}<--",1231121); Console.WriteLine("-->{0-20:c2}<--",12321212);

}

}

Лабораторна робота №2. Цикли, рядки, файли в C#.

Мета роботи: засвоїти основні управляючі конструкції мови C#, набути практичних навичок роботи з рядками і файлами.

Завдання.

1.Розробити консольний і графічний варіант простого переглядача текстових файлів. Використовувати елементи управління Button, Label, TextBox, OpenFileDialog і оператор циклу while. Зразок вигляду головного вікна програми в графічному варіанті:

25

2.Розробити програму, що демонструє кроки перетворення цілого числа в рядок з використанням циклу do . . . while. Зразковий вид головного вікна програми.

Хід роботи.

1.Виконати Вправу 1.

2.Виконати Вправу 2.

3.Виконати завдання 1-2.

Вправа 1. Використання класу FileStream для читання з файлу з довільним доступом

Наступний приклад демонструє прочитування даних з файлу з довільним доступом. Як файл, з якого проводитиметься читання, використовується файл .cs самого застосування.

1.Відкрийте Visual Studio 2005 і створіть нове C# Console Application, назвавши його

ReadFile.

2.Додайте два наступні оголошення просторів імен в самий початок файлу Class1.cs. Простір імен System.IO необхідний для класу FileStream, а простір імен System.Text буде потрібний для здійснення перетворення, яке нам доведеться виконувати над байтами, що прочитуються з файлу.

using System; using System.IO; using System.Text;

3. Додайте наступний код в метод Main():

static void Main(string[] args)

{

byte[] byData = new byte[100]; char[] charData = new char[100]; try

{

FileStream aFile = new FileStream(“../../Class1.cs”,FileMode.Open); aFile.Seek(55, SeekOrigin.Begin);

aFile.Read(byData, 0, 100);

}

catch(IOException e)

{

Console.WriteLine(“An IO exception has been thrown!”);

26

Console.WriteLine(e.ToString());

Console.ReadLine();

return;

}

Decoder d = Encoding.UTF8.GetDecoder(); d.GetChars(byData, 0, byData.Length, charData, 0);

Console.WriteLine(charData);

Console.ReadLine();

return;

}

4. Запустіть застосування.

Вправа 2. Відрядкове читання з файлу за допомогою класу StreamReader

1.Відкрийте Visual Studio 2005 і створіть нове C# Console Application, назвавши його

StreamRead.

2.Додайте оголошення простору імен System.IO.

3.Додайте наступний код в метод Main():

static void Main(string[] args)

{

string strLine; try

{

FileStream aFile = new FileStream(“Log.txt”,FileMode.Open); StreamReader sr = new StreamReader(aFile);

strLine = sr.ReadLine(); //Відрядкове прочитування даних while(strLine != null)

{

Console.WriteLine(strLine); strLine = sr.ReadLine();

}

sr.Close();

Console.ReadLine();

}

catch(IOException e)

{

Console.WriteLine(“An IO exception has been thrown!”); Console.WriteLine(e.ToString());

Console.ReadLine();

return;

}

return;

}

4.Створіть в директорії StreamRead\bin\Debug файл Log.txt.

5.Запустіть застосування.

Методичні вказівки та теоретичні відомості.

Цикли

Щоб багато разів виконати послідовність програмних інструкцій, необхідно організувати цикл. У мові C# циклічні конструкції представлені в багатому асортименті.

27

Цикл for

Загальний формат запису циклу for для повторного виконання однієї інструкції має наступний вигляд:

for(ініціалізація; умова; ітерація)Інструкція;

Якщо цикл for призначений для повторного виконання програмного блоку, то його загальний формат виглядає так:

for(ініціалізація; умова; ітерація)

{

Послідовність інструкцій

}

Елемент ініціалізація зазвичай є інструкцією привласнення, яка встановлює початкове значення змінній циклу. Ця змінна діє як лічильник, який управляє роботою циклу. Елемент умова є вираз типу bool, в якому тестується значення змінної циклу. Результат цього тестування визначає, виконається цикл for ще раз чи ні. Елемент ітерація – це вираз, який визначає, як змінюється значення змінної циклу після кожної ітерації. Зверніть увагу на те, що всі ці елементи циклу for повинні відділятися крапкою з комою. Цикл for виконуватиметься до тих пір, поки обчислення елементу умова дає дійсний результат. Як тільки умова стане помилковою, виконання програми продовжиться з інструкції, наступної за циклом for.

Приклад.

class TestMain

{

public static void Main( )

{

for(int i=0;i<10;++i)

{

if(i==5) { continue; }// continue

if(i>8) { break; }// break

System.Console.WriteLine(i);

}

}

}

Цикл while

Загальна форма циклу while має такий вигляд:

while (умова) інструкція;

Тут під елементом інструкція розуміється або одиночна інструкція, або блок інструкцій. Роботою циклу управляє елемент умова, який є допустимим виразом типу bool. Елемент інструкція виконується до тих пір, поки умовний вираз повертає значення true. Як тільки ця умова стане помилковою, управління передається інструкції, яка слідує за цим циклом.

Приклад.

class TestMain

{

public static void Main( ) int i;

i=0;

while(i<10)

{

i=i+1;

if(i==5) { continue; } if(i>8) { break; }

System.Console.WriteLine(i);

28

}

}

}

Цикл do-while

Третім циклом в C# є цикл do-while. На відміну від циклів for і while, в яких умова перевіряється при вході, цикл do-while перевіряє умова при виході з циклу. Це означає, що цикл do-while завжди виконується хоч би один раз. Його загальний формат має такий вигляд:

do {

інструкції;

} while (умова);

У наступній програмі цикл do-while використовується для відображення в зворотному порядку цифр, що складають задане ціле число.

using System;

class DoWhileDemo {

public static void Main() {

int num;

int nextdigit;

num = 198;

Console.WriteLine(“Число: ” + num);

Console.WriteLine(“Число із зворотним порядком цифр: ”);

do {

nextdigit = num % 10; Console.Write(nextdigit); num = num / 10;

} while(num > 0);

Console.WriteLine();

}

}

Цикл foreach

Цикл foreach використовується для опиту елементів колекції. Колекція – це група об'єктів. C# визначає декілька типів колекцій, і одним з них є масив. Формат запису циклу foreach має такий вигляд:

foreach (тип ім’я_змінної in колекція) інструкція;

Тут елементи тип і ім’я_змінної задають тип і ім'я ітераційної змінної, яка при функціонуванні циклу foreach набуватиме значень елементів з колекції.

Приклад.

using System;

public class ForEachLoop

{

public static int Main(string[] args)

{

int [] primes = {2, 3, 5, 7, 11, 13}; int sum = 0;

foreach (int prime in primes)

{

Console.Write("{0} ", prime); sum += prime;

}

Console.WriteLine(); Console.WriteLine("sum = {0}", sum); return 0;

}

29

}

Робота з рядками і символами

Клас Char

У C# є символьний тип char, заснований на класі System.Char і що використовує двобайтове кодування Unicode представлення символів. Для цього типу в мові визначені символьні константи

-символьні літерали. Константу можна задавати:

символом в одинарних лапках;

escape-послідовністю, що задає код символу;

Unicode-послідовністю, що задає Unicode-код символу.

Ось декілька прикладів оголошення символьних змінних і роботи з ними:

public void TestChar()

{

char ch1='A', ch2 ='\x5A', ch3='\u0058'; char ch = new Char();

int code; string s; ch = ch1;

//перетворення символьного типу в тип int code = ch; ch1=(char) (code +1); //перетворення символьного типу в рядок

//s = ch;

s = ch1.ToString()+ch2.ToString()+ch3.ToString(); Console.WriteLine("s= {0}, ch= {1}, code = {2}",

s, ch, code); }//TestChar

Клас Char, як і всі класи в C#, успадковує властивості і методи батьківського класу Object. Але у нього є і власні методи і властивості, і їх немало. Зведення цих методів приведене в таблиці 3.

Таблиця 3. Методи класу Char

Метод

 

 

Опис

GetNumericValue

Повертає чисельне значення

символу, якщо він є цифрою, і (-1)

 

інакше

 

 

GetUnicodeCategory

Всі символи розділені на категорії. Метод повертає Unicode

 

категорію символу.

 

IsControl

Повертає true,

якщо символ

є таким, що управляє

IsDigit

Повертає true,

якщо символ

є десятковою цифрою

IsLetter

Повертає true,

якщо символ

є буквою

IsLetterOrDigit

Повертає true,

якщо символ

є буквою або цифрою

IsLower

Повертає true,

якщо символ

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

IsNumber

Повертає true,

якщо символ

є числом (десятковою або

 

шістнадцятковою цифрою)

 

IsPunctuation

Повертає true,

якщо символ

є розділовим знаком

IsSeparator

Повертає true,

якщо символ

є роздільником

IsSurrogate

Деякі символи Unicode з кодом в інтервалі [0x1000, 0x10FFF]

 

представляються двома 16-бітовими "сурогатними" символами.

 

Метод повертає

true, якщо символ є сурогатним

IsUpper

Повертає true,

якщо символ

заданий у верхньому регістрі

IsWhiteSpace

Повертає true,

якщо символ

є "білим пропуском". До білих

 

пропусків, крім пропуску, відносяться і інші символи,

 

наприклад, символ кінця рядка і символ переведення каретки

 

 

30