Элективный курс профильный Побитное кодирование информации. Элективный курс для профильной подготовки учеников 1111 классов Побитное кодирование информации
Скачать 92.5 Kb.
|
Элективный курс для профильной подготовки учеников 11—11 классов «Побитное кодирование информации» г. Саратов, 2010 г. Сурчалова Лариса Владимировна, учитель информатики МОУ «ЛПН», к.п.н., доцент кафедры информатики СарИПКиПРО Ножкин Алексей Юрьевич Пояснительная записка Творческое название: Программировать интересно! Количество часов на курс:16 Образовательная область: Информатика и информационные технологии Тип курса: профильный, предметно-ориентированный курс, направленный на развитие содержания предмета «Информационные технологии» Курс рассчитан на профильное образование в школах, лицеях, гимназиях по информатике и информационным технологиям в 10‑11 классах Идея курса: привить интерес к программированию, научить понимать, как кодируются двоичное представления чисел, символов, пиктограмм, как работает мышь. Обоснованность курса заключается в том, что умение программировать на хотя бы одном алгоритмическом языке позволяет осваивать самостоятельно любые языки программирования, что готовит учащихся к профессиональной деятельности в информационном обществе. Кроме того, подобные задачи встречаются на олимпиадах по информатике, а умение работать с одним устройством (мышь), поможет понять работу с другими внешними устройствами. Построение пиктограммы позволяет акцентировать знания машинных систем счисления и Алгебры логики. Особенностью курса является наличие большого количества очень интересных, специально подобранных задач, ранее не рассмотренных в учебной литературе Состав учебно-методического комплекта Учебно-методический комплект по Элективному курсу для профильной подготовки учеников 10—11 классов «Побитное кодирование информации» включает в себя учебное пособие (теоретически материал и задания для самостоятельной работы), презентации для лекций, дополнительную литературу. Задания в учебно-методическом комплекте разной сложности, что делает возможным личностно-ориентированный подход к учащимся. Ко всем заданиям даны подробные пояснения. Текущий контроль усвоения материала можно осуществить по результатам выполнения заданий, а итоговый контроль - по выполнению творческого задания и его защиты. Организация учебного процесса реализуется в виде уроков, большая часть из которых в виде практических работ на компьютере на алгоритмическом языке Паскаль. Программа курса. Коды ASCII Регистры букв. Шифрование. Битовое представление информации и логические операции. Программирование арифметических действий. Мышь. Модуль мыши. Пиктограмма Программирование событий Примечание. В элективном курсе учитывается ситуация, что учащиеся знают основные алгоритмические структуры и основы языка Паскаль. Курс «Побитное кодирование информации» позволяет глубоко понять основы машинного кодирования для разных видов информации. Поэтому изучение элективного курса в концентрическом аспекте делает возможным успешное усвоение языков программирования. Требования к знаниям учащихся После изучения курса учащиеся должны уметь: Выполнять побитную обработку информации. Кодировать пиктограммы машинных системах счисления. Решать задачи шифрования с применением операций Алгебры логики. Работать с модулем мыши, программировать её события. Тематическое планирование курса
Побитное кодирование информации Многие сложные вопросы кодирования информации легко понять, решая задачи. Как кодируются знаки письменности в таблице ASCII и почему любой текст можно представить в виде наборов из 0 и 1? Чем отличаются при кодировании прописные и строчные буквы? Зачем нужны логические операции, и какие задачи можно решить с их помощью? Каким образом зашифровать информацию? Как получить двоичный код целого числа самым коротким способом? Почему курсор мыши разный и как его изменить? В задачах, представленные ниже, можно концентрически рассмотреть при темы «Кодирование информации», «Строки», «Системы счисления», «Графика». Коды ASCII Задача 1. Распечатаем таблицу кодов ASCII, исключая управляющие символы с кодами 7-10 и 13. Например, в этой таблице шестнадцатиричный код символа 'N' - 4E, а 'я' - EF. Решение задачи program ascii; var i,j:integer; {параметры цикла} const stroka:string='0123456789ABCDEF'; {цифры шестнадцатиричной системы} begin write('':1); for i:=1 to length(stroka) do write(stroka[i]:3);{номера столбцов} for i:=0 to 15 do begin writeln; write (stroka[i+1]); {номера строк} for j:=0 to 15 do if (i*16+j<>10) and (i*16+j<>13) and (i*16+j<>9) and (i*16+j<>8) and (i*16+j<>7) {исключяем управляющие символы} then write(chr(i*16+j):3) else write(' ') end; end Задания для самостоятельной работы: 1. Закодировать свое имя в шестнадцатиричном и двоичном коде. 2. Определить двоичный код латинских букв 'D','d','E','e'. 3. Определить, в каком бите двоичного представления различаются заглавные и строчные буквы латинского алфавита. 4. Определить, в каких битах двоичного представления различаются буквы русского алфавита. .5. Вывести таблицу кодов с 16-ричной нумерацией строк и столбцов Регистр латинских букв Преобразуем прописные латинские буквы в строчные и обратно путем инвертирования 6-го бита в ASCII-коде буквы. В данной программе применяется операция XOR, поэтому приведем таблицу истинности, из которой видно, что единицей бит инвертируется: (i XOR 1) = NOT (i), а двукратное преобразование бита единицей возвращает его в исходное значение. A B A XOR B (A XOR B) XOR B 0 0 0 0 0 1 1 0 1 0 1 1 1 1 0 1 Напомним что, 2^n=exp(n*ln(2)), а в двоичном представлении - одна единица и n нулей, например 32=2^5=100000. Биты в байте нумеруются справа налево от 0 до 7, например, двоичный код буквы N в таблице ASCII: 0 1 0 0 1 1 1 0 двоичный код буквы N 7 6 5 4 3 2 1 0 нумерация битов в байте Решение задачи program registr; var s:string; c:char; i,j:integer; {функция инвертирования n-го бита в байте ASCII-кода буквы} function caps(c:char;n:integer):char; begin caps:= chr(ord(c) xor round(exp(n*ln(2))) ); end; begin writeln('введите строку'); readln(s); for i:=1 to length(s) do {цикл замены регистра всех букв в строке} s[i]:=caps(s[i],5); writeln(s); end. Результат исполнения Question qUESTION Задание для самостоятельной работы: 5. Рассмотреть инвертирование 0-го бита в символах 'B' и 'C' таблицы ASCII. 6. Рассмотреть инвертирование 0-го бита в символах 'Ж' и 'З' таблицы ASCII. Шифрование В предыдущей задаче инвертировался один шестой бит, а здесь мы рассмотрим шифрование строки путем инвертирования k младших битов в ASCII-коде символа. Решение задачи program code_k; const k=4; var s:string; c:char; i,j:integer; {функция инвертирования n-го бита в байте ASCII-кода буквы} function caps(c:char;n:integer):char; begin caps:= chr(ord(c) xor round(exp(n*ln(2)))); end; begin writeln('введите строку'); readln(s); for j:=0 to k do {инвертирование j-го бита} begin for i:=1 to length(s) do {изменение каждого символа в строке} s[i]:=caps(s[i],j); writeln(s); end; for j:=k downto 0 do {инвертирование j-го бита} begin writeln(s); for i:=1 to length(s) do {изменение каждого символа в строке} s[i]:=caps(s[i],j); end; writeln(s); end. Результат исполнения введите строку Question { исходная строка } Ptdruhno { инвертируется 0-й бит } Rvfpwjlm { инвертируется 1-й бит } Vrbtsnhi { инвертируется 2-й бит } ^zj|{f`a { инвертируется 3-й бит } Njzlkvpq { инвертируется 4-й бит } Njzlkvpq { результат } ^zj|{f`a { инвертируется 4-й бит } Vrbtsnhi { инвертируется 3-й бит } Rvfpwjlm { инвертируется 2-й бит } Ptdruhno { инвертируется 1-й бит } Question { инвертируется 0-й бит } Операции сдвига Программа демонстрирует действие функции «SHL - сдвиг влево» на i позиций, что соответствует умножению на 2^i и «SHR - сдвиг вправо» на i позиций, что соответствует целочисленному делению на 2^i. Решение задачи program shr_shl; var i:byte; begin for i:=0 to 5 do writeln(i,34:3,34 shl i:5,34 shr i:5); end. Результат исполнения для числа 34 I 34 shl shr 0 34 34 34 1 34 68 17 2 34 136 8 3 34 272 4 4 34 544 2 5 34 1088 1 Задание для самостоятельной работы: 7. Составить программу, которая демонстрирует действия логических операций AND, OR, XOR, NOT над целыми числами. 8. Получить результат действия логических функций над целыми числами 17 и 16 в двоичном представлении и объяснить результат. Двоичное умножение В программе демонстрируется умножение десятичных чисел типа байт без применения операции умножения. Решение задачи program mult1; var b1,b2:byte; w1:word; i:integer; begin writeln('введите числа меньшие 256'); readln(b1,b2); w1:=0; for i:= 0 to 7 do if ((b2 and (1 shl i))<>0) then {провека i-го бита сомножителя на равенство единице} w1:=w1+(b1 shl i);{прибавляем к сумме множимое, увеличенное в 2^i раз} writeln(w1); end. Результат исполнения 45 2 90 Задание для самостоятельной работы: 9. Выполнить умножение столбиком для чисел 45 и 2 в двоичном представлении. Что проще: умножить 45 на 2 или 2 на 45? 10. Как перевести целое число в двоичное с помощью логических операций? Умножение столбиком Умножение десятичных чисел типа байт без применения операции умножения c демонстрацией двоичных кодов. Решение задачи program mult2; var b1,b2:byte; w1:word; i,j:integer; procedure binprint(b:word;d:byte);{вывод числа в двоичном формате} var i:integer; begin for i:=d-1 downto 0 do if (b and (1 shl i))<>0 then write('1') else write('0'); writeln; end; begin write('введите множимое b1=');readln(b1); write('введите множитель b2=');readln(b2); w1:=0; write('':8); binprint(b1,8); {вывод множимого в двоичном формате} write('':8); binprint(b2,8); {вывод множителя в двоичном формате} write('':8); writeln('--------'); {подведем черту для умножения столбиком} for i:= 0 to 7 do {цикл по каждому биту множителя} begin if ((b2 and (1 shl i))<>0) then begin w1:=w1+(b1 shl i); {формируем произведение} for j:=1 to 8-i do write(' '); binprint(b1,8); {очередное слагаемое, из которого составлено произведение} end; end; writeln('----------------'); binprint(w1,16); {результат в двоичном формате} writeln(w1); {результат в десятичном формате} end. Результат исполнения введите множимое b1=13 введите множитель b2=5 00001101 13 00000101 5 -------- 00001101 13*1=13 00001101 13*4=42 ---------------- 0000000001000001 65 "Мышь" Программа прорисовывает побитно закодированную пиктограмму с курсором мыши 16х16 пикселей и управляет его перемещением. В программе применяется модуль мыши, описанный ниже. Решение задачи program mouse; uses mouse_n,graph; {шестнадцатеричный код пиктограммы} const a:array [1..16]of word=(0,$0180,$018,$1A58,$2424,$2424,$1A58, $0240,$0420,$0420,$0810,$0810,$0810,$0660,$0188,$00f0); var b,x,y:word; i,j,grDriver,grMode,ErrCode: Integer; function point (x,y:integer):word; begin if getpixel(x,y)=0 then point:=1 { если цвет точки - черный то 1 } else point:=0; { иначе 0 } end; procedure draw_mice(x,y:word); { рисует по пикселам курсор мыши} begin { без следа } for i:=1 to 16 do for j:=1 to 16 do begin if (a[i]shr (j-1) and point(j+x,i+y))=1 then putpixel(j+x,i+y,5) else putpixel(j+x,i+y,0); end; end; begin grDriver := Detect; InitGraph(grDriver, grMode,''); ErrCode := GraphResult; if ErrCode = grOk then begin resetmouse(b); { инициализируем мышь } b:=0; x:=320; { центр экрана} y:=240; while b<>1 do { пока не нажата левая кнопка мыши } begin draw_mice(x,y); { нарисовать курсор мыши } delay(20); draw_mice(x,y); { стереть курсор мыши (нарисовать черным цветом)} mousestate(x,y,b); { возвращает состояние мыши } end; end else Writeln('Graphics error:', GraphErrorMsg(ErrCode)); end. Задание для самостоятельной работы: 11. Изменить цвет фона в программе. 12. Изменить программу так, чтобы мышь оставляла след. 13. Закодировать пиктограмму для курсора мыши. Модуль функций мыши В данном модуле запрограммированы две функции мыши, которые используются в предыдущей задаче . Решение задачи unit mouse_n; interface procedure mousestate(var x,y,b:word); {положение курсора на экране} procedure resetmouse(var result:word); {инициализация мыши} implementation procedure mousestate(var x,y,b:word); {x,y - координаты, b - состояние кнопок мыши} var x1,y1,b1:word; begin asm mov ax,3 {в регистр ax помещаем номер функции драйвера мыши} int 33h {передача управления драйверу мыши} mov x1,cx {получение координат и состояние мыши} mov y1,dx mov b1,bx end; x:=x1;y:=y1;b:=b1; end; procedure resetmouse(var result:word); var result1:word; begin asm xor ax,ax {обнуляем регистр ax} int 33h {передача управления драйверу мыши} mov Result1,ax {результат инициализации} end; result:=result1; end; end. Пиктограмма С помощью 0 и 1 нарисуем картинку 16х16 знаков и закодируем пиктограмму в шестнадцатиричном коде, каждой тетраде двоичных цифр ставя в соответствие шестнадцатиричную цифру. Решение задачи 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 $0000 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 $0180 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 $0180 0 0 0 1 1 0 1 0 0 1 0 1 1 0 0 0 $1A58 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 $2424 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 0 $2424 0 0 0 1 1 0 1 0 0 1 0 1 1 0 0 0 $1A58 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 $0420 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 $0420 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 $0810 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 $0810 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 $0810 0 0 0 0 0 1 1 0 0 1 1 0 0 0 0 0 $0660 0 0 0 0 0 0 0 1 1 0 0 0 1 0 0 0 $0188 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 $00F0 Варианты творческих работСоставить набор двоичных и шестнадцатеричных чисел для пиктограммы 16x16 в виде некоторой буквы . Составить набор двоичных и шестнадцатеричных чисел для пиктограммы 16x16 в виде рисунка. С помощью мыши построить простейшие графические примитивы: (линия, прямоугольник), то есть построить простейший графический редактор. ЛИТЕРАТУРАШауцукова Л.З. Информатика: 3-е изд. – М. Просвещение, 2003. Игошин В.И. Математическая логика и теория алгоритмов.-Саратов: Изд-во Сарат. ун-та, 1991 ПриложениеТаблица кодовA SSCII |