Пятница, 24.11.2017, 14:17
ОТКРЫТАЯ ИНФОРМАТИКА
Приветствую Вас Гость | RSS
Главная Строковые переменные Регистрация Вход
Меню сайта

Форма входа

Поиск

Календарь
«  Ноябрь 2017  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
27282930

Строковые переменные

Величина строкового  типа рассматривается как массив, элементами которого являются отдельные символы. Это позволяет обратиться к тому или иному символу строки как к элементу массива — по имени строковой величины и его (символа) номеру

Функции:

ord - возвращает код символа

chr - возвращает символ по коду

Готовимся к  ЕГЭ (С4)

1. На вход программе сначала подаются строчные английские буквы. Ввод символов заканчивается точкой (другие символы, отличные от "a”.."z”, во входных данных отсутствуют). Требуется написать как можно более эффективную программу, которая будет печатать буквы, встречающиеся во входной последовательности,  в порядке увеличения их встречаемости. Каждая буква должна быть напечатана один раз. Точка при этом не учитывается.

Если какие-то символы встречаются одинаковое количество раз,  то они выводятся в алфавитном порядке. Например, пусть на вход подаются следующие символы: baobaba, в данном случае программа должна вывести: oab. 

Анализ решения.

1. Найдем частоту вхождения каждой буквы. Для этого создадим дополнительный массив на 26 элементов (т.к. в латинском алфавите 26 букв). Коды букв можно использовать в качестве индексов массива: код i-й буквы будет определяться с помощью функции ord и элемент массива, с индексом, равным коду, увеличивается на 1.

2. Необходимо вывести буквы в порядке возрастания их частоты. Используем 2-й массив с именем буквы. При его наличии можно, сортируя числовой массив кол_букв (то есть располагая значения в порядке возрастания), одновременно соответственно менять и массив с буквами. Далее (после сортировки), так как нужно вывести только те буквы, которые имелись во входной последовательности, то необходимо пропустить буквы, число вхождений которых равно нулю, и вывести остальные (они будут напечатаны в порядке увеличения их встречаемости).

var a:array[0..25] of integer;
m:array[0..25] of 'a'..'z';
c: char;
i, j, k:integer;
begin
for i:= 0 to 25 do
begin
a[i]:=0;
m[i]:=chr(ord('a')+i);
end;
read(c);
while c<>'.' do
begin
a[ord(c) - ord('a')] := a[ord(c) - ord('a')] + 1;
read(c);
end;
for i:= 1 to 25 do
for j:= 0 to 24 do
if a[j]>a[j+1] then
begin
k:=a[j]; c:=m[j];
a[j]:=a[j+1]; m[j]:=m[j+1];
a[j+1]:=k; m[j+1]:=c
end;
i:=0;
while a[i]=0 do i:=i+1;
for j:=i to 25 do
write(m[j]);
writeln
end.


Домашнее задание:Жилин А.С. Типовые варианты задач к тематическому разделу "Основы программирования" смотреть
Для любознательных:
В.В. Пупышев "50 задач по началам программирования" смотреть


Наш опрос
Сколько времени вы обычно проводите за комьпютером?
Всего ответов: 970

Друзья сайта
  • Министерство образования РБ
  • Официальный портал подготовки к ГИА и ЕГЭ
  • Всероссийская олимпиада школьников
  • Федеральный портал Российского образования
  • Институт развития образования РБ

  • Статистика

    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0

    Copyright MyCorp © 2017 Бесплатный конструктор сайтов - uCoz