Практика программирования (Бейсик, Си, Паскаль)


Задачи, советы и ответы - часть 2


  • [97,122] — строчные латинские буквы от "а" до "z";

  • [160,175] — строчные русские буквы от "а" до "п";

  • [224,239] — строчные русские буквы от "р" до "я";

  • [241,241] — буква "ё".

По этой же таблице можно установить, что смещения в кодах между выделенными группами малых букв и их прописными эквивалентами, соответственно, равны 32, 32, 80 и 1 позициям.

Совет 2 (QBasic)

Для выделения и изменения j-гo символа строки s удобнее всего воспользоваться функцией (оператором) MID$(S,J, 1). Анализ на принадлежность одному из кодовых интервалов, подлежащему замене, целесообразно оформить в виде переключателя SELECT CASE — END SELECT. Наконец, функции ASC и CHR$ понадобятся, соответственно, для преобразования символа в код ASCII и модифицированного кода в символ эквивалентной большой буквы.

В приводимых ниже двух вариантах программы преобразование к верхнему регистру выполнено в виде подпрограммы UP и функции UP$. Чтобы не портить аргумент функции и другие глобальные переменные головной программы, в теле функции объявлены свои локальные переменные в и j.

Совет 3 (Си)

Обратите внимание на то, что локальный массив ь, объявленный в теле функции up, имеет тип unsigned char, а не char. Объясняется это тем, что проверяемые коды (а они в теле функции выступают как числа) принадлежат диапазону [0,255].

Совет 4 (Паскаль)

Обратите внимание на то, что в теле функции не понадобился промежуточный массив b, т. к. параметр а передавался не по адресу (не var a:string), а по значению. Поэтому исходная строка оказалась в стеке, и ею можно было воспользоваться в теле функции, не опасаясь порчи параметра в вызывающей программе.

Программа 3_02.bas

REM Замена малых русских букв большими

DECLARE SUB UP (A$)

PRINT "Введите строку, содержащую малые и большие буквы"

INPUT "",A$

UP A$

PRINT A$ END

SUB UP(A$)

FOR j=l TO LEN(A$)

SELECT CASE MID$(A$,j,l)

CASE "a" TO "z": MID$(A$,j,1)=CHR$(ASC(MID$(A$, j , 1) )-32)




Начало  Назад  Вперед