Представление целых чисел со знаком 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Представление целых чисел со знаком



Для представления целых чисел со знаком используется 4 формата:

Формат Тип данных в С# Диапазон Описание и инициализация в С#
байт byte sbyte 0 ¸ +255 –128 ¸ +127 byte b = 142; sbyte n = -25;
слово char ushort short 0 ¸ +65535 0 ¸ +65535 –32768 ¸ +32767 char c = 97; ushort n = 4663; short x = -36;
двойное слово uint int 0 ¸ +232 – 1 –231 ¸ +231 – 1 uint f = 42345; int g = -42345;
расширенное двойное слово ulong long 0 ¸ +264 – 1 –263 ¸ +263 – 1 ulong f = 42345; long g = -42345;

 

Целые числа со знаком представляются в дополнительном коде. Дополнительный код положительного числа есть само число в шестнадцатеричной системе исчисления нужного формата.

Дополнительный код отрицательного числа формируется так:

 

1) модуль отрицательного числа определяется в двоичном виде;

2) слева дописываются нули до нужного формата;

3) полученное число инвертируется, в результате чего образуется обратный код;

4) к обратному коду арифметически прибавляется единица;

5) результат разбивается на тетрады и записывается в шестнадцатеричном виде в соответствии с таблицей символов шестнадцатеричного алфавита:

 

0     0000           4     0100           8     1000           C    1100

1     0001           5     0101           9     1001           D    1101

2     0010           6     0110           A    1010           E    1110

3     0011           7     0111           B    1011           F     1111

Пример: число – 8 в формате байта, слова, двойного слова:

 

                                                             Формат байта          Формат слова

1) модуль в двоичной форме 1000

1000

2) дописываем нули 00001000

0000 0000 0000 1000

3) инвертируем и прибавляем 1 11111000

1111 1111 1111 1000

4) в 16-ричномм виде F8

FF F8

                                                                       Формат двойного слова

 
1) модуль в двоичной форме

1000

 
2) дописываем нули

0000 0000 0000 0000 0000 0000 0000 1000

 
3) инвертируем и прибавляем 1

1111 1111 1111 1111 1111 1111 1111 1000

 
4) в 16-ричном виде

FF FF FF F8

 
       

 

Ниже представлен код метода Main(), который выполняет инициализацию числовых переменных заданными константами и вывод их значений на дисплей в десятичном и шестнадцатеричном виде.

 

byte byte1 = 227;

sbyte byte2 = -8;

Console.WriteLine("Число I1 (byte): {0:D}d", byte1);

Console.WriteLine("Число I1 (byte): {0:X}h\n", byte1);

Console.WriteLine("Число I2 (byte): {0:D}d", byte2);

Console.WriteLine("Число I2 (byte): {0:X}h\n", byte2);

 

ushort word1 = 451;

short word2 = -864;

Console.WriteLine("Число I3 (word): {0:D}d", word1);

Console.WriteLine("Число I3 (word): {0:X}h\n", word1);

Console.WriteLine("Число I4 (word): {0:D}d", word2);

Console.WriteLine("Число I4 (word): {0:X}h\n", word2);

 

Console.ReadKey();

 

Здесь для вывода используется метод WriteLine() и два спецификатора: D и X, обеспечивающие вывод целых чисел формата байта (byte, sbyte) и формата слова (ushort, short) соответственно в десятеричной и шестнадцатеричной системе счисления. Спецификатор \ n производит переход на новую строку и возврат каретки.

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

Число I1 (byte): 227d

Число I1 (byte): E3h

 

Число I2 (byte): -8d

Число I2 (byte): F8h

 

Число I3 (word): 451d

Число I3 (word): 1C3h

 

Число I4 (word): -864d

Число I4 (word): FCA0h

 

Задание

1. Согласно варианту выбрать из таблицы 1 целые числа I1, I2, I3 и I4.

2. Составить программу на языке С#, которая выполняет действия а – ж. Результаты каждого действия выводить на консоль в десятеричном и шестнадцатеричном формате.

а. Объявить переменные byte1 типа byte и byte2 типа sbyte и инициализировать их значениями I1, и I2 соответственно.

б. Объявить переменные word1 и word2 таких типов, чтобы было возможно осуществить неявное преобразование типов из формата байта в формат слова, и выполнить операции присваивания word1 = byte1 и word2 = byte2.

в. Инициализировать переменные word1 и word2 значениями I3, и I4 соответственно.

г. Объявить переменные dword1 и dword2 таких типов, чтобы было возможно осуществить неявное преобразование типов из формата слова в формат двойного слова, и выполнить операции присваивания dword1 = word1 и dword2 = word2.

д. Выполнить операции присваивания byte1 = word1 и byte2 = dword1; объяснить полученные результаты.

е. Объявить переменную типа char и инициализировать ее значением С из таблицы 1.

ж. С использованием неявного преобразования типов получить код символа С; использовать ранее объявленную переменную формата слова.

3. Отладить программу, получить и проанализировать результаты ее выполнения.

4. Составить блок-схему алгоритма, реализуемого программой.

5. Сделать выводы по лабораторной работе.

 

Таблица 1  Варианты заданных чисел

№ варианта

Заданные числа в десятеричной системе счисления

I1 I2 I3 I4 С
1 231 -56 907 -172 'Й'
2 175 -69 402 -130 'Ц'
3 154 -15 800 -395 'У'
4 208 -58 277 -207 'К'
5 233 -15 569 -1134 'Е'
6 150 -98 422 -167 'Н'
7 165 -50 287 -705 'Г'
8 145 -20 594 -259 'Ш'
9 181 -95 341 -1778 'Щ'
10 156 -116 307 -200 'З'
11 167 -13 270 -610 'Х'
12 211 -22 553 -557 'Ф'
13 137 -94 405 -1909 'Ы'
14 188 -126 740 -2504 'В'
15 156 -45 870 -908 'А'
16 169 -3 623 -1323 'П'
17 154 -31 598 -1530 'Р'
18 168 -107 900 -440 'О'
19 165 -84 429 -745 'Л'
20 198 -108 903 -502 'Д'
21 250 -113 467 -1917 'Ж'
22 220 -15 524 -474 'Э'
23 155 -65 400 -205 'Я'
24 136 -45 421 -132 'Ч'
25 148 -81 351 -814 'С'
26 224 -76 424 -665 'М'
27 194 -67 545 -908 'И'
28 186 -11 875 -457 'Т'
29 145 -37 310 -124 'Б'
30 243 -88 505 -1055 'Ю'

 

 

Требования к содержанию отчета

 

­ титульный лист установленного образца;

­ тема, цель, задание, с в т.ч. его индивидуальная часть (п.1 задания);

­ текст программы, реализующей заданные действия а–ж согласно п.2 задания;

­ краткие пояснения по выполнению каждого действия а–ж;

­ результаты выполнения программы и их анализ согласно п.3 задания;

­ блок-схема алгоритма программы (п.4 задания);

­ вывод по работе (п.5 задания).

Список контрольных заданий на защите отчета

 

1. На примере своей программы предложить какую-либо операцию неявного преобразования и пояснить ее смысл.

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

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

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

5. Предложить несколько способов реализации преобразования типов для заданной операции.

 

Контрольные вопросы

 

  1. Какие языки программирования поддерживает Microsoft Visual Studio?
  2. Как создать проект в MS Visual Studio?
  3. Что такое консольное приложение?
  4. Что такое пространство имен?
  5. Каково назначение метода Main()?
  6. Перечислить стандартные классы, задействованные в программе, а также их методы.
  7. Пояснить смысл предложения C#: System.Console.WriteLine(…)
  8. Как при помощи среды откомпилировать и выполнить проект?
  9. В чем отличие явного и неявного преобразования типов?

 

Лабораторная работа №2

 

Тема: Программирование алгоритмов с ветвлением, вычисление математических выражений

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

Теоретические положения

C# - это язык, который основывается на семействе "C"-подобных языков (С, C++, Java) поэтому многие его механизмы работают по схожему принципу, например, операторы. В С# существуют четыре основных класса операторов: арифметические, логические, операторы сравнения, побитовые, а также несколько дополнительных, которые используются для ряда специальных ситуаций.

Арифметические операторы

Оператор Значение
+ Сложение
- Вычитание
* Умножение
/ Деление
% Остаток от деления
++ Инкремент
-- Декремент

 

Все перечисленные выше операторы, кроме % работают точно так же как в C/C++. В C# оператор деления по модулю может применяться как к целочисленным данным, так и к значениям с плавающей точкой. В С/С++ этого делать нельзя было.

using System;class Sample{ public static void Main()    { try{     int a=5,b=2;     double c = 19.67, d=3;     Console.WriteLine("Результат {0}%{1}={2}",a,b,a%b);     Console.WriteLine("Результат {0}%{1}={2}",c,d,c%d);    } catch(Exception ex){     Console.WriteLine(ex.Message);    }                    Console.Read(); }}

Операторы сравнения

Оператор Значение
== Равно
!= Не равно
> Больше чем
< Меньше чем
>= Больше или равно
<= Меньше или равно

Логические операторы

Оператор Значение
& И
| Или
^ Исключающее или
&& И (сокращенная схема)
|| Или (сокращенная схема)
! Не

Результатом выполнения операторов сравнения и логических операторов являются значения типа bool(true/false).Например:

using System;class Sample{ public static void Main()    { try{     int a=2,b=3;     if((a==2)&&(b==3)){        Console.WriteLine("Это видно на экране 1!!!");     }  if(a>31){             Console.WriteLine("Это не видно на экране 2!!!");     }     bool b1=false,b2=false;     if(b1^b2){        Console.WriteLine("Это не видно на экране 3!!!");     }     b1=true;     b2=false;     if(b1^b2){       Console.WriteLine("Это видно на экране 4!!!");     }                  }   catch(Exception ex){      Console.WriteLine(ex.Message);   }   Console.Read(); }}

Пример показанный ниже это ошибка на этапе компиляции, так как в С# невозможно неявное преобразование от int к bool.

       int a = 7;       if(a){ // Так нельзя в C#, а в С++ можно             Console.WriteLine("Ошибка!!!");       }

И Даже любимая логическая ошибка программистов на C++ для С# превратится в ошибку на этапе компиляции, по причине, указанной выше.

int a = 7; if(a=8){ // В этой строке ошибка на этапе компиляции Console.WriteLine("Ошибка!!!"); }

Побитовые операторы

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

Оператор Значение
& Побитовое И
| Побитовое Или
^ Побитовое Исключающее Или
~ Побитовое Отрицание
>> Побитовый сдвиг вправо
<< Побитовый сдвиг влево

Они выполняют те же операции, что и их булевы логические эквиваленты.Отличие состоит в том, что побитовые операторы работают с операндами на уровне битов, впрочем это информация не должна являться для вас новостью, так как вы уже сталкивались с ними в C/С++. Давайте рассмотрим пример их использования:

using System;class Sample{ public static void Main()    { try{     int a = Convert.ToInt32(Console.ReadLine());       // Проверка на четность     if((a&1)==1)        Console.WriteLine("Нечетное значение");     else        Console.WriteLine("Четное значение");     int b = 2,c=5;     int f = b|c;     // На Экране 7     Console.WriteLine(f);           int kvadrat = b<<1;     int kub = b<<2;     Console.WriteLine("Квадрат "+b+" = "+kvadrat);           Console.WriteLine("Куб "+b+" = "+kub);          }    catch(Exception ex){       Console.WriteLine(ex.Message);    }    Console.Read(); }}

Операторы, переменные и литералы вместе образовывают выражения. Как и в С++ для улучшения читабельности программы выражения могут содержать символы табуляции и пробелы. Кроме того в выражениях можно использовать круглые скобки для повышения приоритета операторов внутри них.

Оператор ветвления.

В C# поддерживаются многие операторы условий и циклов, применяемых в C++, поэтому рассмотрим только отличия.

Оператор условия if-else внешне выглядит, как в C++:

if (условие)

{

...

}

else if (условие)

{

...

}

...

else

{

...

}

Однако, в C# выражение в скобках должны иметь тип bool. Это означает, что выражения типа if(a) /* a не имеет тип bool) */ и if(a = 5) будут вызывать ошибку компиляции. Таким образом C# позволяет избежать известной ошибки, связанной с потерей одного знака = внутри оператора условия.

 

Тринарный условный оператор:

условие? выражение 1 /*условие истинно*/: выражение 2 /*условие ложно*/

 

Пример 2. Пусть необходимо вычислить значение функции y:

Некорректные ситуации при вычислении возможны, если: , , .

Фрагмент кода C#, который реализует вычисление функции, представлен ниже.

       int a, b, x;

       double y;

       a = 7;

       b = 10;

       x = -10;

       y = Math.Pow(x, 2); // Вычисление y = x^2

       if ((x == 0) || (b <= 0) || (b == y))

       {

           Console.WriteLine("Вычисление невозможно!");

       }

       Else

{

           y = (a * y - b) / Math.Log10(b / y);

           Console.WriteLine("Значение y: {0}", y);

       }

       Console.ReadKey();

 

В этой программе вначале объявляются переменные a, b, x типа int, а также переменная y типа double. При объявлении переменных для них резервируется место в оперативной памяти, а идентификаторы (имена) переменных представляют собой ссылки на соответствующие места в памяти. Так, например, идентификатор b является ссылкой на область памяти размером 2 байта (для типа данных int), а идентификатор y является ссылкой на область памяти размером 4 байта (для типа данных double).

Далее следует 4 операции присваивания на основе оператора присваивания (=). Первые три операции присваивания обеспечивают инициализацию переменных a, b, x. Фактически при этом в области памяти, связанные с этими переменными заносятся указанные справа от оператора присваивания “=” константы (в примере числа 7,10, –10). Четвертая операция присваивания отличается от первых трех тем, что в правой части записано выражение, значение которого вычисляется и присваивается указанной слева переменной y. Можно сказать также, что переменная y инициализируется значением выражения. В этом выражении Math — наименование класса пространства имен System, который содержит методы для вычисления математических функций, таких как Pow (возведение в степень) или Log10 (вычисление десятичного логарифма), и др.

Структурный оператор ветвления if … else предназначен здесь для проверки возможности вычисления,чтобы исключить ошибки выполнения (например, деление на ноль). Этот оператор рассматривается подробно в теоретических положениях к лабораторной работе №2.

 

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

Функция Назначение
Abs(Double) Возвращает абсолютное значение аргумента
Exp(Double) Вычисляет значение экспоненты в степени аргумента
Log(Double) Вычисляет логарифм натуральный от аргумента
Log10(Double) Вычисляет логарифм десятичный от аргумента
Log(Double, Double) Вычисляет логарифм от аргумента 1 по основанию аргумента 2
Pow(Double, Double) Вычисляет значение аргумента 1 возведенного в степень аргумента 2
Sqrt(Double) Вычисляет значение квадратного корня из значения аргумента

 

Некоторые приемы упрощенного решения вычислительных задач:

Выражение Вариант вычисления
x 2 x * x
x 3 x * x * x
Math.Sqrt(Math.Sqrt(x))
p =1/ n; Math.Pow(x, p)
p = m / n; Math.Pow(x, p)

Задание

 

1. Создать консольное приложение так, как показано в примере 1.

2. Запустить программу и убедиться в корректности ее выполнения.

3. Дополнить функцию Main кодом, который вычисляет значение математической функции y в соответствии с индивидуальным заданием из табл. 2 и выводит его на консоль. Значения аргументов задать явным присваиванием констант. При невозможности вычисления вывести на консоль сообщение.

4. Составить блок-схему алгоритма функции Main.

5. Выполнить контрольный просчет и сделать вывод.

 

Таблица 2. Варианты заданий к лабораторной работе №2

1 11 21
2 12 22
3 13 23
4 14 24
5 15 25
6 16 26
7 17 27
8 18 28
9 19 29
10 20 30

 

Содержание отчета:

- тема, цель, задание, в том числе индивидуальная часть и номер варианта;

- листинг программы;

- консольное окно с результатами работы программы;

- блок-схема алгоритма;

- контрольный просчет;

- вывод по работе.

 


 

Лабораторная работа №3

 

Тема: Программирование алгоритмов циклической структуры

 

Цель: изучение возможностей C# для программирования алгоритмов циклической структуры.

 

Теоретические положения

 

Форматирование вывода

 

Применяется для форматирования данных, выводимых в поток при помощи методов Write() или WriteLine(), в частности, для аккуратного выравнивания данных в таблице (в т.ч. контроль числа выводимых десятичных разрядов). Выполняется с использованием форматирующей строки, которая содержит всю информацию о выводимых элементах текста, а также шаблон для каждой указываемой далее переменной, причем каждый шаблон может содержать спецификацию формата. Например, форматированный вывод аккуратно выровненной таблицы значений функции y от варьируемого аргумента x можно выполнить таким предложением вывода:

 

Console.WriteLine("{0,4} {1,8:f2}", x, y);

 

которое означает «Взять нулевой выводимый элемент и записать его с выравниванием вправо в четырех столбцах, после чего взять первый выводимый элемент и записать его с выравниванием вправо в следующих восьми столбцах в формате с фиксированной точкой и двумя десятичными знаками». В результате получится красивая ровная таблица:

 

0 0.00

10 3.16

20 4.47

30 5.48

Форматирующий параметр является первым параметром вызова Write или WriteLine, которая имеет, таким образом, альтернативную форму:

 

Console.WriteLine("текст{формат0}текст{формат1}текст…"элемент0, элемент1, …);

 

Элементами вывода могут быть любые переменные С#, для которых может существовать спецификация формата. Спецификации формата формат0, формат1,... описаны ниже. Текстовые вставки текст не обязательны. В качестве формата может также выступать отдельная символьная строка.

Для правильной работы метод WriteLine должен содержать столько же спецификаций формата, сколько затем указано выводимых элементов. Спецификации формата заключаются в фигурные скобки и нумеруются от ноля. Форматы и элементы должны соответствовать друг другу.

Спецификация формата: { N, M: s }

N — указывает на позицию элемента в списке выводимых переменных после того, как строка формата будет передана в метод Write; позиции элементов нумеруются от 0.

М — задает ширину области, в которую будет помещено форматированное значение. Если М отсутствует или отрицательно, значение будет выровнено влево, иначе — вправо.

s — является необязательной строкой форматирующих кодов, которые используются для управления форматированием чисел, даты и времени, денежных знаков и т. д. Параметр s носит название спецификатора формата. В системе.NET имеются три стандартных типа спецификаторов формата: для чисел, объектов даты/времени и для перечислимых объектов.

Таблица 3. Примеры числовых спецификаторов форматов

Спецификатор Буква Данные Пример Строка
Общий G Все (настраивается) 8:G 8:G __1234.5 ____1234
Фиксированная точка F Все 8:F2 _1234.50
С возвратом R Все 8:R2 1234.5
Число N Все 8:N1 1,2345.6
Выражение со степенью Е Все 14:E6 _1.234500E+003
Десятичное выражение D Только целые 8:D 00001234
Денежные единицы С Все 10:С _$1,234.50
Проценты Р Все 0:P 89.00%
Шестнадцатеричный код X Только целые 0:X FCA0h

 

Спецификатор G при использовании его с числами обладает наибольшей гибкостью. Он подстраивается к типу получаемого им значения и не принимает в расчет спецификаторы точности. Им удобно пользоваться, если требуется вставлять числа в текст. Для таблиц он не так удобен. Для того чтобы выровнять числа и десятичные точки, следует использовать F или даже R.

Спецификатор R формирует строку примерно так же, как F или Е, но имеет то дополнительное преимущество, что формируемая им строка при вводе может быть преобразована в точности в то число, из которого она получена, поэтому он удобен для сериализации.

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

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

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

Спецификатор Р может привести к ошибке, так сначала он умножает значение на 100. Спецификатор X предназначен для представления шестнадцатеричных чисел и часто используется с фиксированным числом цифр, когда слева вставляются лидирующие ноли.

 

Операторы цикл ов

 

Цикл с предусловием:

while (условие)

{

...

}

 

Цикл с постусловием:

do

{

...

}while (условие);

 

Параметрический цикл:

for (инициализация; условие; приращение)

{

...

}

 

Во всех циклах, как и в операторе if, условие должно иметь тип bool.

Оператор досрочного перехода к следующей итерации: continuous.

Оператор досрочного выхода из цикла: break.

 

Задание

 

Составить блок-схему алгоритма и программу на языке C#, реализующую такие операции в соответствии с индивидуальным заданием, выбираемым из таблицы 4:

  1. вычисления в цикле заданного вида значений заданной функции y выполнить для переменной x, изменяющейся в заданном интервале [ x 1, x 2] с заданным шагом D x, проверяя при этом возможность вычислений, как в предыдущей лабораторной работе;
  2. в теле цикла организовать поиск максимального y_ max и минимального y_ min значений функции y, а также номеров шагов n_ max и n_ min, на которых достигаются эти значения;
  3. вычисленные значения вывести на консоль в виде таблицы такого формата:

| № шага | x | y  | y _min | n_min | y _max | n_max |

  1. выполнить ручной просчет для значения аргумента на третьем шаге и сравнить его с результатами выполнения программы;
  2. сделать вывод.

 

 

Содержание отчета:

- тема, цель, задание;

- листинг программы;

- консольное окно с результатами работы программы;

- блок-схема алгоритма;

- ручной просчет;

- вывод.

 

Контрольные вопросы

 

  1. Структура оператора ветвления.
  2. Синтаксис условного оператора.
  3. Структура оператора множественного выбора.
  4. Ограничения на использование оператора множественного выбора.
  5. Преимущества и недостатки оператора множественного выбора.
  6. Виды циклов, отличия и особенности использования.
  7. Что такое логическое выражение?
  8. Правила составления сложных логических выражений.
  9. Как работает оператор ветвления?
  10. Как работает оператор множественного выбора?
  11. Что такое тело цикла?
  12. Что такое параметрический цикл?
  13. Структура заголовка параметрического цикла.
  14. Что такое итерация?
  15. Оператор досрочного выхода из цикла и особенности его использования.

Таблица 4 Варианты индивидуальных заданий для лабораторной работы №3

№ варианта Заданная функция Интервал аргумента и величина шага Вид цикла
1 x Î [0,3; 3], Dx = 0,15 с предусловием
2 x Î [-1; 2], Dx = 0,15 с постусловием
3 x Î [0,8; 2], Dx = 0,1 параметрический
4 x Î [1; 1,5], Dx = 0,05 с предусловием
5 x Î [1; 3], Dx = 0,1 с постусловием
6 x Î [0,2; 4], Dx = 0,2 параметрический
7 x Î [0; p], Dx = p/20 с предусловием
8 x Î [1; 4], Dx = 0,2 с постусловием
9 x Î [-5; 3], Dx = 0,5 параметрический
10 x Î [0; 2p], Dx = p/10 с предусловием
11 x Î [2; 7], Dx = 0,2 с постусловием
12 x Î [0; p/2], Dx = p/60 параметрический
13 x Î [0,5; 3,5], Dx = 0,25 с предусловием
14 x Î [0,25; 2], Dx = 0,05 с постусловием
15 x Î [0; 3p/2], Dx = p/10 параметрический
16 x Î [-3; -1], Dx = 0,1 с предусловием
17 x Î [2; 3], Dx = 0,05 с постусловием
18 x Î [1; 4], D x = 0,2 параметрический
19 x Î [-5; -4], Dx = 0,025 с предусловием
20 x Î [0; 2p/3], Dx = p/40 с постусловием
21 x Î [0; p/2], D x = p/40 параметрический
22 x Î [0; 2p/3], D x = p/30 с предусловием
23 x Î [0,5; 2,5], D x = 0,1 с постусловием
24 x Î [0; p], D x = p/30 параметрический
25 x Î [-5; 1], D x = 0,25 с предусловием
26 x Î [1,5; 3], D x = 0,05 с постусловием
27 x Î [0; 2p], D x = p/15 параметрический
28 x Î [0,25; 5,25], D x = 0,25 с предусловием
29 x Î [0; p/4], D x = p/60 с постусловием
30 x Î [-2,5; 2,5], D x = 0,25 параметрический
31 x Î [0; 3p/2], D x = p/20 с предусловием
32 x Î [-0,5; 2,5], D x = 0,15 с постусловием
33 x Î [1,3; 6,1], D x = 0,3 параметрический
34 x Î [p/2; 3p/2], D x = p/30 с предусловием
35 x Î [0; p/2], D x = p/40 с постусловием
36 x Î [3p/2, 5p/2], D x = p/60 параметрический
37 x Î [–p/2; p/2], D x = p/40 с предусловием
38 x Î [-5; 3], D x = 0,4 с постусловием
39 x Î [2,5; 7,5], D x = 0,25 параметрический
40 x Î [0; p/3], D x = p/60 с предусловием

 

double pi = Math.PI

Лабораторная работа №4

 

Тема: Алгоритмизация обработки одномерных массивов.

Цель: изучение возможностей C# для программирования алгоритмов обработки одномерных массивов и освоение технологий составления и тестирования программ

 

Теоретические положения

Массив — это индексированный набор объектов одного типа. Массив может хранить элементы любого типа, но для всех элементов массива тип должен быть одним и тем же.

Объявление массивов

Объявление массивов имеет следующий синтаксис:

Тип[] имя-массива.

Например:

int[] myIntArray;

Квадратные скобки ([ ]) сообщают компилятору С#, что определяется массив, а тип указывает тип элементов этого массива. В примере, приведенном выше, myIntArray является целочисленным массивом.

Экземпляр массива создается ключевым словом new. Например:

myIntArrsy = new int[5];

Это объявление отводит память для массива, состоящего из пяти целых чисел.

В языке С# массивы относятся к ссылочным типам, объекты которых создаются в куче. Соответственно, массив myIntArray находится в куче. Элементы массива размещаются в соответствии с их типами. Целочисленный тип относится к размерным типам, поэтому элементы массива myIntArray будут иметь размерный тип, а не упакованный целочисленный тип. Массив элементов, имеющих ссылочный тип, будет содержать только ссылки на элементы, размещенные в куче.

Значения по умолчанию

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

Таблица 5 Базовые типы и их значения по умолчанию

Типы Значения по умолчанию
Числовые (int, long и т. д.) 0
bool false
char ‘\0’, (null)
enum 0
Ссылочные null

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



Поделиться:


Последнее изменение этой страницы: 2021-09-26; просмотров: 120; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.117.196.184 (0.159 с.)