Обучающая программа по информатике

117300
знаков
7
таблиц
1
изображение

Содержание

Введение

Глава 1. Исследовательская часть

1.1 Целесообразность выбора языка программирования

1.2. Основные структуры языка программирования C#

1.3. Кодирование по методу четности / нечетности

1.4. Кодирование по методу Хэмминга

1.5. Машина Поста

Глава 2. Инструкция программиста

Глава 3. Инструкция пользователя

3.1 Использование программы StudyProgram для усвоения учебного материала по кодированию информации методом четности и методом Хэмминга

3.2 Использование обучающей программы StudyProgram для овладения навыками составления программ для машины Поста

Заключение

Список литературы

Приложение


Введение

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

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

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

Для создания курсового проекта использовался C# – новый язык программирования компании Microsoft, входящий в Visual Studio .Net (v.7).


Глава 1. Исследовательская часть   1.1 Целесообразность выбора языка программирования

В курсовом проекте была поставлена задача, реализация которой может быть произведена с помощью различных языков программирования. Но мы выбрали язык С#, входящий в Visual Studio .Net (v.7), так как он имеет ряд преимуществ, которые упрощают процесс создания приложений. Немаловажную роль в выборе языка сыграло то, что C# - лучший .NET-язык, так как он был специально спроектирован для .NET Framework.

C# создавался Microsoft, как основной язык для .NET Framework. Microsoft спроектировала C# таким образом, что бы С, С++ и Java-программисты смогли легко перейти на него. C# имеет корни в языках С, С++ и Java, поэтому такой переход не должен вызвать затруднений.

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

С# - первый язык, поддерживаемый версиями .NET Framework для других платформ.

Язык, который использует библиотеку классов .NET Framework (FCL) и управляется общеязыковой средой исполнения (CLR) является .NET-совместимым языком (язык, который поддерживает платформа .NET). Среди таких языков: Microsoft Visual Basic .NET (VB .NET), Microsoft Visual C++ .NET , а также COBOL, Eiffel, Jscript, RPG и другие. Как мы говорили ранее, C# был спроектирован специально для .NET Framework и содержит некоторую функциональность, которую вы не найдете в других языках.

Программист, привыкший к платформе Майкрософт, может представить себе C# как промежуточный вариант между C++ и Visual Basic, если рассматривать сложность языковых конструкций и возможности языка.

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

При создании языка в основу дизайна легла легкость использования, доминирующая над мощностью языка и скоростью выполнения. [7] Отсюда и сборщик мусора с управляемыми объектными ссылками, который автоматически освобождает за Вас память, отбирая при этом процессорное время. Вы также получаете безопасность работы с типами, а это, по мнению многих, является вторым важнейшим фактором избежания ошибок.
C# объектно-ориентированный язык, как и вся платформа .NET[7].

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

В C# представлена концепция пространств имен, аналогичная пакетам в Java. Это позволяет иерархически структурировать Вашу систему типов, делая код намного более понятным и позволяя избежать проблем с именованием. Вы можете рассматривать пространства имен как директории, а языковые типы как файлы в этих директориях.

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

Ввиду очень удобного объектно-ориентированного дизайна, C# является хорошим выбором для быстрого конструирования различных компонентов - от высокоуровневой бизнес логики до системных приложений, использующих низкоуровневый код[6]. Также следует отметить, что C# является и Web ориентированным - используя простые встроенные конструкции языка ваши компоненты могут быть легко превращены в Web сервисы, к которым можно будет обращаться из Internet посредством любого языка на любой операционной системе. Дополнительные возможности и преимущества перед другими языками приносит в C# использование передовых Web технологий, таких как: XML (Extensible Markup Language) и SOAP (Simple Object Access Protocol). Среда разработки Web сервисов позволяет программисту смотреть на существующие сегодня Web приложения, как на родные C# объекты, что дает возможность разработчикам соотнести имеющиеся Web сервисы с их познаниями в объектно-ориентированном программировании[6].

Как было показано выше, выбранный язык программирования наиболее удобен для выполнения поставленной задачи.

1.2. Основные структуры языка программирования C#

 

Классы

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

Синтаксис определения классов на С#, прост, особенно если вы программируете на C++ или Java. Поместив перед именем вашего класса ключевое слово class, вы вставляете члены класса, заключенные в фигурные скобки, например:

class Employee

{

private long employeeld;

}

Как видите, этот простейший класс с именем Employee содержит единственный член — employeeld. Заметьте: имени члена предшествует ключевое слово private — это модификатор доступа (access modifier).

Члены класса

Типы, определенные в CIS (Common Type System) поддерживаются как члены классов С# и бывают следующих видов.

·  Поле. Так называется член-переменная, содержащий некоторое значение. В ООП поля иногда называют данными объекта. К полю можно применять несколько модификаторов в зависимости от того, как вы собираетесь это поле использовать. В число модификаторов входят static, readonly и const.

·  Метод. Это реальный код, воздействующий на данные объекта (или поля).

·  Свойства. Их иногда называют "разумными" полями (smart fields), так как они на самом деле являются методами, которые клиенты класса воспринимают как поля. Это обеспечивает клиентам большую степень абстрагирования за счет того, что им не нужно знать, обращаются ли они к полю напрямую или через вызов метода-аксессора.

·  Константы. Как можно предположить, исходя из имени, константа — это поле, значение которого изменить нельзя.

·  Индексаторы. Если свойства — это "разумные" поля, то индексаторы - это "разумные" массивы, так как они позволяют индексировать объекты методами-аксессорами get и set. С помощью индексатора легко проиндексировать объект для установки или получения значений.

·  События. Событие вызывает исполнение некоторого фрагмента кода. События — неотъемлемая часть программирования для Microsoft Windows. Например, события возникают при движении мыши, щелчке или изменении размеров окна. События С# используют ту же стандартную модель публикации/подписки (publish/subscribe), что и в MSMQ (Microsoft Message Queuing) и асинхронной модели событий СОМ+, которая дает приложению средства асинхронной обработки событий. Но в С# это базовая концепция, встроенная в язык.

·  Операторы. Используя перегрузку операторов С#, можно добавлять к классу стандартные математические операторы, которые позволяют писать более интуитивно понятный код.

Массивы

Массивы в C# очень просты и похожи на массивы в C++. В C# имеется три основных типа массивов: одномерные, многомерные и неровные(jagged):
С одномерными массивами все как обычно:

Инициализация.

Инициализируются они также как в C++:

int[] array = new int[10];

int[] array = {1, 2, 3, 4, 5};

Доступ

Доступ к элементам производится с помощью оператора []:

int element = array[0];

Элементы нумеруются индексами от 0 до N - 1, где N - размер массива.
Многомерные массивы представляют собой многомерные кубы значений. Элементы таких массивов идентифицируются набором индексов - "координат" в многомерном пространстве. Каждое измерение имеет свою размерность, не зависящую от других. Отметим, что многомерные массивы являются важным отличием от других подобных языков (Java), ибо по сравнению с неровными массивами, обеспечивают гораздо большую производительность.


Инициализация

При инициализации размерности измерений указываются через запятую:

int[,] array = new int[10, 20];

int[,] array = {{1, 2}, {3, 4}};

Доступ

Доступ к элементам производится с помощью оператора [], в котором индексы также указываются через запятую:

int element = array[0, 2];

Элементы нумеруются наборами индексов, каждый из которых может принимать значение от 0 до N - 1, где N - размер соответствующего измерения массива.

Управляющие конструкции

Управляющие конструкции - это то средство, которое позволяет вам создавать алгоритмы. Стандартными управляющими конструкциями являются if, for, while goto. К тому же в C# есть много дополнительных конструкций: switch, do и foreach.

if..else

Блок if..else, как следует из названия, позволяет выполнять код при выполнении определенного условия.

if (a > b)

{

 Console.WriteLine("a > b");

}

else

{

 Console.WriteLine("a <= b");

}

Логическое выражение в скобках должно иметь тип bool (в отличие от C/C++, где выражение было целым). Если оно истинно, выполнится первый блок команд, если ложно - второй. При этом если какой-либо блок команд состоит лишь из одной команды, обрамляющие фигурные скобки можно опустить[8]:

if (serverObject != null)

 serverObject.Initialize();

Покажем несколько примеров:

// Идет проверка, чтобы избежать деления на 0

if (x != 0)

{

 d /= x;

}

else

 return;

// Проверяем, вернула ли процедура значение и, если нет, возвращаем null

if (command.Parameters["RETURN_VALUE"].Value != Convert.DBNull)

 return command.Parameters["RETURN_VALUE"].Value;

else

 return null;

Цикл for

Цикл for представляет цикл с инициализирующей командой, условием окончания и командой перехода.

ArrayList items = new ArrayList(); // Инициализируем список некоторым образом

CreateArray(items); // Выводим все его элементы по очереди

for (int i = 0; i < items.Count; i++)

{

Console.WriteLine("i[{0}] = {1}", i, items[i]);

}

Логика выполнения цикла следующая: сначала выполняется инициализирующая команда, далее идет шаг цикла: проверяется условие окончания, если оно ложно, то цикл прекращается и управление переходит на следующую за циклом команду, иначе выполняется тело цикла, а после него - команда перехода.

В простейшем случае цикл for оформлен следующим образом:

// Складываем все элементы массива

for (int i = 0; i < 10; i++)

sum += array[i];

Такая форма цикла используется, если вам нужно проитерироваться с целым параметром, указывающим номер итерации или если просто нужно выполнить действие некоторое количество (в нашем примере 10) раз.

while

Цикл while является циклом с предусловием: сначала проверяется определенное условие перехода, а затем выполняется итерация цикла. Синтаксис цикла while в общем случае следующий:

// Задаем число

int num = 678;

// Число разрядов - 0

int len = 0;

// считаем сколько разрядов в числе

while (num > 0)

{

 len++;

 num /= 10;

}

Console.WriteLine(len);

Семантика очень проста: проверяем условие перехода. Если оно истинно, то переходим к телу цикла и затем снова к проверке условия, иначе - прекращаем выполнение цикла.

switch

Оператор switch является расширенным оператором ветвления, который позволяет в зависимости от значения выражения перейти к выполнению определенного кода. По сути, он эквивалентен набору блоков if, но гораздо более оптимален.

Наиболее распространенным синтаксисом switch является следующий:

int a = 1;

switch (a)

{

case 0:

//Операторы, выполняющиеся если a = 0

Console.WriteLine("A = 0");

break;

case 1:

//Операторы, выполняющиеся если a = 1

Console.WriteLine("A = 1");

break;

default:

//Операторы, выполняющиеся, если ни один из явных случаев не подошел

Console.WriteLine("A <> 0 и A <> 1");

break;

}

Блок case x выполняется, если выражение, указанное в скобках после switch равно x. Блок default - если ни одно из case-выражений не выполнилось. Удобно switch использовать для обработки выражений перечислимых типов.

Для переходов между блоками можно использовать команды goto case и goto default.

do

Оператор do реализует цикл с постусловием. Суть этого цикла аналогична while, но условие выхода проверяется не до итерации, а после. Это иногда бывает удобным.

string s = "A, B, C, D";

do

{

 s = s.Substring(s.IndexOf(",") + 1);

} while (s.Length > 0);

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

Поля и методы

Объявление полей аналогично объявлению переменных и имеет вид:

<модификатор_доступности> <тип> <идент_поля>;

Существует несколько различных модификаторов доступа. Мы будем использовать только один – public. В качестве типа может использоваться любой из стандартных или пользовательских. Идентификатор принято начинать с буквы f с указанием, какое свойство реального объекта отражает это поле, например, fSpeed.

Если имя поля состоит из нескольких слов, то используется верблюжья нотация fMaxFloor. Например, объявление полей классов может иметь вид:

public int fLevel;

public int fPassenger;

public float fSpeed;

При объявлении методов используется конструкция вида:

<модиф_дост><тип_возвр_знач><идент_метода>(<формальн_парам>opt)

{

 <тело_метода>

}

Метод в процессе своей работы может не только изменять поля объекта, но и вычислять некоторые дополнительные значения. Тип возвращаемого методом значения и указывается вместо <тип_возвр_знач>.

Если возвращать значения не нужно, то в качестве типа возвращаемого значения указывается void.

Параметры методов бывают формальные и реальные. Формальные параметры используются при объявлении метода в круглых скобках, идущих за идентификатором метода. Реальные параметры передаются в метод при обращении к нему в круглых скобках. В случае если у метода есть параметры, его объявление будет иметь вид:

<модиф_дост><тип_возвр_знач> <идент_перем> (<список_форм_пар>)

{

<тело_цикла>

}

<список_формальных_параметров>::=<тип><идент>,<тип><идент>opt ..

Например, public void Move (byte level)

В качестве реального параметра в метод может передаваться константа, переменная, результат выполнения операции, значение возвращаемой функции и т.д. Единственное ограничение – тип реального параметра должен совпадать с типом формального параметра[9].

В случае использования простых типов для объявления формальных параметров значения передаются в метод, и даже если их в методе изменять, реальный параметр не изменится.

В случае, когда методу требуется вернуть более 1 значения, для 2, 3 и т.д. возвращаемого значения перед типом формального параметра, используемого для возвращения значения, ставится ключевое слово ref. В случае вызова такого метода перед реальным параметром также указывается ключевое слово ref, и реальный параметр в этом случае может быть только переменной.

1.3. Кодирование по методу четности / нечетности

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

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

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

При этом абсолютная избыточность будет выражаться количеством контрольных разрядов – k, а относительная избыточность – , где m – количество информационных разрядов.

Понятие корректирующей способности кода связывают с возможностью обнаружения и исправления ошибки. Количественно корректирующая способность кода определяется вероятностью обнаружения или исправления ошибки[4].

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

Кроме проверки по горизонтали контроль на четность и нечетность может проводиться и по вертикали.

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

Однако такая методика проверки не может обнаружить ошибки в случае двойного переброса (например, две единицы перебросились в ноль), что может привести к высокому уровню ошибок в некоторых передачах. Многоуровневая модуляция (когда проверка сигнала осуществляется по двум или трем битам) требует более сложной техники.

Проверка на четность/нечетность по одному биту также является неприемлемой и для многих аналоговых линий речевого диапазона из-за группирования ошибок, которое обычно происходит в линиях связи такого типа.

Двойная проверка на четность/нечетность является усовершенствованием одинарной проверки. В этой методике вместо бита четности в каждом символе определяется четность или нечетность целого блока символов. Проверка блока позволяет обнаруживать ошибки как внутри символа, так и между символами. Эта проверка называется также двумерным кодом проверки на четность. Она имеет значительное преимущество по сравнению с одинарной. С помощью такой перекрестной проверки может быть существенно улучшена надежность работы обычной телефонной линии, вероятность появления ошибки в которой составляет 10 . Однако, как ординарная, так и двойная проверка на четность означают увеличение накладных расходов и относительное уменьшение выхода информации для пользователя.

 Рассмотрим подробно способ нахождения одной ошибки. Если в математическом коде выделен один контрольный разряд, то к каждому двоичному числу добавляется один избыточный разряд. В этот разряд записывается 1 или 0 с таким условием, чтобы сумма цифр по модулю 2 была равна 0 для случая четности или 1 для случая нечетности. Появление ошибки в кодировании обнаруживается по нарушению четности / нечетности. При таком кодировании допускается, что может возникнуть только одна ошибка.

Пример реализации метода четности:

Число Контрольный разряд Проверка
10101011 1 0
11001010 0 0
10010001 1 0
11001011 0 1 – ошибка

Можно представить и несколько видоизмененный способ контроля по методу четности / нечетности. Длинное слово разбивается на группы, каждая из которых содержит n разрядов. Контрольные разряды – k, выделяются всем группам по строкам и столбцам согласно следующей схеме:

Увеличение избыточности приводит к тому, что появляется возможность не только обнаружить ошибку, но и исправить ее.

Например: число 1000111011010101110010101 представим по указанной выше схеме, получим:

1 0 0 0 1 0
1 1 0 1 1 0
0 1 0 1 0 0
1 1 1 0 0 1
1 0 1 0 1 1
0 1 0 0 1

Теперь, если при передаче было получено число:

1 0 0 0 1 0
1 1 0 1 1 0
0 1 0 0 0 0
1 1 1 0 0 1
1 0 1 0 1 1
0 1 0 0 1

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


1.4. Кодирование по методу Хэмминга

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

Предложенные Хэммингом регулярные методы построения кодов, корректирующих ошибки, имеют фундаментальное значение. Они демонстрируют инженерам практическую возможность достижения пределов, на которую указывали законы теории информации. Эти коды нашли практическое применение при создании компьютерных систем. Работа Хэмминга привела к решению проблемы более плотной упаковки для конечных полей. Он ввел в научный обиход важнейшие понятия теории кодирования – расстояние Хэмминга между кодовыми комбинациями в векторном пространстве, определяемом для двоичных кодов как количество позиций этих комбинаций с различными символами, и границы Хэмминга для исправляющей способности блочных корректирующих кодов. Граница Хэмминга для двоичных кодов рассчитывается по следующей формуле:

В этом выражении число ошибок e может быть исправлено корректирующим блочным кодом длиной N, имеющим М кодовых комбинаций (CjN – биномиальный коэффициент)[3].

Работа Хэмминга сыграла ключевую роль в последующем развитии теории кодирования и стимулировала обширные исследования, выполненные в последующие годы.

Коды Хэмминга позволяют не только обнаружить наличие ошибки, но и место ее нахождения и, следовательно, дают возможность ее исправить. Однако коды Хэмминга обладают меньшей избыточностью (по сравнению с кодированием по методу четности-нечетности), т.е. количеством дополнительных контрольных разрядов.

При передаче кода может быть искажен или не искажен любой символ. Если длина кода – n символов, то – полное количество комбинаций кода. По методике Хэмминга можно определить число информационных символов кода, обнаруживающего и корректирующего одиночную ошибку следующим образом:

, где

– число информационных символов в коде;

– число контрольных символов;

 – длина кода Хемминга.

Соотношение n, и  для кода Хэмминга можно представить в виде таблицы:

Таблица 2.2.a

 n 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

0 0 1 1 2 3 4 4 5 6 7 8 9 10 11 11

1 2 2 3 3 3 3 4 4 4 4 4 4 4 4 5

Предположим, что имеется код, содержащий m информационных и k контрольных разрядов. Все разряды, включая контрольные, разбиваются на k групп по определенным правилам, о которых будет сказано ниже. Каждая группа, содержащая один контрольный разряд, проверяется на четность. Пусть были проведены все k проверок. Если результат данной проверки свидетельствует об отсутствии ошибки, то записывается 0, если есть ошибка, то записывается 1. В результате получается последовательность, состоящая из k нулей и единиц. При отсутствии ошибки в коде получается последовательность нулей. Полученное k-разрядное двоичное число может содержать 2k различных комбинаций нулей и единиц. С помощью этой информации нужно определить ошибочный разряд в коде, содержащем m+k разрядов. Для того чтобы это было возможно должно выполняться неравенство:

2k  (m+k+1)

Определить максимальное значение m для данного k можно из следующей таблицы.

n 1,2,3,4… 8,…,15 16,…31
m 0,0,1,1… 4,…11 11,…26
k 1,2,2,3 4…4 5…5

Из таблицы видно, для 16-ти разрядного числа требуется 5 контрольных разрядов. В качестве сравнения, в случае модифицированного метода четности потребовалось бы 8 контрольных разрядов. Позиции контрольных разрядов в методе Хэмминга определены заранее, это разряды 1,2,4,8,… Разряды, входящие в каждую группу проверки представлены в следующей таблице (1-й разряд в каждой группе является контрольным).

номер группы проверки проверяемые разряды
1 1,3,5,7,9,11,13,15,…
2 2,3,6,7,10,11,14,15,18,19,22,23,…
3 4,5,6,7,12,13,14,15,20,21,22,23,…
4 8,9,10,11,12,13,14,15,24,…

Из таблицы видно, что если, например код Хэмминга содержит 9 разрядов, включая контрольные, то 1-я группа проверки содержит 1,3,5,7,9 разряды. 2-я группа проверки содержит 2,3,6,7 разряды. 3-группа проверки содержит 4,5,6,7 разряды и 4-я группа – 8,9 разряды. Каждой группе проверки приписывается 1, если проверка на четность обнаруживает ошибку и 0, если ошибки нет. Полученное двоичное число дает номер ошибочного разряда.

Код Хэмминга имеет существенный недостаток: при обнаружении любого числа ошибок он исправляет лишь одиночные ошибки. Например, избыточность семиэлементного кода Хэмминга равна 0,43. При увеличении значности кодовых комбинаций увеличивается число проверок, но уменьшается избыточность кода. К тому же код Хэмминга не позволяет обнаружить групповые ошибки. Длина пакета ошибок представляет собой увеличенную на единицу разность между именами старшего и младшего ошибочных элементов.

Рассмотрим в качестве примера 5-ти разрядное двоичное число 10011. В этом случае, как следует из вышеприведенной таблицы, 1-я группа проверки состоит из 1,3, и 5-го разрядов. 2-я группа проверки состоит из 2 и 3-го разряда. 3-я группа проверки состоит из 4 и 5-го разрядов. Результат проверки на четность 1-й группы дает 0 (101), проверка 2-й группы дает 0 (00), проверка 3-й группы дает 0 (11).

k1 = 1 + 0 + 1 = 0 – нет ошибки;

k2 = 0 + 0 =0 – нет ошибки;

k3 = 1 + 1 = 0 – нет ошибки.

Таким образом, данное число не содержит ошибки. Искусственно введем ошибку, заменив, например, 4-й разряд на 0. В этом случае 1, 2 и 3-я проверки дадут соответственно 0, 0, 1.

k1 = 1 + 0 + 1 = 0 – нет ошибки;

k2 = 0 + 0 =0 – нет ошибки;

k3 = 0 + 1 = 1 – ошибка.

Полученное двоичное число 100 дает номер ошибочного разряда, т.е. 4.



Информация о работе «Обучающая программа по информатике»
Раздел: Информатика, программирование
Количество знаков с пробелами: 117300
Количество таблиц: 7
Количество изображений: 1

Похожие работы

Скачать
37860
11
5

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

Скачать
102471
0
17

... следует курсор установит на отметку “Exit” и нажат клавишу <Enter>. 14. Для повторения работы необходимо выполнить последовательно пункты с 4-го по 13-й. §2.3 Текст анимационно-обучающей программы механической системы Program Water_Program; Uses Crt, Graph; Const { Vvod Unit Graphics } FunWeb='c:tpBgi'; Var Gd,Gm,I,X,Y,X1,Y1,XX,YY,Rad,J:Integer; Z,J1,J2,W,V,G:Integer; ...

Скачать
23917
0
21

... компьютера в обучении не ограничивается уроками. Уроки даже не самая важная составная часть этого процесса. Так же как и в случае с книгой, большую роль здесь играет самостоятельная работа с обучающей программой или базой знаний на домашнем компьютере. И наконец, в-третьих, взаимодействие учителя с учащимся через компьютерные сети - дистанционное обучение - также не является утопией. А для ...

Скачать
235892
25
6

... работе в графическом режиме предназ­начается для обучения студентов младших курсов Санкт-Петербургской государственной Академии аэрокосмического приборостроения навыкам программирования, а именно работе в графическом режиме языка Turbo-Pascal . Для работы с настоящей программой необходимо знание стандарта языка, интегрированной среды и элементарным навыкам работы с персональным компьютером . ...

0 комментариев


Наверх