Паскаль. Сборник задач по программированию на языке Паскаль Автор Селезнева Наталья Николаевна, учитель информатики и икт моу
Скачать 350.82 Kb.
|
Задача 1. Составить программу обработки массива размерностью n, заполненного целыми числами, введенными с клавиатуры. Вывести индексы и значения положительных элементов массива. USES Crt; CONST N=10; VAR A:ARRAY[0..N] OF INTEGER; I:BYTE; BEGIN ClrScr; { Заполнение массива } FOR I:=1 TO N DO Begin Write(' Введите ',I,' элемент массива '); ReadLn(A[I]); End; { Обработка элементов массива } FOR I:=1 TO N DO IF A[I]>0 THEN WriteLn(' Положительный элемент = ',A[I],' его индекс = ',I); END. Задача 2.Составить программу обработки массива K, состоящего из 20 элементов. Заполнить массив случайными числами в диапазоне от -5 до 25. Все элементы массива К, значения которых находятся в интервале от -2 до 20 возвести в квадрат. Измененный массив вывести на экран. USES Crt; VAR K:ARRAY[0..20] OF INTEGER; I:BYTE; BEGIN ClrScr; Randomize; 13 { Заполнение массива случайными числами } FOR I:=1 TO 20 DO Begin K[I]:=Random(30)-5; Write(K[I]:3); End; WriteLn; FOR I:=1 TO 20 DO IF (K[I]<20) AND (K[I]>-2) THEN K[I]:=K[I]*K[I]; WriteLn('Измененный массив'); FOR I:=1 TO 20 DO Write(K[I]:4); END. Задача 3. Составить программу вычисления и печати значений функции Y=sin(x-1)/2x. Значения аргументов задать в массиве X, состоящего из 6 элементов. Значения функции записать в массив Y. USES Crt; VAR X,Y:ARRAY[0..6] OF REAL; I: BYTE; BEGIN ClrScr; FOR I:=1 TO 6 DO Begin Write('Введите ',I,' значение аргумента '); ReadLn(X[I]); End; FOR I:=1 TO 6 DO Begin Y[I]:=SIN(X[I]-1)/(2*X[I]); WriteLn(' X= ',X[I]:4:1,' Y=',Y[I]:5:2); End; END. Задача 4. Дан массив M, состоящий из 30 элементов. Элементы массива - произвольные целые числа. Выдать на экран значение каждого пятого и положительного элемента. Указанные элементы выдать в строку. USES Crt; VAR M:ARRAY[0..30] OF INTEGER; I: BYTE; BEGIN ClrScr; Randomize; WriteLn(' Значения элементов массива'); FOR I:=1 TO 30 DO Begin M[I]:=Random(20)-4; Write(M[I]:3); End; WriteLn; I:=5; WriteLn(' Значения каждого пятого и положительного элемента массива'); While I<=30 DO Begin IF M[I] > 0 THEN Write(M[I]:3); I:=I+5; End; END. Задача 5.Из элементов массива Р сформировать массив М той же размерности по правилу: если номер четный, то М[I]=I*P[I],если нечетный, то M[I]=-P[I]. USES Crt; CONST N=15; VAR P, M: ARRAY[0..N] OF INTEGER; I: BYTE; BEGIN 14 ClrScr; Randomize; WriteLn(' Значения элементов массива '); FOR I:=1 TO N DO Begin P[I]:=Random(70); Write(P[I]:3); End; WriteLn; WriteLn(' Значения элементов сформированного массива M'); FOR I:=1 TO N DO Begin IF I mod 2 =0 Then M[I]:=P[I]*I Else M[I]:=-P[I]; Write(M[I]:4); End; END. Практические задания 1. Дан одномерный массив размерностью 10, заполненный целыми числами, введенными с клавиатуры, и величина N. Отрицательные элементы заменить на N. Измененный массив вывести на экран одной строкой. 2. Дан одномерный массив размерностью N, заполненный случайными числами в интервале от -15 до 20. Вывести на экран значения элементов массива, абсолютное значение которых >10. 3. Дан одномерный массив размерностью N, заполненный случайными числами. Каждый третий элемент массива возвести в квадрат, если элемент отрицательный. Измененный массив вывести на экран. 4. Составить программу вычисления и печати значений функции Y=(sinx+1)√cos4x. Значения аргументов задать в массиве X, состоящего из 10 элементов. Значения функции записать в массив Y. 5. Заменить первые К элементов массива на противоположные по знаку. 6. Из элементов массива А, состоящего из 25 элементов, сформировать массив D той же размерности по правилу: первые 10 элементов находятся по формуле Di=Ai+i, остальные - по формуле Di=Ai-i. 4.1.2 Алгоритмы нахождения суммы, произведения и количества элементов массива. Работа с индексами элементов массива Задача 1. Определить сумму элементов массива Р(n), значения которых > заданного Т USES Crt; CONST N=30; VAR P:ARRAY[0..N] OF INTEGER; I,T:BYTE; S:INTEGER; BEGIN ClrScr; Randomize; { Заполнение массива случайными числами } WriteLn(' Значения элементов массива'); FOR I:=1 TO N DO Begin P[I]:=Random(30); Write(P[I]:3); End; WriteLn; Write(' Введите значение переменной '); ReadLn(T); S:=0; FOR I:=1 TO N DO IF P[I]>T THEN S:=S+P[I]; { сумма элементов массива > T } WriteLn(' Сумма элементов массива > заданного значения = ',S); END. 15 Задача 2. Дан массив целых чисел, состоящий из 25 элементов. Подсчитать сумму элементов массива, произведение положительных и количество нулевых элементов. Результат вычисления вывести на экран. USES Crt; VAR A:ARRAY[0..25] OF INTEGER; I: BYTE; S,K: INTEGER; P: REAL; BEGIN ClrScr; Randomize; { Заполнение массива случайными числами } WriteLn(' Значения элементов массива'); FOR I:=1 TO 25 DO Begin A[I]:=Random(10)-3; Write(A[I]:3); End; WriteLn; S:=0; K:=0; P:=1; FOR I:=1 TO 25 DO Begin S:=S+A[I]; { сумма элементов массива } IF A[I]>0 THEN P:=P*A[I]; { произведение положительных элементов массива } IF A[I] =0 THEN K:=K+1; { количество нулевых элементов массива } End; WriteLn(' Сумма элементов массива = ',S); WriteLn(' Произведение положительных элементов массива = ',P:0:0); WriteLn(' Количество нулевых элементов массива = ',K); END. Задача 3. Дан массив четных чисел, состоящий из 15 элементов. Заполнить его с клавиатуры. Найти: • сумму элементов, имеющих нечетные индексы; • подсчитать количество элементов массива, значения которых больше заданного числа T и кратны 5; • номер первого отрицательного элемента, делящегося на 5 с остатком 2. USES Crt; CONST T=11; VAR A:ARRAY[0..15] OF INTEGER; I,NP,FL: BYTE; S,K: INTEGER; BEGIN ClrScr; Randomize; { Заполнение массива с клавиатуры } FOR I:=1 TO 15 DO Begin Write(' Введите ',I,' злемент массива '); ReadLn(A[I]); End; WriteLn; S:=0; K:=0; FL:=0; FOR I:=1 TO 15 DO Begin IF I mod 2 =0 THEN S:=S+A[I]; { сумма элементов, имеющих четные индексы } IF (A[I]>T) AND (A[I] mod 5 =0) THEN K:=K+1; { количество } IF (A[I]<0) AND (A[I] mod 5 =-2) AND (FL=0) THEN Begin NP:=I; FL:=1; End; End; WriteLn(' Сумма элементов,имеющих четные индексы = ',S); WriteLn(' Количество элементов, значения которых > ',T,' и кратны 5 = ',K); WriteLn(' Номер первого отрицательного элемента, делящегося на 5 с остатком 2 = ',NP); END. Задача 4. Дан массив четных чисел, состоящий из 10 элементов. Заполнить его с клавиатуры. Найти: • сумму положительных элементов, значения которых меньше 10; • вывести индексы тех элементов, значения которых кратны 5 и 3; 16 • количество пар соседних элементов с суммой равной заданному числу. USES Crt; CONST T=21; VAR A:ARRAY[0..10] OF INTEGER; I: BYTE; S,K: INTEGER; BEGIN ClrScr; Randomize; { Заполнение массива с клавиатуры } FOR I:=1 TO 10 DO Begin Write(' Введите ',I,' злемент массива '); ReadLn(A[I]); End; WriteLn; S:=0; K:=0; WriteLn(' Индексы элементов, значения которых кратны 3 и 5'); FOR I:=1 TO 10 DO Begin IF (A[I]>0) AND (A[I]<10) THEN S:=S+A[I]; IF (A[I] mod 3 =0) AND (A[I] mod 5 =0) THEN Write(I:3) ; IF I<>10 THEN IF A[I]+A[I+1]=T THEN K:=K+1; End; WriteLn; WriteLn(' Сумма положительных элементов, значения которых < 10 = ',S); WriteLn(' Количество пар соседних элементов с суммой равной ',T,' = ',K); END. Задача 5. Дан массив целых чисел, состоящий из 10 элементов. Заполнить его с клавиатуры. Найти: • удвоенную сумму положительных элементов; • вывести индексы тех элементов, значения которых больше значения предыдущего элемента (начиная со второго); • количество пар соседних элементов с одинаковыми знаками. USES Crt; VAR A:ARRAY[0..10] OF INTEGER; I: BYTE; S,K: INTEGER; BEGIN ClrScr; Randomize; { Заполнение массива с клавиатуры } FOR I:=1 TO 10 DO Begin Write(' Введите ',I,' злемент массива '); ReadLn(A[I]); End; WriteLn; S:=0; K:=0; WriteLn(' Индексы элементов, значения которых > значения предыдущего элемента'); FOR I:=1 TO 10 DO Begin IF (A[I]>0) THEN S:=S+A[I]; IF I<>1 THEN IF A[I] > A[I-1] THEN Write(I:3); IF I<>10 THEN IF (A[I] * A[I+1])>0 THEN K:=K+1; End; WriteLn; WriteLn(' Удвоенная сумма положительных элементов = ',S*2); WriteLn(' Количество пар соседних элементов с одинаковыми знаками = ',K); END. Задача 6. Дан массив C, состоящий из N элементов. Элементы массива - произвольные целые числа. Вывести на экран элементы массива в обратном порядке. USES Crt; CONST N=20; VAR C:ARRAY[0..N] OF INTEGER; I: BYTE; 17 BEGIN ClrScr; Randomize; Wri teLn(' Значения элементов массива'); FOR I:=1 TO N DO Begin C[I]:=Random(20); Write(C[I]:3); End; WriteLn; WriteLn(' Значения элементов массива в обратном порядке'); FOR I:=N DOWNTO 1 DO Write(C[I]:3); END. Задача 7. Дан массив A, состоящий из N элементов. Элементы массива - произвольные целые числа. Распечатать элементы в две строки: в первой строке элементы с нечетными индексами, а во второй - элементы с четными индексами. USES Crt; CONST N=25; VAR A:ARRAY[0..N] OF INTEGER; I: BYTE; BEGIN ClrScr; Randomize; WriteLn(' Значения элементов массива'); FOR I:=1 TO N DO Begin A[I]:=Random(20); Write(A[I]:3); end; WriteLn; I:=1; WriteLn(' Элементы с нечетными индексами'); WHILE I<=N DO Begin Write(A[I]:3); I:=I+2; End; WriteLn; I:=2; WriteLn(' Элементы с четными индексами'); WHILE I<=N DO Begin Write(A[I]:3); I:=I+2; End; END. Практические задания 1. Дан массив целых чисел, состоящий из 10 элементов. Заполнить его с клавиатуры. Найти: • сумму отрицательных элементов; • количество тех элементов, значения которых положительны и не превосходят заданного числа А; • номер последней пары соседних элементов с разными знаками. 2. Дан массив целых чисел, состоящий из 10 элементов. Заполнить его с клавиатуры. Найти: • сумму элементов, имеющих нечетное значение; • вывести индексы тех элементов, значения которых больше заданного числа А; • количество положительных элементов, кратных К. ( К вводится с клавиатуры ). 3. Дан массив целых чисел, состоящий из N элементов. Определить среднее арифметическое положительных элементов. 4. Дан массив чисел. Найти, сколько в нем пар одинаковых соседних элементов. 18 5. Оценки, полученные учащимися за урок, занесены в массив. Подсчитать количество «5» и «2», полученных учащимися за урок и средний балл. 6. В очереди за билетами стоят мужчины и женщины. Какое количество мужчин стоит в начале очереди до первой женщины. 4.1.3 Алгоритмы нахождения наибольшего или наименьшего элемента массива и его индекса Задача 1. Дан массив K, состоящий из 45 элементов. Элементы массива - произвольные целые числа. Определить минимальный элемент массива и его индекс. USES Crt; VAR K:ARRAY[0..45] OF INTEGER; I,IND: BYTE; MIN:INTEGER; BEGIN ClrScr; Randomize; WriteLn(' Значения элементов массива'); FOR I:=1 TO 45 DO Begin K[I]:=Random(35)+6; Write(K[I]:3); End; WriteLn; MIN:=K[1]; IND:=1; { нахождение минимального значения и его индекса } FOR I:=2 TO 45 DO IF K[I] WriteLn(' Индекс минимального значения = ',IND); END. Задача 2. Дан массив B, состоящий из N элементов. Элементы массива - произвольные целые числа. Определить сумму элементов, расположенных до максимального элемента массива. USES Crt; CONST N=20; VAR B:ARRAY[0..N] OF INTEGER; I,IND: BYTE; MAX,S:INTEGER; BEGIN ClrScr; Randomize; WriteLn(' Значения элементов массива'); FOR I:=1 TO N DO Begin B[I]:=Random(35); Write(B[I]:3); End; WriteLn; MAX:=B[1]; IND:=1; { нахождение максимального значения и его индекса } FOR I:=2 TO N DO IF B[I]>MAX THEN Begin MAX:=B[I]; IND:=I; End; WriteLn(' Максимальное значение = ',MAX); { нахождение суммы элементов, расположенных до максимального элемента } S:=0; FOR I:=1 TO IND-1 DO S:=S+B[I]; WriteLn(' Cумма элементов, расположенных до максимального элемента =',S); END. Задача 3. Дан массив A, состоящий из N элементов. Элементы массива - произвольные целые числа. Заменить нулями все элементы массива, расположенные за минимальным элементом массива. Измененный массив вывести на экран. USES Crt; 19 CONST N=15; VAR A:ARRAY[0..N] OF INTEGER; I,IND: BYTE; MIN:INTEGER; BEGIN ClrScr; Randomize; WriteLn(' Значения элементов массива'); FOR I:=1 TO N DO Begin A[I]:=Random(400); Write(A[I]:4); End; WriteLn; MIN:=A[1]; IND:=1; { нахождение минимального значения и его индекса } FOR I:=2 TO N DO IF A[I] { замена нулями элементов, расположенных за минимальным значением } FOR I:=IND+1 TO N DO A[I]:=0; WriteLn(' Измененный массив'); FOR I:=1 TO N DO Write(A[I]:4); END. Задача 4. Дан массив A, состоящий из N элементов. Элементы массива - произвольные целые числа. Заменить нулями все элементы массива, расположенные между минимальным и максимальным элементами массива, кроме их самих. Измененный массив вывести на экран. USES Crt; CONST N=15; VAR A:ARRAY[0..N] OF INTEGER; I, IMIN, IMAX, k1, k2: BYTE; MIN, MAX:INTEGER; BEGIN ClrScr; Randomize; WriteLn(' Значения элементов массива'); FOR I:=1 TO N DO Begin A[I]:=Random(270); Write(A[I]:4); end; WriteLn; MIN:=A[1]; MAX:=A[1]; IMIN:=1; IMAX:=1; { нахождение минимального и максимального значения и их индексов } FOR I:=2 TO N DO Begin IF A[I] End; WriteLn(' Минимальное значение = ',MIN); WriteLn(' Максимальное значение = ',MAX); { замена нулями элементов, расположенных между минимальным и максимальным значением } IF IMIN FOR I:=K1 TO K2 DO A[I]:=0; WriteLn(' Измененный массив'); FOR I:=1 TO N DO Write(A[I]:4); END. 20 Задача 5. Дан массив чисел. Найти наибольший элемент, поставить его первым. USES Crt; CONST M=100; VAR MAS: ARRAY[1..100] OF INTEGER; I,K,N,NEW: INTEGER; BEGIN ClrScr; Write(' Введите размер массива N= '); ReadLn(N); { Заполнение массива с клавиатуры } FOR I:=1 TO N DO Begin Write(' Введите ',I,' элемент массива '); ReadLn(MAS[I]); End; NEW:=MAS[N]; K:=N; { Нахождение наибольшего элемента и его индекса } FOR I:=N DOWNTO 1 DO IF MAS[I]>NEW THEN Begin NEW:=MAS[I]; K:=I; End; { Перестановка местами первого и наибольшего элементов } MAS[K]:=MAS[1]; MAS[1]:=NEW; WriteLn(' Измененный массив'); FOR I:=1 TO N DO Write(MAS[I]:4); END. Задача 6. Известны данные о среднемесячной температуре за год. Определить, какая была самая высокая температура летом и самая низкая зимой. USES Crt; VAR MAS: ARRAY[1..12] OF REAL; I: INTEGER; MIN,MAX:REAL; BEGIN ClrScr; { Заполнение массива с клавиатуры } FOR I:=1 TO 12 DO Begin Write(' Введите среднюю температуру за ',I,' месяц '); ReadLn(MAS[I]); End; MAX:=MAS[6]; MIN:=MAS[12]; { Определение самой высокой температуры летом } FOR I:=7 TO 8 DO IF MAX FOR I:=1 TO 2 DO IF MIN>MAS[I] THEN MIN:=MAS[I]; WriteLn(' Самая высокая температура летом ',MAX); WriteLn(' Самая низкая температура зимой ',MIN); END. Практические задания 1. Дан массив чисел. Найти значение максимального элемента. Если таких элементов несколько, то определить, сколько их. 2. Дан массив чисел. Найти среднее арифметическое максимального и минимального элемента. Вывести значения и индексы этих элементов. 3. Дан массив чисел. Определить количество элементов, находящихся в интервале от1 до 12 и расположенных до максимального элемента массива. 21 4.1.4 Алгоритмы удаления, вставки и перестановки элементов Задача 1. Дан массив A, состоящий из 12 элементов. Элементы массива - произвольные целые числа. Поменять местами значения 1 и 2 элементов, 3 и 4 и т.д. Измененный массив вывести на экран. USES Crt; VAR A:ARRAY[0..12] OF INTEGER; I: BYTE; PP:INTEGER; BEGIN ClrScr; Randomize; WriteLn(' Значения элементов массива'); FOR I:=1 TO 12 DO Begin A[I]:=Random(20); Write(A[I]:3); End; WriteLn; I:=1; WHILE I<=12 DO Begin {перестановка элементов местами, используя промежуточную переменную PP } PP:=A[I]; A[I]:=A[I+1]; A[I+1]:=PP; I:=I+2; End; WriteLn(' Значения элементов измененного массива'); FOR I:=1 TO 12 DO Write(A[I]:3); END. Задача 2. Дан массив целых чисел из 15 элементов, заполненный случайным образом числами из промежутка [-20,50]. 1. Удалить из него все элементы, в записи которых есть цифра 5. 2. Вставить число K после всех элементов, кратных своему номеру (К вводится с клавиатуры). 3. Поменять местами первый положительный и последний отрицательный элементы.} USES Crt; VAR P,P1:ARRAY[0..15] OF INTEGER; P2:ARRAY[0..30] OF INTEGER; I,J,E,D,PP,PO,FL: BYTE; K,PRP:INTEGER; BEGIN ClrScr; Randomize; WriteLn(' Значения элементов массива P'); FOR I:=1 TO 15 DO Begin P[I]:=Random(70)-20; Write(P[I]:4); End; WriteLn; J:=1; { 1. Удаление } FOR I:=1 TO 15 DO Begin E:=ABS(P[I]) mod 10; {Выделение единиц} D:=ABS(P [I]) div 10; {Выделение десятков} { формирование нового массива } IF (E<>5) AND (D<>5) THEN Begin P1[J]:=P[I]; J:=J+1; End; End; WriteLn(' Массив, в котором нет элементов с цифрой 5'); FOR I:=1 TO J-1 DO Write(P1[I]:4); WriteLn; { 2. Вставка } Write(' Введите значение переменной '); ReadLn(K); J:=1; 22 FOR I:=1 TO 15 DO Begin P2[J]:=P[I]; J:=J+1; IF ABS(P[I]) mod I = 0 THEN Begin P2[J]:=K; J:=J+1; End; End; WriteLn(' Массив, в котором после элементов, кратных своему номеру, вставлено число =',K); For I:=1 TO J-1 DO Write(P2[I]:4); WriteLn; { 3. Перестановка } { Нахождение первого положительного и последнего отрицательного элемента } FL:=0; FOR I:=1 TO 15 DO Begin IF (P[I]>0) AND (FL=0) THEN Begin PP:=I; FL:=1; End; IF P[I]<0 THEN PO:=I; End; { перестановка местами первого положительного и последнего отрицательного'} PRP:=P[PP]; P[PP]:=P[PO]; P[PO]:=PRP; WriteLn(' Массив, в котором первый положительный и последний отрицательный'); WriteLn(' поменяли местами'); FOR I:=1 TO 15 DO Write(P[I]:4); END. Практические задания Дан массив целых чисел из 10 элементов, заполненный случайным образом из промежутка [- 40, 30]. 1. Удалить из него все элементы, которые состоят из одинаковых цифр ( включая однозначные числа). 2. Вставить число К перед всеми элементами, в которых есть цифра 1 (К вводится с клавиатуры) 3. Переставить первые три и последние три элемента местами, сохраняя порядок их следования. 0> |