C# Программирование на языке высокого уровня. Среда разработки Microsoft Visual Studio.NET
Объектно-ориентированная технология создания программ. Среда разработки Visual Studio.NET. Особенности среды Microsoft Visual Studio 2010. Приложения C# для расчетов по формулам, консольный ввод-вывод. Форматирование значений данных. Программы с циклами.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | методичка |
Язык | русский |
Дата добавления | 11.09.2014 |
Размер файла | 2,1 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Например, создать экземпляр класса StreamWriter можно следующим образом:
StreamReader fileIn = new StreamReader(new
FileStream("text.txt", FileMode.Open, FileAccess.Read));
Как и в случае с классом StreamWriter у класса StreamReader есть и другой вид конструктора, который позволяет открыть файл напрямую:
StreamReader (string name);
где параметр name определяет имя открываемого файла.
Обратиться к данному конструктору можно следующим образом:
StreamReader fileIn=new StreamReader ("z:\temp\t.txt");
В C# символы реализуются кодировкой Unicode. Для того, чтобы можно было обрабатывать текстовые файлы, содержащие русский символы, созданные, например, в Блокноте, рекомендуется вызывать следующий вид конструктора StreamReader:
StreamReader fileIn=new StreamReader ("z:\temp\t.txt",
Encoding.GetEncoding(1251));
Параметр Encoding.GetEncoding(1251) говорит о том, что будет выполняться преобразование из кода Windows-1251 (одна из модификаций кода ASCII, содержащая русские символы) в Unicode. Encoding.GetEncoding(1251) реализован в пространстве имен System.Text.
Теперь для чтения данных из потока fileIn можно воспользоваться методом ReadLine. При этом если будет достигнут конец файла, то метод ReadLine вернет значение null.
По завершении работы с файлом его необходимо закрыть. Для этого достаточно вызвать метод Close(). При закрытии файла освобождаются системные ресурсы, ранее выделенные для этого файла, что дает возможность использовать их для работы с другими файлами.
Рассмотрим пример, в котором данные из одного файла считываются программой расчета функции и результаты помещаются в другой файл в заданной форме с использованием классов StreamWriter и StreamReader.
Пример 3. Ввод данных из файла и форматированный вывод данных различного типа в файл.
static void Main()
{
string s; double x, y;
StreamWriter f = new StreamWriter("out.txt");
StreamReader f1 = new StreamReader("in.txt");
f.WriteLine(" Таблица значений^");
metka: s = f1.ReadLine();
if (s == null) goto metka1;
x = Convert.ToDouble(s);
y = Math.Sqrt(x * x / (2 + Math.Exp(4 * Math.Log(x))));
f.WriteLine(" аргумент x = {0:F3} функция y = {1:e3} \n", x, y);
goto metka;
metka1: f.WriteLine(" Составил Петров Иван {0} \n", s);
f.Close();
f1.Close();
}
Исходные данные файл in.txt
0,11
0,5
1
Результаты расчетов файл out.txt
Таблица значений
аргумент x = 0,110 функция y = 7,778e-002
аргумент x = 0,500 функция y = 3,482e-001
аргумент x = 1,000 функция y = 5,774e-001
Составил Петров Иван
2. Практическая часть
1) Составить программу для ввода в диалоге значений переменных A, I, C, L, Name и форматного вывода на экран монитора введенных переменных (значення вводимых переменных даны в таблице 2.3).
2) Составить программу для вычисления и печати значений функции из таблицы 2.4. Вычислить 8 значений функции на заданном интервале. Исходные данные задать в файле LAB2.TXT. Результат поместить в файл вывода с именем LAB2.RES в заданной форме
Варианты задания
Таблица 2.3
Вариант |
A |
I |
C |
L |
N |
|
1 |
-14 |
-104 |
-0,00151 |
ложь |
Фамилия |
|
2 |
99,35 |
72 |
1995 |
истина |
Имя |
|
3 |
0,086 |
-19 |
4,025 |
ложь |
Отчество |
|
4 |
34 |
-6124 |
3,2х105 |
истина |
Фамилия |
|
5 |
5,008 |
229 |
0,019 |
ложь |
Имя |
|
6 |
3,5х10-4 |
1989 |
-380,08 |
истина |
Отчество |
|
7 |
0,095 |
-1 |
1996 |
ложь |
Фамилия |
|
8 |
1,0074 |
102 |
107,7 |
истина |
Имя |
|
9 |
993,285 |
112000 |
2,3х10-4 |
ложь |
Отчество |
|
10 |
-2,1 |
444 |
103 |
истина |
Фамилия |
|
11 |
3,125 |
6006006 |
-13,24 |
ложь |
Имя |
|
12 |
-45,077 |
30 |
25х1012 |
истина |
отчество |
|
13 |
12,97 |
1002 |
-999,7 |
ложь |
фамилия |
|
14 |
-0,09 |
2004 |
399,44 |
ложь |
имя |
|
15 |
-142 |
-104 |
-0,00151 |
истина |
отчество |
|
16 |
9,35 |
- 5072 |
19,95 |
ложь |
фамилия |
|
17 |
0, 86 |
-19726 |
4,025 |
истина |
Имя |
|
18 |
34 |
-6 |
3,2х103 |
ложь |
отчество |
|
19 |
5,008 |
-229 |
-0,019 |
истина |
фамилия |
|
20 |
3,5х10-4 |
1989 |
-380,08 |
ложь |
имя |
|
21 |
0,095 |
-12 |
1996 |
истина |
отчество |
|
22 |
1,0074 |
102 |
107,7 |
ложь |
фамилия |
|
23 |
993,285 |
112000 |
2,3х10-4 |
истина |
имя |
|
24 |
-2,1х103 |
444 |
10-3 |
ложь |
отчество |
|
25 |
3,125 |
6007007 |
-13,24 |
истина |
фамилия |
|
26 |
-45,07 |
123 |
25х1012 |
ложь |
имя |
|
27 |
89,09 |
1000 |
999,002 |
истина |
отчество |
|
28 |
-99,78 |
11 |
-1,774 |
ложь |
фамилия |
|
29 |
7,99 |
-30077 |
1000 |
истина |
истина |
|
30 |
0,124 |
-100400 |
-9000 |
ложь |
фамилия |
Таблица 2.4
№ |
Функция |
Контрольное значение |
Интервал х |
Вариант формы вывода |
|||
x* |
y* |
xmin |
xmax |
||||
1 |
2 |
-0,176 |
-3 |
3 |
1 |
||
2 |
1,57 |
0,406 |
-2 |
2 |
2 |
||
3 |
3,14 |
0,935 |
-2 |
4 |
3 |
||
4 |
1 |
4,5 |
0 |
2,5 |
4 |
||
5 |
1,57 |
1,75 |
1,5 |
5 |
1 |
||
6 |
2 |
-0,4 |
-2 |
3 |
2 |
||
7 |
1 |
1 |
-1 |
1 |
3 |
||
8 |
1,57 |
0,299 |
-2 |
2 |
4 |
||
9 |
-1 |
-2,7 |
0 |
2,5 |
1 |
||
10 |
0,5 |
1,9 |
-3 |
3 |
2 |
||
11 |
-0,6 |
0,43 |
-1 |
1,5 |
3 |
||
12 |
|
0,14 |
0,0027 |
-2 |
2 |
4 |
|
13 |
1,5 |
0,242 |
0 |
3 |
1 |
||
14 |
1 |
2,4 |
0 |
4 |
2 |
||
15 |
1 |
1,57 |
-2 |
2 |
3 |
||
16 |
1,57 |
-0,53 |
-0,5 |
2 |
4 |
||
17 |
|
0,5 |
0,5 |
-1,5 |
1,5 |
1 |
|
18 |
|
1 |
0,369 |
0 |
3 |
2 |
|
19 |
1,2 |
-1,75 |
-1,3 |
1,3 |
3 |
||
20 |
|
1,2 |
0,2б2 |
-2 |
2 |
4 |
|
21 |
|
3 |
1,077 |
1 |
4 |
1 |
|
22 |
-0,5 |
-0,5 |
-1,5 |
1,5 |
2 |
||
23 |
|
0,25 |
1,75 |
-2 |
2 |
3 |
|
24 |
|
1 |
1,4 |
-2 |
3 |
4 |
|
25 |
|
0,5 |
-0,5 |
-2 |
3 |
1 |
|
26 |
|
0,5 |
0,875 |
-1 |
4 |
2 |
|
27 |
|
0 |
3 |
-2 |
2 |
3 |
|
28 |
|
0 |
-1 |
-2 |
2 |
4 |
|
29 |
|
-1 |
-7 |
-2 |
3 |
1 |
|
30 |
|
1 |
-4 |
-2 |
5 |
2 |
Таблица 2.5
Вариант формы вывода |
Форма вывода информации 7890123456789012345678901234 - позиции |
||||
1 |
Таблица значений І-------------------------------------------------------------І І Х І Функция I I-------------------------------------------------------------I I X=… I Y=… I I X=… I Y=… I I-------------------------------------------------------------I Склав: <П. І .Б> |
||||
2 |
Таблица |
||||
************************************* |
|||||
* X =... |
* у = |
* |
|||
******************************* |
|||||
* X =... |
* у = |
* |
|||
************************************* |
|||||
Составил: < Ф.И. О. > |
|||||
3 |
Таблица значений |
||||
+----------------------------------------------- + |
|||||
+ Аргумент + |
Функция |
+ |
|||
+------------------------------------------------+ |
|||||
+ X =... |
+ |
у =… |
+ |
||
+ X =... |
+ |
у =… |
+ |
||
+------------------------------------------------+ |
|||||
Составил: < Ф.И. О. > |
|||||
4 |
Получено: для заданной функции Y(…) =… для заданной функции Y(…) =… Составил: < Ф. И. О. > |
ЛАБОРАТОРНАЯ РАБОТА № 3
Управляющие операторы условного и безусловного переходов.
Разветвляющиеся программы
1. Краткие теоретические сведения
Как известно, из предыдущих лабораторных работ, все программы состоят из последовательности операторов, которые обычно выполняются поочерёдно в том порядке, в каком они записаны в программе. Однако часто возникает необходимость изменить очерёдность выполнения операторов, т.е. пропустить или наоборот выполнить какую-то группу операторов в зависимости от выполнения или не выполнения некоторых заданных условий. Кроме того иногда необходимо повторить группу операторов несколько раз, то есть организовать цикл. Для выполнения этих задач служат управляющие операторы. Управляющие операторы подразделяются на операторы принятия решения, к ним относятся операторы условного и безусловного переходов, и операторы для организации циклов, которые будут рассмотрены в следующей лабораторной работе.
Одной из важнейших возможностей компьютерного процессора является возможность принятия решения. Под этим выражением подразумевается, что процессор может направить поток выполнения запрограммированных команд по тому или иному пути в зависимости от того истинно или ложно некоторое заданное условие. Любой язык программирования обеспечивает возможность принятия решения. В алгоритмическом языке С#, как и во многих других, основой для такой возможности является оператор условного перехода if, который действует в C# практически также, как и оператор IF в любом другом языке программирования./
Оператор условного перехода if и его конструкции
Оператор условного перехода if (если), как было уже сказано, предназначен для выбора одного из возможных вариантов исполнения операторов программы, поэтому его и называют оператором принятия решения. Существует несколько разновидностей конструкций этого оператора. Рассмотрим их последовательно по мере усложнения.
if (условие выбора)
{
// Записанные в скобках операторы (оператор)
// будут выполняться, если условие выбора истинно
}
// Записанные далее операторы будут выполняться
// в любом случае, независимо от условия выбора.
В качестве условия выбора используется значение логического выражения. При выполнении этой конструкции вначале вычисляется значение логического выражения, записанного в скобках. Результат вычисления имеет тип boolean. Если вычисленное выражение имеет значение true (истина), то выполняются операторы в фигурных скобках и все следующие за ними. Если получено значение false (ложь) то операторы в фигурных скобках пропускаются и выполняются только операторы следующие за ними.
Пример 1.
// Сохраняем наибольшее значение из двух, a и b,
// в переменной
max max = b;
if (a > b)
{
max = a;
}
В данном фрагменте программы изначально предполагается, что наибольшее значение имеет переменная b, и она присваивается переменной max. Если это ни так, то переменной max присваивается значение переменной a.
Операторы, записываемые в фигурных скобках можно размещать в одной строке, как в следующем примере.
Пример 2.
max = b;
if (a > b){max = a;}
При записи в фигурных скобках нескольких операторов в конце каждого из них ставиться точка с запятой. Если в фигурных скобках записывается один оператор, то фигурные скобки можно опустить (см. пример 3).
Пример 3.
max = b;
if (a > b) max = a;
Конструкция if-else (если -иначе)
Данную конструкцию целесообразно использовать, когда необходимо задать выполнение одного из двух блоков операторов (или одного из двух операторов), в зависимости от результата проверки условия выбора. Конструкция имеет следующий вид записи.
If (условия выбора)
{
// Если условие выбора истинно, то будут выполняться
// оператор или операторы блока 1.
}
else
{
// В противном случае (иначе)
// если условие выбора ложно, то будут выполняться
// оператор или операторы блока 2.
}
// Записанные далее операторы будут выполняться
// в любом случае, независимо от условия выбора.
Если результатом проверки условия выбора является значение true (истина), то будут выполнены операторы блока 1. Далее будет выполняться первый оператор, следующий за последней фигурной скобкой. Операторы блока 2 выполняться не будут. Если проверка условия выбора даст результат false (ложь), то операторы блока 1 будут пропущены, и будут выполнены операторы блока 2. Далее будет выполняться первый
оператор, следующий за последней фигурной скобкой. Каждый из указанных блоков может состоять из одного оператора, тогда фигурные скобки могут быть опущены.
Пример 4.
If (a > b)
{
max = a;
// Эти операторы будут выполняться, min = b;
// если условие выбора a>b истинно.
}
else
{
max = b;
// Эти операторы будут выполняться, min = a;
// если условие выбора a > b ложно.
}
// Записанные далее операторы будут выполняться
// в любом случае, независимо от условия выбора.
Если a > b, то переменной max будет присвоено значении a, переменной min - значение b, в противном случае наоборот переменной max присваивается значение b, а переменной min - значение a. Рассмотренную конструкцию допускается записывать в одной строке, как в следующем примере 5.
Пример 5.
if (a > b)
{
max = a; min = b;
}
else
{
max = b; min = a;
}
Если в фигурных скобках записано по одному оператору, то скобки можно опустить, как в примере 6.
Пример 6.
if (a > b) max = a;
else max = b;
Вложенные конструкции оператора if
В том случае, когда определённый блок операторов (или один оператор) нужно выполнить после проверки ни одного, а нескольких условий, то используют несколько конструкций оператора if. Операторы if, находящиеся внутри другого оператора if, называются вложенными конструкциями оператора if.
if (Условие 1 выбора)
{
// Если условие 1 выбора истинно будут выполняться,
// записанные в скобках операторы блока 1.
}
еlse
// В противном случаи будет выполняться
// вложенная конструкция оператора
{
// Начало вложенной конструкции оператора
if (условие 2 выбора)
{
// Если условие 2 выбора истинно будут выполняться,
// записанные здесь в скобках операторы блока 2.
}
else
{
// В противном случае, если условие 2 выбора ложно
// будут выполняться, записанные здесь в скобках
// операторы блока 3.
}
}
// Конец вложенной конструкции оператора if
Если условие 1 выбора истинно, то выполняются операторы блока 1, и далее первый оператор, который следует за последней фигурной скобкой, концом вложенной конструкции оператора В противном случае выполняется вложенная конструкция оператора if. Если условие 2 выбора вложенного оператора if истинно, то выполняются записанные в фигурных скобках операторы блока 2, и далее первый оператор, который следует за последней фигурной скобкой, концом вложенной конструкции оператора if. В противном случае, если условие 2 выбора ложно выполняются операторы блока 3. Рассмотрим пример записи вложенной конструкции оператора if.
Пример 7.
if (х < -1) { n = 1; }
else
{
// Начало вложенной конструкции if.
if (х > 1)
{ n = 2; }
else
{ n = 0; }
// Конец вложенной конструкции if.
}
Допускаются и другие виды записи вложенной конструкции оператора if, например запись в одной строке.
Пример 8.
if (х < -1)
{ n = 1; }
else
{
if (х > 1) { n = 2; }
else { n = 0; }
}
Поскольку фигурные, операторные скобки являются обязательными только в случае записи в них нескольких операторов, поэтому в данном случае они могут быть отпущены.
Пример 9.
…
if (х < -1) n = 1;
else
if (х > 1) n = 2;
else n = 0;
…
Операторы логического сравнения
Эти операторы называются логическими сравнениями (logical comparisons), поскольку они возвращают результат сравнения в виде значения true (истина) или false (ложь) имеющие тип bool. Для записи и проверки условия равенства двух выражений, в алгоритмическом язык C# используется символ ==. Аналогично: символ > используется для проверки условия «больше»; символ < для проверки условия «меньше»; >= - «больше или равно»; <= - «меньше или равно»; != «не равно». Например: a!=b, означает, что оператор логического сравнения != возвращает значение true, если a не равно b.
Логические операторы
Для переменных типа bool используются специальные составные логические операторы:
& - конъюнкция (логическое и, and), используется для логического объединения двух выражений;
| - дизъюнкция (логическое или, or), используется, чтобы убедиться в том, что хотя бы одно из выражений true, истинно;
! - отрицание (логическое не, not), возвращает обратное логическое выражение;
^ - исключение (логическое исключающее или), используется для того, чтобы убедиться в том, что одно из двух выражений true, истинно.
Операторы &, | и а обычно используются с целыми типами данных, а также могут применяться к типу данных bool.
Кроме того могут применяться операторы && и ||, которые отличаются от своих односимвольных версий тем, что выполняют ускоренные вычисления. Например в выражении a && b, b вычисляется лишь в том случае, если а равно true, истинно. В выражении a\\b, b вычисляется в том случае, если a равно false, ложно.
Пример 10.
if (х > -1 && x < 1)
В условии оператора if записано обычное алгебраическое неравенство -1 < x < 1.
Пример 11.
if (x < -1 || x > 1)
В условии оператора if записаны алгебраические неравенства x < -1либо x > 1.
Оператор проверки
Оператор проверки выбирает одно из двух выражений в зависимости от проверки значения логического условия. Его синтаксис:
Имя переменной = (условие выбора)?Значение1:значение2
Пример 12.
int value = (x < 25) ? 5:15
В этом примере сначала вычисляется выражение x < 25 являющееся условием выбора. Если оно равно true, то переменной value будет присвоено значение равное 5, в противном случае - равное 15.
Оператор безусловного перехода goto
Оператор безусловного перехода goto (перейти к) осуществляет переход, без проверки каких-либо условий, к оператору, обозначенному соответствующей меткой. Синтаксис этого оператора выглядит следующим образом: метка: оператор
goto метка
где метка - метка. Это любой допустимый идентификатор C#, который помещается слева от оператора, которому надо передать управление выполнением программы и отделяется от него двоеточием. Причём метка может ставиться у оператора расположенного как до оператора goto, так и после него. В случае если оператор goto используется самостоятельно, без каких либо конструкций, то первый оператор, следующий за оператором goto, должен иметь свою метку, иначе он не будет выполнен в процессе работы программы. Обычно оператор goto используется совместно с оператором условного перехода if, и используется в программах редко, т. к. есть более эффективные операторы.
Конструкция switch (переключатель)
Этот оператор позволяет сделать выбор среди нескольких альтернативных вариантов дальнейшего выполнения программы. Несмотря на то, что это может быть организовано с помощью последовательной записи вложенных операторов if, во многих случаях более эффективным оказывается применение оператора switch. Ниже приведена общая форма оператора.
switch (выражение)
{
case константа 1:
последовательность операторов блока 1
break;
case константа 2:
последовательность операторов блока 2
break;
…
default
последовательность операторов блока n
break;
}
Этот оператор работает следующим образом. Значение выражения последовательно сравнивается с константами. Как только будет обнаружено совпадение, выполняется оператор или последовательность операторов, связанных с этим совпадением, до оператора break. Оператор break передаёт управление оператору, следующему за конструкцией switch. Если совпадений нет, то выполняется последовательность операторов, следующая после оператора default. Эта ветвь не является обязательной.
При использовании конструкции switch действуют следующие правила:
• выражение в конструкции switch должно быть целочисленного типа (char, byte, short или int) перечислимого типа или же типа строкового;
• нельзя использовать числа с плавающей точкой;
• константы оператора case должны иметь тот же тип, что и выражение в конструкции switch;
• в одном операторе switch не допускается наличие двух одинаковых по значению констант;
• допускается использовать одну и ту же последовательность операторов, в этом случае оператор break не записывается.
Пример 13.
int n;
ml: Console.WriteLine("Возьмите целое число");
int a = int.Parse(( Console.ReadLine()));
switch (a)
{
case 1:
n = 10;
break;
case 2:
case 3:
n = 20;
break;
default:
n = 0;
break;
}
Console.WriteLine("a = " + a +" n = " + n);
if (a != 0) goto m1;
Console.Read();
В данном примере в программу вводится и присваивается переменной а, любое целое число. С помощью конструкции switch происходит анализ. Если переменная а имеет значение равное 1, переменной n присваивается значение 10 и далее следует вывод этих переменных. Если а имеет значение равное 2 или 3, то переменной n присваивается значение 20 и далее вывод этих переменных. Во всех остальных случаях переменной n присваивается значение 0. Программа продолжает работать до тех пор, пока переменой а, не будет задано значение 0.
Один оператор switch может быть частью последовательности другого внешнего оператора switch. Такой оператор называется вложенным. Константы внешнего и внутреннего операторов switch могут содержать общие значения, не вызывая каких либо конфликтов.
В операторе switch отсутствует возможность задания диапазона выбора, что является его недостатком. Например, в языке программирования Visual Basic в аналогичном операторе задание диапазона выбора допускается.
Разветвляющиеся программы
Таблица 3.1
№ |
Название блока |
Графическое изображение блока |
Операторы и функции эквивалентные блоку |
|
1 |
Блок ввода |
Операторы ввода, функция InputВох и другие |
||
2 |
Блок вывода |
Операторы вывода, функция MsgBox и другие |
||
3 |
Блок присваивания |
Оператор присваивания |
||
4 |
Блоки сравнения |
Условный оператор if |
Разветвляющиеся программы это - такие программы, в которых на определённых этапах происходит анализ значений тех или иных параметров и в зависимости от этого выбирается один из возможных вариантов дальнейшего хода программы. Практически все более или менее сложные программы являются разветвляющимися. Для их написания используются рассмотренные конструкции управляющих операторов принятия решения.
При написании разветвляющих программ предварительно составляется блок-схема алгоритма решения задачи. Блок-схема это - графическое изображение алгоритма или последовательности решения задачи программирования.
Для составления блок-схем используются стандартизованные графические изображения (блоки) определённых операторов алгоритмического языка. Некоторые из них представлены в таблице 3.1.
Далее рассмотрены примеры написания разветвляющихся программ, аналогичные тем, которые должен выполнить студент в данной лабораторной работе.
Пример 14.
Составить блок-схему и написать программу для определения наибольшей из трёх заданных величин X , Y и Z. Полученное значение присвоить переменной F, т. е. вычисляет F = max(X, Y, Z). Замечание: Данный пример является тренировочным, на практике подобные задачи решаются с помощью соответствующих встроенных функций.
Пояснения к блок-схеме. После ввода численных значений для переменных X ,У и Z производиться их последовательное сравнение друг с другом на предмет выявления наибольшего из них. Первоначально сравниваются значения переменных X и У. Если условие X > У выполняется (истинно), то далее переменная с наибольшим значением, а именно X сравнивается с Z. Если поставленное в блоке сравнения условие X > Z верно, то переменной F будет присвоено значение переменной X в противном случае - значение переменной Z. Аналогично поступаем в случае если условие X > У, не выполняется (ложно).
После составления блок-схемы по ней пишется программа, при этом каждый блок описывается соответствующим оператором алгоритмического языка.
float f;
m1: Console.WriteLine(" Введите значение X");
float x = float.Parse((Console.ReadLine()));
Console.WriteLine(" Введите значение Y");
float y = float.Parse((Console.ReadLine()));
Console.WriteLine(" Введите значение Z");
float z = float.Parse((Console.ReadLine())); if (x > y)
{
if (x > z) f=x;
else f=z;
}
else
{ if(y>z) f=y; else f=z; }
Console.WriteLine('\n' + " Дано: X= " + x + " y= " + y + " z= " +
z + '\n'+ " Результат: F= " + f);
Console.WriteLine('\n' + "Для повторного ввода" + "набрать
любую клавишу." + '\n'+ "Для завершения программы
нажмите Enter.");
string p = Console.ReadLine();
if (P != "") goto m1;
Рассмотренный алгоритм решения задачи примера 14 не является единственным. Ниже представлена блок-схема другого варианта алгоритма и основной фрагмент программы, с использованием оператора проверки
Блок-схема Основной фрагмент программы
Пример 15.
Рис. 3.1
Задание. Составить блок-схему и написать программу, которая определяет номер N области, в которой находиться точка М(х, у) с заданными координатами (см. рисунок 3.1). Границы области относить к области с наибольшим номером.
Блок-схема
Пояснения к блок-схеме. В первом блоке производиться ввод численных значений для переменных X и Y, которые являются координатами точки М. Далее целесообразно сравнить переменную Y (координата по оси Y) с нулём. В блок-схеме это первый блок срав-нения, если его условие Y > 0 не выполняется (ложно), то координата по оси Y точки М отрицательна или равна нулю, а это значит, что она расположена ниже оси X или на ней, т. е. в области с номером N = 4. Если условие Y > 0 первого блока сравнения выполняется (истинно), то точка М расположена выше оси X, а это значит, что она может находиться в одной из областей с номером N = 1, N = 2 или N = 3. Далее для определения номера области X2 + Y2< 16, которое следует из уравнения окружности X2 + Y2 = R2 , где радиус окружности. Если заданное условие выполняется, то точка расположена внутри окружности , а так как Y > 0, то внутри полуокружности. Согласно условию задачи внутри полуокружности точка может находиться либо в области с номером N = 1, либо в области с N = 2. Если условие X > 0 третьего блока сравнения выполняется (истинно), то точка расположена в области с N = 2, в противном случае с N = 1. После чего идёт печать результата.
Если условие X2 + Y2 < 16 второго блока сравнения не выполняется (ложно), то точка М находиться вне полуокружности и над осью X так как Y > 0 т. е. в области N = 3. Далее представлена программа, составленная по рассмотренной блок-схеме.
int N;
m2: Console.WriteLine(" Введите для точки М"+
" координату по X ");
float x = float.Parse((Console.ReadLine()));
Console.WriteLine("Введите для точки М" + "координату
по Y ");
float y = float.Parse((Console.ReadLine()));
if (y > 0)
{
if (x * x + y * y < 16)
{
if (x >= 0) N = 2;
else N = 1;
}
else
{ N = 3; }
}
else
{ N = 4; }
Console.WriteLine('\t' + " РЕЗУЛЬТАТ:");
Console.WriteLine(" Точка M("+ x + ";" + y + ")" + " лежит в
области с N=" + N);
Console.WriteLine('\n' +" Для повторного ввода" + " нажать
любую клавишу."+'\n'+ " Для завершения программы нажмите
Enter.");
string p = Console.ReadLine();
if (P != "") goto m2;
Результаты расчета по программе примера 15.
2. Практическая часть
Задания к лабораторной работе
Составить блок-схему и написать программу для выполнения следующих заданий. При этом руководствоваться выше приведёнными примерами выполнения заданий (см. примеры 14 и 15)
Задание 1. Вычислить для своего варианта значение функции F. При получении в знаменателе нуля дать соответствующее сообщение.
Варианты заданий
Задание 2. Определить для своего варианта номер N области, в которой находиться точка М (х, у) c заданными координатами. Границы области относить к области с наибольшим номером.
ЛАБОРАТОРНАЯ РАБОТА № 4
Управляющие операторы для организации циклов. Программы с циклами
1. Краткие теоретические сведения
Циклом называется процесс исполнения группы операторов программы заданное количество раз, либо до тех пор, пока выполняется или не выполняется некоторое поставленное условие. Процесс исполнения группы операторов цикла один раз называется итерацией цикла. Группа операторов, расположенная между началом и концом цикла называется телом цикла. В С# есть три основных вида циклов: цикл for с параметром (счётчиком), цикл while с предусловием и цикл do while с постусловием.
Оператор цикла for
Оператор цикла for (для) служит для организации циклов с параметром (счётчиком). Это наиболее распространённый оператор цикла. Он проще не только для чтения и понимания, но и проверки корректности цикл. Оператор цикла for имеет следующую структуру.
for (выражение 1; условие; выражение 2)
{
// тело цикла
}
Открывающиеся и закрывающаяся фигурная скобки являются соответственно началом и концом тела цикла. В круглых скобках указаны следующие параметры цикла:
- выражение 1, в нём указывается имя переменной управления циклом и присваивается ей начальное значение;
- условие, представляет собой булево выражение, проверяющее значение переменной управления циклом, если результат проверки истинен, то цикл продолжается, если ложен, то цикл завершается;
- выражение 2, как правило, это арифметическое выражение, счётчик, определяет на каждой итерации цикла порядок изменения переменной управления циклом, на определённую величину - шаг цикла.
При работе цикла сначала выполняется выражение 1. В результате переменная управления циклом принимает своё первоначальное значение. Затем вычисляется условие и, если оно истинно, выполняются операторы тела цикла, заключённые в фигурные скобки. По достижению конца тела цикла (закрывающаяся фигурная скобка) управление переходит к вычислению выражение 2. В результате переменная цикла принимает новое значение, после чего вновь вычисляется условие и в случае его истинности цикл повторяется, в противном случае управление передаётся первому оператору, следующему за закрывающейся фигурной скобкой.
Пример 1.
int s, p, n; s = 0; P = 1;
for (n = 1; n <= 10; n = n + 1)
{
s = s + n; p = p * n;
}
Console.WriteLine(,, s=" + s + " р=" + p);
В данной программе определяется сумма s и произведение р чисел от одного до десяти включительно. Имя переменной управления циклом n, её заданное начальное значение 0. Условие продолжения цикла n <= 10. Порядок изменения переменной управления циклом, счётчик - n = n + 1. Таким образом, n изменяется от 1 до 10 с шагом 1.При этом на каждой итерации сумма s увеличивается на n, а произведение р в n раз. Ниже представлены результаты работы программы.
Если в рассмотренной программе вывод организовать внутри цикла, то можно проанализировать увеличение сумм s и произведения p на каждой итерации цикла. Кроме того можно записать программу более компактно см. пример 2.
Пример 2.
int s, p, n;
s = 0;
p = 1;
for (n = 1; n <= 10; n ++) // или n += 1
{
s = s + n; p = p * n;
Console.WriteLine("n =" + n +"s=" + s + "p=" +p);
}
Результаты работы данной программы
Поскольку добавление 1 к переменной, в частности к n=n+1, является распространённой операцией в языке С# предусмотрена сокращённая запись этой операции, а именно n++, как в примере 2, или n+=1 . Этот оператор называется оператором инкремента, он часто используется как в цикле for так и в других операторах цикла.
В теле цикла for нельзя изменять его параметры. Если в цикле отсутствует параметр условие, то это соответствует значению true. Цикл, записанный в виде for(;;) - является бесконечным циклом.
Оператор цикла while
Оператор цикла while (пока), как и оператор цикла for, является циклом с предусловием. Это означает, что условие проверяется до начала цикла, и если оно имеет значение false, то цикл ни разу не выполняется. Отличие оператор цикла while от оператора цикла for состоит в том, что в нём заранее не определено количество итераций в цикле. Форма записи оператора.
while (условие)
{
// тело цикла
}
Операторы в теле цикла исполняются до тех пор, пока условие цикла выполняется, т.е. имеет значение true. Если вместо условия указано служебное слово true, т.е. while (true), то цикл будет бесконечным.
Пример 3. Составить программу, которая определяет сумму s и количество k целых чисел лежащих на заданном отрезке [a;b]. Границы отрезка целые числа.
int a,b,s,k;
Console.WriteLine(" Введите а" + "- левую границу отрезка.");
a = int.Parse((Console.ReadLine()));
Console.WriteLine(" Введите b" + "- правую границу отрезка.");
b = int.Parse((Console.ReadLine()));
s = 0;
k = 0;
while ( a <= b)
{
S += a; // означает s = s + a
k++; // означает k = k+1
a++; // означает a = a + 1
}
Console.WriteLine('\t' + " РЕЗУЛЬТАТ:" + " s =" + s + " k=" + k + '\n');
Переменная a управления циклом имеет начальное значение равное левой границе заданного отрезка. Перед каждым шагом она сравнивается с переменной b, которая имеет значение правой границы заданного отрезка. Если результат сравнения true, то цикл продолжается. Сумма чисел отрезка, переменная s, увеличивается на величину значения переменой a, которая является очередным числом заданного отрезка. Количество чисел отрезка, переменная k, и переменная a увеличиваются на единицу. Если результат сравнения false, то цикл заканчивается, и выдаются, например следующие результаты работы программы.
Оператор цикла do-while
Оператор цикла do-while является версией цикла while с постусловием. Это означает, что условие цикла проверяется после исполнения операторов тела цикла. Следовательно, в таком цикле одна, первая итерация, всегда будет выполняться. Иногда это удобно использовать. Форма записи оператора.
do
{
//тело цикла
}
while (условие)
После исполнения первой итерации цикла цикл продолжает работать до тех пор, пока условие цикла имеет значение true, в противном случае цикл заканчивается. В случае использования данного оператора в программе примера 3 она будет выглядеть следующим образом, см. пример 4.
Пример 4.
int a, b, s, k;
Console.WriteLine(" Введите a"+ " - левую границу отрезка");
a =int.Parse((Console.ReadLine()));
Console.WriteLine(" Введите b"+ " - правую границу
отрезка");
b = int.Parse((Console.ReadLine()));
s = 0;
k = 0;
do
{s += a; k++; a++;}
while (a <= b);
Console.WriteLine('\t' + " РЕЗУЛЬТАТ:" + " s =" + s + " k=" + k
+ '\n');
Операторы break и continue
Для управления циклом имеются специальные операторы - break и continue. Оператор break вызывает прекращение выполнения цикла и передачу управления первому оператору, следующему непосредственно за циклом. Оператор continue передаёт управление в начало цикла, к проверке условия. Обычно эти операторы используются совместно с оператором if.
Вложенные циклы
Цикл можно размещать внутри другого цикла. Размещение одной конструкции цикла в другой называется вложением циклов, а сам цикл вложенным.
При организации циклов, в том числе и вложенных, необходимо соблюдать следующие правила:
- переменная, объявленная в теле цикла, определена только внутри этого цикла;
- вход в цикл осуществляется через его заголовок;
- вход во внутренний цикл осуществляется после входа во внешний;
- выход из цикла, в том числе и вложенного возможен в любом месте тела цикла;
- параметры циклов со счётчиком не должны изменяться в теле цикла;
- вложенные циклы не должны пересекаться, т.е. начало и конец внутреннего цикла должны находиться во внешнем цикле;
- допускается делать вложение разных конструкций циклов.
Пример 5. (пример выполнения задания 1)
Написать и отладить программу вычисления значений функции , для каждого из заданных значении параметра a (0,5; 1,0; 1,5; 2,0) и при всех заданных значениях аргумента x (от 1 до 7 с шагом 0,25).
StreamWriter p = new StreamWriter("rez.txt");
float a,x,y;
p.WriteLine(" результаты расчёта");
for (a = 1; a <= 2; a += 0.5f) // Заголовок внешнего
// цикла по а
{
// Начало внешнего цикла по а p.WriteLine(M a=M + a);
for (x = 1; x <= 7; x += 0.25f) //Заголовок
// внутреннего
// цикла no x
{
// Начало внутреннего цикла по x
y = (float)(a * Math.Cos(x) / Math.Sqrt(1 + a * x * x));
p.WriteLine(M x= m + x + '\t' + m y= m + y);
/* Конец внутреннего цикла no x */
}
/* Конец внешнего цикла по a */
}
p.Close();
Результаты расчёта
(файл rez.txt)
Суммирование рядов
Выше было рассмотрено использование циклических конструкций для вычисления, накапливания сумм (примеры 1-4). Накапливание сумм используется при вычислении, суммировании рядов, их членов. С помощью рядов могут вычисляться различные функции. Рассмотрим такую задачу на примере.
Пример 6. (пример выполнения задания 2)
Написать и отладить процедуру для приближённого вычисления функции y = sin(x) с помощью ряда
Суммирование членов ряда проводить включительно до члена ряда, значение которого по абсолютной величине меньше чем 10-6.
Вычислить сумму членов заданного ряда для угла в 30 градусов и сравнить полученное значение со значением, вычисленным непосредственно, с помощью функции y = sin(x).
Программа примера 6
double g, pi, x, y, s, a, p, d, чл, зн;
int n,k;
m1: Console.WriteLine(" Введите значение угла в градусах");
g = double.Parse((Console.ReadLine()));
pi = Math.PI; // Задание числа pi
x = g*pi/180; // Перевод градусов в радианы
Console.WriteLine('\t' Промежуточные результаты" + '\n');
K = 0; // Номер итерации.
S = 0;
p = 1;
n = 3;
d = 1;
a = x; // Первый член ряда.
while (Math.Abs(a)>= 0.000001)
{
S += a; // Сумма ряда на текущей итерации,
чл = x*x*x*d; // Вычисление числителя ряда
p = -p*(n-1)*n; // Вычисление факториала
зн = p; // Знаменатель ряда.
a = чл/зн; // Член ряда на текущей итерации.
d = x*x;
n += 2;
k++; // Счётчик итераций.
Console.WriteLine('\t + " Итерация №" + k + '\n' + " a=" + a + " s=" + s +'\n');
}
y = Math.Sin(x); // Непосредственное вычисление синуса.
Console.WriteLine('\t' + " РЕЗУЛЬТАТЫ:" +'\n' + " Заданное значение угла в
град.=" + g +\n' + " Вычисленная сумма ряда S =" + s + '\n' +
" Количество членов ряда - " + k + '\n' + " Функция SIN(X)=" + y + '\n');
Console.WriteLine(,\n' + " Для повторного ввода" + " набрать любую
клавишу." +'\n' + " Для завершения программы нажмите Enter.");
string rep = Console.ReadLine();
if (rep != "") goto m1;
2. Практическая часть
Задание 1. Составить и отладить программу вычисления заданной в таблице 4.1 функции у(х) для каждого из заданных значений параметра а и при всех заданных значениях аргумента х.
Задание 2. Составить и отладить программу для приближённого вычисления заданной функции у(х) путём суммирования членов заданного её ряда s(x) см. таблицу 4.2. Суммирование членов ряда проводить до члена ряда, значение которого по абсолютной величине не будет превышать 10-6.
Вычислить сумму ряда s(x) и непосредственно функцию у(х) при указанных в таблице 4.2 контрольных значениях аргумента x. Сравнить и проанализировать полученные значения
*) для рядов, отмеченных звёздочкой, при оценке погрешности в членах ряда не учитывать синусы и косинусы.
ЛАБОРАТОРНАЯ РАБОТА № 5
Одномерные массивы
Краткие теоретические сведения
Массивом называется последовательная группа переменных одного типа. Массивы служат для размещения набора данных, которые необходимо сохранить и использовать в процессе выполнения программы.
Элементы массива имеют одно и то же имя, но различаются порядковым номером (индексом), что позволяет компактно записывать множество операций с помощью циклов. В языке С#, как и во многих других языках, индексы задаются целочисленным типом.
Число индексов характеризует размерность массива. Каждый индекс изменяется в некотором диапазоне [a, b], который называется граничной парой, где а - нижняя граница, a b - верхняя граница индекса. При объявлении массива границы задаются выражениями. Если все границы заданы константными выражениями, то число элементов массива известно в момент его объявления и ему может быть выделена память еще на этапе трансляции. Такие массивы называются статическими. Если же выражения, задающие границы, зависят от переменных, то такие массивы называются динамическими.
Язык С# поддерживает два вида или две категории типов: типы значений (value types) и типы ссылок (reference types). Элементами массива могут быть как значения, так и ссылки. Массив значимых типов хранит значения, массив ссылочных типов - ссылки на элементы. Всем элементам при создании массива присваиваются значения по умолчанию: нули для значимых типов и null - для ссылочных. Массивы ссылочного типа являются массивами динамическими и память им отводится динамически в области памяти, называемой «кучей» (heap).
Массивами в С# можно пользоваться практически так же, как и в других языках программирования. Тем не менее у них имеется одна особенность: они реализованы в виде объектов. Реализация массивов в виде объектов дает ряд существенных преимуществ, и далеко не самым последним среди них является возможность утилизировать неиспользуемые массивы посредством "сборки мусора".
Поскольку в С# массивы реализованы в виде объектов, то для того чтобы воспользоваться массивом в программе, требуется двух- этапная процедура. Во-первых, необходимо объявить переменную, которая может обращаться к массиву:
тип[] имя_массива;
во-вторых, нужно создать экземпляр массива, используя оператор new:
имя_массива = new тип[размер];
где тип объявляет конкретный тип элемента массива, а размер определяет число элементов массива. Тип элемента определяет тип данных каждого элемента, составляющего массив. Квадратные скобки указывают на то, что объявляется одномерный массив.
Здесь необходимо отметить, что в отличии от других языков программирования (С, C++, Fortran или VBA), квадратные (или круглые) скобки следуют после названия типа, а не имени массива.
Рассмотрим конкретный пример. В приведенной ниже строке кода создается массив типа int из десяти элементов, и переменная array, которая является ссылкой на массив типа int[] с элементами типа int.
int[ ] array = new int[10];
В переменной array хранится ссылка на область памяти, выделяемой для массива оператором new. Эта область памяти должна быть достаточно большой, чтобы в ней могли храниться десять элементов массиватипа int.
Приведенное выше объявление массива можно разделить на два отдельных оператора. Например:
int[ ] array; // объявление массива с именем array
array = new int[10]; // резервирование памяти для
// 10 чисел типа int
Доступ к отдельному элементу массива осуществляется по индексу. В языке С# индекс первого элемента всех массивов является нулевым. В частности, массив array состоит из 10 элементов с индексами от 0 до 9. Для индексирования массива достаточно указать номер требуемого элемента в квадратных скобках. Так, первый элемент массива array обозначается как array[0], а последний его элемент - как array[9]. Ниже приведен пример программы, в которой заполняются все элементы массива iArray и массива chArray.
Пример 1.
// Заполнение массивов using System;
namespace Example5
{
class Example5_1
{
static void Main()
{
int j;
Console.WriteLine("\n\n Одномерный массив iArray");
int[] iArray = new int[10];
for (j = 0; j < 10; j++)
iArray[j] = j * j;
// присваивание значений
// элементам в цикле
for (j = 0; j < 10; j++)
// вывод элементов
Console.WriteLine("\n " + j + " " + iArray[j]);
Console.WriteLine("\n Одномерный массив chArray с
инициализацией");
char[] chArray = { 'a', 'b', 'c', 'd' };
// Объявление с инициализацией
j = -i;
do
{
j++;
Console.WriteLine("\n " + j + " " + chArray[j]);
}
while (chArray[j] != 'd');
// вывод элементов массива
Console.WriteLine();
Console.Write("\n Значения присвоены ");
Console.WriteLine("He всем элемента массива
iiArray \n");
int[] iiArray = new int[10];
for (j = 0; j < 6; j++)
iiArray[j] = j * j;
iiArray[9] = 81;
foreach (int jj in iiArray)
{ Console.Write(" " + jj); }
Console.WriteLine("\n\n");
Console.Write(" ");
}
}
}
В начале программы объявлен массив iArray из 8 целых чисел. Потом в цикле присваиваются значения элементам. Аналогичный цикл используется и для вывода значений элементов на экран.
Далее объявляется массив символов chArray без указания количества элементов с инициализацией, после чего поэлементно выводится в цикле do-while.
Кроме описанных ранее, в С# определен цикл foreach. Он перебирает подряд все элементы массива. В программе foreach примененяется к массиву chArray.
Выражение
foreach(char jj in iiArray){...}
показывает, что все элементы массива iiArray поочередно присваиваются переменной цикла char, тип которой должен соответствовать типу массива. На местах элементов, которым не присвоены значения, цикл foreach выводит нули, что демонстрируется на примере массива iiArray.
Следует, однако, иметь в виду, что переменная цикла в операторе foreach служит только для вывода. Это означает, что, присваивая этой переменной новое значение, нельзя изменить содержимое массива.
Подобные документы
Средства интегрированной среды Microsoft Visual Studio, предоставляемые программисту для реализации программ на языке С++. Особенности стиля написания программ. Типовые приемы и методы создания и отладки программ. Листинги программ и их тестирование.
лабораторная работа [814,3 K], добавлен 26.05.2013Разработка игры "Угадай персонажа", ее суть и содержание. Запоминание новых персонажей и вопросов, коррекция базы данных. Использование языка программирования С++ и среды разработки Microsoft Visual Studio 2010. Алгоритмы и методы, структура программы.
курсовая работа [571,9 K], добавлен 14.07.2012Создание программы с использованием принципов объектно-ориентированного программирования на языке высокого уровня С# средствами Microsoft Visual Studio 2010. Построение алгоритма реализации. Определение математического аппарата, применение его в задаче.
курсовая работа [500,4 K], добавлен 13.01.2015Microsoft Visual C++ и среда программирования Microsoft Developer Studio 6.0. Решение интеллектуальной задачи на компьютере. Построение алгоритма кодирования на Visual C++. Алгоритм решения задачи. Описание программы "Sort". Инструкции пользователя.
курсовая работа [46,0 K], добавлен 27.11.2007Введение в Microsoft Visual Studio. Диалоговое окно "Восстановленные файлы" интегрированной среды разработки. Веб-обозреватель интегрированной среды разработки. Диалоговое окно "Проверка подлинности прокси-сервера". Сохранение и восстановление файлов.
реферат [22,0 K], добавлен 29.05.2013Требования к MS Office 2007. Набор средств разработки Visual Studio Tools for Office как альтернатива VBA. Разработка СУБД на базе MS Access. Разработка надстройки "Электронные компоненты" для PowerPoint на языке C# в среде MS Visual Studio 2010.
дипломная работа [5,2 M], добавлен 03.05.2013Изучение особенностей проектирования прикладных программ с помощь средств Visual Studio 2010 на языке C#. Расчет конического соединения, конусного градиента, усилия для разрыва соединения и требуемой силы сжатия. Реализация и тестирование программы.
курсовая работа [1,7 M], добавлен 19.02.2013Разработка программы с использованием принципов объектно-ориентированного программирования на языке высокого уровня С средствами Microsoft Visual Studio 2010. Построение алгоритма реализации. Класс программы, инструкция по использованию программы.
курсовая работа [1,0 M], добавлен 26.12.2013Общие сведения о работе программы в среде программирования Microsoft Visual Studio 2008, на языке программирования C++. Ее функциональное назначение. Инсталляция и выполнение программы. Разработанные меню и интерфейсы. Алгоритм программного обеспечения.
курсовая работа [585,5 K], добавлен 24.03.2009Создание программы, реализующей игру "Линии". Среда разработки программы, описание ее общего вида. Основные алгоритмы программы. Реализация программы в среде разработки Microsoft Visual Studio 2008 на языке объектно-ориентированного программирования С++.
курсовая работа [639,0 K], добавлен 16.03.2012