infpro_lab2_enc
.pdf
Лабораторная работа №2
Одноместный оператор изменения знака "-" (унарный минус) имеет даже больший приоритет, чем умножение и деление!
Если нужно изменить стандартный порядок вычисления операторов в выражении, то используются круглые скобки:
1
double f2 = (a + b) / 2;
В этом случае, сначала будет вычислено выражение в скобках x = (a + b), и только затем вычисляется f2 = x / 2.
Приведем более сложный пример. Нам требуется составить выражение на языке программирования для формулы на рисунке:
Формула 1.
Как и для формул в математике, можно составить несколько эквивалентных вариантов записи выражений в линейной форме и на языке программирования:
Пример 13. Различные варианты записи одной и той же формулы
01 |
// 1. правильно: |
|
02 |
double f = x + (1.0 / 3.0) * (- A*A / ( x - 4.75 )); |
|
03 |
|
|
04 |
// 2. правильно: |
|
05 |
double f = x + 1.0 / 3.0 * (- A*A / ( x - 4.75 )); |
|
06 |
|
|
07 |
// 3. НЕправильно: |
|
08 |
double f = x + 1.0 / 3.0 * ( - A*A / x - 4.75 ); |
|
09 |
|
|
10 |
// 4. правильно: |
|
11 |
double f = x - 1.0 / 3.0 * |
A*A / ( x - 4.75 ); |
12 |
|
|
13 |
// 5. правильно: |
|
14 |
double f = x + 1.0 / 3.0 * |
A*A / ( 4.75 - х ); |
15 |
|
|
16 |
// 6. правильно: |
|
17 |
double f = x + 1.0 / 3.0 * -A*A / ( х - 4.75 ); |
|
18 |
|
|
19 |
// 7. правильно: |
|
20 |
double f = x + -A*A / ( 3 * ( x - 4.75 )); |
|
21 |
|
|
22// 8. правильно, самый короткий и понятный вариант:
23double f = x - A*A / ( x - 4.75 ) / 3;
Как видно из примера, в варианте 1 "лишние" скобки, не влияют на правильность результата вычисления выражения. Поэтому, если вы по какой-либо причине сомневаетесь в порядке вычисления операторов в вашем выражении - ставьте скобки. На эффективность программы "лишние" скобки не повлияют (современные компиляторы хорошо оптимизируют такие выражения), а читабельность формул в программе могут улучшить.
Замечание
Как видите, вариантов правильной записи даже простой формулы достаточно много. К выражениям могут применяться стандартные законы
file:///D|/Образование/@_Учебно-методический комплекс/@_Репозиторий DocBook/infpro_lab2/release/infpro_lab2.htm[19.09.2010 22:58:52]
Лабораторная работа №2
(переместительный, сочетательный и распределительный) и правила математических преобразований. Например, в нашей формуле знак "-" перед A можно вынести за скобку, можно внести множитель 1/3 под знак скобки и т.п. Тем не менее, преобразованиями формул лучше не злоупотреблять.
Еще раз отметим, что когда в выражении встречаются операторы с одинаковым приоритетом, такие как умножение и деление, компилятор вычисляет результат каждой операции последовательно, слева направо. Это иллюстрирует следующий пример.
Пример 14. Изменение порядка выполнения операций с помощью скобок
1 |
double n1 |
= 288.0 / |
3.0 / 8.0 / 4.0; |
// |
= |
3 |
||
2 |
double |
n2 |
= |
((288.0 |
/ 3.0) / 8.0) / 4.0; |
// = 3 |
||
3 |
double |
n3 |
= |
288 / (3 / (8 / 4)); |
// |
= |
192 |
|
Первое выражение: вычисляется 288 / 3 = 96, затем 96 / 8 = 12, затем 12 / 4 = 3. Скобки во втором выражении расставлены так, что вычисления происходят в том же порядке, что и в первом случае, и результат снова равен 3. А вот третье выражение, в результате другой расстановки скобок, вычисляется так: 8 / 4 = 2, затем 3/2 = 1.5, затем 288 / 1.5 = 192.
Описанное свойство операторов деления и вычитания языка C# называется левой ассоциативностью. Т.е. если отдельные операторы деления или вычитания в выражении заключать в скобки (ассоциировать) последовательно, слева направо, то результат вычисления выражения будет таким же, как и в том случае, если бы скобок не было.
Отметим, что операторы сложения и умножения полностью ассоциативны (т.е. лево- и право-ассоциативны), поскольку обладают свойством коммутативности ("от перемены мест слагаемых/множителей сумма/произведение не изменяются").
Замечание
C такими свойствами операций, как ассоциативность, коммутативность и дистрибутивность вы уже встречались в школе! Ассоциативность соответствует сочетательному закону, коммутативность - переместительному закону, а дистрибутивность - распределительному закону.
Подробнее о свойствах операций см.:
http://ru.wikipedia.org/wiki/Ассоциативность
http://ru.wikipedia.org/wiki/Коммутативная_операция
http://ru.wikipedia.org/wiki/Дистрибутивность
Математические функции
Операторов возведения в степень и извлечения корня, а также других математических функций в языке C# не предусмотрено. Как вы считаете, хорошо это или плохо?
file:///D|/Образование/@_Учебно-методический комплекс/@_Репозиторий DocBook/infpro_lab2/release/infpro_lab2.htm[19.09.2010 22:58:52]
Лабораторная работа №2
Возведение в целую степень может быть реализовано с помощью умножения (см. пример выше). Стандартные математические функции, такие как извлечение корня, возведение в степень, модуль числа, тригонометрические функции - реализованы в виде методов стандартного объекта Math. Пример вычисления выражения y = sin(vx):
Пример 15. Вычисление значения синуса от квадратного корня из 1/(х+1)
1
double y = Math.Sin(Math.Sqrt(1.0 / (x + 1.0)));
Ниже в таблице приведем основные, наиболее часто используемые математические функции.
Таблица 3. Часто используемые математические функции
Функция |
Описание |
метод Math |
|
|
|
|
|
y = sin (x) |
|
y = Math.Sin(x) |
|
|
|
|
|
y = cos (x) |
|
y = Math.Cos(x) |
|
|
|
|
|
y = tg (x) |
|
y = Math.Tan(x) |
|
|
|
|
|
y = ctg(x) |
|
y = 1.0 / Math.Tan(x) |
|
|
|
|
|
y = | x | |
модуль числа (абсолютная величина) |
y = Math.Abs(x) |
|
|
|
|
|
y = x |
2 |
|
у = x*x; y = |
|
|
Math.Pow(x, 2d); |
|
y = xz |
|
y = Math.Pow(x, z); |
|
y = x / | x |
Знак числа (-1 для отрицательных, 0 для нуля, 1 для |
y = Math.Sign(x) |
|
| |
|
положительных) |
|
y = lg(x) |
Десятичный логарифм |
y = Math.Log10(x) |
|
|
|
|
|
y = ln(x) |
Натуральный логарифм |
y = Math.Log(x) |
|
|
|
|
|
y = logn(x) |
Логарифм по основанию n |
y = Math.Log(x) / |
|
|
|
|
Math.Log(n) |
y = ex |
Экспонента |
y = Math.Exp(x) |
|
y = vx |
Квадратный корень |
y = Math.Sqrt(x) |
|
|
|
|
|
y = nvx |
Корень n-ой степени |
y = Math.Pow(x, 1 / n) |
|
|
|
Округление до ближайшего целого |
y = Math.Round(x) |
|
|
|
|
|
|
Округление до ближайшего меньшего целого |
y = Math.Floor(x) |
|
|
|
|
|
|
Округление до ближайшего большего целого |
y = Math.Ceiling(x) |
|
|
|
|
|
|
Взятие целой части |
y = Math.Truncate(x) |
|
|
|
|
|
|
Число p |
pi = Math.PI |
|
|
|
|
|
|
Число e |
e = Math.E |
|
|
|
|
Кроме того, в объекте Math есть методы вычисления обратных тригонометрических функций, минимального и максимального из двух чисел и т.п.
file:///D|/Образование/@_Учебно-методический комплекс/@_Репозиторий DocBook/infpro_lab2/release/infpro_lab2.htm[19.09.2010 22:58:52]
Лабораторная работа №2
Обратите особое внимание, что в объекте Math уже есть константы для чисел p и e. Поэтому задавать эти числа значениями в своих программах нет смысла. Используйте готовые значение в константах Math.PI и Math.E:
Пример 16. Вычисление 1 + косинус от p/2 и десятичный логарифм от числа e
1double cpi2 = 1.0 + Math.Cos(Math.PI / 2);
2double log10e = Math.Log10(Math.E);
Варианты заданий
Номера задач по каждому варианту даны по задачнику Златопольского, глава 1. См. Приложение А.
В каждом варианте 15 простых задач. Часть из них решается в тетради [внимательно читайте условие задачи!], но для большей можно и нужно составить программы.
Для решения каждой задачи создавайте новый проект, внутри одного решения. Имя каждого проекта должно соответствовать номеру задачи, например проект с именем p30b содержит решение задачи № 1.30 б).
Перед отчетом [очень] рекомендуется выписать номера задач своего варианта в тетрадь, а также выписать условия решаемых задач в комментарии к соответствующим программам. Это значительно сократит время отчета работ, поскольку не нужно будет искать в методичке сначала - номер задачи в вашем варианте, затем - условие задачи, а затем - искать текст соответствующей программы.
Вариант №1: 1.1, 1.3, 1.6, 1.11, 1.14 и), 1.16 а), 1.20 а), 1.26, 1.30 б), 1.33, 1.38, 1.40, 1.44, 1.48, 1.51
е)
Вариант №2: 1.1, 1.5, 1.7, 1.9, 1.13 б), 1.18 б), 1.20 а), 1.23, 1.30 б), 1.35, 1.37, 1.43, 1.46, 1.48, 1.51
в)
Вариант №3: 1.2, 1.4, 1.9, 1.17 и), 1.21 б), 1.24 а), 1.28, 1.30 б), 1.32, 1.35, 1.37, 1.40, 1.44, 1.47, 1.51 г)
Вариант №4: 1.3, 1.10, 1.12, 1.14 м), 1.17 з), 1.20 а), 1.23, 1.29, 1.31 а), 1.38, 1.41, 1.43, 1.46, 1.48, 1.52 в)
Вариант №5: 1.1, 1.4, 1.8, 1.11, 1.14 е), 1.17 р), 1.20 а), 1.25, 1.29, 1.33, 1.37, 1.40, 1.42, 1.47, 1.51 е)
Вариант №6: 1.1, 1.6, 1.11, 1.17 в), 1.20 б), 1.23, 1.25, 1.28, 1.31 б), 1.34, 1.38, 1.42, 1.44, 1.47, 1.50
а)
Вариант №7: 1.5, 1.7, 1.13 а), 1.17 к), 1.20 а), 1.23, 1.27, 1.30 б), 1.33, 1.37, 1.39, 1.42, 1.45, 1.48, 1.52 д)
Вариант №8: 1.1, 1.6, 1.9, 1.12, 1.16 г), 1.20 а), 1.22 б), 1.25, 1.30 б), 1.32, 1.34, 1.38, 1.43, 1.47, 1.50 б)
Вариант №9: 1.1, 1.4, 1.7, 1.10, 1.12, 1.15 и), 1.21 б), 1.25, 1.29, 1.34, 1.36, 1.40, 1.43, 1.47, 1.50 а)
file:///D|/Образование/@_Учебно-методический комплекс/@_Репозиторий DocBook/infpro_lab2/release/infpro_lab2.htm[19.09.2010 22:58:52]
Лабораторная работа №2
Вариант №10: 1.4, 1.7, 1.9, 1.12, 1.15 в), 1.18 а), 1.20 а), 1.23, 1.28, 1.32, 1.35, 1.39, 1.41, 1.47, 1.50
а)
Вариант №11: 1.3, 1.5, 1.8, 1.11, 1.13 а), 1.16 б), 1.18 б), 1.21 б), 1.24 а), 1.33, 1.37, 1.39, 1.44, 1.48, 1.50 а)
Вариант №12: 1.2, 1.4, 1.7, 1.10, 1.13 а), 1.20 б), 1.23, 1.27, 1.30 б), 1.34, 1.37, 1.40, 1.42, 1.45, 1.50
б)
Вариант №13: 1.3, 1.5, 1.10, 1.13 в), 1.16 о), 1.20 б), 1.22 а), 1.26, 1.29, 1.34, 1.36, 1.39, 1.42, 1.46, 1.50 б)
Вариант №14: 1.2, 1.7, 1.9, 1.13 б), 1.16 о), 1.22 а), 1.25, 1.27, 1.30 б), 1.34, 1.36, 1.40, 1.42, 1.47, 1.50 а)
Вариант №15: 1.2, 1.6, 1.10, 1.13 а), 1.16 к), 1.20 а), 1.23, 1.26, 1.28, 1.30 б), 1.36, 1.40, 1.42, 1.45, 1.47
Вариант №16: 1.2, 1.7, 1.10, 1.13 а), 1.18 а), 1.20 а), 1.22 б), 1.28, 1.31 а), 1.34, 1.38, 1.43, 1.47, 1.49, 1.52 г)
Вариант №17: 1.1, 1.4, 1.6, 1.10, 1.12, 1.15 з), 1.19 а), 1.23, 1.25, 1.30 а), 1.35, 1.40, 1.42, 1.46, 1.51
л)
Вариант №18: 1.2, 1.6, 1.12, 1.14 г), 1.17 к), 1.20 б), 1.23, 1.27, 1.30 а), 1.33, 1.41, 1.44, 1.46, 1.49, 1.52 а)
Вариант №19: 1.1, 1.4, 1.6, 1.9, 1.17 г), 1.21 б), 1.25, 1.28, 1.32, 1.35, 1.37, 1.41, 1.45, 1.47, 1.50 а)
Вариант №20: 1.1, 1.3, 1.6, 1.10, 1.16 и), 1.24 а), 1.26, 1.29, 1.32, 1.35, 1.38, 1.40, 1.44, 1.49, 1.52 г)
Вариант №21: 1.1, 1.4, 1.6, 1.10, 1.12, 1.16 и), 1.22 б), 1.26, 1.29, 1.35, 1.38, 1.45, 1.47, 1.49, 1.52 б)
Вариант №22: 1.2, 1.7, 1.13 а), 1.15 д), 1.18 г), 1.23, 1.26, 1.30 б), 1.33, 1.36, 1.38, 1.40, 1.43, 1.46, 1.48
Вариант №23: 1.1, 1.4, 1.10, 1.13 б), 1.18 г), 1.21 б), 1.26, 1.28, 1.31 б), 1.33, 1.35, 1.39, 1.44, 1.47, 1.51 ж)
Вариант №24: 1.1, 1.6, 1.8, 1.12, 1.17 д), 1.22 б), 1.26, 1.30 б), 1.33, 1.36, 1.41, 1.43, 1.45, 1.47, 1.51
з)
Вариант №25: 1.2, 1.5, 1.10, 1.13 б), 1.15 д), 1.20 а), 1.22 а), 1.26, 1.29, 1.32, 1.36, 1.41, 1.44, 1.46, 1.49
Вариант №26: 1.4, 1.9, 1.11, 1.16 и), 1.20 б), 1.23, 1.25, 1.29, 1.31 б), 1.34, 1.40, 1.43, 1.46, 1.48, 1.51
в)
Вариант №27: 1.2, 1.7, 1.12, 1.18 г), 1.21 б), 1.23, 1.26, 1.29, 1.33, 1.36, 1.39, 1.43, 1.46, 1.49, 1.52 б)
Вариант №28: 1.2, 1.5, 1.10, 1.13 б), 1.15 б), 1.18 г), 1.20 б), 1.25, 1.29, 1.34, 1.36, 1.38, 1.42, 1.48, 1.51 к)
file:///D|/Образование/@_Учебно-методический комплекс/@_Репозиторий DocBook/infpro_lab2/release/infpro_lab2.htm[19.09.2010 22:58:52]
Лабораторная работа №2
Вариант №29: 1.3, 1.5, 1.8, 1.12, 1.16 о), 1.19 б), 1.22 а), 1.25, 1.30 б), 1.32, 1.36, 1.39, 1.42, 1.44, 1.51 д)
Вариант №30: 1.6, 1.11, 1.16 а), 1.19 г), 1.21 а), 1.26, 1.28, 1.31 а), 1.33, 1.37, 1.40, 1.43, 1.45, 1.48, 1.50 б)
Вариант №31: 1.1, 1.4, 1.7, 1.9, 1.13 в), 1.17 ж), 1.22 б), 1.25, 1.27, 1.31 а), 1.33, 1.36, 1.38, 1.40, 1.46
Вариант №32: 1.1, 1.3, 1.5, 1.8, 1.17 в), 1.21 б), 1.23, 1.28, 1.30 а), 1.33, 1.36, 1.39, 1.43, 1.45, 1.49
Контрольные вопросы
Назовите основные признаки консольной программы?
Для чего предназначен метод Console.ReadLine()?
Для чего предназначен метод Console.WriteLine()?
В чем разница между методами Console.WriteLine() и Console.Write()?
Для чего предназначен методы Console.Clear(), Console.Beep(), Console.ReadKey()?
Почему перед Console.ReadLine() и Console.ReadKey() целесообразно выводить на экран приглашение пользователю с помощью Console.Write()?
Как преобразовать в число введенную Console.ReadLine() строку?
Что такое строка формата, символ формата?
Каким образом задать точность (кол-во цифр после запятой) при выводе вещественных чисел?
Каким образом указать, чтобы вещественное число выводилось на экран в научной форме (с указанием порядка), в форме с фиксированной точкой?
Дайте определение переменной и типу данных.
Расскажите, какие основные правила нужно соблюдать относительно имен переменных.
Где в программе на C# могут встречаться объявления переменных?
Можно ли (и как, если можно) совмещать объявление переменной с ее инициализацией?
Можно ли в программах на C# использовать непроинициализированные переменные?
Какие вещественные типы данных есть в C#? Каков их диапазон и назначение?
Расскажите о правилах записи вещественных констант в выражениях.
Что такое линейная запись математической формулы? Для чего она нужна?
Чем отличается линейная запись математической формулы от записи выражения на языке
file:///D|/Образование/@_Учебно-методический комплекс/@_Репозиторий DocBook/infpro_lab2/release/infpro_lab2.htm[19.09.2010 22:58:52]
Лабораторная работа №2
программирования?
Какие арифметические операторы есть в C#?
Для чего в выражениях используются круглые скобки?
Каков обычный порядок вычисления операторов в выражении?
Объясните свойство лево-ассоциативности операторов в C#.
Вспомните и расскажите о таких свойствах операций, как ассоциативность (сочетательный закон), коммутативность (переместительный закон), дистрибутивность (распределительный закон).
Расскажите об основных методах объекта Math.
Литература
Златопольский Д.М. Сборник задач по программированию. - 2-е изд. перераб. и доп. - СПб.: БХВ-Петербург, 2007. - 240 с.
Microsoft Developer Network (MSDN) Library, раздел Visual C#: http://msdn.microsoft.com/ruru/library/kx37x362.aspx
RSDN - русскоязычный сайт, посвященный программированию: http://www.rsdn.ru
Интернет-университет информационных технологий. Биллиг В.А. Учебный курс "Основы программирования на языке C#": http://www.intuit.ru/department/pl/csharp/ [и другие курсы]
Рихтер Дж. Программирование на платформе .NET Framework / Пер. с англ. - 2-е изд., испр. - М.: Русская редакция, 2003. - 512 с.
Вирт Н. Алгоритмы и структуры данных = программы / Пер. с англ. - М.: Мир, 1989. - 360 с.
Райли Д. Абстракция и структуры данных. Вводный курс / Пер. с англ. - М.: Мир, 1993. - 752 с.
Давыдов В.Г. Программирование и основы алгоритмизации: Учеб. пособие. - М.: Высшая школа, 2003. - 447 с.
Иванова Г.С. Основы программирования: Учебник для вузов. - 2-е изд. перераб. и доп. - М.: Изд. МГТУ им. Баумана, 2002. - 416 с.
Скиена С.С., Ревилла М.А., Олимпиадные задачи по программированию / Пер. с англ. - М.:
Кудиц-Образ, 2005. - 416 с.
Мартынов Н.Н. Информатика: C# для начинающих. – М.: Кудиц-Образ, 2006.
Петцольд Ч. Программирование в тональности C#. - М.: Русская Редакция, 2004.
Петцольд Ч. Программирование для Microsoft Windows на C#. В 2-х томах / Пер. с англ. -
file:///D|/Образование/@_Учебно-методический комплекс/@_Репозиторий DocBook/infpro_lab2/release/infpro_lab2.htm[19.09.2010 22:58:52]
Лабораторная работа №2
М.: Русская Редакция,2002. - 576 c.
Дэвис С. C# 2005 для чайников. - М.: Вильямс, 2006.
Микелсен. Язык программирования C#. Лекции и упражнения: Учебник. - Киев.: ДиаСофт, 2002.
Шилдт Г. C#: учебный курс. - СПб: Питер, 2002.
Шилдт Г. Полный справочник по С# / Пер. с англ. - М.: Вильямс, 2004. - 752 с.
Культин Н.Б. C# в задачах и примерах. - СПб: BHV-СПб, 2007.
Культин Н. Microsoft Visual C# в задачах и примерах (с CD). - СПб: BHV-СПб, 2009.
Ишкова Э. А. С#. Начала программирования. – М.: Бином Пресс, – 2007.
A. Вопросы и задания
file:///D|/Образование/@_Учебно-методический комплекс/@_Репозиторий DocBook/infpro_lab2/release/infpro_lab2.htm[19.09.2010 22:58:52]
Лабораторная работа №2
file:///D|/Образование/@_Учебно-методический комплекс/@_Репозиторий DocBook/infpro_lab2/release/infpro_lab2.htm[19.09.2010 22:58:52]
Лабораторная работа №2
file:///D|/Образование/@_Учебно-методический комплекс/@_Репозиторий DocBook/infpro_lab2/release/infpro_lab2.htm[19.09.2010 22:58:52]
