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

infpro_lab2_enc

.pdf
Скачиваний:
28
Добавлен:
14.05.2015
Размер:
1.03 Mб
Скачать

Лабораторная работа №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]

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