Обработка на знакова информация. Знаков тип char - урок 10

декември, 06, 2011
  • Учебни помагала

Алгоритмично направление: Обработка на знакова информация., Елементи на езика С++

Брой часове:4

Цели:

  1. Подробно запознаване със знаците от клавитатурата и обработката им от програми на С++  Осмисляне на ролята на вътрешното представяне на знаците от клавиатурата. Кодова таблица ASCII. Запоснаване с представянето на разделителите интервал, знак за край на ред и табулатор в програмите написани на езика С/С++. 
  2. Запознаване с практическото използване на знаковия тип char (стойности, деклариране, въвеждане и извеждане на величини от тип char, операции с величини от тип char).
  3. Анализиране на често срещания проблем:“Преобразуване на въведена от клавиатурата малка латинска буква в главна (и отпечатването) и обратното преобразуване на главна латинска буква в малка” и реализирането му програмно.
  4. Осмисляне на разликата между цифра (представена със знак) и числовата и стойност и като следствие намиране на числова стойност на цифра.

Учебно съдържание:

 Основни понятия: знак, знаков тип, код на знак, кодова таблица ASCII, вътрешно представяне на знак, числова стойност на цифра.

Структура на учебното съдържание:

1. Знаците от клавиатурата и обработката им от програми на езика С++

2. Знаков тип char.

  • стойности от тип char; 
  • декларация на величини от тип char;
  • въвеждане  на променливи от тип char. Функцията cin.get().
  • извеждане на величини от тип char;
  • операции с величини от тип char.

3. Преобразуване на малка латинска буква в главна и обратно.

Въпроси и задачи за контрол и самоконтрол:

Зад. 1 Да се състави програма numchar, която прочита от клавиатурата латинска буква и отпечатва кой номер поред е тя в латинската азбука.

Примерен вход:

А

Примерен изход:

1

Зад. 2 Да се състави програма num, която прочита от клавиатурата две цифри, преобразува ги като числа и отпечатва тяхното произведение.

Примерен вход:

5 6

Примерен изход:

30

В традиционното обучение по програмиране изучаването на знаковия тип и реализацията на програми за обработка на знаковя информация, се прави на един по-късен етап, когато са препосасени основните оператори на езика. При такъв подход, се пристъпва към реализация на по-сериозни алгоритми и анализирането на детайли, като например преобразуването на малка буква в главна и обратно или получаването на числовата стойност на цифра, остава на заден план. Това води до недостатъчно доброто усвояване на алгоритмите за обработка на текстова информация и поставя пред учениците психологическа бариера при решаването на подобни проблеми. Понякога има случаи на тотално отказване от решаването на подобни задачи по време на състезание или самостоятелна работа.

Запознаването на учениците със знаковия тип още на този етап, предизвиква детайлно разглеждане на елементарните проблеми на представянето и обработката на текстове. Обръща се по-сериозно внимание на вътрешното представяне на стойностите от тип char. Това е моментът, в който учениците могат да осмислят, че реалното представяне на знаците в паметта всъщност е като цели числа и само интерпретацията им при въвеждане и извеждане е различна. Това се постига лесно като се предложи на учениците решаването на следните задачи:

Зад. 1: Да се състави програма SIZECHAR, която отпечатва размера на променлива от тип char в байтове.

Решение:

Тук ще използваме операцията sizeof, с помощта на която ще изведем на екрана количеството памет в байтове, което се заделя за деклариране на променлива от тип char.

//sizechar.cpp

#include <iostream.h>

void main()

{

   char ch;

  cout<<sizeof(ch)<<endl;

}

Задача 2: Да се състави програма CHARCODE, която прочита от клавиатурата буква и отпечатва нейния ASCII-код.

Решение:

Тук ще използваме операцията за преобразуване на типове, за да можем да изведем на екрана не самата буква, а числовата стойност на променливата ch.

//charcode.cpp

#include <iostream.h>

void main()

{

   char ch;

   cin.get(ch);

   cout<<(int)ch<<endl;

}

Използвайки така написаната програма бихме могли да намерим кода на всеки един от знаците, въвеждани от клавиатурата. Въведете програмата, компилирайте я, и намерете кодовете на малката и голяма латинска буква а.

Задача 3: Да се състави програма CODECHAR, която прочита от клавиатурата цяло число от 0 до 255 и отпечатва буквата, чийто ASCII-код е това число.

Към задачите са приведени и решенията, които ясно описват начина, по който преподавателят трябва да поснесе решението на разглежданите проблеми на учениците си. В посочените решения се използват операциите от предишната тема и ако учениците се оставят да експериментират известно време с написаните от тях самите програми, те добиват отлична представа за това как изглеждат знаците от клавиатурата, интерпретирани в програма на езика С/С++.

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

Представянето на всеки един от тези технически проблеми чрез самостоятелна програма, води до по-доброто им усвояване от учениците.

Следващата задача трябва да бъде разглеждането на операциите със стойности от тип char. Най-подходящ пример за приложение на аритметичните операции при обработка на текст е намирането на следващата буква от азбуката. По нататък могат да се предложат задачи за кодиране на текст по някаква схема.

Казаното до тук може да се отдели в самостоятелно занятие от два учебни часа, за да може да се осмисли от учениците и улегне като знание.

Следващите два учеби часа е добре да бъдат изцяло посветени на проблемите с преобразуване на знаците, за които стана дума по-горе. При преобразуването на малки букви в главни и обратно, е добре да се предизвикат учениците чрез наблюдение да стигнат до извода за последователното разположение на латинските букви в таблицата ASCII, да забележат къде се намират малките и къде главните букви и да предложат решение за тяхното преобразуване. За целта е добре да се решат колективно Задача 73 и Задача 74 от Приложение 1.

Двете задачи могат да се обединят в едно: т. е. ако е въведена малка буква, се отпечатва главна, а ако е въведена главна, се отпечатва малка