Навигация по странице:
|
Задачник с исправлением. Сборник содержит задания по языку программирования Паскаль 1, 3, 6, 8, 9, 10, 13 и ориентирован на версию, реализованную в наиболее распространенном компиляторе Turbo Pascal 0 7, 11, 15, 18
|
Название |
Сборник содержит задания по языку программирования Паскаль 1, 3, 6, 8, 9, 10, 13 и ориентирован на версию, реализованную в наиболее распространенном компиляторе Turbo Pascal 0 7, 11, 15, 18
|
Анкор |
Задачник с исправлением.doc |
Дата |
24.04.2017 |
Размер |
0.88 Mb. |
Формат файла |
|
Имя файла |
Задачник с исправлением.doc |
Тип |
Документы
#2935
|
страница |
7 из 17 |
|
Пояснения к программе
Положим, что слова состоят не более чем из десяти букв, а в тексте не более 100 слов. Для выравнивания длины слов используется константа Pusto, представляющая строку из десяти пробелов. Ввод строки посимвольно организован во внешнем цикле While, выполняющемся до тех пор, пока вводится символ, отличный от точки. При вводе исходный текст представляется в виде массива слов A, и в начале в каждое L-ое слово записывается константа Pusto. Во внутреннем цикле While формируется очередное слово, введенный символ помещается в j-ую позицию L-ого слова. Этот цикл выполняется до тех пор, пока не встретится ограничитель слова — запятая (для последнего слова — точка).
После формирования массива A выполняется сортировка слов в алфавитном порядке, соседние слова сравниваются и если они не упорядочены, то выполняется перестановка через промежуточное слово R. Для выполнения полной сортировки одномерного массива слов используются два вложенных цикла, причем в результате каждого выполнения внутреннего цикла по переменной j одно слово занимает окончательное место в отсортированной последовательности. Возможно, что слова будут упорядочены до выполнения всех возможных проходов, поэтому при каждом проходе с помощью переменной NoSwap выявляется факт отсутствия перестановок и выполняется досрочное завершение сортировки.
program Tekst_1;
const
Pusto = ' ';
Dlina = 10; Predel = 100;
Type
Slovo = Array [ 1 .. Dlina ] of Char;
Tekst = Array [ 1 .. Predel ] of Slovo;
Var
A : Tekst; {исходный текст в виде массива слов}
Ch : Char; {отдельный символ}
R : Slovo; {переменная для промежуточного слова}
L, j, k : Integer; {счетчики}
NoSwap : Boolean; {признак перестановки слов }
Begin
L := 0; { счетчик слов }
Writeln('Введите слова через запятую, в конце текста точка');
Read ( Ch ); { внешний цикл до конца текста }
While Ch <> '.' do
Begin
L := L + 1;
j := 1; { j - счетчик символов в слове }
A[ L ] := Pusto;
{внутренний цикл по словам}
While ( Ch<>',') And ( Ch <> '.') do
Begin
A[ L,j ] := Ch;
j := j + 1;
Read( Ch )
end;
if Ch = ',' then Read( Ch )
end;
for K := 2 to L do {“пузырьковая сортировка”}
Begin
NoSwap := True;
for j := L downto K do
if A[ j-1 ] > A[ j ] then
begin
R := A[ j-1 ];
A[ j-1 ] := A[ j ];
A[ j ] := R;
NoSwap := False;
end;
if NoSwap then Break
end;
Writeln( 'Отсортированные слова без повторений' );
R := Pusto;
for K := 1 to L do
if A[ K ] <> R then
begin
R := A [ K ];
for j := 1 to Dlina do Write ( A[ K, j ] );
Writeln
end
End.
4.19 Пусть дан текст, состоящий из слов. Под словом понимается последовательность литер, не содержащая пробелов и знаков препинания. Напечатайте все слова, состоящие из неповторяющихся символов.
4.20 Пусть вводится последовательность символов. Напечатайте те строчные латинские буквы, которые не вошли во введенную последовательность.
4.21 Пусть дан непустой текст из цифр, за которым следует точка. Напечатайте цифру, наиболее часто встречающуюся в этом тексте (если таких цифр несколько, напечатайте любую из них).
4.22 Пусть задан текст размером не более одной строки. Напечатайте, сколько раз в тексте встречается каждая буква латинского алфавита.
4.23 Напечатайте заданный текст из 100 литер, удалив из него повторные вхождения каждой литеры.
4.24 Определите, сколько различных литер входит в заданный текст, содержащий не более 100 литер и оканчивающийся точкой (в сам текст точка не входит).
4.25 Пусть дан текст из строчных латинских букв, за которым следует точка. Напечатайте в алфавитном порядке все буквы, которые входят в этот текст по одному разу.
4.26 Пусть даны натуральное число пи символы S1 , S2 , ..., Sn, среди которых есть двоеточие. Получите все символы:
а) расположенные до первого двоеточия включительно;
б) расположенные после первого двоеточия;
в) расположенные между первым и вторым двоеточием; если второго двоеточия нет, то получите все символы, расположенные после единственного имеющегося двоеточия.
4.27 Пусть даны натуральное число пи символы S1, S2 , ..., Sn. Исключите из последовательности S1, S2 , ..., Sn группы символов, расположенные между открывающей и закрывающей скобками. Сами скобки тоже должны быть исключены. Предполагается, что внутри каждой пары скобок нет других скобок.
4.28 Пусть дана символьная матрица размером пх т. Найдите номер:
а) первой по порядку строки, содержащей наибольшее число цифр;
б) первого по порядку столбца, содержащего наименьшее число пробелов на пересечении со строками, номера которых четны;
в) последней по порядку строки, содержащей наибольшее количество букв ши щ;
г) последнего по порядку столбца, в котором содержится наибольшее количество различных символов.
4.29 Пусть дана непустая последовательность слов из строчных латинских букв; слова разделяются запятой, за последним словом стоит точка. Среди всех пар aiи bi,где ai — первая, а bi — последняя буквы i-го слова последовательности, определите наиболее часто встречающуюся пару.
4.30 Используя следующий фрагмент программы, введите перечисленные ниже слова:
Tуре
Slovo = Array [1..5] of Char;
spisok = Array [1..60] of slovo;
Var
С : spisok;
а) все слова из списка С, отличные от слова Hello;
б) то слово из списка С, которое лексикографически (по алфавиту) предшествует всем другим словам этого списка (считайте, что все слова различны);
в) текст, составленный из последних литер всех слов списка С;
г) все слова из списка С, содержащие ровно две буквы d.
4.31 Пусть во входном файле задана последовательность строчных латинских букв, за которой следует пробел. Если это правильная запись значения типа соlоr, то, используя следующий фрагмент программы, присвойте эту запись переменной х, иначе — сообщите об ошибке:
Tуре
соlоr = (red, blue, green, yellow, black, white);
Var
х : соlоr;
4.32 Используя следующий фрагмент программы, определите, сколько раз (k) в строку S входят литеры, перечисленные в константе v:
const
v = 'aeiou';
Tуре
строка = array [1..20] of char;
Vаr
S : строка;
k : 0..20;
4.33 Пусть дан текст из 60 литер. Напечатайте только строчные русские буквы, входящие в этот текст.
4.34 Пусть дан текст из строчных русских букв, за которым следует точка. Напечатайте этот текст заглавными русскими буквами.
4.35 Известно, что в начале строки S находится не более 40 латинских букв, за которыми следуют пробелы. Напечатайте эту строку, предварительно преобразовав ее так, как показано ниже, и используя следующий фрагмент программы:
Tуре
строка = array [1..80] of char;
Vаr
S : строка;
а) все последовательности abcзамените последовательностями def;
б) удалите первое вхождение w, если такое есть (образовавшуюся «дыру» заполните последующими буквами, а в конец добавьте точку);
в) удалите все вхождения th;
г) замените последовательностью ksпервое вхождение х, если такое есть;
д) после каждой буквы qдобавьте букву и;
е) замените все последовательности рhбуквой f, а все последовательности ed — последовательностями ing.
4.36Пусть дана последовательность, содержащая от 1 до 30 слов, в каждом из которых от 1 до 5 строчных латинских букв; между соседними словами — запятая, за последним словом — точка. Выведите:
а) эту же последовательность слов, но в обратном порядке;
б) те слова, перед которыми в последовательности находятся только меньшие (по алфавиту) слова, а за ними — только большие;
в) эту же последовательность слов, но удалив из нее повторные вхождения слов;
г) все слова, которые встречаются в последовательности по одному разу;
д) все различающиеся слова, указав для каждого из них число его вхождений в последовательность;
е) все слова в алфавитном порядке.
4.37 Пусть дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных латинских букв; между соседними словами — не менее одного пробела, за последним словом — точка. Напечатайте те слова последовательности, которые отличны от последнего слова и удовлетворяют следующему свойству:
а) слово симметрично;
б) первая буква слова входит в него еще раз;
в) буквы слова упорядочены по алфавиту;
г) длина слова максимальна;
д) в слове нет повторяющихся букв;
е) каждая буква входит в слово не менее двух раз;
ж) в слове гласные буквы (а, е, i, о, и) чередуются с согласными.
4.38 Пусть дана последовательность, содержащая от 2 до 30 слов, в каждом из которых от 2 до 10 строчных латинских букв; между соседними словами — не менее одного пробела, за последним словом — точка. Напечатайте все слова, отличные от первого слова, предварительно преобразовав каждое из них по следующему правилу:
а) перенести первую букву в конец слова;
б) перенести последнюю букву в начало слова;
в) удалить из слова первую букву;
г) удалить из слова последнюю букву;
д) удалить из слова все последующие вхождения первой буквы;
е) удалить из слова все предыдущие вхождения последней буквы;
ж) оставить в слове только первые вхождения каждой буквы;
з) если слово нечетной длины, то удалить его среднюю букву.
4.39 Пусть дана последовательность, содержащая от 1 до 90 слов, в каждом из которых от 1 до 10 строчных русских букв; между соседними словами — не менее одного пробела, за последним словом — точка. Напечатайте эти слова по алфавиту.
4.40 Пусть дан текст в виде символьной строки, оканчивающейся точкой. Необходимо определить количество слов, которые являются «перевертышами» (например: казак, шалаш), то есть читаются одинаково с начала и с конца слова. Слова в предложении отделяются одним либо несколькими пробелами.
4.41 Известно, что астрологи делят год на 12 периодов и каждому из них ставят в соответствие один из знаков Зодиака (табл. 1). Напишите программу для ввода даты некоторого дня года и печати названия соответствующего знака Зодиака.
Таблица 1
Период
|
Знак Зодиака
|
20.01 - 18.02
|
Водолей
|
19.02 - 20.03
|
Рыбы
|
21.03 - 19.04
|
Овен
|
20.04 - 20.05
|
Телец
|
21.05 - 21.06
|
Близнецы
|
22.06 - 22.07
|
Рак
|
23.07 - 22.08
|
Лев
|
23.08 - 22.09
|
Дева
|
23.09 - 22.10
|
Весы
|
23.10 - 22.11
|
Скорпион
|
23.11 - 21.12
|
Стрелец
|
22.12 - 19.01
|
Козерог
|
4.42 Известно, что в следующем фрагменте программы массив матрица содержит оценки студентов группы, фамилии которых перечислены в типе фамилия:
Tуре
фамилия = (Иванов, Петров, Сидоров, Михайлов, Андреев, Борисов, Вадимов, Геннадьев, Дмитриев, Евгеньев);
предмет = (математика, физика, информатика, программирование, история, механика, дискретная_математика, физ_ра, начерт_геометрия);
Var
матрица : array [фамилия, предмет] of integer;
а) найдите средний балл всех студентов группы;
б) напечатайте фамилию первого студента списка, средний балл которого максимален;
в) измените на «3» все неудовлетворительные оценки (если такие имеются) у студента с минимальным средним баллом;
г) найдите количество студентов группы, которые учатся без троек (только на «4» и «5»);
д) выясните, сколько студентов группы имеют средний балл, наименее отклоняющийся по абсолютному значению от среднего балла всей группы;
е) напечатайте названия предметов, по которым студенты учатся без двоек;
ж) определите, по какому предмету самая высокая успеваемость;
з) составьте список отличников группы;
и) составьте список хорошистов группы;
к) составьте упорядоченный по неубыванию средних баллов список студентов группы.
4.43 Составьте программу «сжатия» исходной последовательности символов, которая заменяет последовательность, состоящую из одинаковых символов, текстом вида х(k), где х— символ последовательности, k — число вхождений. Определите для указанной последовательности коэффициент сжатия (отношение исходной длины последовательности к полученной).
|
|
|