6. Из двух упорядоченных одномерных массивов (длины K и N) сформируйте одномерный массив размером K+N, упорядоченный в обратную сторону.
7. Составьте алгоритм, упорядочивающий заданную последовательность чисел так, чтобы каждый элемент, стоящий на четном месте, был больше каждого из соседних.
8. Дан упорядоченный целочисленный массив. Сформировать второй массив всех таких различных значений, которые в первом массиве встречаются по два и более раза.
9. Дан упорядоченный целочисленный массив. Сформировать второй массив всех таких различных чисел, которые ни разу в первом массиве не встречаются и имеют величину больше минимального и меньше максимального из чисел первого массива.
10. Дана вещественная матрица размером 7x4. Переставляя ее строки и столбцы, добиться того, чтобы наибольший элемент (один из них) оказался в левом верхнем углу.
11*. В заданном целочисленном массиве найти элементы, сумма которых равна данному числу, в предположении, что такие числа существуют.
12. Дан массив А, состоящий из n элементов. Осуществить перестановку элементов массива на M элементов вправо.
13. В двумерном массиве поменяйте местами первую строчку, и строчку в которой находится первый нулевой элемент.
14. В двумерном массиве переставьте строки следующим образом: первую с последней, вторую с предпоследней и так далее. Если строк нечетное число, то средняя остается неизмененной.
15. Дан двумерный массив А. Расставить его столбцы в следующем порядке:
а) последний, предпоследний, ..., второй, первый;
б) первый, последний, второй, предпоследний, третий, ...
16. Дан двумерный массив. Начиная с первой строки, сдвинуть все строки на две вниз, а последние перенести на место первых двух строк.
17. Дан двумерный массив вещественных чисел размерностью [1..N,1..N]. Произвести сортировку столбцов по убыванию элементов последней строки. Вычислить сумму элементов расположенных на диагоналях полученной матрицы. Сортировку произвести методом прямого выбора. Вывести на экран исходный и полученный массивы в виде матрицы.
18. Дан двумерный массив вещественных чисел размерностью [1..N,1..N]. Произвести сортировку столбцов по возрастанию элементов первой строки. Вычислить среднее арифметическое элементов расположенных по периметру полученной матрицы. Сортировку произвести методом прямого выбора. Вывести на экран исходный и полученный массивы в виде матрицы.
19. Дан двумерный массив, содержащий 4 строки и 5 столбцов. Элементами массива являются целые числа. Упорядочить массив по возрастанию элементов 3-го столбца.
20. Дан двумерный массив, содержащий 4 строки и 5 столбцов. Элементами массива являются целые числа. Упорядочить массив по убыванию элементов 2-й строки.
Приготовьте рабочие программы и листинги с задачами этой темы.
Строки
Занятие 1. Тип данных char. Операции над символами
В большинстве применений компьютера алфавитно-цифровая информация используется наряду с числовой информацией. Прежде чем мы сможем написать программу, которая манипулирует алфавитно-цифровыми знаками (литерами), нам потребуется тип данных для их представления. для этих целей в языке Паскаль предусмотрен тип данных char.
Так же, как переменная типа integer может хранить одно целое число, переменная типа char может хранить один символ.
Например,
Var
Alpha : char;
Begin
Alpha :='p'
Alpha :='+'
Alpha :='3'
Alpha :=' '
Alpha :=''''
Первый оператор присваивания записывает в переменную Alpha литеру р.
Второй делает Alpha равной литере плюса (+).
Третий делает Alpha равной символу 3. Заметим, что чисвол 3 отличается от целого числа 3 тем, что она не может быть использована в арифметических операциях.
Четвертый оператор присваивания делает Alpha равной литере пробела. Хотя литера пробела при печати не изображается, она является обыкновенным значением типа char.
Последний оператор присваивания делает Alpha равной литере апострофа, это специальный случай, так как знак апострофа используется для ограничения значения типа char.
Мы будем пользоваться множеством литер, находящимся в таблице кодов, называемой ASCII – американский стандартный код обмена информацией.
Все символы упорядочены, т. к. имеют свой личный номер. Важно, что соблюдаются следующие отношения:
'A' < 'B' < 'C' < ... < 'X' < 'Y' < 'Z' '0' < '1' < '2' < ... < '7' < '8' < '9'
Для проверки равенства или неравенства переменных типа char могут использоваться операторы булевого сравнения.
Задача. Написать программу, которая считывает две литеры и печатает больше, равна или меньше первая литера второй.
Program Sravnenie;
Var
First, Second : char;
Begin
write ('Введите две литеры через пробел ');
readln (First, Second);
write ('Первая литера ');
if First > Second
then
write ('больше второй. ');
else
if First = Second
then
write ('равна второй. ');
else
write ('меньше второй. ');
Еnd.
Так как char – порядковый тип, то к его значениям применимы следующие функции.
Succ – возвращает следующий символ литерного множества;
Pred – возвращает предыдущий символ литерного множества;
Ord – возвращает значение кода литеры;
Chr – возвращает значение литеры, является обратной по отношению к функции Ord.
Например,
Succ('0')='1' – символ, следующий за символом 0, равен символу 1.
Pred('3')='2' – символ, предшествующий символу 3, равен 2;
Chr(65)='A' – символ, соответствующий коду 65, равен А;
Ord('A')=65 – код символа А равен 65
Задачи для самостоятельного решения
1. Вывести в одну строку АаБбВвГг.
2. Запросите у пользователя символ и выведите на экран 5 символов, следующих за ним в таблице американских стандартных кодов обмена информацией. Проверьте, есть ли среди них знаки препинания.
3. Запросите у пользователя символ и выведите на экран 5 символов, предшествующих данному в таблице американских стандартных кодов обмена информацией. Проверьте, есть ли среди них знаки простейших математических действий.
4. Определите выведите на экран коды русских заглавных букв и латинских прописных.
5. Определите и выведите на экран коды русских прописных букв и латинских заглавных.
6. Вывести в одну строку ZYY...AA...A.
7. Составьте программу, проверяющую, является ли введенный символ буквой латинского алфавита или скобкой (учесть круглые, фигурные и квадратные скобки)
8. Запросите у пользователя несколько символов и выведите на экран их коды. Проверьте, являются ли они буквами.
9. Вывести в одну строку ABBCCCDDDD...ZZ...Z.
10. Вывести треугольник
Аяяяяяяяя…я
Бюююю…ю
Вээээээ…э
. . .
Эввв
Юбб
Яа.
11. Вывести треугольник
A B C...Y Z
B C …Y Z
C...Y Z
Занятие 2. Строка. Тип данных string. Строковые переменные, их описание. Длина строки. Операции над строками
Строка (string) – это последовательность литер. Литерные строки уже использовались нами в качестве аргументов операторa write при изучении темы "Ввод-вывод". Теперь познакомимся с ними подробнее.
Тип данных (string) определяет строки с максимальной длиной 255 символов. Переменная этого типа может принимать значения переменной длины.
Например,
MaxLine : string;
City : string[30]
Строковая переменная может иметь атрибут длины, определяющий ее максимальную длину.
Текущая длина строковой переменной может быть определена с помощью встроенной функции Length. для заданного значения типа string эта функция возвращает целое значение, показывающее количество литер в строке.
Выражения, в которых операндами служат строки, называются строковыми выражениями.
Над строками определены две операции:
1. Операция сцепления (+) применяется для сцепления нескольких строк в одну.
Например,
SumStr := 'Турбо'+'Паскаль'+'7.0'
2. Операции отношения (=, <>, >, <, >=, <=) проводят сравнение двух строк слева направо до первого несовпадающего символа, и та строка считается больше, в которой первый несовпадающий символ имеет больший номер в стандартной таблице обмена информацией. Результат выполнения операций отношения над строками всегда имеет булевой тип.
Например, выражение 'MS-DOS'<'MS-Dos' имеет значение True
Если строки имеют различную длину, но в общей части символы совпадают, считается, что более короткая строка меньше, чем более длинная.
Строки считаются равными, если они совпадают по длине и содержат одни и те же символы на соответствующих местах в строке.
Для присваивания строковой переменной результата строкового выражения используется оператор присваивания. Если значение переменной после выполнения оператора присваивания превышает по длине максимально допустимую при описании величину, то все лишние символы справа отбрасываются.
Допускается смешение в одном выражении операндов строкового и символьного типа.
К отдельным символам строки можно обратиться по номеру (индексу) данного символа в строке.
Например, чтобы обратиться к третьему символу строки SumStr надо записать SumStr[3]. Запись SumStr[0] дает значение текущей длины строки.
Для эффективного программирования алгоритмов обработки текстов необходимо хорошо понимать внутреннюю структуру представления строк в памяти. Строки реализованы достаточно просто. Для хранения строковых переменных выделяется память, на единицу большая максимальной длины строки. Начальный байт этой памяти отводится для хранения текущей длины строки, следующие байты - для символов самой строки. Так как элементы строк стандартно нумеруются целыми числами, начиная с единицы, байт с длиной строки можно считать нулевым ее элементом. Такая структура памяти допускает прямой доступ к ее элементам.
Stroka | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
14 | М | А | М | А | __ | М | Ы | Л | А | __ | Р | А | М | У |
|
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |


