Паскаль. Сборник задач по программированию на языке Паскаль Автор Селезнева Наталья Николаевна, учитель информатики и икт моу
Скачать 350.82 Kb.
|
Сборник задач по программированию на языке Паскаль Автор: Селезнева Наталья Николаевна, учитель информатики и ИКТ МОУ Рязанцевской СОШ 2 Описание материала: Сборник задач посвящен вопросам программирования на языке программирования Pascal 7.0. В нем подробно рассматриваются решения большого количества задач, от простых до достаточно сложных. Сборник адресован учащимся, преподавателям, ведущим занятия по информатике и программированию, а также всем желающим самостоятельно овладеть искусством программирования на языке Pascal 7.0. Сборник содержит условия задач и одно или два варианта их решения на языке программирования Pascal 7.0. Задачи в сборнике классифицированы по основным разделам: линейные алгоритмы, разветвляющиеся алгоритмы, циклические алгоритмы, обработка массивов, обработка строк и создание графических изображений. После каждого раздела предлагаются задачи для самостоятельного решения. Внутри каждого раздела задачи по мере возможности расположены по возрастанию степени трудности. 3 СОДЕРЖАНИЕ 1. Линейные алгоритмы ................................................................................. 4 2. Разветвляющиеся алгоритмы ...................................................................... 5 2.1 Условный оператор IF............................................................................. 5 2.2 Условный оператор CASE ...................................................................... 6 3. Циклические алгоритмы .............................................................................. 8 3.1 Оператор цикла FOR ............................................................................... 8 3.2 Оператор цикла WHILE .......................................................................... 9 4. Обработка массивов ................................................................................... 12 4.1 Одномерные массивы ........................................................................... 12 4.1.1 Алгоритмы поиска и присвоения значений элементам массива 12 4.1.2 Алгоритмы нахождения суммы, произведения и количества элементов массива. Работа с индексами элементов массива ................................. 14 4.1.3 Алгоритмы нахождения наибольшего или наименьшего элемента массива и его индекса .............................................................................. 18 4.1.4 Алгоритмы удаления, вставки и перестановки элементов ......... 21 4.1.5 Алгоритмы сортировки числового массива ................................. 22 4.2 Двумерные массивы ............................................................................. 23 4.2.1 Алгоритмы действий над элементами двумерного массива ....... 23 4.2.2 Алгоритмы формирования одномерного массива ....................... 28 4.2.3 Алгоритмы нахождения наибольшего и наименьшего элементов двумерного массива ................................................................................. 31 4.2.4 Алгоритмы удаления, вставки и перестановки элементов ......... 33 5. Обработка строк ......................................................................................... 34 5.1 Подсчет и вывод символов ................................................................... 34 5.2 Удаление символов ............................................................................... 35 5.3 Вставка символов .................................................................................. 36 5.4 Сложные варианты ................................................................................ 37 6. Создание графических изображений. Модуль Graph ............................. 39 4 1. Линейные алгоритмы Задача 1. Даны две целые переменные A, B. Составить фрагмент программы, после исполнения которого, значения переменных поменялись бы местами (новое значение A равно старому значению B и наоборот). USES Crt; VAR A, B, T : INTEGER; BEGIN ClrScr; { Чистка экрана } Write (‘ Введите два значения ‘); ReadLn(A,B); {Введем дополнительную целую переменную T} T := A; A := B; B := T; Write(A,B); END. Задача 2. Решить предыдущую задачу, не используя дополнительных переменных (и предполагая, что значениями целых переменных могут быть произвольные целые числа). USES Crt; VAR A, B : INTEGER; BEGIN ClrScr; Write (‘ Введите два значения ‘); ReadLn(A,B); A := A + B; B := A - B; A := A - B; Write(A,B); END. Задача 3. Задан радиус окружности. Найти площадь и длину окружности. USES Crt; VAR R : INTEGER; S,L: REAL; BEGIN ClrScr; Write (‘ Введите радиус окружности ‘); ReadLn(R); {Pi - зарезервированное значение} S:=Pi*R*R ; {Вычисление площади окружности} L:=2*Pi*R ; {Вычисление длины окружности} WriteLn (‘ Площадь окружности = ’,S:4:2); WriteLn (‘ Длина окружности = ‘,L:4:2); END. Практические задания 1. Даны три действительных положительных числа. Найти среднее геометрическое и среднее арифметическое этих чисел. 2. Даны катеты прямоугольного треугольника. Найти его гипотенузу и площадь. 3. Мальчик купил несколько тетрадей по сто рублей и несколько обложек по 50 рублей. Составить программу, которая могла бы подсчитать стоимость всей покупки. 5 2. Разветвляющиеся алгоритмы 2.1 Условный оператор IF Задача 1. Определить является ли данное целое число R четным. Дать словесный ответ. USES Crt; VAR R: INTEGER; BEGIN ClrScr; WriteLn(' Введите число'); ReadLn(R); IF R MOD 2 = 0 Then WriteLn(' Число четное') Else WriteLn('Число не четное'); END. Задача 2. Даны три целых числа. Выбрать из них те, которые принадлежат интервалу [1,3] USES Crt; VAR X, Y, Z: INTEGER; BEGIN ClrScr; WriteLn('Введите три целых числа'); ReadLn(X,Y,Z); IF (X>=1) AND (X<=3) Then WriteLn('Первое число принадлежит заданному интервалу') Else WriteLn('Первое число не принадлежит заданному интервалу'); IF (Y>=1) AND (Y<=3) Then WriteLn('Второе число принадлежит заданному интервалу') Else WriteLn('Второе число не принадлежит заданному интервалу'); IF ( Z>=1) AND (Z<=3) Then WriteLn('Третье число принадлежит заданному интервалу') Else WriteLn('Третье число не принадлежит заданному интервалу'); END. Задача 3. Даны положительные целые числа A, B, C. Выяснить существует ли треугольник с длинами сторон A, B, C. USES Crt; VAR A, B, C: INTEGER; BEGIN ClrScr; WriteLn(' Введите три числа'); ReadLn(A,B,C); IF (A+B>C) AND (A+C>B) AND (B+C>A) Then WriteLn(' Треугольник построить можно') Else WriteLn('Треугольник построить нельзя'); END. Практические задания 1. Заданы два числа X, Y. Меньшее из двух значений заменить на 0. Если же они равны – заменить нулями оба. 2. Поменять местами значения целых переменных A, B, C таким образом, чтобы оказалось A ≥B≥C. 3. Заданы три числа X, Y, Z. Найти min(XYZ, X+Y+Z). 6 2.2 Условный оператор CASE Задача 1. Составить программу, которая по введенному значению 1, 2, 3, 4 вычисляет площадь треугольника: 1. По основанию и высоте 2. По трем сторонам 3. По двум сторонам и углу между ними 4. Выход USES Crt; LABEL M1,M2; VAR X:INTEGER; A,H,S,B,L,C,P:REAL; BEGIN M1:ClrScr; WriteLn('Вычисление площади треугольника'); WriteLn; WriteLn('1.По основанию и высоте'); Write Ln('2.По трем сторонам'); WriteLn('3.По двум сторонам и углу между ними'); WriteLn('4. Выход'); WriteLn; WriteLn(' Введите номер пункта'); ReadLn(X); CASE X OF 1: Begin ClrScr; Write('Введите основание и высоту треугольника '); ReadLn(A,H); S:=A*H/2; WriteLn('Площадь треугольника = ',S:5:2); ReadLn; GOTO M1; End; 2: Begin ClrScr; Write('Введите значения сторон треугольника '); ReadLn(A,B,C); P:=(A+B+C)/2; S:=Sqrt(P*(P-A)*(P-B)*(P-C)); WriteLn('Площадь треугольника = ',S:5:2); ReadLn; GOTO M1 End; 3: Begin ClrScr; Write('Введите значения двух сторон и угол между ними '); ReadLn(A,B,L); S:=A*B*Sin(L*Pi/180)/2; WriteLn('Площадь треугольника = ',S:5:2); ReadLn; GoTo M1; End; 4: Begin ClrScr; WriteLn('Программа закончила свою работу'); ReadLn; GoTo M2; End; ELSE ClrScr; WriteLn(' Номер пункта ввели неверно'); ReadLn; GoTo M1; End; 7 M2:END. Задача 2. Составить программу, которая по введенному значению выводит оценки по математике, физике, информатике. USES Crt; LABEL R1,R2; VAR X: INTEGER; M:CHAR; BEGIN R1:ClrScr; WriteL n('ПРГ выводит оценки по математике, физике и химии'); WriteL n('1.Вывод оценок по предметам'); WriteLn('2. Выход'); WriteL n('Введите номер пункта'); ReadLn (X); CASE X OF 1: Begin ClrScr; WriteLn(' По какому предмету Вы хотите увидеть оценки'); WriteLn(' М - математика'); WriteLn(' Ф - физика'); WriteLn(' Х - химия'); ReadLn(M); CASE M OF ' М','м':WriteLn('5 5 4 4 5 5 3 5 5 '); ' Ф','ф':WriteLn('5 4 5 3 5 4 5 5 5 '); ' Х','х':WriteLn('4 3 5 3 4 4 4 5 '); End; End; 2: Begin WriteLn(' Программа закончена'); GoTo R2; End; Else WriteLn(' Номер неверен'); ReadLn; GoTo R1; End; R2:End. Практические задания 1. Составить программу, которая по введенному значению 1, 2, 3 вычисляет: 1. Площадь параллелограмма 2. Периметр параллелограмма 3. Выход 2. Составить программу «Календарь XX столетия», которая определяет день недели любого дня XX-го столетия. По введенному значению 1, 2, 3 вычисляет 1. номер дня недели по формуле, где D- день, М-месяц, G-год: ♦ S=[(12-M)/10] ♦ K=[(G-1900-S)*365,25]+[(M+12*S-2)*30,59]+D+29 ♦ N=K-7[K/7] (N- вычисляется от 0-воскресенье до 6-суббота, []-целая часть) 2. день недели по его номеру 3. выход 8 3. Циклические алгоритмы 3.1 Оператор цикла FOR Задача 1. Найти произведение положительных, сумму и количество отрицательных из 10 введенных целых значений. USES Crt; VAR X: INTEGER; S, K, P: INTEGER; I: BYTE; Begin P:=1; S:=0; K:=0; FOR I:=1 TO 10 DO Begin WriteLn(‘ Введите ‘,I,’ -е значение’); ReadLn(x); IF X>0 Then P:=P*X ; { произведение положительных } IF X<0 Then Begin S:=S+X ; { сумма отрицательных } K:=K +1; { количество отрицательных } End; End; WriteLn (‘ Произведение положительных значений = ‘,p); WriteLn (‘ Сумма отрицательных значений = ‘,s); WriteLn(‘ Количество отрицательных значений = ‘,k); END. Задача 2. Из N целых чисел найти минимальное значение. USES Crt; VAR MI, X: INTEGER; I,N: BYTE; BEGIN WriteLn('Введите количество значений'); ReadLn(n); WriteLn('Введите первое значение'); ReadLn(mi); FOR I:=2 TO N DO Begin WriteLn(‘ Введите ‘,I,’ -е значение’); ReadLn(x); IF X WriteLn (‘Минимальное значение = ‘,MI); END. Задача 3. Из N целых чисел найти минимальное среди положительных и максимальное среди отрицательных значений. USES Crt; VAR MI, MA, N, I, X: INTEGER; FL, FL1: BYTE; BEGIN WriteLn('Введите количество значений'); ReadLn(N); FL:=0; FL1:=0; FOR I:=1 TO N DO Begin WriteLn(' Введите ',I,' значение'); ReadLn(X); IF (FL=0) AND (X<0) Then Begin MA:=X; FL:=1; End; IF (FL1=0) AND (X>0) Then Begin MI:=X; FL1:=1; End; IF (X<0) AND (X>MA) Then MA:=X; IF (X>0) AND (X IF FL=1 Then W riteLn('максимальное среди отрицательных = ',ma) 9 E lse WriteLn('отрицательных нет'); IF FL1=1 Then W riteLn('минимальное среди положительных = ',mi) E lse WriteLn('положительных нет'); END. Практические задания 1. Найти среднее арифметическое минимального и максимального элементов из 10 введенных. 2. Напечатать лучший результат заплыва среди 8 участников. 3. Из n введенных чисел найти максимальное значение среди положительных элементов. 4. В группе определить самого высокого мальчика и самую маленькую девочку. 5. В ЭВМ вводятся результаты соревнований по прыжкам в высоту. Число участников произвольно. Напечатать сообщение о победителе. 3.2 Оператор цикла WHILE Задача 1. Дано целое число а и натуральное (целое неотрицательное) число n. Вычислить а в степени n. {Введем целую переменную k, которая меняется от 0 до n, причем поддерживается такое свойство: b = (a в степени k).} USES Crt; VAR A, N, B, K : INTEGER; BEGIN ClrScr; Write(‘ Введите два значения ‘); ReadLn(A,N); K := 0; B := 1; While K <> N DO Begin K := K + 1; B := B * A; End; Write(‘ A в степени N = ’,B); END. Другое решение той же задачи: USES Crt; VAR A, N, B, K : INTEGER; BEGIN ClrScr; { Чистка экрана } Write (‘ Введите два значения ‘); ReadLn(A,N); K := N; B := 1; {A в степени N = B * (A в степени K)} While K <> 0 DO Begin K := K - 1; B := B * A; End; Write(‘ A в степени N = ’,B); END. Задача 2. Даны натуральные числа а, b. Вычислить произведение а*b, используя в программе лишь операции +, -, =, <>. USES Crt; VAR A, B, C, K : INTEGER; BEGIN Write(‘ Введите два значения ‘); ReadLn(A,B); K := 0; C := 0; 10 While K <> B DO Begin K := K + 1; C := C + A; End; {C = A * K и K = B, следовательно, C = A * B} Write(‘ A*B= ‘,C); END. Задача 3. Дано натуральное (целое неотрицательное) число A и целое положительное число D . Вычислить частное Q и остаток R при делении A на D, не используя операций DIV и MOD. ( Согласно определению, А = Q * D + R, 0 <= R < D.) USES Crt; VAR A, D, R, Q : INTEGER; BEGIN ClrScr; Write(‘ Введите два значения ‘); ReadLn(a,d); R := A; Q := 0; While Not (R < D) DO Begin R := R - D; {R >= 0} Q := Q + 1; End; WriteLn (‘ Частное = ’,Q); WriteLn(‘ Остаток = ’,R); END. Задача 4. Каждый год урожайность повышается на 5%. Через сколько лет урожай удвоится? USES Crt; VAR YR, KL: BYTE; YRG: REAL; Begin ClrScr; Write(' Введите урожайность '); ReadLn(YR); YRG:=YR; While (YRG <2*YR) Do Begin YRG:=YRG+0.05*YRG; KL:=KL+1; End; WriteLn(' Новый урожай ',YRG:5:0); W rite('Через ',KL,' лет урожай удвоится'); END. Задача 5. Деду M лет, а внуку N лет. Через сколько лет дед станет вдвое старше внука. И сколько при этом лет будет деду и внуку. USES Crt; VAR M,N: BYTE; Kl: BYTE; BEGIN ClrScr; Write('Введите количество лет деда '); ReadLn(m); Write('Введите количество лет внука '); ReadLn(n); KL:=0; While (M>2*N) DO Begin M:=M+1; N:=N+1; KL:=KL+1; End; WriteLn(M,' лет деду'); WriteLn(N,' лет внуку'); WriteLn('Через ',KL,' лет дед вдвое станет старше внука'); END. 11 Задача 6. Поле засеяли цветами двух сортов на площади S1 и S2. Каждый год площадь цветов первого сорта увеличивается вдвое, а площадь второго сорта увеличивается втрое. Через сколько лет площадь первых сортов будет составлять меньше 10% от площади вторых сортов. USES Crt; VAR S1,S2:WORD; KL:BYTE; BEGIN ClrScr; Write('Введите площадь, которую засеяли цветами 1-го сорта '); ReadLn(S1); Write( 'Введите площадь, которую засеяли цветами 2-го сорта '); ReadLn(S2); KL:=1; While (S1>0.1*S2) DO Begin S1:=S1*2; S2:=S2*3; KL:=KL+1; End; WriteLn('Площадь, которую засеяли цветами 1-го сорта ',S1); WriteLn('Площадь, которую засеяли цветами 2-го сорта ',S2); WriteLn(' Через ', kl,' лет'); END. Задача 7. Составить программу перевода числа из 10 системы счисления в 2 систему счисления. Для этой задачи представлено два решения. a) USES Crt; VAR DES, OST, I, DW:INTEGER; BEGIN ClrScr; Write(' Введите десятичное число '); ReadLn(DES); I:=1; While (DES>=2) DO Begin OST:=DES mod 2; DES:=DES div 2; DW:=DW+OST*I; I:=I*10; End; DW:=DW+DES*I; Write('Двоичная запись числа ',DW); END. b) USES Crt; Const A=10; VAR DES, OST, I:INTEGER; DW:Array[1..100] OF INTEGER; BEGIN ClrScr; Write(' Введите десятичное число '); ReadLn(des); I:=1; While (des>=2) DO Begin OST:=DES mod 2; DES:=DES div 2; DW[I]:=OST; I:=I+1; End; 12 DW[I]:=DES; FOR I:=I DownTo 1 DO Write(DW[I]); END. Практические задания 1. Составить программу, печатающую квадраты всех натуральных чисел от 0 до заданного натурального n. 2. Дано натуральное n, вычислить n! (0!=1, n! = n * (n-1)!). 3. Последовательность Фибоначчи определяется так: a(0)= 1, a(1) = 1, a(k) = a(k-1) + a(k-2) при k >= 2. Дано n, вычислить a(n). 4. К старушке на обед ходят кошки. Каждую неделю две кошки приводят свою подружку. В доме у старушки 100 мисок. Через какое время появятся лишние кошки, и сколько кошек при этом останется голодными. 5. Известна сумма номеров страниц, определить номер страницы. 6. Лягушка каждый последующий прыжок делает в два раза короче предыдущего. Достигнет ли она болота и за сколько прыжков. Длину первого прыжка задайте самостоятельно. 4. Обработка массивов 4.1 Одномерные массивы 4.1.1 Алгоритмы поиска и присвоения значений элементам массива 0> |