Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

книги / Программирование на языке Си

..pdf
Скачиваний:
15
Добавлен:
12.11.2023
Размер:
17.16 Mб
Скачать

504

 

Программирование на языке Си

 

функциями:*/

 

 

 

 

а = ус - yt;

 

 

 

 

 

printf(”\t%lf \t%lf \t%lf \t%le \t%ld \n",

 

 

x, yc,

yt, a, shn>sqn?shn:sqn);

 

} /* Конец цикла по x */

 

 

 

}

 

 

 

 

 

Р е з у л ь т а т ы :

 

 

 

 

Вычисление функции: у = sqrt(х)*sinh(х)

 

X

fl(x)

f2(x)

Точность

Итерации

1

1.175201

1.175201

2.220446е-16

11

1.4

2.2532

2.2532

-4.440892е-16

12

1.8

3.947341

3.947341

0.000000е-00

 

13

2.2

6.610955

6.610955

0.000000е-00

 

14

2.6

10.794931

10.794931

0.000000е-00

 

15

3

17.351468

17.351468

3.552714е-15

15

3.4

27.594767

27.594767

3.552714е-15

16

3.8

43.547521

43.547521

-7.105427е-15

17

4.2

68.317789

68.317789

0.000000е-00

 

17

4.6

106.674264

106.674264

0.000000е-00

 

18

5

165.923423

165.927423

0.000000е-00

 

19

10.3. Работа со строкам и . У казатели, ди нам и чески е одномерны е м ассивы

Порядок выполнения задания (общая схема алгоритма):

1.Запросить у пользователя максимально возможную по ус­ ловиям задачи длину LenMax строки.

2.Создать динамический символьный массив данного разме­ ра (LenMax).

3.Запросить у пользователя исходную строку и записать ее в массив, созданный в п. 2.

4.Если длина введенной строки меньше LenMax, изменить количество памяти, выделенной под массив в п.2, (уменьшить размер массива).

Глава 10. Задачи по программированию

505

5.Выполнить действия, необходимые для решения задачи.

6.В процессе решения создать динамический массив нуж­ ной длины, содержащий результирующую строку, либо не­ сколько массивов (в зависимости от условий задачи).

7.Освободить память, выделенную под все созданные во время работы динамические массивы, за исключением массива (массивов), содержащего результирующую строку (строки).

8.Напечатать (вывести на дисплей) результирующую строку (строки).

Примечание. Если введенная пользователем исходная стро­ ка содержит символы, не являющиеся допустимыми, выдать сообщение об ошибке и первый недопустимый символ. Пре­ кратить решение задачи.

В соответствии с целями практикума в конкретных условиях при выполнении заданий данного §10.3 могут быть введены следующие ограничения:

Не применять индексированных переменных для доступа к элементам массивов-строк, а использовать разыменование указателей.

Не использовать стандартные (библиотечные) функции str...() для работы со строками, а явно выполнять все дей­ ствия по конкатенации, копированию, сравнению и пр.

10.3.1. Варианты задач по обработке строк*

Вариант 1 ("Палиндромы").

Проверить, является ли выражение, состоящее только из прописных букв заданной строки, палиндромом (палиндром - слово или выражение, читающееся слева направо и справа нале­ во одинаково, например, "кабак" или "нажал кабан на бакла­ жан"). Если да, то напечатать полученный палиндром. В противном случае вывести строку, состоящую из символов ис­ ходной строки с удаленными прописными символами.

* Условия задач подобраны С.Г.Чернацким,

506

Программирование на языке Си

Допустимые символы - цифры; прописные и строчные ла­ тинские буквы.

П ри ме ры:

 

 

Исходная строка

Результат

lrK4ABAfgK

КАВАК

- палиндром

BuRAtino

utino

- не палиндром

AT&T

Недопустимый символ - ’&'

Вариант 2.

Имеется строка, содержащая буквы и цифры. Преобразуйте эту строку так, чтобы сначала в ней шли все цифры, а потом - все буквы исходной строки.

Допустимые символы - цифры; прописные и строчные ла­ тинские буквы.

П ри ме ры:

 

Исходная строка

Результат

ad2e57b6

2576adeb

Tom&Jerry

Недопустимый символ - '&'

Вариант 3.

Имеется строка, содержащая буквы и цифры. Преобразуйте эту строку так, чтобы сначала в ней шли все буквы, встречаю­ щиеся в исходной строке, но в обратном порядке, а потом - все цифры исходной строки в прямом порядке.

Вариант: сначала все буквы, потом цифры в обратном по­ рядке.

Допустимые символы - цифры; прописные и строчные ла­ тинские буквы.

Примеры:

 

Исходная строка

Результат

ad2e57b6

beda2576

KARABAS/BARABAS

Недопустимый символ - '/'

Вариант 4.

Имеется строка, содержащая буквы и цифры. Преобразуйте эту строку так, чтобы сначала в ней шли все цифры исходной

Глава 10. Задачи по программированию

507

строки, а потом - все буквы исходной строки, но в обратном порядке.

Допустимые символы - цифры; прописные и строчные ла­ тинские буквы.

Примеры:

Исходная строка

Результат

ad2e57b6

2576beda

Стрижем.Kozloff.

Недопустимый символ -

Вариант 5.

С клавиатуры вводятся:

предложение, слова в котором разделены символом под­ черкивания ('_');

маска (шаблон) для выбора из предложения нужных слов

(содержит буквы и символ-заполнитель который заме­ няет любое сочетание букв, в том числе пустое).

Необходимо выбрать из предложения все слова, соответст­ вующие маске (шаблону).

Допустимые символы - прописные русские буквы; символразделитель

Пример.

ВЫРАЖЕНИЕ_ЕСТЬ_ПРАВИЛО_ПОЛУЧЕНИЯ_ЗНАЧЕНИЯ

Маска

Подходящие слова

ПОЛУЧЕНИЯ | ЗНАЧЕНИЯ

*Н*Е

ВЫРАЖЕНИЕ

*РА*

ВЫРАЖЕНИЕ | ПРАВИЛО

*Е*

ВЫРАЖЕНИЕ | ЕСТЬ | ПОЛУЧЕНИЯ | ЗНАЧЕНИЯ

Вариант 6.

Пусть цифрам от 1 до 9 соответствуют буквы от А (а) до I (i). С клавиатуры вводится строка. Составьте новую строку из цифр, соответствующих только данным буквам (прописным и строчным), отсортированным по возрастанию.

Допустимые символы - прописные и строчные латинские буквы.

R S S T V
SHiFROVkaOtSHPIonA
K N O O O P R S S

508

Программирование на языке Си

П р им е р .

Исходная строка: SHiFROVkaOtSHPIonA

Результат: 1168899 (выделены буквы: HiFaHIA)

Вариант 7.

С клавиатуры вводится строка. Выберите из нее все буквы от А(а) до I(i) (строчные преобразуйте в прописные) и отсортируй­ те их в алфавитном порядке.

Допустимые символы - прописные и строчные латинские буквы.

Пр имер .

Исходная строка: SHiFROVkaOtSHPIonA

Результат: AAFHHII

Вариант 8.

С клавиатуры вводится строка. Выберите из нее все буквы от J (j) до S (s) (строчные преобразуйте в прописные) и отсорти­ руйте их в алфавитном порядке.

Допустимые символы - прописные и строчные латинские буквы.

П ример . Исходная строка: Результат:

Вариант 9.

С клавиатуры вводится строка. Выберите из нее все буквы от Q (q) до Z (z) (строчные преобразуйте в прописные) и отсорти­ руйте их в алфавитном порядке.

Допустимые символы - прописные и строчные латинские буквы.

П рим ер .

Исходная строка: SHiFROVkaOtSHPIonA

Результат:

Глава 10. Задачи по программированию

509

Вариант 10 ("Треугольник Паскаля").

Имеется некоторое предложение (слова разделяются симво­ лами подчеркивания Используя треугольник Паскаля, за­ шифруйте исходное предложение по следующему правилу:

из предложения выделяется очередное слово;

из треугольника Паскаля выбирается строка с номером, равным числу букв в слове;

k-я буква исходного слова заменяется на букву, отстоящую от исходной на число букв, указанное в k-м столбце вы­ бранной строки треугольника Паскаля (отсчет производит­ ся по часовой стрелке, как показано на схеме).

Треугольник

Паскаля

 

А

Б В Г Д Е Ж 3

 

 

 

1

 

 

Я

\

и

 

 

1

 

 

Ю

й

 

 

1

1

 

3

к

К

 

1

1

2

 

ь

 

л

 

3

3

1

1

' ы

 

м

1

1

4

6

4

ъ

 

н

5

10

10

5

1

щ

 

О

1

б

15

20

15

6 1

ш

\ ____________ /

п

Ч Ц Х Ф У Т С Р

Допустимые символы - прописные русские буквы; символразделитель

Пример:

Исходная строка:

"А_Р03А_УПАЛА_НА_ЛАПУ_А30РА"

Зашифрованная строка:

"Б_ССКБ_ФУЖПБ_ОБ_МГТФ_БЛФФБ"

Вариант 11.

Имеется некоторое предложение, все слова которого разде­ лены символами подчеркивания ('_'). Используя треугольник Паскаля, зашифруйте исходное предложение по следующему правилу:

из предложения выделяется очередное слово;

из треугольника Паскаля выбирается строка с номером, равным числу букв в слове;

510

Программирование на языке Си

k-я буква исходного слова заменяется на набор одинаковых букв в количестве, указанном в k-м столбце выбранной строки треугольника Паскаля.

Треугольник Паскаля 1

 

 

1

1

1

 

 

 

2

1

1

 

1

1

3

3

 

4

6

4

1

1

1

5

10

10

5

6

15

20

15

6

Допустимые символы - прописные русские буквы; символразделитель

Пример.

Исходная строка;

"А_Р03А_УПАЛА_НА_ЛАПУ_А30РА"

Зашифрованная строка;

"А_РОООЗЗЗА_УППППААААААЛЛЛЛА_НА_ЛАААПППУ_АЗЗЗЗ

ООООООРРРРА"

Вариант 12.

Проверить, является ли заданная строка зашифрованной по алгоритму, приведенному в варианте 11. Если да - выдать рас­ шифрованную строку, если нет - вывести сообщение об ошибке с печатью первого ошибочного слова.

Допустимые символы - прописные русские буквы; символразделитель

Примеры;

Зашифрованная строка:

НА_ДВВВВООООООРРРРЕ_ОССССЕЕЕЕЕЕННННЬ

Результат расшифровки;

НА_ДВОРЕ_ОСЕНЬ

Зашифрованная Строка:

НА_ДВВВВ0000РРРРЕ_ЗИИИМММА

Результат расшифровки:

Ошибка слово 'ДВВВВООООРРРРЕ' не является зашифрованным.

Глава 10. Задачи по программированию

511

Вариант 13.

Выберите 10 произвольных букв русского алфавита (введите с клавиатуры). Введите произвольное русское слово. С помо­ щью ключа длиной от трех до восьми символов, также вводимо­ го пользователем с клавиатуры, произведите шифровку слова в числовую комбинацию, как показано в следующем примере.

Допустимые символы - прописные русские буквы (для букв алфавита и слова), цифры (для ключа).

Пример.

Пусть задан набор русских букв:

ВЕ Ж М Н О П Р С Т

Поставим им в соответствие цифры от 0 до 9:

В Е Ж М Н О П Р С Т

0 1 2 3 4 5 6 7 8 9

Пусть введено какое-нибудь русское слово, например

М Н О Ж Е С Т В О .

Переведем буквы этого слова в цифры, соответствующие этим буквам. В данном случае

М Н О Ж Е С Т В О

3 4 5 2 1 8 9 0 5

Запрашиваем у пользователя цифровой ключ (Зч-8 символов). Пусть пользователь ввел

1243

Теперь подставляем ключ под очередные числа, в которые переведено наше число, и оставляем число единиц результата (десятки отбрасываем). В нашем примере:

м

Н

О

Ж

Е

С

Т

В

О

3

4

5

2

1

8

9

0

5

1

2

4

3

1

2

4

3

 

+

 

 

 

1

 

 

 

 

 

 

 

+

4

6

9

5

2

0

3

3

6

Окончательный ответ:

469520336

512

Программирование на языке Си

Примечание. Если длина ключа не кратна длине слова, то оставшиеся цифры ключа отбрасываются (как в примере).

Вариант 14.

Напишите дешифратор, преобразующий исходную строку, зашифрованную по принципу, указанному в варианте 13 и со­ держащую цифры, в слово на русском языке, используя вводи­ мый набор из десяти допустимых символов.

Допустимые символы - прописные русские буквы (для алфа­ вита), цифры (для шифра и ключа).

Пример.

Десять

русских

букв:

ВЕЖМНОПРСТ

Строка

шифра:

 

469520336

Ключ (3-8 символов):

1243

Расшифрованная

строка:

МНОЖЕСТВО

Вариант 15.

Пусть задано некоторое слово. Начать просмотр этого слова слева направо до тех пор, пока не встретятся повторяющиеся буквы. Если такие буквы встретились, пропустить их и продол­ жить просмотр с конца слова в обратном порядке (справа нале­ во), пока снова не встретится набор повторяющихся букв. Если такой набор встретился, продолжить просмотр с того места, ко­ торое следует за первым набором повторяющихся букв и т.д. "Протокол" просмотра строки вывести на экран; вместо после­ довательности повторяющихся букв выводить один символ подчеркивания.

Допустимые символы - прописные русские буквы.

Пример.

Исходное слово: НОННИЛЛИОН "Протокол" просмотра: НО_НОИ_И

Вариант 16.

Найти в исходной строке все вхождения (но не более девяти) заданной подстроки и заменить их на другую строку с указани­ ем номера очередного вхождения.

Допустимые символы - прописные русские буквы; символразделитель

Глава 10. Задачи по программированию

513

Приме р.

Исходная строка:

ПОЛИЛИ_ЛИЛИЮ

Какую подстроку заменить:

ЛИ

На какую подстроку заменить: СТО Результат: П0СТ01СТ02_СТ03СТ04Ю

Вариант 17 ("Анаграммы").

По заданному с клавиатуры слову построить все его ана­ граммы, т.е. слова (возможно, бессмысленные), состоящие из всех букв исходного слова, но расположенных в произвольном порядке. Например, "бук" и "куб" - анаграммы.

В качестве разделителя при выводе использовать символ подчеркивания ('_'). (Для простоты можно вводить слово, не со­ держащее повторяющиеся буквы.)

Допустимые символы - прописные русские буквы.

Пример.

Введите исходное слово: КЛУБА

Анаграммы: КЛУБА КАБУЛ ..._БУЛКА_. ..

Вариант 18.

По заданному с клавиатуры слову напечатать все слова (возможно, бессмысленные), которые можно составить из букв введенного слова. В качестве разделителя при выводе получен­ ных слов использовать символ подчеркивания ('_'). (Для просто­ ты можно вводить слова, не содержащие повторяющиеся буквы.)

Допустимые символы - прописные русские буквы.

Пример.

Исходное слово: БАРСУК

Полученные слова: Б_А_Р_..._АР_..._БАР_...

СУК ... БРУС ... КРАБ ...

Вариант 19.

1. Зашифруйте вводимое с клавиатуры предложение сле­ дующим образом: сначала выбираются два произвольных слова из базы, находящейся в тексте программы или вводимой с кла­ виатуры, затем слово из шифруемого предложения, потом опять

зз~3124

Соседние файлы в папке книги