Обучающая программа по информатике
Целесообразность выбора языка программирования. Основные структуры языка программирования. Кодирование по методу четности/нечетности, по методу Хэмминга. Машина Поста. Инструкция программиста и пользователя. Использование программы StudyProgram.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 27.02.2009 |
Размер файла | 294,7 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
this.Controls.Add(this.label6);
this.Controls.Add(this.button4);
this.Controls.Add(this.button3);
this.Controls.Add(this.label4);
this.Controls.Add(this.label3);
this.Controls.Add(this.textBox4);
this.Controls.Add(this.textBox3);
this.Controls.Add(this.button2);
this.Controls.Add(this.button1);
this.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(204)));
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Name = "Even_uneven";
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Even_uneven";
this.TopMost = true;
this.Load += new System.EventHandler(this.Form1_Load);
this.groupBox1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private void Form1_Load(object sender, System.EventArgs e)
{
Generation();
}
private void button1_Click(object sender, System.EventArgs e)
{
ChangeChVoprosov();
Prav=Convert.ToInt32(textBox4.Text);
if (ch==0 || ch==2 || ch==4 || ch==6) Prav++;
ChangePrav();
ch=0;
Generation();
}
private void button2_Click(object sender, System.EventArgs e)
{
ChangeChVoprosov();
Prav=Convert.ToInt32(textBox4.Text);
if (ch==1 || ch==3 || ch==5 || ch==7) Prav++;
ChangePrav();
ch=0;
Generation();
}
private void button4_Click(object sender, System.EventArgs e){this.Close();}
private void button3_Click(object sender, System.EventArgs e)
{
A4 = new Help(1); A4.ShowDialog();
}
}
}
Help
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
namespace Study_Programs
{
public class Help : System.Windows.Forms.Form
{
private System.Windows.Forms.Label label1;
private System.Windows.Forms.ComboBox comboBox1;
private System.Windows.Forms.RichTextBox richTextBox1;
private System.Windows.Forms.Button button1;
private System.ComponentModel.Container components = null;
public Help(byte n)
{
InitializeComponent();
comboBox1.SelectedIndex=n;
}
protected override void Dispose( bool disposing )
{
if(disposing) if(components != null)components.Dispose();
base.Dispose( disposing );
}
#region Windows Form Designer generated code
private void InitializeComponent()
{
this.label1 = new System.Windows.Forms.Label();
this.comboBox1 = new System.Windows.Forms.ComboBox();
this.richTextBox1 = new System.Windows.Forms.RichTextBox();
this.button1 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// label1
//
this.label1.Font = new System.Drawing.Font("MS Reference Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(204)));
this.label1.Location = new System.Drawing.Point(56, 0);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(280, 24);
this.label1.TabIndex = 0;
this.label1.Text = "Выберите интересующий Вас раздел";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// comboBox1
//
this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.comboBox1.Font = new System.Drawing.Font("MS Reference Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(204)));
this.comboBox1.Items.AddRange(new object[] {
"Программирование машины Поста",
"Кодирование по методу четности\\нечетности",
"Кодирование по методу Хэмминга"});
this.comboBox1.Location = new System.Drawing.Point(8, 24);
this.comboBox1.Name = "comboBox1";
this.comboBox1.Size = new System.Drawing.Size(376, 23);
this.comboBox1.TabIndex = 1;
this.comboBox1.SelectedIndexChanged += new System.EventHandler(this.comboBox1_SelectedIndexChanged);
//
// richTextBox1
//
this.richTextBox1.Font = new System.Drawing.Font("MS Reference Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(204)));
this.richTextBox1.Location = new System.Drawing.Point(8, 56);
this.richTextBox1.Name = "richTextBox1";
this.richTextBox1.ReadOnly = true;
this.richTextBox1.Size = new System.Drawing.Size(376, 184);
this.richTextBox1.TabIndex = 2;
this.richTextBox1.Text = "";
//
// button1
//
this.button1.Font = new System.Drawing.Font("MS Reference Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(204)));
this.button1.Location = new System.Drawing.Point(160, 248);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(80, 24);
this.button1.TabIndex = 3;
this.button1.Text = "Выход";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// Help
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.BackColor = System.Drawing.SystemColors.InactiveBorder;
this.ClientSize = new System.Drawing.Size(394, 280);
this.ControlBox = false;
this.Controls.Add(this.button1);
this.Controls.Add(this.richTextBox1);
this.Controls.Add(this.comboBox1);
this.Controls.Add(this.label1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.MaximizeBox = false;
this.Name = "Help";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Help";
this.TopMost = true;
this.ResumeLayout(false);
}
#endregion
private void button1_Click(object sender, System.EventArgs e){this.Close();}
private void comboBox1_SelectedIndexChanged(object sender, System.EventArgs e)
{
string temp;
switch(comboBox1.SelectedIndex)
{
case (0):
{
richTextBox1.Text="";
temp="Машина Поста (как и машина Тьюринга) является одним из способов формализации понятия алгоритма. Машина Поста является абстрактной машиной, предназначенной для доказательства различных утверждений о свойствах программ для них. Машина Поста является полностью детерминированной машиной, читающей начальные данные и, после выполнения программы, выдающей результат. На содержательном уровне машина Поста представляет собой бесконечную ленту, разделенную на одинаковые клетки, каждая из которых может быть либо пустой либо заполненной меткой, вдоль которой может перемещаться головка. За один такт или за одну команду головка может переместиться на одну клетку вправо или влево (или остаться на месте). Кроме того головка может записать в клетку, над которой она находится, метку (если ее там не было) или стереть метку (если она там была). В результате работы машина Поста перерабатывает содержимое ленты в соответствие с заданной программой.В общем виде отдельная команда машины Поста имеет следующий вид: n,K,m1,m2; где n - порядковый номер команды, К - тип команды, m1, m2 - порядковые номера следующих команды. Имеется шесть типов команд машины Поста, которым для удобства можно дать номера от 1 до 6. Ниже дано описание команд машины Поста.\n1 - Движение головки на одну клетку вправо и переход к команде m1.\n2 - Движение головки на одну клетку влево и переход к команде m1.\n3 - Нанесение метки в ячейку и переход к команде m1.\n4 - Стирание метки в ячейке и переход к команде m1.\n5 - Проверка наличия метки в клетке, над которой находится головка. Если метка отсутствует, то управление передается с номером m1, если метка есть, то с номером m2.\n6 - Остановка машины.\nПример команды машины Поста: 1,1,2,0;. Данная команда имеет порядковый номер 1, тип команды - 1 (движение головки на одну клетку вправо). После выполнения команды управление передается команде, имеющей порядковый номер 2.\nРассмотрим пример простой программы, которая стирает первую метку, записанную на ленте. Предположим, ";
richTextBox1.Text = temp + "что в начале работы головка находится над крайне левой ячейкой ленты. Поставленная задача может быть выполнена с помощью следующего набора команд.\n* 1,5,2,4; 1-я команда.\n* 2,1,3,0; 2-я команда.\n* 3,5,2,4; 3-я команда.\n* 4,4,5,0; 4-я команда.\n* 5,6,0,0; 5-я команда.\nРазберем работу программы.\n1-я команда - это команда типа 5, т.е. условный переход. Если ячейка пустая, то управление передается команде 2, в противном случае - 4-й команде.\n2-я команда - это сдвиг головки на одну ячейку вправо и передача управления 3-й команде.\n3-я команда - это опять условный переход. Если метка отсутствует, то возврат ко второй команде и переход на 4-ю в противном случае.\n4-я команда стирает метку (очевидно, она там есть, т.к. мы попадаем на 4-ю команду только при наличии метки) и передает управление 5-й команде, которая является командой остановки машины.\nПорядок записи и выполнения программы следующий:\n1.В окно «Входная строка машины Поста» введите произвольную строку, состоящую из нулей и единиц, для которой поставленная задача имеет смысл. Например, если задача состоит в стирании 1-й метки, то, чтобы проверить правильность работы программы, во входной строке должна присутствовать хотя бы одна метка, т.е. единица.\n2.В нижележащее окно введите в соответствии с выше перечисленными правилами набор команд, решающих поставленную задачу.\n3.Нажмите кнопку «GO», после чего записанные команды будут выполнены и в окне «Выходная строка» появится результат работы машины Поста в виде выходной строки символов, состоящей из нулей и единиц.\nВ качестве упражнения задайте произвольную входную строку и введите рассмотренную выше программу, стирающую 1-ю метку. Запустите программу на выполнение. Результат работы программы покажите преподавателю.";
break;
}
case (1):
{
richTextBox1.Text="";
temp="Понятие двоичного кода.\nДля контроля правильности передачи информации, а также как средство шифрования информации используются различные коды. Коды, использующие для передачи информации два различных элементарных сигнала, называются двоичными. Эти сигналы удобно обозначать символами 0 и 1. Тогда кодовое слово будет состоять из последовательности нулей и единиц.\nПри выполнении арифметических операций в цифровом автомате правильный результат будет получен только в случае, если машина работает без нарушений. При возникновении какой-либо ошибки в двоичном коде результат операции будет неверным, однако пользователь об этом не узнает, если не будут предусмотрены меры, сигнализирующие о появлении ошибки. То есть должна быть разработана определенная система контроля работы цифрового автомата. Для этой цели и служат различные методы кодирования двоичной информации. Кодирование по методу четности-нечетности. В случае кодирования по методу четности-нечетности к каждому двоичному числу добавляется один избыточный разряд и в него записывается 1 или 0 с таким условием, чтобы сумма цифр в числе была по модулю 2 равна 0 в случае кодирования по методу четности и 1 - по методу нечетности. Другими словами число единиц в двоичном числе (вместе с контрольным разрядом) должно быть четным числом в случае четности и нечетным - в случае нечетности. Появление ошибки в двоичном коде обнаружится по нарушению этого правила. Например, число 10011011 будет ошибочным в случае кодирования по четности, так как число единиц в числе нечетно и равно 5. При таком кодировании допускается, что может возникнуть только одна ошибка. Очевидно, что если число содержит две ошибки (или вообще четное число ошибок) то его код по методу четности будет правильным. То же самое можно сказать и о кодировании по методу нечетности. Пример реализации метода четности:\nI.Цифровой разряд - 1011101\nКонтрольный разряд - 1\nПризнак правильности числа - 0\n\nII.Цифровой разряд - 1110100\nКонтрольный разряд - 0\nПризнак правильности числа - 0\n\nIII.Ц";
richTextBox1.Text = temp + "ифровой разряд - 1000011\nКонтрольный разряд - 0\nПризнак правильности числа - 1\n\nIV.Цифровой разряд - 1110111\nКонтрольный разряд - 1\nПризнак правильности числа - 1.\nПризнак правильности равный 0 означает, что код числа правильный и 1 - неправильный. Такое кодирование не позволяет в случае появления ошибки определить какой именно разряд является ошибочным. Избыточность информации при таком кодировании минимальна и равна одному биту (один дополнительный разряд). Можно представить видоизмененный метод контроля по методу четности. Цифровые разряды двоичного числа разбиваются на группы, каждая из которых содержит одинаковое количество разрядов. Контрольные разряды добавляются к каждой группе по строкам и по столбцам. Увеличение избыточности информации (вместо одного дополнительного разряда для 9 разрядного числа мы имеем 6 дополнительных разрядов) приводит к тому, что появляется возможность не только обнаружить наличие ошибки, но и место ее возникновения.";
break;
}
case (2):
{
richTextBox1.Text="";
temp="Как и в последнем варианте метода четности, коды Хэмминга позволяют не только обнаружить наличие ошибки, но и место ее нахождения и следовательно дают возможность ее исправить. Однако, в отличие от предыдущего методы, коды Хэмминга обладают меньшей избыточностью, т.е. количеством дополнительных контрольных разрядов. Предположим, что имеется код, содержащий m информационных и k контрольных разрядов. Все разряды, включая контрольные, разбиваются на k групп по определенным правилам, о которых будет сказано ниже. Каждая группа, содержащая один контрольный разряд, проверяется на четность. Пусть были проведены все k проверок. Если результат данной проверки свидетельствует об отсутствии ошибки, то записывается 0, если есть ошибка, то записывается 1. В результате получается последовательность, состоящая из k нулей и единиц. При отсутствии ошибки в коде получается последовательность нулей. Полученное k-разрядное двоичное число может содержать 2k различных комбинаций нулей и единиц. С помощью этой информации нужно определить ошибочный разряд в коде, содержащем m+k разрядов. Для того, чтобы это было возможно должно выполняться неравенство:2^k=>(m+k+1)\nОпределить максимальное значение m для данного k можно из следующей таблицы.\n n|1,2,3,4…|8,…,15|16,…,31|…|\nm|0,0,1,1…|4,…,11|11,…,26|…|\nk | 1,2,2,3 | 4,…,4 | 5,…,5 |…|\nИз таблицы видно, для 16-ти разрядного числа требуется 5 контрольных разрядов. В качестве сравнения, в случае модифицированного метода четности потребовалось бы 8 контрольных разрядов. Позиции контрольных разрядов в методе Хэмминга определены заранее, это разряды 1,2,4,8,… Разряды, входящие в каждую группу проверки представлены в следующей таблице (1-й разряд в каждой группе является контрольным).\n\nНомер группы проверки - 1.\nПроверяемые разряды - 1,3,5,7,9,11,13,15,…\n\nНомер группы проверки - 2.\nПроверяемые разряды - 2,3,6,7,10,11,14,15,18,19,22,23,…\n\nНомер группы проверки - 3.\nПроверяемые разряды - 4,5,6,7,12,13,14,15,20,21,22,23,…\n\nНомер группы проверки - 4.\n";
richTextBox1.Text = temp + "Проверяемые разряды - 8,9,10,11,12,13,14,15,24,…\nИз таблицы видно, что если например код Хэмминга содержит 9 разрядов, включая контрольные, то 1-я группа проверки содержит 1,3,5,7,9 разряды. 2-я группа проверки содержит 2,3,6,7 разряды. 3-группа проверки содержит 4,5,6,7 разряды и 4-я группа - 8,9 разряды. Каждой группе проверки приписывается 1, если проверка на четность обнаруживает ошибку и 0, если ошибки нет. Полученное двоичное число дает номер ошибочного разряда. Рассмотрим в качестве примера 5-ти разрядное двоичное число 10011. В этом случае, как следует из вышеприведенной таблицы, 1-я группа проверки состоит из 1,3, и 5-го разрядов. 2-я группа проверки состоит из 2 и 3-го разряда. 3-я группа проверки состоит из 4 и 5-го разрядов. Результат проверки на четность 1-й группы дает 0 (101), проверка 2-й группы дает 0 (00), проверка 3-й группы дает 0 (11). Таким образом, данное число не содержит ошибки. Искусственно введем ошибку, заменив, например, 4-й разряд на 0. В этом случае 1, 2 и 3-я проверки дадут соответственно 0, 0, 1. Полученное двоичное число 100 дает номер ошибочного разряда, т.е. 4.";
break;
}
}
}
}
}
Error
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
namespace Study_Programs
{
public class Error : System.Windows.Forms.Form
{
private System.Windows.Forms.Button button1;
private System.Windows.Forms.Label label1;
private System.Windows.Forms.PictureBox pictureBox1;
private System.ComponentModel.Container components = null;
public Error(string error)
{
InitializeComponent();
label1.Text=error;
}
protected override void Dispose( bool disposing )
{
if(disposing) if(components != null) components.Dispose();
base.Dispose( disposing );
}
#region Windows Form Designer generated code
private void InitializeComponent()
{
System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Error));
this.button1 = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.pictureBox1 = new System.Windows.Forms.PictureBox();
this.SuspendLayout();
//
// button1
//
this.button1.Font = new System.Drawing.Font("MS Reference Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(204)));
this.button1.Location = new System.Drawing.Point(136, 56);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(72, 24);
this.button1.TabIndex = 0;
this.button1.Text = "OK";
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// label1
//
this.label1.Font = new System.Drawing.Font("MS Reference Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(204)));
this.label1.Location = new System.Drawing.Point(48, 8);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(272, 40);
this.label1.TabIndex = 1;
this.label1.Text = "label1";
this.label1.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
//
// pictureBox1
//
this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image")));
this.pictureBox1.Location = new System.Drawing.Point(8, 16);
this.pictureBox1.Name = "pictureBox1";
this.pictureBox1.Size = new System.Drawing.Size(32, 32);
this.pictureBox1.TabIndex = 2;
this.pictureBox1.TabStop = false;
//
// Error
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.BackColor = System.Drawing.SystemColors.InactiveBorder;
this.ClientSize = new System.Drawing.Size(338, 88);
this.ControlBox = false;
this.Controls.Add(this.pictureBox1);
this.Controls.Add(this.label1);
this.Controls.Add(this.button1);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
this.Name = "Error";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "Error";
this.TopMost = true;
this.ResumeLayout(false);
}
#endregion
private void button1_Click(object sender, System.EventArgs e){this.Close();}
}
}
Подобные документы
Изучение общей структуры языка программирования Delphi: главные и дополнительные составные части среды программирования. Синтаксис и семантика языка программирования Delphi: алфавит языка, элементарные конструкции, переменные, константы и операторы.
курсовая работа [738,1 K], добавлен 17.05.2010Использование в операционной системе UNIX языка программирования СИ. Требования к квалификации программиста. Механизм ветвления по условиям, циклы, составные инструкции. Особенности языка СИ. Доступ к памяти компьютера через использование указателей.
презентация [108,6 K], добавлен 22.05.2015Выбор языка программирования и его обоснование. Определение системных требований. Схема алгоритма и программа на языке Qbasic. Разработка руководства пользователя. Способы конструирования программ. Особенности и принципы динамического программирования.
курсовая работа [398,8 K], добавлен 21.01.2014Порядок описание процесса разработки модели для разрешения задачи программирования с помощью средств языка программирования. Структуры данных и основные принципы их построения. Этапы компьютерного моделирования. Этапы и значение написания программы.
курсовая работа [19,5 K], добавлен 19.05.2011Особенности объектно-ориентированного программирования. Основные возможности языка программирования Java, классификация платформ. Создание программы, обеспечивающей вычисление арифметических выражений. Руководство пользователя и характеристика функций.
курсовая работа [1,2 M], добавлен 07.07.2012Разработка программы для поиска пути в лабиринте с возможностью задания входа и выхода, наглядное представление решений. Использование языка логического программирования Prolog. Данные и методы решения. Пользовательский интерфейс, листинг программы.
реферат [14,3 K], добавлен 15.10.2012Разработка экспертной системы по выбору языка программирования для данного программного обеспечения. Выбор и обоснование механизма вывода решения. Дерево базы знаний экспертной системы. Программа формирования основного меню, руководство пользователя.
курсовая работа [1,9 M], добавлен 15.08.2012Разработка программы автоматизации процесса проверки знаний учащихся. Использование языка программирования Borland Delphi 7.0, его свойства, компоненты для работы со строками. Создание обучающих тестов на знание лексики и грамматики английского языка.
курсовая работа [521,0 K], добавлен 06.03.2016Общая характеристика и структурная схема приложения, требования к нему и функциональные особенности, сферы практического применения. Обоснование выбора языка программирования. Описание интерфейса и инструкция пользователя. Проведение листинга программы.
дипломная работа [1,0 M], добавлен 10.07.2017Характеристика структурированного языка программирования С, его основных структурных компонентов, области памяти, библиотеки. Методы поиска в массивах данных. Описание программы, функции сортировки и меню выбора, последовательного и бинарного поиска.
курсовая работа [1,7 M], добавлен 19.05.2014