- •Оглавление
- •§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
- •Решение
Примеры
Val('1234', n, k) - n=1234, k=0;
Val('234.56', n, k) - n=234.56, k=0;
Val('2.3456e+2', n, k) - n=2.3456e+2, k=0;
Val('12-45', n, k) k=3, так как знак "−" в записи чисел может быть только на первом месте;
Val('2,567m', n, k) k=2, так как разделительным знаком между целой и дробной частями является точка, а не запятая;
Val ('5.87с-5') k=5, так как символ 'с' не должен встречаться в записи вещественного или целого числа.
Решение задач
Пример 1
Сколько раз в данной строке встречается символ 'a'?
Решение
Опишем функцию, которой будем передавать строку. Результат выполнения − целое число.
Program Example_129;
Function Q_Ch(st: String): Byte;
Var i, k: Byte;
Begin
k:=0; {Просматриваем все символы строки,
их количество равно длине строки;
если очередной символ равен 'а',
то увеличиваем счетчик}
For i:=1 To Length(st) Do
If st[i]='a' Then Inc(k);
Q_Ch:=k;
End;
Пример 2
Если в строке нечетное число символов, то удалить средний.
Решение
Program Example_130;
Procedure Del(Var st: String);
Var k: Byte;
Begin
k:=Length(st);
If k Mod 2=1 Then
Delete(st, k Div 2+1,1);
End;
Пример 3
Заменить все вхождения подстроки 'del' на 'Insert'.
Решение
Пока такая подстрока встречается, необходимо находить номер первого символа очередного вхождения подстроки 'del' , удалять 'del' и вставлять 'Insert'.
Program Example_131;
Procedure Ins(Var st: String);
Var k: Byte;
Begin
While Pos ('del', st)<>0 Do
Begin
k:=Pos ('del', st);
Delete(st, k, Length ('del'));
Insert('Insert', st, k);
End;
End;
Пример 4
Дана строка, состоящая из нескольких слов, между словами один пробел, в конце строки − точка. Подсчитать количество слов и вывести на экран только те из них, которые начинаются с буквы 'а' (слов не больше 30).
Решение
Разобьем предложение на отдельные слова и каждое будем хранить как элемент массива строк.
Program Example_132;
Const n=30;
Type Myarray_Str=Array [1..n] Of String;
Var A: Myarray_Str;
str: String[255];
k: Byte;
Procedure Init(Var b: Myarray_Str);
Var i: Integer;
Begin
k:=1; {Пока не встретится пробел,
формируем очередное слово k, прибавляя
по одной букве}
For i:=1 To Length(str)-1 Do
If str[i]<>' ' Then b[k]:=b[k]+str[i]
Else
{Если это не последний символ, то
увеличиваем счетчик слов и начинаем
формировать очередное слово}
If i<>Length(str)-1 Then
Begin Inc(k); b[k]:=' ' End;
End;
Begin
Writeln('Введите предложение');
Readln(str);
Init(A);
Writeln('Всего слов: ',k);
{Просматриваем все слова, если первый
символ очередного слова равен букве
'а', то выводим его}
For i:=1 To k Do If A[i][1]='a'
Then Write(A[i],' ');
Readln;
End.
Пример 5
Подсчитать сумму цифр, входящих в данную строку.
Program Example_133;
Function Sum(st: String): Integer;
Var i, d: Byte; s,k: Integer;
Begin
s:=0;
For i:=1 To Length(st) Do
Begin
Val(st[i], d, k);
If k=0 Then s:=s+d;
End;
Sum:=s;
End;
Пример 6
Строка символов представляет собой некоторый текст, слова в котором разделены одним или более пробелами. Преобразовать эту строку так, чтобы все слова разделялись ровно одним пробелом, а ведущие и хвостовые пробелы отсутствовали.
Решение
Program Example_134;
var s: string;
begin
writeln('Введите строку текста с
пробелами');
readln(s);
while pos(' ', s)>0 do
delete (s, pos (' ', s),1);
{Пока в строке существуют два рядом
стоящих пробела, удаляем один из них}
if s[1]=' ' then
delete(s, length (s), 1);
if s[length(s)]= ' ' then
delete(s, length(s), 1);
readln;
end.
Пример 7
Дана строка символов следующего вида:
p1q1p2q2p3q3...qnpn
где pi − целое неотрицательное число, а qi − знак арифметического действия из набора (+,-,*). Написать программу вычисления значения введенного выражения, предполагая, что действия выполняются согласно правилам арифметики.
Решение
Пока в строке присутствуют знаки умножения, мы находим первый из них. Выделяем числа, стоящие слева и справа, удаляем соответствующуе часть строки (число, знак умножения, число) и вставляем на это же место результат умножения выделенных чисел друг на друга. Остальные действия выполняются по порядку. Корректность введенного выражения будет проверена по ходу вычислений.
Program Example_135;
var pq, p1, p2: string;
m,n, k, l, j: word;
begin
writeln('Введите арифметическое
выражение');
readln(pq);
while pos('*', pq)>0 do
{цикл для выполнения всех
действий умножения}
begin
p1:=' ';
k:=pos('*', pq);
while (k>1) and (pq[k-1]
in ['0'..'9']) do
begin
k:=k-1;
p1:=pq[k]+p1 {формируем число,
стоящее справа от знака умножения}
end; {while}
p2:=' ';
l:=pos('*', pq);
while (l<length(pq)) and (pq[l+1]
in ['0'.. '9']) do
begin
l:=l+1;
p2:=p2+pq[l]; {формируем число,
стоящее справа от знака умножения}
end; {while}
val(p1, n, j);
if j>0 then
begin
writeln('ошибка в выражении');
halt
end; {if}
val(p2, m, j);
if j>0 then
begin
writeln('ошибка в выражении);
halt;
end; {if}
j:=m*n;
str(j, p1);
delete(pq, k, l-k+1);
{часть строки удаляем}
insert (p1, pq, k);
{вставляем результат умнож.}
end; {while} {все умножения выполнены}
while (pos('+',pq)>0) or
(pos('-',pq)>0) do
begin
p1:=' ';
k:=1;
while (pq[k] in ['0'.. '9']) do
begin
p1:=p1+pq[k];
k:=k+1;
end; {while}
p2:= ' ';
l:=k;
while (l<length(pq)) and (pq[l+1]
in ['0'.. '9']) do
begin
l:=l+1;
p2:=p2+pq[l];
end; {while}
val(p1, n, j);
if j>0 then
begin
writeln('ошибка в выражении');
halt;
end; {if}
val(p2, m, j);
if j>0 then
begin
writeln('ошибка в выражении');
halt;
end; {if}
case pq[k] of
'+': j:=n+m;
'-': j:=n-m;
end; {case}
str(j, p1);
delete(pq, 1, l);
insert(p1, pq, 1)
end; {while}
{все сложения и вычитания выполнены}
val(pq, n, j);
if j>0 then
begin
writeln('ошибка в выражении');
halt;
end; {if}
writeln('=', pq);
readln;
end.
Оператор halt − стандартная процедура, которая завершает выполнение программы и выполняет возврат в операционную систему.