Суббота, 27.04.2024, 10:52
Информатика и математика в Плесской школе
Приветствую Вас Гость | RSS
Меню сайта
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа

Коды символов

    Очень большой класс задач на символьные переменные проще решать, используя коды символов в кодовой таблице. По этому я рассмотрю несколько типовых, на мой взгляд, задач.
Для решения  этих задач, не плохо знать интервалы букв и цифр:
Русские заглавные: 192 ≤ i ≤ 223
Русские строчные: 224 ≤ i ≤ 255
Английские заглавные: 65 ≤ i ≤ 90
Английские строчные: 97 ≤ i ≤ 122
Цифры: 48 ≤ i ≤ 57
Разница в кодах между заглавной и строчной -32
Напомню, что для работами с кодами нам потребуются две функции: функция Ord(S) – определяет порядковый номер символа, и   функция Chr(i) – определяет символ с порядковым номером i.
 Используя цикл с параметром можно просмотреть коды всех символов в кодовой таблице. Для удобства чтения  кодовой таблицы воспользуемся оператором GotoXY, который устанавливает текстовый курсор в указанное место на экране. У нас получается 10 столбиков по 24 строки в каждом.
program bukw;
Uses crt;
var i, x,y:integer;
begin
x:=1;y:=1;
for i:=30 to 255 do begin
gotoxy(x,y);
writeln(i,'-',chr(i),'; ');
y:=y+1;
if (y mod 25 = 0) then begin
              x:=x+8;
              y:=1;
             end;

end;
End.


Задача 1.  Составить программу  которая считает сколько русских и сколько английских букв в строке введенной с клавиатуры. В данном примере две переменные  S и S1 увеличиваются в зависимости от того в каком интервале находится код i-го символа.
Program n1;
uses crt;
var a:string;
    b,s,s1,i:integer;
begin
     clrscr;
     writeln('введи строку');
     readln(a);
     s:=0;
     s1:=0;
     for i:=1 to length(a) do 
      begin
       b:=ord(a[i]);
       if(b>=65)and(b<=90)or (b>=97)and(b<=122)then then s:=s+1;
       if(b>=192)and(b<=255)then s1:=s1+1;
     end;
     writeln(s,'-английских букв');
     writeln(s1,'-русских букв');
end.

В принципе интервалы можно задавать в виде множеств. Причем в первом случае код символа используется как элемент множества:
           if (b in [65..90]) or (b in [97..122]) then… 
Во втором случае сам символ используется как элемент множества:
           if (a[i] in ['А'..'Я'])  or   (a[i] in ['а'..'я']) then…
    Задача 2. Составить программу заменяющую  все заглавные буквы на строчные. В строке вводятся русские и латинские буквы вразнобой.  Идея решения заключается в том, что разница между кодами строчных и заглавных букв постоянна. Так как заглавные буквы стоят в кодовой таблице впереди строчных то достаточно к коду заглавной буквы прибавить 32, то мы получим код строчной буквы. А затем заменяем в строке i-ый символ на новый при помощи операции присваивания.

Program n2;
uses crt;
var a:string;
    b,i:integer;
begin
     clrscr;
     writeln('введи строку');
     readln(a);
     for i:=1 to length(a) do 
       begin
         b:=ord(a[i]);
         if(b<=90)and(b>=65)or(b<=223)and(b>=192)  then 
                                              begin                                                     
                                                 b:=b+32;
                                                 a[i]:=chr(b);
                                              end;
       end;
     writeln(a);
end.

Задача 3. С клавиатуры вводится строка из заглавных русских букв. Подсчитать сколько каждых букв по отдельности в этой строке. (Например: А-10, Б-2, В-4 и т.д.) Идея решения заключается в следующем: так как считать нужно только русские заглавные буквы, нам достаточно массива из 33 ячеек, в которых будем хранить количество тех или иных букв. Что бы получить порядковый номер буквы в русском алфавите, то есть индекс ячейки массива,  необходимо из кода символа вычесть 191 (и наоборот, чтобы из номера буквы в алфавите получить код буквы в кодовой таблице необходимо прибавить 191). Мы перебираем буквы и если это  заглавная русская буква, то содержимое ячейки под номером данной буквы увеличиваем на единицу. При выводе массива  добавлено условие,  те буквы которые не встретились в строке, на экран не выводятся.
Program n3;
uses crt;
var a:string;
    s:array[1..33] of integer;
    b,i:integer;
begin
     clrscr;
     write('введи строку{русские заглавные}'); readln(a);
     for i:=1 to length(a) do 
               begin
                b:=ord(a[i]);
               if(b>=192)and(b<=223)then s[b-191]:=s[b-191]+1;
               end;
    for i:=1 to 33 do if (s[i]<>0) then 
                          writeln(chr(i+191),' - ', s[i]);
end.

 Задача 4. Составить программу – генератор паролей из английских заглавных, строчных букв и цифр. 
Вспомним как в паскале генерируются случайные числа. 
m :=RANDOM (А) 
случайное число из интервала [0; А)
m :=RANDOM(B-A)+A; 
случайное число из интервала [A ; B) 
m :=RANDOM(B-A+1)+A; 
случайное число из интервала [A ; B]
Например:
Случайное число из интервала [10 ; 30]. 
А = 10,  В = 30, 
подставим в формулу
m :=RANDOM(B-A+1)+A; 
m :=RANDOM(30-10+1)+10; 

такую запись нужно упростить 
m :=RANDOM(21)+10;
В данном примере переменная k определяет вид знака: заглавная, строчная или цифра. k:=random(3); дает случайное число от 0 до 2 включительно. 0- число генерируется из интервала заглавных букв, 1- строчных, 2 – цифр. А затем полученное случайное число из определенного интервала преобразуется в символ и добавляется к паролю.
program n4;
Uses crt;
var s:string;
   i,n,k:integer;
begin
   for i:=1 to 10 do begin
   k:=random(3);
   if k=0 then n:=random(25)+65;
   if k=1 then n:=random(25)+97;
   if k=2 then n:=random(9)+49;
   s:=s+chr(n);
   end;
writeln(s);
End.

Поиск
Календарь
«  Апрель 2024  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
2930
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Учительский портал
    Copyright MyCorp © 2024