ЛАБОРАТОРНАЯ РАБОТА №2. ЛИНЕЙНЫЕ АЛГОРИТМЫ

  • docx
  • 27.11.2021
Публикация на сайте для учителей

Публикация педагогических разработок

Бесплатное участие. Свидетельство автора сразу.
Мгновенные 10 документов в портфолио.

Иконка файла материала Л2-002953.docx

ЛАБОРАТОРНАЯ РАБОТА №2.

ЛИНЕЙНЫЕ АЛГОРИТМЫ

Цель лабораторной работы: научиться составлять каркас про- стейшей программы в среде Visual Studio. Написать и отладить про- грамму линейного алгоритма.

2.1.  Структура приложения

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

Кроме понятия проект часто используется более глобальное поня- тие – решение (solution). Решение содержит один или несколько проек- тов, один из которых может быть указан как стартовый проект. Выпол- нение решения начинается со стартового проекта.

Таким образом, при создании простейшей C# программы в Visual Studio создается папка решения, в которой для каждого проекта созда- ется подпапка проекта, а уже в ней будут создаваться другие подпапки с результатами компиляции приложения.

Проект – это основная единица, с которой работает программист. При создании проекта можно выбрать его тип, а Visual Studio создаст каркас проекта в соответствии с выбранным типом.

В предыдущей лабораторной работе мы попробовали создавать оконные приложения, или иначе Приложения Windows Forms. Приме- ром другого типа проекта является привести проект консольного при- ложения.

По своим "внешним" проявлениям консольные напоминают при- ложения DOS, запущенные в Windows. Тем не менее, это настоящие Win32-приложения, которые под DOS работать не будут. Для консоль- ных приложений доступен Win32 API, а кроме того, они могут исполь- зовать консоль – окно, предоставляемое системой, которое работает в текстовом режиме и в которое можно вводить данные с клавиатуры. Особенность консольных приложений в том, что они работают не в графическом, а в текстовом режиме.

Проект в Visual Studio состоит из файла проекта (файл с расшире- нием .csproj), одного или нескольких файлов исходного текста (с рас- ширением .cs), файлов с описанием окон формы расширением


.designer.cs), файлов ресурсов (с расширением .resx), а также ряда служебных файлах.

В файле проекта находится информация о модулях, составляющих данный проект, входящих в него ресурсах, а также параметров построе- ния программы. Файл проекта автоматически создается и изменяется средой Visual Studio и не предназначен для ручного редактирования.

Файл исходного текста – программный модуль предназначен для размещения текстов программ. В этом файле программист размещает текст программы, написанный на языке C#. Модуль имеет следующую структуру:

 

// Раздел подключенных пространств имен using System;

 

// Пространство имен нашего проекта namespace MyFirstApp

{

// Класс окна

public partial class Form1 : Form

{

// Методы окна public Form1()

{

InitializeComponent();

}

}

}

 

В разделе подключения пространств имен (каждая строка которого располагается в начале файла и начинается ключевым словом using) описываются используемые пространства имён. Каждое пространство имён включает в себя классы, выполняющие определённую работу, например, классы для работы с сетью располагаются в пространстве System.Net, а для работы с файлами – в System.IO. Большая часть про- странств, которые используются в обычных проектах, уже подключена при создании нового проекта, но при необходимости можно дописать дополнительные пространства имён.

Для того чтобы не происходило конфликтов имён классов и пере- менных, классы нашего проекта также помещаются в отдельное про- странство имен. Определяется оно ключевым словом namespace, после


которого следует имя пространства (обычно оно совпадает с именем проекта).

Внутри пространства имен помещаются наши классы – в новом проекте это класс окна, который содержит все методы для управления поведением окна. Обратите внимание, что в определении класса при- сутствует ключевое слово partial, это говорит о том, что в исходном тексте представлена только часть класса, с которой мы работаем непо- средственно, а служебные методы для обслуживания окна скрыты в другом модуле (при желании их тоже можно посмотреть, но редактиро- вать вручную не рекомендуется).

Наконец, внутри класса располагаются переменные, методы и дру- гие элементы программы. Фактически, основная часть программы раз- мещается внутри класса при создании обработчиков событий.

При компиляции программы Visual Studio создает исполняемые

.exe-файлы в каталоге bin.

2.2.  Работа с проектом

Проект в Visual Studio состоит из многих файлов, и создание слож- ной программы требует хранения каждого проекта в отдельной папке. При создании нового проекта Visual Studio по умолчанию сохраняет его в отдельной папке. Рекомендуется создать для себя свою папку со своей фамилией внутри папки своей группы, чтобы все проекты хранились в одном месте. После этого можно запускать Visual Studio и создавать но- вый проект (как это сделать показано в предыдущей лабораторной ра- боте).

Сразу после создания проекта рекомендуется сохранить его в под- готовленной папке: Файл Сохранить всё. При внесении значитель- ных изменений в проект следует еще раз сохранить проект той же ко- мандой, а перед запуском программы на выполнение среда обычно сама сохраняет проект на случай какого-либо сбоя. Для открытия существу- ющего проекта используется команда Файл → Открыть проект, либо можно найти в папке файл проекта с расширением .sln и сделать на нём двойной щелчок.

 

2.3.  Описание данных

Типы данных имеют особенное значение в С#, поскольку это стро- го типизированный язык. Это означает, что все операции подвергаются строгому контролю со стороны компилятора на соответствие типов, причем недопустимые операции не компилируются. Такая строгая про- верка типов позволяет предотвратить ошибки и повысить надежность



программ. Для обеспечения контроля типов все переменные, выражения и значения должны принадлежать к определенному типу. Такого поня- тия, как бестиповая переменная, допустимая в ряде скриптовых языков, в C# вообще не существует. Более того, тип значения определяет те операции, которые разрешается выполнять над ним. Операция, разре- шенная для одного типа данных, может оказаться недопустимой для другого.

Рис.2.1 Структура типов данных

Целочисленные типы

В С# определены девять целочисленных типов: char, byte, sbyte, short, ushort, int, uint, long и ulong. Тип char может хранить числа, но чаще используется для представления символов. Остальные восемь це- лочисленных типов предназначены для числовых расчетов.

Некоторые целочисленные типы могут хранить как положитель- ные, так и отрицательные значения (sbyte, short, int и long), другие же

   только положительные (char, byte, ushort, uint и ulong).


Типы с плавающей точкой

Такие типы позволяют представлять числа с дробной частью. В С# имеются три разновидности типов данных с плавающей точкой: float, double и decimal. Первые два типа представляют числовые значения с одинарной и двойной точностью, вычисления над ними выполняются аппаратно и поэтому быстро. Тип decimal служит для представления чисел с плавающей точкой высокой точности без округления, характер- ного для типов float и double. Вычисления с использованием этого ти- па выполняются программно и поэтому более медленны.

Числа, входящие в выражения, C# по умолчанию считает целочис- ленными. Поэтому следующее выражение будет иметь значение 0, ведь если 1 нацело разделить на 2 то получится как раз 0:

 

double x = 1 / 2;

 

Чтобы этого не происходило, в подобных случаях нужно явно ука- зывать тип чисел с помощью символов-модификаторов: f для float и d для double. Приведённый выше пример правильно будет выглядеть так:

 

double x = 1d / 2d;

 

Иногда в программе возникает необходимость записать числа в экспоненциальной форме. Для этого после мантиссы числа записывает- ся символ «e» и сразу после него – порядок. Например, число 2,5∙10-2 будет записано в программе следующим образом:

 


2.5e-2


Символьные типы


В С# символы представлены не 8-разрядным кодом, как во многих других языках программирования, а 16-разрядным кодом, который называется юникодом (Unicode). В юникоде набор символов представ- лен настолько широко, что он охватывает символы практически из всех естественных языков на свете.

Основным     типом     при     работе     со     строками      является тип string, задающий                                                          строки             переменной             длины. Тип string представляет последовательность из нуля или более симво- лов в кодировке Юникод. По сути, текст хранится в виде последова- тельной доступной только для чтения коллекции объектов char.


Логический тип данных

Тип bool представляет два логических значения: «истина» и

«ложь». Эти логические значения обозначаются в С# зарезервирован- ными словами true и false соответственно. Следовательно, переменная или выражение типа bool будет принимать одно из этих логических значений.

 

Рассмотрим самые популярные данные – переменные и констан- ты. Переменная – это ячейка памяти, которой присвоено некоторое имя и это имя используется для доступа к данным, расположенным в данной ячейке. Для каждой переменной задаётся тип данных – диапазон всех возможных значений для данной переменной. Объявляются переменные непосредственно в тексте программы. Лучше всего сразу присвоить им начальное значение с помощью знака присвоения «=» (переменная = значение):

 

int a;            // Только объявление

int b = 7; // Объявление и инициализация

 

Для того чтобы присвоить значение символьной переменной, до- статочно заключить это значение (т.е. символ) в одинарные кавычки:

 

char ch;                   // Только объявление

char symbol = 'Z'; // Объявление и инициализация

Частным случаем переменных являются константы. Константы – это переменные, значения которых не меняются в процессе выполнения программы. Константы описываются как обычная переменная, только с ключевым словом const впереди:

 

const int c = 5;

 

2.4.  Ввод/вывод данных в программу

Рассмотрим один из способов ввода данных через элементы, раз- мещенные на форме. Для ввода данных чаще всего используют элемент управления TextBox, через обращение к его свойству Text. Свойство Text хранит в себе строку введенных символов. Поэтому данные можно считать таким образом:

 

private void button1_Click(object sender,EventArgs e)


{

string s = textBox1.Text;

}

 

Однако со строкой символов трудно производить арифметические операции, поэтому лучше всего при вводе числовых данных перевести строку в целое или вещественное число. Для этого у типов, или int и double существуют методы Parse для преобразования строк в числа. С этими числами можно производить различные арифметические дей- ствия. Таким образом, предыдущий пример можно переделать следую- щим образом:

 

private void button1_Click(object sender, EventArgs e)

{

string s = textBox1.Text; int a = int.Parse(s); int b = a * a;

}

 

В языках программирования в дробных числах чаще всего исполь- зуется точка, например: «15.7». Однако в C# методы преобразова- ния строк в числа (вроде double.Parse() или Convert.ToFloat()) учитывают региональные настройки Windows, в которых в каче- стве десятичной точки используется символ запятой (например,
«15,7»). Поэтому в полях TextBox в формах следует вводить дроб- ные числа с запятой, а не с точкой. В противном случае преобразо- вание не выполнится, а программа остановится с ошибкой.

Перед выводом числовые данные следует преобразовать назад в строку. Для этого у каждой переменной существует метод ToString(), который возвращает в результате строку с символьным представлением значения. Вывод данных можно осуществлять в элементы TextBox или Label, использую свойство Text. Например:

 

private void button1_Click(object sender, EventArgs e)

{

string s = textBox1.Text; int a = int.Parse(s); int b = a * a;

label1.Text = b.ToString();

}


2.5.  Арифметические действия и стандартные функции

При вычислении выражения стоящего в правой части оператора присвоения могут использоваться арифметические операции:

 

·               * умножение;

·                      + сложение;

·               вычитание;

·               / деление;

·               % – остаток от деления.

 

Для задания приоритетов операций могут использоваться круглые скобки ( ). Также могут использоваться стандартные математические функции, представленные методами класса Math:

 

·               Math.Sin(a) синус;

·               Math.Sinh(a) гиперболический синус;

·               Math.Cos(a) косинус (аргумент задается в радианах);

·               Math.Atan(a) арктангенс (аргумент задается в радианах);

·               Math.Log(a) – натуральный логарифм;

·               Math.Exp(a) экспонента;

·               Math.Pow(x, y) – возводит переменную x в степень y;

·               Math.Sqrt(a) квадратный корень;

·               Math.Abs(a) модуль числа;

·               Math.Truncate(a) целая часть числа;

·               Math.Round(a) округление числа;

 


 

нах.


В тригонометрических функциях все аргументы задаются в радиа-

 

2.6.  Пример написания программы

Задание: составить программу вычисления для заданных значений


x, y, z арифметического выражения:

 

u = tg 2 (x + y) - ey-z

Панель диалога программы организовать в виде, представленном на рис. 2.1.

Для вывода результатов работы программы в программе использу- ется текстовое окно, которое представлено обычным элементом управ-


ления. После установки свойства Multiline в True появляется возмож- ность растягивать элемент управления не только по горизонтали, но и по вертикали. А после установки свойства ScrollBars в значение Both в окне появится вертикальная, а при необходимости и горизонтальная по- лосы прокрутки.

 


 

Рис 2.1. Внешний вид программы

Информация, которая отображается построчно в окне, находится в массиве строк Lines, каждая строка которого имеет тип string. Однако нельзя напрямую обратиться к этому свойству для добавления новых строк, поскольку размер массивов в C# определяется в момент их ини- циализации. Для добавления нового элемента используется свойство Text, к текущему содержимому которого можно добавить новую строку:

 

textBox4.Text += Environment.NewLine + "Привет";

 

В этом примере к текущему содержимому окна добавляется символ перевода курсора на новую строку (который может отличаться в разных операционных системах, и потому представлен свойством класса Environment) и сама новая строка. Если добавляется числовое значение, то его предварительно нужно привести в символьный вид методом ToString().

Работа с программой происходит следующим образом. Нажмите (щелкните мышью) кнопку «Выполнить». В окне textBox4 появляется результат. Измените исходные значения x, y, z в окнах textBox1 textBox3 и снова нажмите кнопку «Выполнить» – появится новые ре- зультаты.


Полный текст программы имеет следующий вид:

 

using System;

using System.Windows.Forms;

 

namespace MyFirstApp

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

 

private void Form1_Load(object sender, EventArgs e)

{

// Начальное значение X textBox1.Text = "3,4";

// Начальное значение Y textBox2.Text = "0,74";

// Начальное значение Z textBox3.Text = "19,43";

}

 

private void button1_Click(object sender, EventArgs e)

{

// Считывание значения X

double x = double.Parse(textBox1.Text);

// Вывод значения X в окно textBox4.Text += Environment.NewLine +

"X = " + x.ToString();

// Считывание значения Y

double y = double.Parse(textBox2.Text);

// Вывод значения Y в окно textBox4.Text += Environment.NewLine +

"Y = " + y.ToString();

// Считывание значения Z

double z = double.Parse(textBox3.Text);

// Вывод значения Z в окно textBox4.Text += Environment.NewLine +

"Z = " + z.ToString();

// Вычисляем арифметическое выражение double a = Math.Tan(x + y) *

Math.Tan(x + y);


double b = Math.Exp(y - z);

double c = Math.Sqrt(Math.Cos(x*x) + Math.Sin(z*z));

double u = a -b * c;

// Выводим результат в окно textBox4.Text += Environment.NewLine +

"Результат U = " + u.ToString();

}

}

}

 

Если просто скопировать этот текст и заменить им то, что было в редакторе кода Visual Studio, то программа не заработает. Правильнее будет создать обработчики событий Load у формы и Click у кнопки и уже в них вставить соответствующий код. Это замечание относится и ко всем последующим лабораторным работам.

2.7.  Выполнение индивидуального задания

Ниже приведено 20 вариантов задач. По указанию преподавателя выберите свое индивидуальное задание. Уточните условие задания, ко- личество, наименование, типы исходных данных. В соответствии с этим установите необходимое количество окон TextBox, тексты заголовков на форме, размеры шрифтов, а также типы переменных и функции преоб- разования при вводе и выводе результатов. Для проверки правильности программы после задания приведен контрольный пример: тестовые зна- чения переменных, используемых в выражении, и результат, который при этом получается.

Индивидуальные задания

2cosæ x - p ö



ç

1. t =                         è


÷                      2

6	æzöø ç1 +                      ÷.

 


øè0.5 + sin 2 y ç                                 3 - z2 / 5 ÷


При x=14.26, y=-1.22, z=3.5´10-2


t=0.564849.


3 8 + x - y 2 +1


x- y  (  2                     )x

               


2.    u =


x2 + y2 + 2         - e


tg z +.


При x=-4.5, y=0.75´10-4 ,z=0.845´102


u=-55.6848.


x -	2 y
1 + x2 y2

1 + sin 2(x + y)                     y                2 æ         1 ö

 


3.    v =


x                    + cos


ç arctg    ÷.

zè            ø


 

При x=3.74´10-2 , y=-0.825, z=0.16´102 , v=1.0553.


(1+2 sin2 y )æ


z2                   z3


z4 ö


4.    w =


cos x - cos y


ç1 + z +                  +     +     ÷.

è                        2     3     4 ø


При x=0.4´104


,y=-0.875, z=-0.475´10-3


w=1.9873.


5. a


= lnæç y-          öæ x - y ö + sin 2 arctg (z).



÷ç                                                  ÷

è                                       øè      2 ø


При x=-15.246, y=4.642´10-2 , z=20.001´102


a =-182.036.


6.  b =                    10(3   x + xy+2 )(arcsin2 z -  x - y ).

При x=16.55´10-3 , y=-2.75, z=0.15 b =-38.902.


7. g


= 5arctg


(x)


-   1 arccos                           .

4


При x=0.1722, y=6.33, z=3.25´10-4

                        


g =-172.025.


arctg8. j =


( )                 ( ) + 3


x6 + ln 2 y.


x+	arctgzПри x=-2.235´10-2 , y=2.23, z=15.221 j =39.374.


y                                                       cos y -     z


9. y =


x x -


+ (y - x)             (y - x) .

1 + (y - x)2


При x=1.825´102 , y=18.225, z=-3.298´ 10 -2


y =1.2131.


10.


a = 2-x


x + 4


y 3 ex-1 / sin z .


При x=3.981´10-2 , y=-1.625´103 , z=0.512 a=1.26185.

æ                    sin 2 z ö

x - y ç1 +                 ÷

ç                      x + y ÷


11. b = y


+ cos3 (y)            è                 ø .


e x- y + x

2

При x=6.251, y=0.827, z=25.001 b=0.7121.


yæ arctgz - p ö


ç                 ÷

12. с = 2(yx ) + (3x )y  -   è                              6 ø .

x +    1

y2 + 1


При x=3.251, y=0.325, z=0.466´10-4


c=4.025.


4 y + 3 x -1


13.


f = x - y (sin 2 z + tgz).

При x=17.421, y=10.365´10-3 , z=0.828´105


 

f=0.33056.


 

14.     g =


y x+1


x + y

+               2


(x + 1)-1 / sin z .


 


При x=12.3´10-1, y=15.4, z=0.252´103


g=82.8257.


15.    h =


xy +1 + ey -1


(1 +


y - x )+           -            .

2                              3


При x=2.444, y=0.869´10-2 , z=-0.13´103


h = -0.49871.


16.    y =


- 2.7


c2 x2


× ecx


+  cos


(a + b)2

 

cx - b


a = 3.7;b = 0.07;c = 1.5;x = 5.75

(a + b)2                                                           


-1 ln(a - b)           x2


17. 17.


y = 4.5 (a - b)2 -    (a + b)(a - b) + 10


× e

ln(a + b)


a = 7.5;b = 1.2;x = 0.5

2                                                              -2


18. 18.


y = 2.4


+  (a - b)sin


(a - b) + 10


(x - b)


a = 5.1;b = 0.7;x = -0.05

 


 

19. 19.


y =     ax -          -

5.7(x2 + b2 )                  x2


tg2b


a = 0.1;b = 2.4;x = -0.3

 


20.    y =


c - dx2

x