Уточнение п.3
3.1. Признак {Факт совпад. символа из новой строки с симв. исх. строки}=0 3.2. Для номера нового символа(j) от 1 до Колич._нов_символов. выполнить Если нов.сим.j=ст.сим.i, то признак =j 3.3.Eсли признак = 0, то а) Колич_нов_символов = Колич_нов_символов +1; б) нов.cим.[Колич_нов_символов] = ст.сим.[i] Обозначим: Старый сим.{символ из исходной строки} => s Колич_нов_символов => n Признак => jn Новый сим. => ns Колич_нов_символов => ks
Программа для этого алгоритма будет иметь вид
Program Psk; Var s: String; ns: String; i, j, ks, jn: Integer; Begin writeln('Введите строку'); readln(s); { п.1 } n: =length(s); ks: =0; { п.2 } For i: = 1 to n do { п.3 } begin jn: = 0; { п.3.1 } for j: = 1 to ks do {п.3.2} If ns[j]=s[i] then jn: =J; If jn=0 then {п.3.3} begin ks: = ks+1; ks[ks]: = s[i]; end; end; Writeln('Символы, входящие в исходную строку'); For i: = 1 to ks do Write(ns[i]); End. Пример 3. (продолжение примера 2). Подсчитать, сколько раз каждый символ встречается в исходном тексте. В алгоритм примера 2 вместо пункта 5 (Закончить) вставим новый: 5. Подсчет количества вхождений каждого символа в исходную строку. Чтобы сделать это, будем каждый символ новой строки сравнивать с символами исходной строки и подсчитывать количество совпадений. Уточняем алгоритм 5.1. Для j от 1 до Колич_нов_символов выполнить 5.2. Кол.=0 5.3. Для i от 1 до n выполнить Если нов.сим.j=ст.сим.i, то кол.=кол+1 5.4. Вывести кол. Для рассматриваемого случая полный текст программы приводить не будем. Фрагмент, помешенный ниже, должен быть вставлен в программу для примера 3 перед последним оператором (End.) {Подсчет количества вхождений символов} For j: = 1 to ks do {п. 5.1 } begin kol: = 0; {п. 5.2} For i: = 1 to n do {п. 5.3} If ns[j] = s[i] then kol: = kol + 1; {п. 5.4} writeln('Количество букв: ', ns[j], ' равно ', kol); end;
Пример 4. Ввести в ЭВМ строку из n символов латинского алфавита (n< 30). Расположить их по алфавиту. Воспользуемся тем, что буквы латинского алфавита 'A' – 'Z', 'a' –'z' имеют коды, значения которых возрастают. При этом для решения задачи можно применять алгоритм сортировки " пузырьком".
Program Sorts; var s: string; sr: char; n, i, k: integer; Begin writeln('Введите строку'); readln(s); n: = length(s); for k: = 1 to n-1 do for i: = 1 to n-k do if s[i]> s[i+1]then begin sr: =s[i]; s[i]: = s[i+1]; s[i+1]: = sr; end; writeln('Строка с упорядоченными символами: '); writeln(s); End.
Пример 5. Ввести в ЭВМ предложение. Подсчитать количество гласных в нем. В более общей постановке задачи необходимо определить, сколько раз встречаются в предложении символы из некоторого эталонного набора (согласные, звонкие согласные, цифры и т.д.). При разработке алгоритма решения этой задачи учтем, что гласные (вообще символы из произвольного набора) располагаются в разных местах кодировочной таблицы. Для подсчета их количества в программе необходимо задать строку гласных (эталонную строку), а затем определить, сколько раз символы эталонной строки встречаются в предложении.
Можно предложитьследующий алгоритм решения такой задачи. 1. Задать эталонную строку. 2. Ввести предложение. 3. Подсчитать количество символов эталонной строки в предложении 4. Закончить. Убедившись в правильности шагов этого алгоритма, уточним его и получим. 1.1 Задать Эталонную_строку. 1.2. m = Длина(Эталонной_строки). 2.1. Ввести Предложение. 2.2. n = Длина(Предложения). 3.1. Количество_символов = 0. 3.2. Для номера символа Предложения (i) от 1 до n выполнить 3.2.1. Для номера символа Эталонной_строки (j) от 1 до m выполнить Если Предложениеi = Эталонная_Строкаj то Количество_символов = Количество_символов + 1. 3.3. Вывести Количество_символов. 4. Закончить.
Программа для этого алгоритма приведена ниже.
Program Count_Gl; Var Predl, Gl: String; { Предложение и эталонная строка } n, m, i, j, kol: Integer; { Вспомогательные переменные }
Begin Gl: =’аеёиоуыэюяАЕЁИОУЫЭЮЯ’; {Строка гласных (эталонов)} m: =Length(Gl); WriteLn('Введите предложение'); ReadLn(Predl); n: = Length(Predl); kol: = 0; For i: =1 to n do For j: =1 to m do If Predl[i] = Gl[j] then kol: =kol + 1; Writeln('Количество гласных в предложении = ', kol); Writeln('Работа окончена. Нажмите клавишу ENTER'); Readln; End. Пример 6 (вариант примера 5). Ввести в ЭВМ предложение. Найти и вывести на экран наиболее редко встречающуюся в нем гласную. В этой задаче необходимо использовать несколько (массив) счетчиков: столько, сколько символов в строке эталонов. В начале подсчитывается, сколько раз каждый эталонный символ встречается в предложении, а затем применяется известный алгоритм нахождения минимума. При этом необходимо учесть, что тривиальное значение минимума, равное нулю, не может быть решением, так как такой символ вообще отсутствует в предложении.
Составим алгоритм. 1. Задать эталонную строку. 2. Ввести предложение. 3. Подсчитать, сколько раз каждый символ эталонной строки встречается в 4. Найти наиболее редкий символ и вывести его 5. Закончить. Убедившись в правильности шагов этого алгоритма, уточним его.
|