- •Оглавление
- •§1. Первое знакомство с системой программирования Турбо Паскаль
- •§2. Основные элементы языка
- •§3. Команды редактора Команды управления движением курсора
- •§4. Первая программа
- •Пояснения к программе
- •Запуск программы
- •Сохранение программы
- •§5. Управление позициями и цветом вывода
- •§6. Арифметический квадрат.Абсолютная величина
- •§7. Типы данных
- •§8. Целый тип данных
- •Пример 6
- •Пример 7
- •Пример 8
- •§9. Вещественный тип данных
- •Пример 7
- •Пример 8
- •§10. Логический тип данных
- •§11. Условный оператор
- •Пример 1
- •Пример 2
- •Решение
- •§12. Оператор безусловного перехода. Раздел описания меток
- •§13. Вложенные условные операторы
- •Решение
- •Задание
- •Решение задач Задача 1
- •Задача 8
- •Задача 9
- •Задача 10
- •§14. Цикл с параметром
- •Пример 1
- •Пример 2
- •Пример 3
- •§15. Работа с окнами. Метод пошагового выполнения программ
- •§16. Решение задач с использованием цикла с параметром Задача 1
- •Решение
- •Задача 2.
- •§17. Цикл с предусловием
- •Оператор цикла с предусловием
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •Пример 3
- •Решение
- •§18. Цикл с постусловием
- •Пример 1
- •Решение
- •Пример 2
- •§19. Алгоритм Евклида
- •§20. Вложенные циклы Пример 1
- •Решение
- •Пример 2
- •Решение
- •Пример 3
- •Решение
- •Пример 4
- •Решение
- •Пример 5
- •§21. Решение задач с использованием циклов с условием Задача 1
- •Решение
- •Задача 2
- •§22. Символьный тип данных
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •§23. Ограниченный тип данных
- •Var b:3..8; а не просто Vаг b:Integer;
- •Решение
- •§24. Оператор варианта (выбора)
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •Пример 3
- •Решение
- •Пример 4
- •§25. Перечисляемый тип данных
- •§26. Описание переменных, констант и типов. Раздел описания констант
- •Раздел описания типов
- •§27. Преобразование типов. Совместимость типов
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •Пример 3
- •Решение.
- •§28. Процедуры
- •Описание процедуры
- •Решение
- •Begin {основная программа}
- •Пример 2
- •Решение
- •Пример 3
- •§29. Функции
- •Пример 1
- •Пример 2
- •Решение
- •Пример 3
- •Решение
- •§30. Примеры рекурсивного программирования
- •Задачи с рекурсивной формулировкой
- •Пример 3
- •Задачи, которые можно решить как частный случай обобщенной
- •Задание
- •Задачи, в которых можно использовать характеристику или свойство функции Пример
- •Решение
- •§31. Файловый тип данных Операции для работы с файлами последовательного доступа
- •§32. Обработка файлов Связь переменной файлового типа с файлом на диске
- •Чтение из файла
- •Закрытие файла
- •Признак конца файла
- •Запись в файл
- •§33. Прямой доступ к элементам файла
- •Удаление файлов. Процедура
- •Переименование файлов. Процедура
- •Пример 2
- •§34. Текстовые файлы
- •Обработка текстовых файлов
- •Пример 1
- •Решение
- •Пример 2
- •Нетипизированные файлы
- •§35. Одномерные массивы. Работа с элементами(разбор на примерах) Пример 1
- •Решение
- •Пример 2
- •Решение
- •Пример 3
- •Решение
- •Begin {Считываем очередную строку}
- •§36. Работа с элементами массива (разбор на примерах)
- •Пример 2
- •§37. Методы работы с элементами одномерного массива
- •Создание массива
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •Работа с несколькими массивами Пример
- •Решение
- •§38. Удаление элементов из одномерного массива Пример 1
- •Решение
- •Begin {Сдвиг элементов на один влево}
- •Пример 2
- •Решение
- •§39. Вставка элементов в одномерный массив
- •Вставка нескольких элементов
- •Решение
- •§40. Перестановки элементов массива
- •§41. Двухмерные массивы Описание. Работа с элементами
- •§42. Найти сумму элементов
- •Решение
- •§43.Нахождение количества элементов с данным свойством
- •Пример 1
- •Решение
- •Пример 2
- •Решение
- •§44. Работа с несколькими массивами Пример
- •Решение
- •§45. Определить, отвечает ли заданный массив некоторым требованиям Пример 1
- •Решение
- •Пример 2
- •Решение
- •§46. Изменение значений некоторых элементов, обладающих заданным
- •§47. Заполнение двухмерного массива по правилу
- •Пример 2
- •Решение
- •§48. Вставка и удаление элементов Вставка строки
- •Решение
- •Примечания
- •Удаление строки Пример
- •Решение
- •Примечания
- •§49. Перестановка элементов массива Перестановка двух элементов Пример 1
- •Решение
- •Пример 2
- •§50. Строковый тип данных
- •Операции со строками
- •Склеивание
- •Сравнение
- •Примеры
- •Пример 8
- •Пример 9
- •Пример 10
- •§51. Множественный тип данных
- •Операции над множествами
- •Примеры
- •Сравнение множеств
- •Пример 1
- •Пример 2
- •Вопросы для обсуждения
- •Пример 3
- •Вопросы для обсуждения
- •Пример 4
- •Решение
- •Пример 5
- •Решение
- •§52. Комбинированный тип данных (записи)
- •Пример 1
- •Пример 2
- •Пример 3
- •Решение
Решение
Для того чтобы заполнить массив указанным образом, надо вывести правило заполнения. В данном случае правило будет таким: если ряд нечетный (то есть когда номер строки − нечетное число), то А[i, j]=(i-1)*m+j, иначе (то есть когда строка четная) A[i, j]=i*m-j+1. В соответствии с этим правилом составляем процедуру заполнения массива:
Program Example_121;
Procedure Fill (Var x: dmyarray);
Var i, j: Integer;
Begin
For i:=1 To n Do
For j:=1 To m Do
If i Mod 2=1 Then x[i, j]:=(i-1)*m+j
Else x[i, j]:=i*m-j+1;
End;
§48. Вставка и удаление элементов Вставка строки
Мы уже рассматривали операции вставки для одномерных массивов. Обобщим их для двухмерных.
Пример
Вставить строку из нулей после строки с номером k.
Решение
Для решения этой задачи необходимо:
-
Первые k строк оставить без изменения.
-
Все строки после k−й сдвинуть на одну вниз, это лучше начать с последней строки и идти до (k+1)−й.
-
Присвоить значения элементам (k+1) строки.
Кроме того, необходимо обратить внимание на размерность массива. Так как мы вставляем строку, то необходимо иметь одну строку "в запасе".
Program Example_122;
Const n=5; m:=7;
Type dmyarray=Array[1..n+1,1..m]
Of Integer;
Var A: dmyarray; k:Integer;
Теперь опишем процедуру вставки:
Procedure Insert(k1: Integer;
Var x: dmyarray);
Var i, j: Integer;
Begin
For i:=n Downto k1+1 Do
For j:=1 To m Do x[i+1, j]:=x[i, j];
{Элементу столбца с номером j присваиваем
элемент этого же столбца, но из
предыдущей строки}
For j:=1 То m Do x[k1+1, j]:=0;
End;
Так как число строк меняется, то процедуру Print надо изменить. Она должна выводить указанное количество строк, начиная с первой:
Procedure Print1 (n1: Integer;
x: dmyarray);
Var i, j: Integer;
Begin
For i:=1 To n1 Do
Begin
For j:=1 To m Do Write(x[i, j]: 4);
Writeln;
End;
End;
Часть основной программы будет такой:
Begin
Init(A);
Print(n, A);
Writeln ('Введите номер строки, после
которой надо вставить новую строку');
Readln(k);
Insert(k, A);
Print1(n+1, A);
Readln;
End.
Примечания
-
Если необходимо вставить новую строку после строки, удовлетворяющей некоторому условию, то надо лишь найти номер этой строки и задача сведется к решению уже рассмотренной.
-
Если надо вставлять новые строки после всех строк с заданным условием, то надо учесть это при описании массива. Заметим, что удобнее просматривать строки с последней и ввести счетчик вставленных строк.
-
Вставка новой строки перед строкой с номером k изменится только тем, что сдвигать назад надо не с (k+1)−й строки, а с k−й.
-
Если надо вставлять столбцы, то размерность массива увеличивается по столбцам, а все остальное практически не меняется: надо сдвинуть столбцы вправо и на данное место записать новый столбец.
Удаление строки Пример
Удалить строку с номером k.
Решение
Дли того чтобы удалить строку с номером k, необходимо:
-
Сдвинуть все строки, начиная с данной на одну вверх.
-
Последнюю строку "обнулить", то есть всем элементам последней строки присвоить значение 0.
Описание массивов оставим прежним (размером nxm). Также в программе будем использовать процедуру вывода Print1 из предыдущего параграфа. Будем выводить на экран сначала все строки, а второй раз, после удаления, на одну меньше. Теперь опишем процедуру удаления строки с данным номером:
Program Example_123;
Procedure Delete (k1: Integer;
Var x: dmyarray);
Var i, j: Integer;
Begin
For i:=k1 To n-1 Do
For j:=1 To m Do
x [i, j]:=x[i+1, j];
For j:=1 To m Do x[n, j]:=0;
End;