Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

Подписываем
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Предоплата всего
Подписываем
17
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ
Учреждение образования «Гродненский государственный
университет имени Янки Купалы»
Факультет математики и информатики
Кафедра системного программирования и компьютерной безопасности
КАШКЕВИЧ ЖАННА ВАЛЕНТИНОВНА
ПРЕОБРАЗОВАНИЕ ПРОИЗВОЛЬНОГО ТЕКСТА В ЧИСЛОВОЕ ПРЕДСТАВЛЕНИЕ
Курсовая работа
студентки 3 курса
дневного отделения
Руководитель
Сюрин В.Н.
Гродно,2013
СОДЕРЖАНИЕ
ВВЕДЕНИЕ………………………………………………………………………….3
ОСНОВНАЯ ЧАСТЬ……………………………………………………………5
ДАННЫХ…………………………………………………………………….
3. МОДЕЛЬ ДВОИЧНОГО ФАЙЛА………………………………….5
4. СТАНДАРТНЫЙ ВВОД-ВЫВОД. ТЕКСТОВЫЙ ФАЙЛ……….6
5. СТАНДАРТНЫЕ ПРИЕМЫ ОБРАБОТКИ СТРОК……………..6
6. СРАВНЕНИЕ СТРОК………………………………………………..8
7. ПОСИМВОЛЬНАЯ И ПОСЛОВНАЯ ОБРАБОТКА……………...10
ЗАКЛЮЧЕНИЕ………………………………………………….
ЛИТЕРАТУРА…………………………………………………..
ВВЕДЕНИЕ
Задачей курсовой работы является разработка схемы преобразование произвольного текста в числовое представление.
Начиная с конца 60-х годов, компьютеры все больше стали использоваться для обработки текстовой информации и в настоящее время большая часть персональных компьютеров в мире (и наибольшее время) занято обработкой именно текстовой информации.
Традиционно для кодирования одного символа используется количество информации, равное 1 байту, то есть I = 1 байт = 8 битов. Если рассматривать символы как возможные события, то можно вычислить, какое количество различных символов можно закодировать:
N = = = 256.
Такое количество символов вполне достаточно для представления текстовой информации, включая прописные и строчные буквы русского и латинского алфавита, цифры, знаки, графические символы и пр.
Кодирование заключается в том, что каждому символу ставится в соответствие уникальный десятичный код от 0 до 255 или соответствующий ему двоичный код от 00000000 до 11111111. Таким образом, человек различает символы по их начертаниям, а компьютер - по их кодам. При вводе в компьютер текстовой информации происходит ее двоичное кодирование, изображение символа преобразуется в его двоичный код. Пользователь нажимает на клавиатуре клавишу с символом, и в компьютер поступает определенная последовательность из восьми электрических импульсов (двоичный код символа). Код символа хранится в оперативной памяти компьютера, где занимает один байт. В процессе вывода символа на экран компьютера производится обратный процесс - декодирование, то есть преобразование кода символа в его изображение.
Важно, что присвоение символу конкретного кода - это вопрос соглашения, которое фиксируется в кодовой таблице. Первые 33 кода (с 0 по 32) соответствуют не символам, а операциям (перевод строки, ввод пробела и так далее). Коды с 33 по 127 являются интернациональными и соответствуют символам латинского алфавита, цифрам, знакам арифметических операций и знакам препинания. Коды с 128 по 255 являются национальными, то есть в национальных кодировках одному и тому же коду соответствуют различные символы. К сожалению, в настоящее время существуют пять различных кодовых таблиц для русских букв (КОИ8, СР1251, СР866, Mac, ISO), поэтому тексты, созданные в одной кодировке, не будут правильно отображаться в другой.
В настоящее время широкое распространение получил новый международный стандарт Unicode, который отводит на каждый символ не один байт, а два, поэтому с его помощью можно закодировать не 256 символов, а N = 216 = = 65536 различных символов. Эту кодировку поддерживают последние версии платформы Microsoft Windows&Office (начиная с 1997 года).
ОСНОВНАЯ ЧАСТЬ
В отличие от обычной словесной формы, принятой в письменном виде, символьная информация хранится и обрабатывается в памяти ЭВМ в форме цифрового кода. Например, можно обозначить каждую букву числами, соответствующими ее порядковому номеру в алфавите: А - 01, Б - 02, В - 03,..., Ю - 31, Я - 32. Точно так же можно договориться обозначать точку числом 33, запятую - 34 и т.д. Так как в устройствах автоматической обработки информации используются двоичные коды, то обозначения букв надо перевести в двоичную систему. Тогда буквы будут обозначаться следующим образом: А - 000001, Б - 000010, В - 000011, Г - 000100,..., Э - 011110, Ю - 011111, Я - 100000. При таком кодировании любое слово можно представить в виде последовательности кодовых групп, составленных из 0 и 1. Например, слово ЭВМ выглядит так: 011110000011001110.
При преобразовании символов (знаков) в цифровой код между множествами символов и кодов должно иметь место взаимнооднозначное соответствие, т.е. разным символам должны быть назначены разные цифровые коды, и наоборот. Это условие является единственным необходимым требованием при построении схемы преобразования символов в числа. Однако существует ряд практических соглашений, принимаемых при построении схемы преобразования исходя из соображений наглядности, эффективности, стандартизации. Например, какое бы число ни назначили коду для знака О (не следует путать с числом 0), знаку 1 удобно назначить число, на единицу большее, чем код О, и т.д. до знака 9. Аналогичная ситуация возникает и при кодировке букв алфавита: код для Б на единицу больше кода для А, а код для В на единицу больше кода для Б и т. д. Таким образом, из соображений наглядности и легкости запоминания целесообразно множества символов, упорядоченных по какому-либо признаку (например, лексико-графическому), кодировать также с помощью упорядоченной последовательности чисел.
Другим важным моментом при организации кодировки символьной информации является эффективное использование оперативной памяти ЭВМ. Так как общеупотребительными являются примерно 100 знаков (сюда помимо цифр, букв русского и английского алфавитов, знаков препинания, арифметических знаков входят знаки перевода строки, возврата каретки, возврата на шаг и т.п.), то для, взаимно-однозначного преобразования всех знаков в коды достаточно примерно сотни чисел. Значение этого выбора заключается в том, что для размещения числа из этого диапазона в оперативной памяти достаточно одного байта, а не машинного слова. Следовательно, при такой организации кодировки достигается существенная экономия объема памяти.
При назначении кодов знакам надо также учитывать соглашения, касающиеся стандартизации кодировки. Можно назначить знаковые коды по своему выбору, но тогда возникнут трудности, связанные с необходимостью обмена информацией с другими организациями, использующими кодировку, отличную от нашей. В настоящее время существует несколько широко распространенных схем кодирования. Например, код BCD (Binary-Coded Decimal) -- двоично-десятичный код используется для представления чисел, при котором каждая десятичная цифра записывается своим четырехбитовым двоичным эквивалентом. Этот код может оказаться полезным, когда нужно преобразовать строку числовых знаков, например, строку из числовых знаков «2537» в число 2537, над которым затем будут-производиться арифметические действия. Расширением этого кода является EBCDIC (Extended Binary-Coded Decimal Interchange Code) -расширенный двоично-десятичный код обмена информацией, который преобразует как числовые, так и буквенные строки.
В ЭВМ типа PDP (или СМ) применяется код ASCII (AmericanJ Standard Code for Information Interchange) - американский стандартный код обмена информацией. Этот код генерируется некоторыми внешними устройствами (принтером, АЦПУ) и используется для обмена данными между ними и оперативной памятью ЭВМ. Например когда нажимаем на терминале клавишу G, то в результате этого действия код ASCII для символа G (1000111) передается в ЭВМ. A если надо этот символ распечатать на АЦПУ, то его код ASCII должен быть послан на печатающее устройство.
Все символы и буквы могут быть закодированы при помощи восьми двоичных символов. Наиболее распространенными таблицами являются таблицы ASCII с национальными расширениями, применяющиеся в DOS (и которые можно использовать для записи текстов в микропроцессорах), и таблицы ANSI, применяющиеся в WINDOWS. В таблицах ASCII и ANSI первые 128 символов совпадают. В этой части таблицы содержатся символы цифр, знаков препинания, латинские буквы верхнего и нижнего регистров и управляющие символы. Национальные расширения символьных таблиц и символы псевдографики содержатся в последних 128 кодах этих таблиц, поэтому русские тексты в операционных системах DOS и WINDOWS не совпадают.
Это преобразование является наиболее простым действием! Для этого нужно воспользоваться любым текстовым редактором. В том числе подойдет и простейшая программа notepad, входящая в состав операционной системы Windows. Подобные же редакторы присутствуют во всех средах программирования для языков, таких как СИ, Паскаль или Ява. Следует отметить, что наиболее распространенный текстовый редактор Word для простого преобразования текста в двоичный код не подходит. Этот тестовый редактор вводит огромное количество дополнительной информации, такой как цвет букв, наклон, подчеркивание, язык, на котором написана конкретная фраза, шрифт.
Если проанализировать организационные трудности, связанные с созданием единой системы кодирования текстовых данных, то можно прийти к выводу, что они вызваны ограниченным набором кодов (256). В то же время, очевидно, что если, кодировать символы не восьмиразрядными двоичными числами, а числами с большим разрядом то и диапазон возможных значений кодов станет на много больше. Такая система, основанная на 16-разрядном кодировании символов, получила название универсальной - UNICODE. Шестнадцать разрядов позволяют обеспечить уникальные коды для 65 536 различных символов - этого поля вполне достаточно для размещения в одной таблице символов большинства языков планеты.
Несмотря на тривиальную очевидность такого подхода, простой механический переход на данную систему долгое время сдерживался из-за недостатков ресурсов средств вычислительной техники (в системе кодирования UNICODE все текстовые документы становятся автоматически вдвое длиннее). Во второй половине 90-х годов технические средства достигли необходимого уровня обеспечения ресурсами, и сегодня мы наблюдаем постепенный перевод документов и программных средств на универсальную систему кодирования.
Для кодирования символьной или текстовой информации применяются различные системы: при вводе информации с клавиатуры кодирование происходит при нажатии клавиши, на которой изображен требуемый символ, при этом в клавиатуре вырабатывается так называемый scan-код, представляющий собой двоичное число, равное порядковому номеру клавиши. Номер нажатой клавиши никак не связан с формой символа, нанесенного на клавише. Опознание символа и присвоение ему внутреннего кода ЭВМ производятся специальной программой по специальным таблицам: ДКОИ, КОИ-7, ASCII.
Кодировка ASCII
Всего существует множество кодировочных таблиц. Рассмотрим сначала кодировочную таблицу ASCII (ASCII - American Standard Code for Information Interchange - Американский стандартный код для обмена информацией). Эта кодировка является наиболее известной. На практике обычно не бывает проблем с кодированием англоязычных текстов, поскольку первая половина кодировки стандартизована, но, к сожалению, для кодировки русских букв существует несколько кодировочных таблиц, что иногда создает проблемы при работе с текстами.
Всего с помощью таблицы кодирования ASCII можно закодировать 256 различных символов. Эта таблица разделена на две части: основную (с кодами от OOh до 7Fh) и дополнительную (от 80h до FFh, где буква h обозначает принадлежность кода к шестнадцатеричной системе счисления). Для кодировки одного символа из таблицы отводится 8 бит. При обработке текстовой информации один байт может содержать код некоторого символа - буквы, цифры, знака пунктуации, знака действия и т.д. Каждому символу соответствует свой код в виде целого числа. Один байт как набор восьми битов позволяет закодировать 256 символов, что вполне достаточно для работы сразу с двумя обычными языками, например английским и русским. При этом все коды собираются в специальные таблицы, называемые кодировочными. С их помощью производится преобразование кода символа в его видимое представление на экране монитора. В результате любой текст в памяти компьютера представляется как последовательность байтов с кодами символов.
Первая половина таблицы ASCII стандартизована. Она содержит управляющие коды (от 00h до 20h и 77h). Эти коды из таблицы изъяты, так как они не относятся к текстовым элементам. Здесь же размещаются знаки пунктуации и математические знаки: 2lh - !, 26h - &, 28h - (, 2Bh -+,..., большие и малые латинские буквы: 41h - A, 61h - а,...
Вторая половина таблицы содержит национальные шрифты, символы псевдографики, из которых могут быть построены таблицы, специальные математические знаки. Нижнюю часть таблицы кодировок можно заменять, используя соответствующие драйверы - управляющие вспомогательные программы. Этот прием позволяет применять несколько шрифтов и их гарнитур.
Дисплей по каждому коду символа должен вывести на экран изображение символа - не просто цифровой код, а соответствующую ему картинку, так как каждый символ имеет свою форму.
Описание формы каждого символа хранится в специальной памяти дисплея - знакогенераторе. Высвечивание символа на экране дисплея IBМ PC осуществляется с помощью точек, образующих символьную матрицу. Каждый пиксел в такой матрице является элементом изображения и может быть ярким или темным. Темная точка кодируется цифрой 0, светлая (яркая)- 1. Если изображать в матричном поле знака темные пикселы точкой, а светлые - звездочкой, то можно графически изобразить форму символа [17].
Люди в разных странах используют символы для записи слов их родных зыков. В наши дни большинство приложений, включая системы электронной почты и вэб-браузеры, являются чисто 8-битными, то есть они могут показывать и корректно воспринимать лишь 8-битные символы, согласно стандарту ISO-8859-1.Существует более 256 символов в мире (если учесть кириллицу, арабский, китайский, японский, корейский и тайский языки), а также появляются все новые и новые символы. И это создает следующие пробелы для многих пользователей:
Невозможно использовать символы различных наборов кодировок в одном и том же документе.
Так как каждый текстовый документ использует свой собственный набор кодировок, то возникают большие трудности с автоматическим распознаванием текста.
Появляются новые символы (например: Евро), вследствие чего ISO разрабатывает новый стандарт ISO-8859-15, который весьма схож со стандартом ISO-8859-1. Разница состоит в следующем: из таблицы кодировки старого стандарта ISO-8859-1 были убраны символы обозначения старых валют, которые не используются в настоящее время, для того, чтобы освободить место под вновь появившиеся символы (такие, как Евро). В результате у пользователей на дисках могут лежать одни и те же документы, но в разных кодировках.
Решением этих проблем является принятие единого международного набора кодировок, который называется универсальным кодированием или Unicode.
Кодировка Unicode
Данная кодировка решает пользовательские проблемы, но создает новые, технические проблемы: как пересылать символы в формате Unicode, использую 8-битные байты? 8-битные единицы являются наименьшими передаваемыми единицами в большинстве компьютеров, а также являющимися минимальными единицами, используемыми при сетевых соединениях на основе протокола TCP/IP. Использование 1-го байта для представления 1-го символа стало эпизодом истории (факт появления такой кодировки обусловлен тем, что компьютеры зародились в Европе и США, где долгое время обходились 96 символами).
Существует 4 основных способа кодировки байтами в формате Unicode:
UTF-8: 128 символов кодируются одним байтом (формат ASCII), 1920 символов кодируются 2-мя байтами ((Roman, Greek, Cyrillic, Coptic, Armenian, Hebrew, Arabic символы), 63488 символов кодируются 3-мя байтами (Китайский, японский и др.) Оставшиеся 2 147 418 112 символы (еще не использованы) могут быть закодированы 4, 5 или 6-ю байтами.
UCS-2: Каждый символ представлен 2-мя байтами. Данная кодировка включает лишь первые 65 535 символов из формата Unicode.
UTF-16:Является расширением UCS-2, включает 1 114 112 символов формата Unicode. Первые 65 535 символов представлены 2-мя байтами, остальные - 4-мя байтами.
USC-4: Каждый символ кодируется 4-мя байтами.
Получается, что 8 бит используются для кодирования европейских языков, а для китайского, японского и корейского языков много больше. Это может повлиять на объем занимаемого дискового пространства и на скорость передачи по сети. Для основных кодировок картина следующая (<b>K</b> (%) - увеличение дискового пространства и снижение скорости передачи по сети):
UTF-8: никаких изменений для американской ASCII, незначительное ухудшение (К = несколько %) для ISO-8859-1, К=50% для китайского, японского, корейского и К=100% для греческого и кириллицы.
UCS-2 и UTF-16: никаких изменений для китайского, японского, корейского; К=100% для американской ASCII, ISO-8859-1, греческого и кириллицы.
UCS-4: К=100% для китайского, японского, корейского; К=300% для американской ASCII, ISO-8859-1, греческого и кириллицы.
В итоге получается, что UTF-8 кодировка занимает меньше дискового пространства и позволяется передавать данные по сети с большей скоростью [10].
Unicode 3.0
Стандарт Unicode был разработан с целью создания единой кодировки символов всех современных и многих древних письменных языков. Каждый символ в этом стандарте кодируется 16 битами, что позволяет ему охватить несравненно большее количество символов, чем принятые ранее 7- и 8-битовые кодировки. Еще одним важным отличием Unicode от других систем кодировки является то, что он не только приписывает каждому символу уникальный код, но и определяет различные характеристики этого символа, например:
Весь диапазон кодов от 0 до FFFF разбит на несколько стандартных подмножеств, каждое из которых соответствует либо алфавиту какого-то языка, либо группе специальных символов, сходных по своим функциям.
3.МОДЕЛЬ ДВОИЧНОГО ФАЙЛА
Двоичный файл отличается от текстового тем, что данные в нем представлены во внутренней форме. А поскольку при внутреннем представлении используется двоичная система счисления, то «в честь ее» файлы и называются двоичными. По существу, двоичный файл является аналогом внутренней (оперативной, физической) памяти неограниченным массивом байтов с возможностью непосредственного обращения (произвольного доступа) к любой его части. Такая модель файла полностью совпадает с системой представлений, принятой в Си для работы с памятью на низком (физическом уровне).
Исходя из этих принципов, функции двоичного ввода-вывода fread и fwrite переносят содержимое памяти в двоичный файл «прозрачно», т.е. байт в байт без каких либо преобразований. Функции используются для перенесения данных из файла в память программы (чтение) и обратно (запись).
Особенностью этих функций является то, что для них безразличен (неизвестен) характер структуры данных в той области памяти, в которую осуществляется ввод-вывод (указатель void* buf). Функция fread читает, а функция fwrite пишет в файл, начиная с текущей позиции, массив из nrec элементов размерностью size байтов каждый, возвращая количество успешно прочитанных (записанных) элементов.
В Си для представления адресов используются переменные типа long, на которые можно распространить известное понятие указатель - указатель в файле. Такая образная аналогия вполне уместна и позволяет с общих позиций рассматривать структуры данных, размещенные в файлах. Указатель в файле не является типизированным, его тип никак не связан с типом адресуемых данных и он рассматривается как «чистый» физический адрес в файле.
4. СТАНДАРТНЫЙ ВВОД-ВЫВОД. ТЕКСТОВЫЙ ФАЙЛ.
Имеющийся в большинстве языков программирования стандартный символьный ввод-вывод соответствует работе программы в режиме командной строки (консольного приложения). Несмотря на то, что такой режим работы не имеет массового распространения, он остается актуальным для «внутреннего» программирования по следующим причинам:
5. СТАНДАРТНЫЕ ПРИЕМЫ ОБРАБОТКИ СТРОК.
Большинство программ, обрабатывающих строки, используют последовательный просмотр символ за символом посимвольный просмотр строки. Если же в процессе обработки строки предполагается изменение ее содержимого, то возможны два варианта:
Обработка символов с учетом особенностей их кодирования.
Некоторые программы используют свойства упорядоченности значений кодов латинских букв и цифр. Такое программирование является, по большому счету, машинно-зависимым, но ввиду «незыблемости» стандарта представления символов может быть отнесено к языку.
Получить символ десятичной цифры из значения целой переменной, лежащей в диапазоне 0..9:
int n; char c; c = n + '0';
Получить символ шестнадцатеричной цифры из значения целой переменной, лежащей в диапазоне 0..15:
if (n <=9) c = n + '0'; else c = n - 10 + 'A';
Получить значение целой переменной из символа десятичной цифры:
if (c >='0' && c <='9') n = c - '0';
Получить значение целой переменной из шестнадцатеричной цифры:
if (c >='0' && c <='9') n = c - '0';
else
if (c >='A' && c <='F') c = c - 'A' + 10;
Преобразовать маленькую латинскую букву в большую:
if (c >='a' && c <='z') c = c - 'a' + 'A';
Подсчет количества слов.
Нужно учесть, что программа не умеет просто «видеть слово», для нее необходимо формальное условие его обнаружения. Таковым может быть либо конец слова, либо его начало. Начало слова обнаруживается по сочетанию пары символов: текущий символ слова (не пробел), перед которым либо пробел, либо начало строки.
//--- Подсчет количества слов
int words(char c[]) {
for ( int nc=0,i=0;c[i]!=0;i++){ // Посимвольный просмотр строки
if (c[i]!=' ' && (i==0 || c[i-1]==' ')) nc++;
// начало слова - не пробел, начало строки или впереди пробел
// if (c[i]!=' ' && (c[i+1]==0 || c[i+1]==' ')) nc++;
// конец слова - не пробел, далее - конец строки или пробел
}
return nc; }
Удаление лишних пробелов.
Здесь уместно напомнить одно правило: количество индексов определяет количество независимых перемещений по массивам (степеней свободы). Если для входной строки индекс может изменяться в заголовке цикла посимвольного просмотра (равномерное «движение» по строке), то для выходной строки он меняется только в моменты добавления очередного символа. Кроме того, не нужно забывать «закрывать» выходную строку символом конца строки.
Удаление лишних пробелов при посимвольном переписывании
void nospace(char c1[],char c2[]) {
for ( int j=0,i=0;c1[i]!=0;i++) { // Посимвольный просмотр строки
if (c1[i]!=' ') { // Текущий символ не пробел
if (i!=0 && c1[i-1]==' ') // Первый в слове -
c2[j++]=' '; // добавить пробел
c2[j++]=c1[i]; // Перенести символ слова
} } // в выходную строку
c2[j]=0; }
6.СРАВНЕНИЕ СТРОК.
При работе со строками часто возникает необходимость их сравнения в алфавитном порядке. Простейший способ состоит в сравнении кодов символов, что при наличии последовательного кодирования латинских букв и цифр дает гарантию их алфавитного упорядочения (цифры, прописные латинские, строчные латинские). Так, например, работает стандартная функция strcmp.
//---- Сравнение строк по значениям кодов
int my_strcmp(unsigned char s1[],unsigned char s2[]) {
for ( int n=0; s1[n]!='\0' && s2[n]!='\0'; n++)
if (s1[n] != s2[n]) break;
if (s1[n] == s2[n]) return 0;
if (s1[n] < s2[n]) return -1;
return 1; }
Обратите внимание на то, что массивы символов указаны как беззнаковые. В противном случае коды с весом более 0x80 (символы кириллицы) будут иметь отрицательные значения и располагаться в алфавите «раньше» латинских, имеющих положительные значения кодов. Чтобы установить свой порядок следования символов в алфавите, символы расставляют в порядке убывания их «весов» и использовать порядковый номер символа в последовательности в качестве характеристики его «веса».
//---- Сравнение строк с заданными "весами" символов
int Carry(char c){
static char ORD[] = "АаБбВвГгДдЕе1234567890";
if (c=='\0') return 0;
for ( int n=0; ORD[n]!='\0'; n++)
if (ORD[n]==c) return n;
return n+1; }
int my_strcmp(char s1[],char s2[]){
int n; char c1,c2;
for (n=0; (c1=Carry(s1[n]))!='\0' &&(c2=Carry(s2[n]))!='\0'; n++)
if (c1 != c2) break;
if (c1 == c2) return 0;
if (c1 < c2) return -1;
return 1; }
7. ПОСИМВОЛЬНАЯ И ПОСЛОВНАЯ ОБРАБОТКА.
Последовательность символов в строке подчиняется некоторому закону следования, иначе говоря, формату. Например, строка, содержащая слова, может быть определена как последовательность цепочек символов слова, разделенных цепочками пробелов.
Одну и ту же программу обработки строки текста можно написать разными способами. Если речь идет о формате текстовой строки, то отслеживать его можно двумя способами :
//---- Поиск слова максимальной длины - посимвольная обработка
// Функция возвращает индекс начала слова или 1, если нет слов
// Логика переменной состояния n счетчик символов слова
int find(char s[]) {
int i,n,lmax,b;
for (i=0,n=0,lmax=0,b=-1; s[i]!=0; i++){
if (s[i]!=' ') n++; // символ слова увеличить счетчик
else { // перед сбросом счетчика
if (n > lmax) { lmax=n; b=i-n; }
n=0; // фиксация максимального значения
}}
// то же самое для последнего слова
if (n > lmax) { lmax=n; b=i-n; }
return b; }
//---- Поиск слова максимальной длины - пословная обработка
// Структурная логика 3 цикла: просмотр слов, пробелов и символов
int find(char in[]){
int i=0, k, m, b;
b=-1; m=0;
while (in[i]!=0) { // Цикл пословного просмотра строки
while (in[i]==' ') i++; // Пропуск пробелов перед словом
for (k=0;in[i]!=' ' && in[i]!=0; i++,k++); // Подсчет длины слова
if (k>m){ // Контекст выбора максимума
m=k; b=i-k; } // Одновременно запоминается
} // индекс начала
return b; }
По завершении посимвольного просмотра строки последнее слово (если после него нет пробела) оказывается необработанным. Поэтому контекст фиксации максимума повторяется после выхода из цикла.
ЛИТЕРАТУРА
1.Брайан, К.Практика программирования [Текст].- СПб:.Невский диалект, 2001.- 381 с.
2. Кнут, Д. Искусство программирования на ЭВМ [Текст]: Том 3. М:. Мир, 1978. 356 с.
3. Шень, А. Программирование: теоремы и задачи [Текст]. М.: Московский центр непрерывного математического образования, 1995.
4. Костерин В.В. Камаев В.А. Технологии программирования: Учебник для вузов. Высшая школа, 2005, 360 стр. ISBN 5-06-004870-5
5. Милов А.В. Основы программирования в задачах и примерах: Учебный курс. Фолио, 2002, 400 стр. ISBN 966-03-1717-4
6. Бондарев В.М., Рублинецкий В.И., Качко Е.Г. Основы программирования. Харьков: Фолио, Ростов н/Д: Феникс, 1997.
7. Семакин И.Г., Шестаков А.П. Основы программирования: Учебник. - М.: Мастерство, НМЦ СПО; Высшая школа, 2004. - 432 с.
8. Гладков В.П. Конспект лекций по программированию для начинающих: Учеб. пособие / Перм. гос. техн. ун-т. - Пермь, 1998. - 217 с.
9. Семакин И.Г., Шестаков А.П. Основы алгоритмизации и программирования: Учебник для сред. проф. образования / И.Г. Семакин, А.П. Шестаков. - М.: Издательский центр "Академия", 2008. - 400 с. (Допущено Министерством образования и науки Российской Федерации).
10. Абрамов С.А. и др. Задачи по программированию. - М.: Наука, 1988.