Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Записанные в скобках операторы блока 1.






Таблиця 1.1

Тип даних Ключове слово Псевдонім класу бібліотеки NET Опис Розмір (байт)
Логічний bool System.Boolean - -
Цілий Int Shot Byte Sbyte Long System.Int32 System.Int16 System.Byte System.SByte System.Int64 зі знаком зі знаком без знаку зі знаком зі знаком  
Дійсний Float Double System.Single System.Double 7 цифр 15 цифр  
Рядковий символьний String Char System.String System. Char Рядок символів Unicode -
Будь-який тип object System.Object Об’єктний -

 

Иерархия классов NET Framework имеет один общий корень - класс System.Object. Все типы разделяются на две категории: размерные типы и ссылочные типы.

При создании переменной размерного типа под нее в стеке вы­деляется определенный объем памяти, соответствующий типу этой переменной. При передаче такой переменной в качестве параметра выполняется передача значения, а не ссылки на него. Значение раз­мерного типа не может быть равным null. К размерным типам, на­пример, относятся целочисленные и вещественные типы, структу­ры.

При создании переменной ссылочного типа память под создан­ный объект выделяется в другой области памяти, называемой ку­чей. Ссылка всегда указывает на объект заданного типа.

Структура приложения на языке С#.

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

Интегрированная среда проектирования Visual Studio позволяет для создания проектов на разных языках программирования испо­льзовать различные инструментальные средства проектирования (например, Microsoft Visual Basic, Microsoft Visual C#).

Любое приложение на языке C#, разрабатываемое в среде про­ектирования Visual Studio, реализуется как отдельный проект. При­ложение на языке С# может состоять из нескольких модулей. Каж­дый модуль C# может содержать код нескольких классов (при соз­дании приложения в среде Visual Studio.NET каждый класс С# ав­томатически помещается в отдельный модуль - файл с расшире­нием cs).

Для консольного приложения один из классов, реализуемых модулем, должен содержать метод Main. В языке C# нет аппарата заголовочных файлов, используемого в языке С++, поэтому код модуля должен содержать как объявление, так и реализацию клас­са. По умолчанию весь код класса, представляющего консольное приложение, заключается в одно пространство имен, одноименное с именем приложения.

Точкой входа в программу на языке C# является метод Main. Этот метод может записываться как без параметров, так и с одним параметром типа string - указателем на массив строк, который содержит значения параметров, введенных при запуске программы. В отличие от списка параметров, задаваемых при запуске С-прило- жения, список параметров С#-приложения не содержит в качестве первого параметра имя самого приложения. Код метода указыва­ется внутри фигурных скобок:

static void Main(string[] args)

{

}

Ключевое слово static определяет, что метод Main является статическим методом, вызываемым без создания экземпляра объек­та типа класса, в котором этот метод определен. Метод, не возвра­щающий никакого значения, указывается с ключевым словом void. Однако метод Main может возвращать значение типа int.

 

 

Пример 1. Вывод сообщения на консоль.

static void Main()

{

Console.WriteLine(" Уpa! \n Сегодня \" Информатика\"!!! ");

}

 

 

Замечание. Для отладки можно использовать команду меню Debug\Start Without Debugging. На экране появится окно с резуль­татом исполнения. Обратите внимание на надпись в конце прог­раммы: Press any key to continue, которая не была предусмотрена. При нажатии любой клавиши окно закрывается. Это результат сра­батывания встроенной разработчиками компилятора функции «ос­тановки экрана» для того, чтобы можно было бы сколь угодно дол­го его рассматривать.

Можно использовать команду Debug\Start Debugging, но тогда окно закроется и мы не сможем рассмотреть искомый результат. Для того чтобы обойти это неудобство, следует при разработке про­граммы предусмотреть собственную остановку экрана. Для этого используется команда Console.Read();

 

Константы

Это неизменяемые в процессе выполнения программы вели­чины.

Целые константы - наиболее распространенный тип int. Это целое число, которое может быть отрицательным, положительным или нулем -12, 5, 0 (все целые со знаком 32 бита). Их можно за­писывать с суффиксом -12L (длинное целое 64 бита), 5u (целое без знака 8 бит)

Вещественные константы с фиксированной точкой. При за­писи константы типа float(32 бита) необходимо, чтобы за значе­нием шел суффикс символ f или F 1.2, -1.234, при записи конс­танты типа double (64 бита) можно записать суффикс «d» или «D», но это не является обязательным условием: 1234.5678, 12.3d. Дробная часть отделяется от целой части точкой.

Вещественные константы с плавающей точкой. При записи константы типа float(32 бита) необходимо, чтобы за значением шел суффикс символ f или F: 1.2E-3f (число 0.0012), при запи­си константы типа double (64 бита) -1.34E5 (число -134000) на­личие суффикса не требуется.

Символьные константы. Символьная константа char может представлять собой 16-битный символ Unicode ('a') или управ­ляющие символы (возврат каретки ('\r'), перевод страницы ('\f'), горизонтальную табуляцию ('\t'), и другие), заключенный в апо­строфы.

Строковые константы - это последовательность символов, заключенная в кавычки, или константы string. Строка, состоящая из символов, например " Уpa! \n Сегодня \" Информатика\"!!! "

Логическая константа. Задается одним из двух значений true («истина») или false («ложь»). Используется в C# в логических выражениях, операторах условного перехода.

Именованные константы. Применяются для того, чтобы вме­сто значений констант, использовать в программе их имена, напри­мер константа р вещественная одинарной точности

const float p = 3.14159f

 

Переменные

Переменная - именованная область памяти, для хранения дан­ных определенного типа. При выполнении программы значение пе­ременной величины можно изменять. Все переменные должны быть описаны явно, при описании переменной задается ее значение и тип. При объявлении переменной может быть задано начальное значение.

Имя переменной может содержать буквы, цифры и символ под­черкивания. Прописные и строчные буквы различаются. Например, переменные Long, LONG, long - три разных переменные.

Имя переменной может начинаться с буквы или знака под­черкивания, но не цифры. Имя переменной не должно совпадать с ключевыми словами. Не рекомендуется начинать имя с двух под­черкиваний (такие имена зарезервированы для служебного исполь­зования).

Правильные имена переменных: MaxLen, iMaxLen, Max_Len

Неправильные имена переменных: 2Len, Le#

Примеры описания переменных:

int a = -14; // числовая целая 32 бита

float c = -0.00151f; // числовая вещественная 32

// бита

double i = 1234.56789; // числовая вещественная 64

// бита

bool l = false; // логическая 16 бит

string name = " Petrov"; // строковая

 

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

Примеры выражений:

2 * 2 + 1 полученное значение 5

1 / 2 - 3 полученное значение -3

1 / 2 - 3 полученное значение -2.5

Присвоение значения переменной представляет оператор прис­ваивания (знаки основных операций приведены в таблице 1.2): y = 2*x*x + 3*x - 1.

В этом примере сначала производятся вычисления правой час­ти оператора присваивания «=», а затем полученное значение присваивается переменной у. Для текстовых данных выражение можно записать в следующем виде:

string kaf = " Кафедра" + " ПМиСИ";

В этом примере строки по правую сторону от оператора прис­ваивания объединяются, чтобы получить строку " Кафедра + ПМиСИ", которая затем присваивается переменной kaf.

Таблица 1.2 Знаки операций
Знак операции Название
+ Сложение
- Вычитание
* Умножение
/ Деление
% Остаток от деления

 

Если в арифметических выражениях используются целые чис­ла, то результатом вычислений будет целое число, и любой оста­ток от деления будет отброшен. Для получения остатка можно ис­пользовать соответствующую операцию %, например 10 % 3 воз­вращает остаток от целочисленного деления, равный 1.

Когда в арифметических выражениях используются числа с плавающей точкой, то результатом деления 10f / 3f будет число 3, 333333.

 

Математические функции

С# содержит большое количество встроенных математических функций, которые реализованы в классе Math пространства имен System.

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

Замечание. Использование нескольких функций с одним и тем же именем, но с различными типами параметров, называется пере­грузкой функции. Например, функция Math.Abs(), вычисляющая модуль числа, имеет 7 перегруженных версий: double Math.Abs (double x), float Math.Abs (float x), int Math.Abs(int x), и т. д. (таблица 1.3)

Таблица 1.3 Математические функции

Название Описание
1. Math.Abs(вираз) Модуль
2. Math.Ceiling ( вираз) Округление до большего целого
3. Math.Cos(вираз) Косинус
4. Math.E Число е
5. Math.Exp (вираз) Экспонента
6. Math.Floor (вираз) Округление до меньшего целого
7. Math.Log (вираз) Натуральный логарифм
8. Math.Log10 (вираз) Десятичный логарифм
9. Math.Max (вираз1, вираз2) Максимум ив двух
    значений
10. Math.Min (вираз1, вираз2) Минимум из двух значений
11. Math.PI Число
12. Math.Pow (вираз1, вираз2) Возведение в степень
13. Math.Roundl(вираз) Простое округление
  Math.Round(вираз, число) Округление до заданного
    числа цифр
14. Math.Sign(вираз) Знак числа
15. Math.Sin(вираз) Синус
16. Math.Sqrt(вираз) Квадратный корень
17. Math.Tan (вираз) Тангенс

 

 

Пример 2. Вычислить значения функции при х = 2, 5

using System;

using System.Collections.Generic;

using System.Linq; using System.Text;

namespace ConsoleApplication1

{

class Example2 // начало описания класса

// Example2

{

static void Main()

{

double p = 3.14159; double x = 2.5;

double y = Math.Cos(p * x)/(1 + x*x);

Console.WriteLine();

Console.WriteLine(" x = {0} \t y = {1} ", x, y);

}

}

}

 

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

 

Замечание. Функция Console.WriteLine() выводит на эк­ран пустую строку. Это сделано для более комфортной работы

 

Организация ввода-вывода данных.

Программа при вводе данных и выводе результатов взаимо­действует с внешними устройствами. Совокупность стандартных устройств ввода (клавиатура) и вывода (экран) называется консо­лью. В языке С# нет операторов ввода и вывода. Вместо них для обмена данными с внешними устройствами используются специа­льные объекты. В частности, для работы с консолью используется стандартный класс Console, определенный в пространстве имен System.

Ввод данных

Для ввода данных обычно используется метод ReadLine, реа­лизованный в классе Console. Особенностью данного метода яв­ляется то, что в качестве результата он возвращает строку (string).

Пример:

static void Main()

{

string s = Console.ReadLine(); Console.WriteLine(s);

}

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

Пример:

static void Main()

{

string s = Console.ReadLine();

int x = int.Parse(s); // преобразование строки в

// число

Console.WriteLine(x);

}

Или сокращенный вариант:

static void Main()

{

//преобразование введенной строки в число

int x = int.Parse(Console.ReadLine());

Console.WriteLine(x);

}

Для преобразования строкового представления целого числа в тип int мы используем метод int.Parse(), который реализован для всех числовых типов данных. Таким образом, если нам потре­буется преобразовать строковое представление в вещественное, мы можем воспользоваться методом float.Parse() или doub­le. Parse(). В случае, если соответствующее преобразование вы­полнить невозможно, то выполнение программы прерывается и ге­нерируется исключение System.FormatExeption (входная строка имела неверный формат).

Вывод данных

В приведенных выше примерах мы уже рассматривали метод WriteLine, реализованный в классе Console, который позволяет организовывать вывод данных на экран. Однако существует неско­лько способов применения данного метода (таблица 1.4):

Таблица 1.4. Способы вывода

Console.WriteLine(x); на экран выводится зна­чение идентификатора х
Console.WriteLine(" x=" + x +" y=" + y); на экран выводится строка, образованная последовательным слия­нием строки " х=", значения х, строки " у=" и значения у
Console.WriteLine (" x={0} y={1}", x, y); на экран выводится строка, формат которой задан первым аргументом метода, при этом вместо параметра {0} выводится значение х, а вместо {1} - значение

Если использовать при выводе вместо метода WriteLine ме­тод Write, вывод будет выполняться без перевода строки.

 

Использование управляющих последовательностей.

\n Перевод строки \’ Апостроф
\r Возврат каретки \” Кавычки
Таблица 1.5. Управляющие символы
Вид Наименование Вид Наименование
\a Звуковой сигнал \t Горизонтальная табуляция
\b Возврат на шаг назад \v Вертикальная табуляция
\f Перевод страницы \\ Обратная косая черта

Управляющей последовательностью называют определенный символ, предваряемый обратной косой чертой. Данная совокуп­ность символов интерпретируется как одиночный символ и испо­льзуется для представления кодов символов, не имеющих графи­ческого обозначения (например, символа перевода курсора на но­вую строку) или символов, имеющих специальное обозначение в символьных и строковых константах (например, апостроф). Рас­смотрим управляющие символы (таблица 1.5):

 

Пример 3. Вывести сообщение о версии установленной опера­ционной системы, текущую дату и время.

using System;

using System.Collections.Generic;

using System.Linq; using System.Text;

namespace ConsoleApplicationl

{

class Program

{

static void Main(string[] args)

{

// вывести версию операционной системы

OperatingSystem os = System.Environment.OSVersion;

Console.WriteLine(" Platform: {0}", os.Platform);

System.Console.WriteLine(" The current date and time is

" + System.DateTime.Now);

// дата и время System.Console.ReadLine();

}

}

}

 

 

Пример 4. Использование консольного ввода для вычисления значений функции

 

using System;

using System.Collections.Generic;

using System.Linq; using System.Text;

namespace lab0

{

class Program

{

static void Main(string[] args)

{

System.Console.WriteLine(" The current date and time is

" + System.DateTime.Now);

double pi = 3.14159;

Console.WriteLine(" Input x =\r");

double x = Convert.ToDouble(Console.ReadLine());

double y = Math.Cos(pi * x)/(1 + x*x);

Console.WriteLine(" x = {0} \t y = {1} ", x, y);

Console.ReadKey();

}

}

}

 

 

2. Практическая часть.

Задание 1. Напишите процедуру, выводящую сообщение о вер­сии установленной операционной системы, текущей даты и време­ни (пример 3).

Задание 2. Составить процедуру для выполнения расчетов функции, значения задавать в диалоге с использованием метода Console.ReadLine() (пример 4) см. таблицу 1.6;

Таблица 1.6

Bap. Функция X У
  0, 31 2, 5 -0, 0049
  arcsin(cos px) -0, 75 1, 2 -0, 018
  2, 23 3, 2 -0, 018
  -0, 35 1, 5 -1, 318
  0, 40 1, 5 0, 016
  2, 26 1, 2 0, 235
  2, 09 1, 7 0, 920
  -0, 26 0, 25 -0, 0049
  -0, 61 0, 5 -0, 012
  0, 97 -0, 5 -0, 0024
  2, 81 1, 25 0, 253
  2, 03 1, 7 1, 043
  1, 97 0, 7 0, 0017
Bap. Функция X У
  0, 96 1, 23 -0, 528
  1, 32 -0, 5 0, 307
  -0, 71 0, 7 0, 0252
  -0, 73 1, 53 -4, 197
  2, 15 1, 2 -1, 485
  0, 62 1, 1 -0, 0082
  2, 07 1, 35 -0, 1699
  0, 69 1, 15 0, 0038
  1, 28 0, 23 -0, 0009
  -0, 63 1, 35 6, 0827
  1, 78 2, 3 0, 0064
  0, 23 1, 4 -0, 0021
  -0, 23 0, 96 -1, 0396
  1, 83 -0, 5 0, 2601
  0, 47 1, 2 -0, 0073
Bap. Функция X У
  0, 66 -0, 5 -0, 0001
  0, 71 1, 4 -0, 0012

 


 

 

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

Ввод-вывод информации, с использованием файлов. Форматирование значений данных.

1. Краткие теоретические сведения

Вывод, производимый методами System.Console.Write() и System.Console.WriteLine(), можно форматировать. Формати­рование позволяет указывать формат целых чисел, чисел с плава­ющей точкой и других типов данных.

 

Управление форматом числовых данных

Пусть в программе определена переменная типа int с именем

value:

int value = 250;

До этого момента переменные выводились следующим обра­зом:

System.Console.WriteLine (" value =" + value);

Результат вывода: value = 250

Можно вывести значение value, используя требуемое число позиций (например 5):

System.Console.WriteLine(" value = {0, 5}", value);

Первое число в фигурных скобках означает номер переменной - это 0, что соответствует первой переменной value в списке метода System.Console.WriteLine(). Второе число в фигур­ных скобках означает количество позиций, отведенное для отобра­жения переменной. В данном примере оно равно 5. При выводе пе­ременной длина ее представления будет дополнена пробелами сле­ва. Если количество позиций меньше чем число знаков переменной, то оно будет выведено без форматирования.

Можно задать форматирование для вывода каждой перемен­ной:

int a = -12;

int b = 20;

System.Console.WriteLine(" a = {0, 4}, b = {1, 3}", a, b);

Результат вывода: a = -12, b = 20

Форматированный вывод чисел с плавающей точкой немного более сложный. Предположим, определена переменная типа double с именем

myDouble:

double myDouble = 1234.56789;

Следующий пример выводит значения myDouble, отведя под него десять знакомест, и округлив его до трех цифр после запятой:

System.Console.WriteLine(" myDouble = {0, 10: f3}"; myDouble);

Символы f3 в этом примере означают, что значение выводится как число с плавающей точкой (символ f), в дробной части будет выведено три цифры.

Точно такое же форматирование можно применять для типов float и decimal. Например:

float myFloat = 1234.56789f;

System.Console.Write(" myFloat ={0, 0: f3}" myFloat);

decimal myDecimal = 1234.56789m;

System.Console.Write(" myDecimal = {0, 10: f3}", myDecimal);

Результат вывода:

myFloat = 1234.568;

myDecimal 1234.568;

В списке аргументов методов WriteLine или Write задается строка вида {n, w: спецификатор k} - где n определяет номер идентификатора из списка аргументов метода WriteLine, спецификатор - определяет формат данных, w - целая константа без знака, задает количество символов (длину поля), a k - количество позиций для дробной части значения идентификатора.

Для каждого типа данных существует своя форма представ­ления. Данные сведены в таблицу 2.1.

Таблица 2.1
Тип данных Форма
  Целые W
Числовые Вещественные с фиксированной точностью W: Fk
  Вещественные в экспоненциальном формате W: Ek
Логические W
Символьные W

 

Символы форматирования F, E (другие символы форматиро­вания приведены в табл. 2.2) - определяют тип и характеристики объектов ввода-вывода. Параметр w - целая константа без знака, задает количество символов (длину поля), отводимых для ввода- вывода объекта. Параметр k - целая константа без знака определяет для числовых данных:

• количество позиций, для цифр в дробной части числа (форма F);

• количество позиций для цифр, в дробной части мантиссы числа (форма E или G).

 

 

Таблица 2.2

Символ Формат Значение
C или c Денежный. По умолчанию ставит знак р. Изменить его можно с помощь объекта NumberFormatInfo Задается количество десятичных разрядов.
D или d Целочисленный (использует­ся только с целыми числами) Задается минимальное количество цифр. При необходимости результат дополняется начальными нулями
E или e Экспоненциальное представление чисел Задается количество сим­волов после запятой. По умолчанию используется 6
F или f Представление чисел с фиксированной точкой Задается количество символов после запятой
G или g Общий формат (или экспоненциальный, или с фиксированной точкой) Задается количество сим­волов после запятой. По умолчанию выводится целая часть
N или n Стандартное форматирование с использованием запятых и пробелов в качестве разделителей между разрядами Задается количество сим­волов после запятой. По умолчанию - 2, если число целое, то ставятся нули
X или x Шестнадцатеричный формат  
P или p Процентный  

 

В качестве спецификаторов могут использоваться следующие значения:

 

Пример 1. Форматированный вывод данных различного типа.

public static void Main()

{

int a = -14;

float c = -0.00151f;

double i = 1234.56789;

bool l=false;

string name=" Petrov";

System.Console.WriteLine(" name = {0, 6}, l = {1, 4}", name, l);

System.Console.WriteLine(" a ={0, 4}, c = {1, 10: f5}, i =

{1, 20: e8}", a, c, i);

System.Console.WriteLine(" ");

System.Console.WriteLine(" Для выхода нажмите на Enter");

System.Console.ReadLine();

}

 

 

Пример 2. Ввод в диалоге и форматированный вывод данных различного типа.

 

public static void Main()

{

int a; // = -14;

float c; // = -0.00151f;

double i; // = 1234.56789;

bool l; // = false;

string name; //=" Petrov";

Console.WriteLine(" Input фамилию ");

name = Console.ReadLine();

Console.WriteLine(" Input a");

a = Convert.ToInt32(Console.ReadLine());

Console.WriteLine(" Input c");

c = Convert.ToSingle(Console.ReadLine());

Console.WriteLine(" Input i");

i = Convert.ToDouble(Console.ReadLine());

Console.WriteLine(" Input l");

l = Convert.ToBoolean(Console.ReadLine());

System.Console.WriteLine(" Результаты форматирования \n

name = {0, 6}, l = {1, 4}", name, l);

System.Console.WriteLine(" a ={0, 4}, c = {1, 10: f5},

i = {2, 20: e8}", a, c, i);

System.Console.WriteLine(" ");

System.Console.WriteLine(" Для выхода нажмите на Enter");

System.Console.ReadLine();

}

 

 

Организация ввода вывода с использованием файлов

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

На самом низком уровне иерархии потоков ввода-вывода нахо­дятся потоки, оперирующие байтами. Это объясняется тем, что многие устройства при выполнении операций ввода-вывода ориен­тированы на байты. Однако для человека привычнее оперировать символами, поэтому разработаны символьные потоки, которые фактически представляют собой оболочки, выполняющие преобра­зование байтовых потоков в символьные и наоборот. Кроме этого, реализованы потоки для работы с int-, double-, short- значе­ниями, которые также представляют оболочку для байтовых пото­ков, но работают не с самими значениями, а с их внутренним пред­ставлением в виде двоичных кодов.

Центральную часть потоковой С#-системы занимает класс Stream пространства имен System.IO. Класс Stream представ­ляет байтовый поток и является базовым для всех остальных потоковых классов. Чтобы создать символьный поток нужно по­местить объект класса Stream (например, FileStream) " внутрь" объекта класса StreamWriter или объекта класса StreamReader. В этом случае байтовый поток будет автоматически преобразовы­ваться в симво-льный.

Класс StreamWriter предназначен для организации выходного символьного потока. Этот класс содержит несколько конструкто­ров. Так, например, создать экземпляр класса StreamWriter мож­но следующим образом:

StreamWriter fileOut = new StreamWriter(new FileStream(" text.txt",

FileMode.Create, FileAccess.Write));

Эта версия конструктора позволяет ограничить доступ только чтением или только записью:

FileStream(string filename, FileMode mode, FileAccess how)

где:

1. параметры filename и mode имеют то же назначение, что и в предыдущей версии конструктора;

2. параметр how, определяет способ доступа к файлу и может принимать одно из значений, определенных перечислением FileAccess:

FileAccess.Read - только чтение;

FileAccess.Write - только запись;

FileAccess.ReadWrite - и чтение, и запись.

Другой вид конструктора позволяет открыть поток сразу через обращения к файлу:

StreamWriter(string name),

где параметр name определяет имя открываемого файла.

Например, обратиться к данному конструктору можно следую­щим образом:

StreamWriter fileOut = new StreamWriter(" c: \temp\t.txt");

 

И еще один вариант конструктора StreamWriter:

StreamWriter(string name, bool appendFlag),

где параметр name определяет имя открываемого файла; параметр appendFlag может принимать значение true - если нужно добав­лять данные в конец файла, или false - если файл необходимо пе­резаписать. Например:

StreamWriter fileOut=new StreamWriter(" t.txt", true);

Теперь для записи данных в поток fileOut можно обратиться к методу WriteLine. Это можно сделать следующим образом:

fileOut.WriteLine(" test");

В данном случае в конец файла t.txt будет дописано слово test.

Класс StreamReader предназначен для организации входного символьного потока. Один из его конструкторов выглядит следую­щим образом:

StreamReader(Stream stream),

где параметр stream определяет имя уже открытого байтового по­тока. Этот конструктор генерирует исключение типа ArgumentException, если поток stream не открыт для ввода.

Например, создать экземпляр класса 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, содержащая русские символы) в Uni­code. 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

Результаты расчетов файл 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
  -14 -104 -0, 00151 ложь Фамилия
  99, 35     истина Имя
  0, 086 -19 4, 025 ложь Отчество
    -6124 3, 2х105 истина Фамилия
  5, 008   0, 019 ложь Имя
  3, 5х10-4   -380, 08 истина Отчество
  0, 095 -1   ложь Фамилия
  1, 0074 102 107, 7 истина Имя
  993, 285   2, 3х10-4 ложь Отчество
  -2, 1   103 истина Фамилия
  3, 125   -13, 24 ложь Имя
  -45, 077   25х1012 истина отчество
  12, 97   -999, 7 ложь фамилия
  -0, 09   399, 44 ложь имя
  -142 -104 -0, 00151 истина отчество
  9, 35 - 5072 19, 95 ложь фамилия
  0, 86 -19726 4, 025 истина Имя
    -6 3, 2х103 ложь отчество
  5, 008 -229 -0, 019 истина фамилия
  3, 5х10-4   -380, 08 ложь имя
  0, 095 -12   истина отчество
  1, 0074 102 107, 7 ложь фамилия
Вариант A I C L N
  993, 285   2, 3х10-4 истина имя
  -2, 1х103   10-3 ложь отчество
  3, 125   -13, 24 истина фамилия
  -45, 07   25х1012 ложь имя
  89, 09   999, 002 истина отчество
  -99, 78   -1, 774 ложь фамилия
  7, 99 -30077   истина истина
  0, 124 -100400 -9000 ложь фамилия

 

 

Таблица 2.4

Функция Контрольное значение Интервал х Вариант формы вывода
x* y* xmin xmax
    -0, 176 -3    
  1, 57 0, 406 -2    
  3, 14 0, 935 -2    
    4, 5   2, 5  
  1, 57 1, 75 1, 5    
    -0, 4 -2    
      -1    
  1, 57 0, 299 -2    
  -1 -2, 7   2, 5  
  0, 5 1, 9 -3      
Функция Контрольное значение Интервал х Вариант формы вывода
x* y* xmin xmax
  -0, 6 0, 43 -1 1, 5  
  0, 14 0, 0027 -2      
  1, 5 0, 242      
    2, 4      
    1, 57 -2    
  1, 57 -0, 53 -0, 5    
  0, 5 0, 5 -1, 5 1, 5  
    0, 369      
  1, 2 -1, 75 -1, 3 1, 3  
  1, 2 0, 2б2 -2    
    1, 077      
  -0, 5 -0, 5 -1, 5 1, 5  
  0, 25 1, 75 -2    
    1, 4 -2    
  0, 5 -0, 5 -2      
Функция Контрольное значение Интервал х Вариант формы вывода
x* y* xmin xmax
  0, 5 0, 875 -1    
      -2    
    -1 -2    
  -1 -7 -2    
    -4 -2    

 

 

Таблица 2.5

Вариант формы вывода Форма вывода информации 7890123456789012345678901234 - позиции
  Таблица значений І-------------------------------------------------------------І І Х І Функция I I-------------------------------------------------------------I I X=… I Y=… I I X=… I Y=… I I-------------------------------------------------------------I Склав: < П. І.Б>  
  Таблица
  *************************************
  * X =...   * у = *
  *******************************
  * X =...   * у = *
  *************************************
  Составил: < Ф.И. О. >
  Таблица значений
  +----------------------------------------------- +
  + Аргумент + Функция +
  +------------------------------------------------+  
  + X =... + у =… +
  + X =... + у =… +
  +------------------------------------------------+
  Составил: < Ф.И. О. >
  Получено: для заданной функции 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 выбора истинно будут выполняться,






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.