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




Задачи, советы и ответы - часть 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)




    Содержание  Назад  Вперед