Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
СОДЕРЖАНИЕ
[1] ВВЕДЕНИЕ [2] 1. ТЕОРЕТИЧЕСКОЕ ВВЕДЕНИЕ [3] 1.1. Алфавит языка С# [4] 1.2. Операторы языка С# [5] 1.3. Понятие классов и объектов [6] 1.4. Структура программного модуля на С# [7] 2. ПРАКТИЧЕСКАЯ ЧАСТЬ [8] 2.1. Выполнение задания № 1 курсовой работы [9] 2.2. Выполнение задания № 2 курсовой работы [10] 2.4. Выполнение задания № 4 курсовой работы [11] 2.5. Выполнение задания № 5 курсовой работы [12] ЗАКЛЮЧЕНИЕ [13] СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ [14] ПРИЛОЖЕНИЕ 1 [15] using System; [16] using System.Collections.Generic; [17] using System.ComponentModel; [18] using System.Data; [19] using System.Drawing; [20] using System.Linq; [21] using System.Text; [22] using System.Windows.Forms; [23] namespace Вариант_11_1 [24] { [25] public partial class Form1 : Form [26] { [27] public Form1() [28] { [29] InitializeComponent(); [30] } [31] private void button1_Click(object sender, EventArgs e) [32] { [33] [34] int[,] a = new int[10, 10]; [35] for (int i = 0; i < 10; i++) [36] { [37] for (int j = 0; j < 10; j++) [38] { [39] if (i >= j) [40] { [41] a[i, j] = (j + 1) * (j + 1); [42] } [43] else [44] { [45] a[i, j] = Convert.ToInt32((i + 1).ToString() + (i + 1).ToString()); [46] } [47] } [48] } [49] int sek7 = 0; [50] double skkce = 0; [51] string s = "i=\\j= \t"; [52] for (int j = 0; j < 10; j++) s = s + j.ToString() + "\t"; [53] s = s + "\n"; [54] for (int i = 0; i < 10; i++) [55] { [56] s = s + "\n" + i.ToString() + "\t"; [57] for (int j = 0; j < 10; j++) [58] { [59] if (a[i, j] % 7 == 0) [60] { [61] sek7 = sek7 + a[i, j]; [62] } [63] if ( a[i, j] % 2== 0) [64] { [65] skkce = skkce + Math.Sqrt(a[i, j]); [66] } [67] s = s + a[i, j].ToString() + "\t"; [68] } [69] s = s + "\n"; [70] } [71] richTextBox1.Text = s; [72] richTextBox1.AppendText("\nСумма квадратных корней чётных эле¬ментов матрицы " + skkce.ToString()); [73] richTextBox1.AppendText("\nСумма элементов матрицы, кратных 7 равна " + sek7.ToString()); [74] } [75] } [76] }ПРИЛОЖЕНИЕ 2 [77] using System; [78] using System.Collections.Generic; [79] using System.ComponentModel; [80] using System.Data; [81] using System.Drawing; [82] using System.Linq; [83] using System.Text; [84] using System.Windows.Forms; [85] namespace _11_2 [86] { [87] public partial class Form1 : Form [88] { [89] public Form1() [90] { [91] InitializeComponent(); [92] } [93] private void button1_Click(object sender, EventArgs e) [94] { [95] richTextBox1.Clear(); [96] double n = 1; [97] double a = (20 * n - n * n * n) / n; [98] double z = n; [99] double sp = 0; [100] while (a > 0) [101] { [102] sp = sp + a; [103] richTextBox1.AppendText("a" + n.ToString() + " = " + a.ToString() + "\n"); [104] n = n + 1; [105] z = z * n; [106] a = (20 * n - n * n * n) / z; [107] [108] } [109] richTextBox1.AppendText("Индекс первого отрицательного " + n.ToString() + "\n"); [110] richTextBox1.AppendText("Значение первого отрицательного " + a.ToString() + "\n"); [111] richTextBox1.AppendText("Корень квадратный суммы " + Math.Sqrt(sp) + "\n"); [112] [113] } [114] } [115] } [116] ПРИЛОЖЕНИЕ 3 [117] using System; [118] using System.Collections.Generic; [119] using System.ComponentModel; [120] using System.Data; [121] using System.Drawing; [122] using System.Linq; [123] using System.Text; [124] using System.Windows.Forms; [125] using System.Text.RegularExpressions; [126] namespace Вариант_11_4 [127] { [128] public partial class Form1 : Form [129] { [130] public Form1() [131] { [132] InitializeComponent(); [133] } [134] int[,] a = new int[10, 10]; [135] int[,] b = new int[10, 10]; [136] int n = 0; [137] int m = 0; [138] int n1 = 0; [139] int m1 = 0; [140] static int funk(int [,] a,int m,int n,int [,] b,int m1,int n1) [141] { [142] int sd = 0; [143] for (int i = 0; i < n; i++) [144] { [145] sd = sd + a[i, i] + a[i, n - i - 1]; [146] } [147] int sd2 = 0; [148] for (int i = 0; i < n1; i++) [149] { [150] sd2 = sd2 + b[i, i] + b[i, n - i - 1]; [151] } [152] if (sd < sd2) [153] return 1; [154] else [155] return 2; [156] } [157] private void button1_Click(object sender, EventArgs e) [158] { [159] [160] richTextBox3.Clear(); [161] string s = ""; [162] string[] MS; // массив строк [163] string razdel = @"[\s]+"; // разделитель любое число пробельных, знаков табуляции, перевода строки, новой страницы [164] Regex r = new Regex(razdel); // определить разделитель [165] int i = 0; [166] int j = 0; [167] // чтение из блкнота и запись в массив [168] for (i = 0; i < richTextBox1.Lines.Length; i++) [169] { [170] s = richTextBox1.Lines[i]; [171] if (i != 0 && richTextBox1.Lines[i - 1].Length == 0) goto стоп; [172] s = s.Trim(); [173] MS = r.Split(s); // разделить на подстроки [174] for (j = 0; j < MS.Length; j++) [175] { [176] try [177] { [178] a[i, j] = Convert.ToInt32(MS[j]); [179] } [180] catch (Exception ex) [181] { [182] } [183] } [184] } [185] стоп: [186] //размерность массива [187] m = i - 1; [188] n = r.Split(richTextBox1.Lines[1]).Length; [189] //******************************** [190] s = ""; [191] string[] MS1; // массив строк [192] // string razdel = @"[\s]+"; // разделитель любое число пробельных, знаков табуляции, перевода строки, новой страницы [193] // Regex r = new Regex(razdel); // определить разделитель [194] i = 0; [195] j = 0; [196] // чтение из блкнота и запись в массив [197] for (i = 0; i < richTextBox2.Lines.Length; i++) [198] { [199] s = richTextBox2.Lines[i]; [200] if (i != 0 && richTextBox2.Lines[i - 1].Length == 0) goto стоп1; [201] s = s.Trim(); [202] MS1 = r.Split(s); // разделить на подстроки [203] for (j = 0; j < MS1.Length; j++) [204] { [205] try [206] { [207] b[i, j] = Convert.ToInt32(MS1[j]); [208] } [209] catch (Exception ex) [210] { [211] } [212] } [213] } [214] стоп1: [215] //размерность массива [216] m1 = i - 1; [217] n1 = r.Split(richTextBox1.Lines[1]).Length; [218] richTextBox3.AppendText("\nМатрица с наименьшим следом"); [219] if (funk(a, m, n, b, m1, n1) == 1) [220] { [221] for (i = 0; i < m; i++) [222] { [223] s = ""; [224] for (j = 0; j < n; j++) [225] s = s + a[i, j].ToString() + " "; [226] richTextBox3.AppendText("\n" + s); [227] } [228] int[,] aa = new int[10, 10]; [229] for (i = 0; i < m; i++) [230] for (j = 0; j < n; j++) [231] aa[i, j] = a[i, j] * a[j, i]; [232] richTextBox3.AppendText("\nКвадрат матрицы с наименьшим следом"); [233] for (i = 0; i < m; i++) [234] { [235] s = ""; [236] for (j = 0; j < n; j++) [237] s = s + aa[i, j].ToString() + " "; [238] richTextBox3.AppendText("\n" + s); [239] } [240] } [241] else [242] { [243] [244] for (i = 0; i < m1; i++) [245] { [246] s = ""; [247] for (j = 0; j < n1; j++) [248] s = s + b[i, j].ToString() + " "; [249] richTextBox3.AppendText("\n" + s); [250] } [251] int[,] bb = new int[10, 10]; [252] [253] for (i = 0; i < m1; i++) [254] for (j = 0; j < n1; j++) [255] bb[i, j] = b[i, j] * b[j, i]; [256] richTextBox3.AppendText("\nКвадрат матрицы с наименьшим следом"); [257] for (i = 0; i < m1; i++) [258] { [259] s = ""; [260] for (j = 0; j < n1; j++) [261] s = s + bb[i, j].ToString() + " "; [262] richTextBox3.AppendText("\n" + s); [263] } [264] } [265] } [266] } [267] } [268] ПРИЛОЖЕНИЕ 4 [269] using System; [270] using System.Collections.Generic; [271] using System.ComponentModel; [272] using System.Data; [273] using System.Drawing; [274] using System.Linq; [275] using System.Text; [276] using System.Windows.Forms; [277] using System.IO; [278] namespace Вариант_11_5 [279] { [280] public partial class Form1 : Form [281] { [282] public Form1() [283] { [284] InitializeComponent(); [285] } [286] private void button1_Click(object sender, EventArgs e) [287] { [288] int nom = 0; [289] button1.Visible = false; [290] button2.Visible = true; [291] char chf; [292] char chg; [293] richTextBox1.Clear(); [294] try [295] { [296] FileStream f = new FileStream("f.char", FileMode.Open); [297] BinaryReader char_Reader_f = new BinaryReader(f); [298] FileStream g = new FileStream("g.char", FileMode.Open); [299] BinaryReader char_Reader_g = new BinaryReader(g); [300] richTextBox1.AppendText("Длина f.char =" + f.Length.ToString() + "\n"); [301] richTextBox1.AppendText("Длина g.char =" + g.Length.ToString() + "\n"); [302] try [303] { [304] while (true) [305] { [306] chf = char_Reader_f.ReadChar(); [307] chg = char_Reader_g.ReadChar(); [308] if (chf == chg) [309] { [310] richTextBox1.AppendText(chg.ToString() + "=" + chf.ToString() + "\n"); [311] nom++; [312] } [313] else [314] break; [315] } [316] richTextBox1.AppendText("Число совпадающих компонент ="+nom.ToString()); [317] } [318] catch (Exception ex) [319] { [320] } [321] char_Reader_f.Close(); [322] f.Close(); [323] char_Reader_g.Close(); [324] g.Close(); [325] } [326] catch (Exception ex) [327] { [328] richTextBox1.AppendText("f.char или g.char не существует"); [329] } [330] [331] } [332] private void button2_Click(object sender, EventArgs e) [333] { [334] button2.Visible = false; [335] button1.Visible = true; [336] try [337] { [338] BinaryWriter char_Writer = new BinaryWriter(new FileStream("f.char", FileMode.Create)); [339] string s = textBox1.Text; [340] for (int i = 0; i < s.Length; i++) [341] { [342] char_Writer.Write(s[i]); [343] } [344] char_Writer.Close(); [345] } [346] catch (Exception ex) [347] { [348] richTextBox1.Text = ex.Message; [349] } [350] try [351] { [352] BinaryWriter char_Writer = new BinaryWriter(new FileStream("g.char", FileMode.Create)); [353] string s = textBox2.Text; [354] for (int i = 0; i < s.Length; i++) [355] { [356] char_Writer.Write(s[i]); [357] } [358] char_Writer.Close(); [359] } [360] catch (Exception ex) [361] { [362] richTextBox1.Text = ex.Message; [363] } [364] } [365] } [366] } |
В прежние времена под языками подразумевалось исключительно средство общения между людьми, т.е. имелись в виду только естественные языки - русский, немецкий, английский и пр. В начале ХХ века это представление претерпело серьезные изменения и в настоящее время под языком понимается всякое средство общения, состоящее из знаковой системы, множества смыслов этой системы и имеющее установленное соответствие между последовательностями знаков и смыслами. Особенно широкий (и все более увеличивающийся) класс составляют языки программирования, изучению которых и посвящен наш курс.
Стремительное развитие вычислительной техники сделало возможной компьютерную обработку текстов, относящихся к самым различным языкам - естественным языкам, языкам формул, языкам программирования.
Существует великое множество программных средств такой обработки. Это и различные редакторы с самыми разными возможностями, и архиваторы, и трансляторы для языков программирования или программы-переводчики для естественных языков.
При обработке текстов возникает ряд задач. Это задачи, связанные с проблемой задания языка, или генерации его цепочек, задачи определения принадлежности некоторого множества слов заданному языку, задачи идентификации цепочек. Для их решения разработано множество методов, причем некоторые из них работают только с определенным классом языков (например, с языками программирования), другие же являются универсальными.
Алфавит (или множество литер) языка программирования С# составляют символы таблицы кодов ASCII. Алфавит С# включает:
• строчные и прописные буквы латинского алфавита (мы их будем называть буквами);
• цифры от 0 до 9 (назовем их буквами-цифрами);
• символ «_» (подчеркивание также считается буквой);
• набор специальных символов: " { }, 1 [ ] + %/ \; ' : ? < > = ! & # ~ *-
• прочие символы.
Алфавит С# служит для построения слов, которые в C++ называются лексемами. Различают пять типов лексем:
• идентификаторы;
• ключевые слова;
• знаки (символы) операций;
• литералы;
• разделители.
Идентификатор может включать латинские буквы и буквы национальных алфавитов, цифры и символ подчеркивания. Прописные и строчные буквы различаются, например, myname, myName и MyName три различных имени. Первым символом идентификатора может быть буква или знак подчеркивания, но не цифра. Могут быть зарезервированные идентификаторы, которые имеют специальное значение для компилятора, например, include, main, int и т.д.
Часть идентификаторов С# входит в фиксированный словарь ключевых слов. Эти идентификаторы образуют подмножество ключевых слов (они так и называются ключевыми словами).
Прочие идентификаторы после специального объявления становятся именами. Имена служат для обозначения переменных, типов данных, функций. Чтобы создать переменную, вы должны задать тип переменной и затем дать этому типу имя. Вы можете проинициализировать переменную во время ее объявления или присвоить ей новое значение во время выполнения программы. В языке С# требуется, чтобы переменные были явно проинициализированы до их использования. Однако инициализировать каждую переменную необязательно, но необходимо присвоить ей значение до того, как она будет использована.
Существуют переменные, значение которых нельзя изменить(константы). Константы бывают трех видов: литералы, символические константы и перечисления.
В операторе присваивания: x=32. Число 32 является литеральной константой и его значение всегда равно 32 и его нельзя изменить.
Символические константы именуют постоянные значения. Определение символической константы происходит следующим образом:
const <тип> <идентификатор> = <значение>;
Перечисления (enumerations) являются альтернативой константам. Перечисление - это особый размерный тип, состоящий из набора именованных констант (называемых списком перечисления).
К знакам операций относится один или более символов, определяющих действие над операндами. Внутри знака операции пробелы не допускаются. Например, в выражении а + b знак + является знаком операции, а а и b операндами. Символы, составляющие знак операций, могут быть как специальными, например, &&, | и <, так и буквенными, такими как as или new.
Операции делятся на унарные, бинарные и тернарную по количеству участвующих в них операндов. Один и тот же знак может интерпретироваться по-разному в зависимости от контекста. Все знаки операций, за исключением [ ], ( ).и ? :, представляют собой отдельные лексемы. Для разделения используются скобки, точка, запятая. Ниже перечислены все знаки операций и разделители, использующиеся в С#:
{} [] (). . :: + - * / * % & | ˆ ! ˜ =
< > ? ++ -- && || « » == != <=>= += - = .*=
/= %= &= |= ˆ= <<= >>= ->
Существуют следующие виды операций:
Также в языке С# очень часто используются управляющие символы, все используемые символы представлены в таблице 1.1
Управляющие символы
\a - Звуковой сигнал;
\b - Возврат на шаг назад;
\f - Перевод страницы;
\r - Возврат каретки;
\t - Горизонтальная табуляция;
\v - Вертикальная табуляция;
\\ - Обратная косая черта;
\ - Апостроф
С# является языком со строгой типизацией. В нем необходимо объявлять тип всех создаваемых программных элементов (например, переменных, объектов, окон, кнопок и т. д.). Тип программного элемента сообщает компилятору о его размере (например, тип int показывает, что объект занимает 4 байта) и возможностях.
В С# типы делятся на две группы: базовые типы, предлагаемые языком, и типы, определяемые пользователем. Кроме того, типы С# разбиваются на две другие категории: размерные типы (типы по значению) и ссылочные типы.
Типы можно классифицировать по разным признакам. Если принять за основу строение элемента, все типы можно разделить на простые (не имеют внутренней структуры) и структурированные (состоят из элементов других типов). Для данных динамического типа размер данных в момент объявления может быть неизвестен, и память под них выделяется по запросу в процессе выполнения программы.
Почти все базовые типы являются размерными типами. Исключение составляют типы Object и String. Все пользовательские типы, кроме структур, являются ссылочными. Дополнительно к упомянутым типам, язык С# поддерживает типы указателей, однако они используются только с неуправляемым кодом. Принципиальное различие между размерными и ссылочными типами состоит в способе хранения их значений в памяти.
Целые типы, а также символьный, вещественные и финансовый типы можно объединить под названием арифметических типов.
Вещественные типы, или типы данных с плавающей точкой, хранятся в памяти компьютера иначе, чем целочисленные. Внутреннее представление вещественного числа состоит из двух частей мантиссы и порядка, каждая часть имеет знак. Длина мантиссы определяет точность числа, а длина порядка его диапазон.
Все вещественные типы могут представлять как положительные, так и отрицательные числа. Чаще всего в программах используется тип double, поскольку его диапазон и точность покрывают большинство потребностей. Этот тип имеют вещественные литералы и многие стандартные математические функции.
Тип decimal предназначен для денежных вычислений, в которых критичны ошибки округления. Величины типа decimal позволяют хранить 28-29 десятичных разрядов.
Чаще всего типы С# разделяют по способу хранения элементов на типы-значения и ссылочные типы.
Язык С# предлагает обычный набор базовых типов, представленных в таблице 1.1
Таблица 1.1
Базовый набор типов данных
Тип |
Размер в байтах |
Тип .NET |
Описание |
Базовый тип |
|||
object |
Object |
Может хранить все что угодно, т.к. является всеобщим предком |
|
Логический тип |
|||
bool |
1 |
Bolean |
true или false |
Целые типы |
|||
sbyte |
1 |
SByte |
Целое со знаком (от -128 до 127) |
byte |
1 |
Byte |
Целое без знака (от 0 до 255) |
short |
2 |
Int16 |
Целое со знака (от -32768 до 32767) |
ushort |
2 |
UInt16 |
Целое без знака (от 0 до 65535) |
int |
4 |
Int32 |
Целое со знаком (от -2147483648 до 2147483647) |
uint |
4 |
UInt |
Целое число без знака ( от 0 до 4 294 967 295) |
long |
8 |
Int64 |
Целое со знаком (от -9223372036854775808 до 9223372036854775807) |
ulong |
8 |
UInt64 |
Целое без знака (от 0 до 0fffffffffffffff) |
Вещественные типы |
|||
Float |
4 |
Single |
Число с плавающей точкой двойной точности. Содержит значения приблизительно от 1.5*10-45 до 3.4*1038 c 7 значащими цифрами |
Продолжение табл.1.2
double |
8 |
Double |
Число с плавающей точкой двойной точности. Содержит значения приблизительно от 5. 0*10-324 до 1.7*10308 c 15-16 значащими цифрами |
Символьный тип |
|||
char |
2 |
Сhar |
Символы Unicode |
Строковый тип |
|||
string |
String |
Строка из Unicode-символов |
|
Финансовый тип |
|||
decimal |
12 |
Decimal |
Число до 28 знаков с фиксированным положением десятичной точки. Обычно используется в финансовых расчетах. Требует суффикса <<m>> или <<М>> |
Операнды, связанные знаками операций, образуют выражения. Понятие «выражение» в языке программирования соответствует понятию «словосочетание» в языке человека. Тип выражения определяется типом операндов.
Комментарии предназначены для записи пояснений к программе и формирования документации. Компилятор комментарии игнорирует. Внутри комментария можно использовать любые символы. В С# есть два вида комментариев: однострочные и многострочные. Однострочный комментарий начинается с двух символов прямой косой черты (//) и заканчивается символом перехода на новую строку, многострочный заключается между символами-скобками /* и */ и может занимать часть строки, целую строку или несколько строк. Комментарии не вкладываются друг в друга: символы // и /* не обладают никаким специальным значением внутри комментария.
Операторы управляют процессом выполнения программы. Набор операторов языка С++ содержит все управляющие конструкции структурного программирования.
Составной оператор ограничивается фигурными скобками. Все другие операторы заканчиваются точкой с запятой.
Пустой оператор это оператор, состоящий только из точки с запятой. Он может появиться в любом месте программы, где по синтаксису требуется оператор. Выполнение пустого оператора не меняет состояния программы.
Действие составного оператора состоит в последовательном выполнении содержащихся в нем операторов, за исключением тех случаев, когда какой-либо оператор явно передает управление в другое место программы.
Оператор-переключатель предназначен для выбора одного из нескольких альтернативных путей выполнения программы. Вычисление оператора-переключателя начинается с вычисления выражения, после чего управление передается оператору, помеченному константным выражением, равным вычисленному значению выражения. Выход из оператора-переключателя осуществляется операторомbreak. Если значение выражения не равно ни одному константному выражению, то управление передается оператору, помеченному ключевым словом default, если он есть.
В языке C++ этот оператор отличается от классической реализации цикла с постусловием тем, что при истинности выражения происходит продолжение работы цикла, а не выход из цикла.
Тело оператора for выполняется до тех пор, пока условное выражение не станет ложным (равным 0).Начальное выражение и выражение приращения обычно используются для инициализации и модификации параметров цикла и других значений. Начальное выражение вычисляется один раз до первой проверки условного выражения, а выражение приращения вычисляется после каждого выполненияоператора. Любое из трех выражений заголовка цикла, и даже все три могут быть опущены (не забывайте только оставлять точки с запятой). Если опущено условное выражение, то оно считается истинным, и цикл становится бесконечным.
Оператор пошагового цикла в языке С++ является гибкой и удобной конструкцией, поэтому оператор цикла с предусловием while используется в языке С++ крайне редко, т.к. в большинстве случаев удобнее пользоваться оператором for.
Оператор разрыва прерывает выполнение операторов while, do, for и switch. Он может содержаться только в теле этих операторов. Управление передается оператору программы, следующему за прерванным. Если оператор разрыва записан внутри вложенных операторов while, do, for, switch, то он завершает только непосредственно охватывающий его оператор.
Оператор продолжения передает управление на следующую итерацию в операторах цикла while, do,for. Он может содержаться только в теле этих операторов. В операторах do и while следующая итерация начинается с вычисления условного выражения. В операторе for следующая итерация начинается с вычисления выражения приращения, а затем происходит вычисление условного выражения.
Оператора возврата заканчивает выполнение функции, в которой он содержится, и возвращает управление в вызывающую функцию. Управление передается в точку вызывающей функции, непосредственно следующую за оператором вызова. Значение выражения, если она задано, вычисляется, приводится к типу, объявленному для функции, содержащей оператор возврата, и возвращается в вызывающую функцию. Если выражение опущено, то возвращаемое функцией значение не определено.
С формальной точки зрения операторы break, continue и return не являются операторами структурного программирования. Однако их использование в ограниченных количествах оправдано, когда они упрощают понимание программы и позволяют избегать больших вложенных структур. Например, мы проверяем входные данные на аномалии. Если не использовать эти операторы, то всю обработку придется вложить в условный блок, что ухудшает читабельность программы. Вместо этого можно написать небольшой условный блок, который организует выход из функции при неверных исходных данных.
Ввод/вывод не является частью языка С++, а осуществляется функциями, входящими в состав стандартной библиотеки
Класс содержит данные, задающие свойства объектов класса, и функции, определяющие их поведение. В последнее время в класс часто добавляется третья составляющая события, на которые может реагировать объект класса. Все классы имеют одного общего предка класс object и организованы в единую иерархическую структуру.
Описание класса содержит ключевое слово class, за которым следует его имя, а далее в фигурных скобках тело класса, то есть список его элементов. Кроме того, для класса можно задать его базовые классы (предки) и ряд необязательных атрибутов и спецификаторов, определяющих различные характеристики класса:
[ атрибуты ] [ спецификаторы ] class имя_класса [ : предки ] тело_класса.
Классом является специальный тип данных, включающий описание данных и описание функций (методов), которые могут быть выполнены над представителем класса объектом.
Поле. Так называется член-переменная, содержащий некоторое значение. В ООП поля иногда называют данными объекта. К полю можно применять несколько модификаторов в зависимости от того, как вы собираетесь его использовать. В число модификаторов входят static, readonly и const.
Метод. Это реальный код, воздействующий на данные объекта (или поля). Все, используемые модификаторы класса представлены в таблице 1.2.
Таблица 1.2
Модификаторы класса
№ |
Спецификатор |
Описание |
1 |
new |
Используется для вложенных классов. Задает новое описание класса взамен унаследованного от предка. Применяется в иерархиях объектов |
2 |
public |
Доступ не ограничен |
3 |
protected |
Используется для вложенных классов. Доступ только из элементов данного и производных классов |
4 |
internal |
Доступ только из данной программы (сборки) |
5 |
protected internal |
Доступ только из данного и производных классов или из данной программы (сборки) |
6 |
private |
Используется для вложенных классов. Доступ только из элементов класса, внутри которого описан данный класс |
7 |
abstract |
Абстрактный класс. Применяется в иерархиях объектов |
8 |
sealed |
Бесплодный класс. Применяется в иерархиях объектов |
9 |
static |
Статический класс. |
К элементам класса относятся:
Объекты класса создаются явным или неявным образом (программистом или системой). Для явного создания экземпляра используется операция new. Формат операции: new тип ( [ аргументы ]). Программа на С# состоит из взаимодействующих между собой классов. Программист создает экземпляр класса с помощью операции new, например:
Demo a = new Demo(); // создание экземпляра класса Demo
Demo b = new Demo(); // создание другого экземпляра класса Demo.
Для каждого объекта при его создании в памяти выделяется отдельная область, в которой хранятся его данные. Кроме того, в классе могут присутствовать статические элементы, которые существуют в единственном экземпляре для всех объектов класса. Часто статические данные называют данными класса, а остальные данными экземпляра.
Совокупность средств, с помощью которых программы пишут, корректируют, преобразуют в машинные коды, отлаживают и запускают, называют средой разработки, или оболочкой.
Среда разработки обычно содержит:
текстовый редактор, предназначенный для ввода и корректировки текста программы;
Любое приложение на языке C#, разрабатываемое в среде проектирования VisualStudio.NET, реализуется как отдельный проект.
Приложение на языке С# может состоять из нескольких модулей. Каждый модуль C# может содержать код нескольких классов .
Сама программа на C# состоит из классов, внутри которых описывают методы и данные. Описанные переменные непосредственно внутри класса, называются полями класса. Им автоматически присваивается так называемое «значение по умолчанию».
Так называемая область действия переменной, то есть область программы, где можно использовать переменную, начинается в точке ее описания и длится до конца блока, внутри которого она описана. Блоком является код, заключенный в фигурные скобки. Основное назначение блока группировка операторов.
В C# любая переменная описана внутри какого-либо блока: класса, метода или блока внутри метода. Имя переменной должно быть уникальным в области ее действия. Область действия распространяется на вложенные в метод блоки.
ВАРИАНТ № 11. Заполнить матрицу 1010 следующим образом:
Вывести заполненную матрицу на экран компьютера или на принтер. Найти сумму элементов матрицы, кратных 7, найти сумму квадратных корней чётных элементов матрицы, вывести полученные результаты.
Пояснение работы программы сделаем с помощью словесного описания алгоритма.
Алгоритм решения задания
if (i < 5 && j < 5 ) a[i, j] = k++;
if (i >= 5 && i < 7 && j >= 5) a[i, j] = j+6-i;
if (i >= 7 && j >= 5) a[i, j] = f--;
if (a[i, j] > 7)
sumb7 = sumb7 + a[i, j] * a[i, j];
if ((a[i, j] % 7 == 0) && a[i, j]!=0) kk7++;
if ((a[i, j] > 7) && (a[i, j] % 3 == 0) && (amax < a[i,j]))
amax = a[i, j];
Описания используемых переменных были приведены в процессе описания алгоритма.
Контрольный пример выполнения задания представлен на рис. 2.1. и рис. 2.2.
Рис. 2.1. Контрольный пример1
Рис. 2.2. Контрольный пример 2
Вариант 11. Составить программу нахождения первого отрицательного члена последовательности: an = (20n n3)/n!, n=1,2,3,…. Найти сумму всех положительных членов последовательности и определить корень квадратный из этой суммы. Вывести полученное значение на экран, а также номер первого отрицательного члена последовательности и его значение.
Задание вариантов № 12-16: Действительное число Х вводится с клавиатуры. Вычислить приближённое значение бесконечной суммы согласно заданию варианта. Нужное приближение считается полученным, если вычислена сумма нескольких первых слагаемых, и очередное слагаемое оказалось по модулю меньше 0,0001.
Алгоритм выполнения задания.
Пояснение работы программы сделаем с помощью блок-схемы алгоритма, приведенной на рис. 2.4.
Контрольный пример нахождения первого отрицательного члена последовательности приведен на рис 2.3.
Рис. 2.3. Контрольный пример нахождения первого отрицательного члена последовательности.
Рис. 2.4. Блок-схема нахождения первого отрицательного члена последовательности
Вариант 11. Составить программу на языке программирования Паскаль, вызывающую процедуру или функцию, позволяющую решить следующую задачу: даны две квадратные вещественные матрицы порядка 10х10. Вывести на экран квадрат той из них, у которой наименьший след (сумма диагональных элементов), считая, что такая матрица одна.
Алгоритм выполнения задания
Пояснение работы программы сделаем с помощью словесного описания.
Контрольный пример решения поставленной задачи приведен на рис. 2.4.
Рис. 2.4. Контрольный пример решения поставленной задачи
Вариант 11. Даны символьные файлы f и g. Определить, совпадают ли компоненты файла f с компонентами файла g. Если нет, то получить номер первой компоненты, в которой файлы f и g отличаются между собой. В случае, когда один из файлов имеет n компонент (n≥0) и является началом другого (более длинного) файла, ответом должно быть число n+1.
Алгоритм выполнения задания
Пояснение работы программы сделаем с помощью блок-схемы алгоритма, в данном случае здесь будет три блок-схемы, т.к выполнение программы выполняется на три события. (см рис.2.9-2.11).
Контрольный пример решения поставленной задачи приведен на рис. 2.5.
Рис. 2.5. Контрольный пример решения поставленной задачи
Рис. 2.6. Блок-схема на событие private void button1_Click(object sender, EventArgs e) .
Рис.2.10. Блок-схема на событие private void button2_Click(object sender, EventArgs e) .
Рис.2.11. Блок-схема на событие private void button3_Click(object sender, EventArgs e) .
При выполнении настоящей курсовой работы были освоены основные принципы разработки алгоритмов и программ, методы отладки и решения задач на ЭВМ в различных режимах. Так же были разобраны основы системного программирования и основы объектно-ориентированного подхода к программированию.
В процессе решения поставленных задач курсовой работы использовались прикладные системы программирования и необходимые методы решения заданий.
Инструментальной средой разработки программ стала MS Visual Studio 2010.
В первом задании курсовой работы были рассмотрены такие методы решения задач как матрицы. Заданная матрица элементов должна быть заполнена определенным образом и выведена на экран. При выполнении данного задания использовались массивы и соответствующие расчеты.
Условием второго задания курсовой работы было нахождение первого отрицательного члена последовательности и нахождение суммы всех положительных членов последовательности. При решении поставленной задачи использовался цикл с предусловием.
В третьем задании курсовой работы были рассмотрены строки. При выполнении данного задания были применены необходимые операции со строками, а именно строковый массив, нахождение длины строки и т.д.
Темой четвертого задания курсовой работы стала работа с методами. При выполнении задания была составлена программа вызова метода с помощью которого было решено условие данного задания.
Темой заключительного задания курсовой работы была работа с файлами. При решении задания использовались одномерные массивы.
По окончанию курсовой работы можно сказать, что нами были изучены и закреплены следующие задачи:
- ставить задачу и разрабатывать алгоритм её решения;
- использовать прикладные системы программирования;
- разрабатывать основные программные документы;
- работать с современными системами программирования, включая объектно-ориентированные;
- языками процедурного и объектно-ориентированного программирования, навыками разработки и отладки программ не менее, чем на одном из алгоритмических процедурных языков программирования высокого уровня,
- методами и средствами разработки и оформления технической документации.
ПУСК
int n = 1;
double p=1;
double a = 19;
double sumln = 0;
нет
a>0
sumln = sumln + Math.Log(a)
n++;
p = p *n;
a = (20-n*n)/p;
да
richTextBox1.
Clear()
Стр. 26/бл.6
richTextBox1.AppendText(sumln.ToString() + "\n");
richTextBox1.AppendText("a" + n.ToString() + " =" + a.ToString() + "\n" );
СТОП
Стр. 25/бл.5
i=0; i < slovo.Length;i++
4
1
slovo[i].Length>max
нет
а
Isl++;
i=0; i < slovo.Length;i++
slovo[i].Length=max
нет
да
richTextBox1.AppendText(slovo[i] + "\n")
richTextBox1.AppendText("Максимальная длина слова =" + max.ToString());
СТОП
ПУСК
int ii = 0;
richTextBox2.Clear();
FileStream f = new FileStream("h.int", FileMode.Open);
BinaryReader B_Reader = new BinaryReader(f);
long n = f.Length / 4;
long nn = n / 8;
richTextBox2.AppendText("Количество чисел =" +n.ToString());
int c;
i=0; i<n;i++
c = B_Reader.ReadInt32();
richTextBox2.AppendText("\n" + c.ToString());
1
1
2
1
3
1
i % 3 = 0
нет
да
ii = 0;
1
1
(i+1) % 3=0
нет
да
richTextBox2.AppendText("\n_______")
i / 3 < 1
нет
да
a0[ii] = c; ii++
i/3<2
i/3 >= 1
нет
да
a1[ii] = c; ii++
4
1
2
1
3
1
5
1
6
1
4
1
i/3<3
i/3 >= 2
нет
да
a2[ii] = c; ii++
i/3<4
i/3 >= 3
нет
да
a3[ii] = c; ii++
i/3<5
i/3 >= 4
нет
да
a4[ii] = c; ii++
i/3<6
i/3 >= 5
нет
да
a5[ii] = c; ii++
7
1
5
1
6
1
8
1
9
1
7
1
i/3<7
i/3 >= 6
нет
да
a6[ii] = c; ii++
i/3<8
i/3 >= 7
нет
да
a7[ii] = c; ii++
8
1
9
1
B_Reader.Close();
f.Close();
BinaryWriter Integerf = new BinaryWriter(new FileStream("f.int", FileMode.Create));
int p = 0;
i=0; i<3;i++
p = p + a0[i] * a1[i]
10
1
10
1
Integerf.Write(p);
p = 0;
i=0; i<3;i++
p = p + a1[i] * a2[i]
Integerf.Write(p);
p = 0;
i=0; i<3;i++
p = p + a2[i] * a3[i]
Integerf.Write(p);
p = 0;
11
1
11
1
i=0; i<3;i++
p = p + a3[i] * a4[i]
Integerf.Write(p);
p = 0;
i=0; i<3;i++
p = p + a4[i] * a5[i]
Integerf.Write(p);
p = 0;
i=0; i<3;i++
p = p + a5[i] * a6[i]
12
1
12
1
Integerf.Write(p);
p = 0;
i=0; i<3;i++
p = p + a6[i] * a7[i]
Integerf.Write(p);
p = 0;
i=0; i<3;i++
p = p + a7[i] * a0[i]
Integerf.Write(p);
Integerf.Close();
СТОП
ПУСК
int n = 1;
double p=1;
double a = 19;
double sumln = 0;
int c=0;
FileStream f = new FileStream("f.int", FileMode.Open);
richTextBox3.AppendText("\nКоличество чисел в f = " + n.ToString())
нет
true
c = H_Reader.ReadInt32();
да
richTextBox3.AppendText("\n" + c.ToString());
H_Reader.Close();
f.Close();
СТОП