Текст
                    МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ
ВОЛГОГРАДСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
О. А. Авдеюк
Л. Г. Акулов
О. В. Гостевская
В. Ю. Наумов
ЛАБОРАТОРНЫЙ ПРАКТИКУМ
ПО ПРОГРАММИРОВАНИЮ
НА ЯЗЫКЕ ПАСКАЛЬ
Учебное пособие
Волгоград
2016


УДК 681.3.06 (075) Рецензенты: кафедра «Теория и методика обучения математике и информатике» Волгоградского государственного социально-педагогического университета, зав. кафедрой д-р пед. наук, профессор Т. К. Смыковская; доцент кафедры «Биотехнические системы и технологии» Волгоградского государственного медицинского университета канд. физ.-мат. наук М В. Петров Печатается по решению редакционно-издательского совета Волгоградского государственного технического университета Лабораторный практикум по программированию на языке Паскаль : учеб. пособие / О. А. Авдеюк, Л. Г. Акулов, О. В. Гостевская, В. Ю. Наумов ; ВолгГТУ. - Волгоград, 2016. - 140 с. ISBN 978-5-9948-2078-0 Содержатся требования к выполнению практических и лабораторных работ по программированию на языке TP, приводятся примеры решения задач и варианты индивидуальных заданий. Предназначено для студентов всех форм обучения и направлений, изучающих курс «Информатика», «Информатика и программирование», «Информационные технологии». ISBN 978-5-9948-2078-0 © Волгоградский государственный технический университет, 2016 © О. А. Авдеюк, Л. Г. Акулов О. В. Гостевская, В. Ю. Наумов, 2016
ОГЛАВЛЕНИЕ 1. Требования к выполнению и оформлению лабораторных и практических работ 4 2. Требования к оформлению протокола лабораторной работы 4 3. Темы лабораторных и практических работ 5 3.1. Линейные вычислительные процессы 5 3.2. Разветвляющиеся вычислительные процессы 16 3.3. Циклические вычислительные процессы 3О 3.4. Одномерные массивы 43 3.5. Двумерные массивы 61 3.6. Обработка компонентных файлов 82 3.7. Обработка компонентных файлов и массивов 95 3.8. Построение подпрограмм 108 Библиографический список 139
1. Требования к выполнению и оформлению лабораторных и практических работ Для успешного выполнения лабораторного или практического задания необходимо: 1) получить у преподавателя задание на лабораторную (практическую) работу; 2) изучить теоретический материал по теме лабораторной (практической) работы. Источниками теоретического материала являются конспекты лекций, печатные и электронные издания, Internet-издания и учебные сайты. Список рекомендованной литературы приводится в конце пособия; 3) выполнить лабораторную работу на компьютере и оформить протокол выполнения работы; 4) продемонстрировать результат выполнения лабораторной работы преподавателю и получить допуск к защите работы; 5) защитить работу. Защита работы предполагает выполнение дополнительного задания по теме данной работы с проставлением оценки в виде рейтинговых баллов. Выбор задания и оценивание работы выполняет преподаватель. 2. Требования к оформлению протокола лабораторной работы Протокол лабораторной работы должен быть оформлен на листах формата А4. Листы заполняются текстом с одной стороны. Оформление протокола допускается в печатном и рукописном виде. При рукописном оформлении чертежные работы выполняются по линейке простым графитным карандашом. 4
Протокол лабораторной работы должен включать: 1) штамп (рис. 1). Поля «Допуск», «Выполнение», «Отчет» заполняет преподаватель; 2) условие решаемой задачи; 3) тестовый пример; 4) блок-схему алгоритма. По требованию преподавателя блок- схема должна быть оформлена с использованием пошаговой детализации; 5) текст программы (листинг) на соответствующем языке программирования; 6) результаты расчета на ЭВМ. Л. Р. № 1 Тема: «Линейные вычислительные процессы» Студент Иванов И. И. Группа ХХ-999 Дата дд.мм.гт Допуск Выполнение Вариант 34 Отчет Рис. 1. Пример заполнения штампа протокола 3. Темы лабораторных и практических работ 3.1. Линейные вычислительные процессы Ниже приведен пример оформления лабораторной работы. Л. Р. №> 1 «Линейные вычислительные процессы» Студент Иванов И. И. Группа ХХ-999 Дата дд.мм.гт Допуск Выполнение Вариант 88 Отчет 5
Условие задачи Вычислить, упростив при помощи дополнительной переменной Х = е sm -А-1 0.5 + А-В С + \А-В\ + COS 0.5 + АВ Л С + \А-В\ Тестовые примеры Пример 1 Входные данные:А=3 В=4 С=6 Выходные данные: Числитель в аргументе тригонометрических функций равен 0.0666666666666667, а знаменатель 7, потому их отношение равно 0.00952380952380953 Значит, вся формула получается Х=0.476843791449574 В отформатированном виде Х= 0.477 Пример 2 Входные данные:А=2 В=1 С=1 Выходные данные: Числитель в аргументе тригонометрических функций равен 0.394427190999916, а знаменатель 2, потому их отношение равно 0.197213595499958 Значит, вся формула получается Х=0.159229275162654 В отформатированном виде Х= 0.159 6
Блок-схема / Ввод A J 1 Х:= e"*-(sin(7)+cos(7)) / Ввод В 7 / 7 / ^ / J Вывод А, В, С ^ / ВводС / / * г L г / / Вывод Y1.Y2.Y / Y1 := 0.5 +А-В Y2:= С+\А-В\ L L Вывод X Вывод X Y:=Y1/Y2 Т 7 7 ^ Конец ^ Листинг программы на Pascal programabc; var A,B5C,X,Y,Yl,Y2:real; begin // els - очистка рабочей области (консоли) от предыдущих данных els; // ввод данных т^еЬпОвведитеА'); readLn(A); тНеЬп('введите Bf); readLn(B); writeLn('BBeflHTe С); 7
readLn(C); // вычисление промежуточных данных // сначалачислитель Yl:=sqrt(sqr(A)+sqr(B))/(0.5 + А*В) - 1/А; // потом знаменатель Y2:=C+abs(A-B); // потом их отношение Y:=Y1/Y2; //теперь всю формулу: Х:= exp(-A/B)*(sin(Y)+cos(Y)); writeLn('Bbi ввели:'); writeLn('A=', А,' В=\ В,' С=\ С); \угкеЬп('Числитель в аргументе тригонометрических функций равенYl, V); writeLn('a знаменатель ',Y2,', потому их отношение равно Y); writeLn(!3Ha4HT вся формула получается Х=, X); // Х:8:3 обозначает, что для X отводится 8 знакомест, из них 3 знака после запятой (десятичной точки) writeLn('B отформатированном виде Х=, Х:8:3); end. Дополнительные сведения для выполнения работы «Линейные вычислительные процессы» Таблица 1.Стандартные математические функции Pascal Математическая запись функции Запись функции в TP |х| abs(x) ех ехр(х) COS X cos(x) sinx sin(x) 8
arctgx arctan(x) lnx ln(x) Гх sqrt(x) sqr(x) 7t pi При использовании этих функций результат получается типа real. Но есть исключение. При вычислении |х| результат получается того же типа, что и аргумент х. Все тригонометрические вычисления производятся в радианах. Кроме того, здесь представлены не все известные функции. Нет, например, тангенса. Для его вычисления потребуется воспользоваться . , ч sin(x) известным тригонометрическим тождеством tg(x) = . cos(x) Вычисление, например, арксинуса и арктангенса таково: х arcsin(x) -arctg 4Г- X J arcco$(x) = arctg Ну а для возведения в степень можно использовать формулу, верную для положительных значений*: ху = еНхУ) = еуНх) = ехр(у 1п(х)) Ввод/вывод языка Pascal Для вывода текстовой информации на экран в языке Pascal в консольном режиме, служат две процедуры write и writeLn. Ониимеютформат write(a,b,c, ...); writeLn(a,b,c, где a,b,c- параметры вывода (переменные, константы, выражения). Процедура writeLn может быть задана без параметров, в этом случае она просто переводит курсор на строчку ниже. 9
Разберем первую из них. Чтобы вывести некоторый текст, можно воспользоваться этой процедурой так^гке('текст'); Содержимое экрана после выполнения этой процедуры: Как видно из примера, выводимый текст заключается в апострофы. Если же требуется вывести значение некоторой переменной, то необходимо указать лишь ее имя. var x:byte; Содержимое экрана: х:=5; write(x); Эти два способа вывода можно комбинировать так: var write('x=',x); x:byte; Содержимое экрана: х:=5; В этих примерах производится вывод значенй переменных типа byte, но если выводить на экран переменную типа real (или любого типа описанного выше в одной таблице с ним), то она будет представлена на экране в экспоненциальном виде. Например: var write(x); x:real; Содержимое экрана: х:=5.001; 5.00100000000000Е+0000 10
Такая запись чисел удобна, если их значения имеют в экспоненте значения больше трех, но чаще всего в учебных задачах используют значения, для записи которых вообще нет необходимости в экспоненте. В этом случае лучше при выводе числа использовать форматирование или так называемую маску вывода: write(x:m:n). Здесь т - количество знакомест на экране выделяемое для печати всего числа; п - количество знаков после десятичной точки (до скольких знаков число округляется). Указанное форматирование применимо только для чисел, которые имеют вещественный формат (real). Для целочисленных переменных вывод их значения следующий: write(x:m). Т.е. число знаков после запятой не указывается, поскольку их там просто нет. Рассмотрим пример вывода: var write(x:6:2); x:real; Содержимое экрана: 7.54 х:=7.538; В этом примере число округлено до двух знаков после десятичной точки, для него выделено на экране 6 знакомест, но т.к. оно заняло лишь 4, то оставшиеся два знакоместа слева были заполнены пробелами. Процедура writeLn выполняет те же функции, что и write, но в отличие от нее переводит курсор в начало следующей строки. Вообще, в скобках у процедур вывода указывается через запятую все то, что нужно вывести. Выводу подвергаются константы и переменные простых типов непосредственно. Для вывода сложных типов, таких как, например, массивы и записи, необходимо указывать конкретное поле вывода или адрес элемента в массиве. Вывод строк тоже осуществляется непосредственно. Для ввода значений с клавиатуры используют процедуру readLn. Она приостанавливает работу программы, ожидая ввода значения. После 11
нажатия клавиши Enter набранное значение помещается в первую переменную указанную в качестве параметра процедуры. Далее после следующего ввода набранное значение помещается в следующую переменную и так далее. Формат у процедуры таков: readLn(a,b,c, ...); где а,Ъ,с- параметры ввода (переменные). Процедура readLn может быть задана без параметров, в этом случае она просто приостанавливает выполнение программы до тех пор, пока не будет нажата клавиша Enter. Здесь стоит сказать, что обычно readLn не используется сама по себе, поскольку приостанавливает работу алгоритма, ожидая нажатия клавиши. Пользователь программы, естественно, в большинстве случаев будет просто не в курсе того, что и в какой последовательности в данный момент нужно вводить. Для внесения ясности нужно обязательно делать приглашение к вводу, как правило, при помощи процедур write I writeLn. Потому всегда, где в блок-схемах алгоритмов идет блок ввода, подразумевается в программе наличие, как минимум пары стандартных процедур. Это, помимо readLn, еще и предшествующий write 1 writeLn, выводящий комментарии к тому, что нужно ввести в данном месте. Пример записи процедуры: ПРИМЕР Ввести с клавиатуры значение аргумента и вычислить значение функции у = sin(x). Program exJO; writeLn^y^yre^) var end. x,y:real; Содержимое экрана: begin writeCx^')? readLn(x); y:=sin(x); X=-2.36 J у=Ш-0.70 12
Символом «-1 обозначено место, в котором нажата клавиша Enter. Контрольные вопросы по теме «Линейные вычислительные процессы» 1. Какой алгоритм называется линейным? 2. Из каких команд составляется линейный вычислительный алгоритм? 3. В каком случае значение переменной считается неопределенным? 4. Что происходит с предыдущим значением переменной после присваивания ей нового значения? 5. Как вы думаете, можно ли использовать в арифметическом выражении оператора присваивания неопределенную переменную? К каким последствиям это может привести? 6. Что такое оператор присваивания? 7. Какие операторы ввода и вывода существуют в PascaPe? Варианты заданий по теме «Линейные вычислительные процессы» Вычислить, упростив при помощи дополнительной переменной. ( ( г 1. JTW COS sin arctan((,4+ U2-zn + яг/2 J J ) , -IA+B+C f Y = B-e A*B+C \A + B + C\- yJA + B + C A2+B2 + C2 3. M = (A3 +B2 + C) sin(^3 + 52 + c) cos(A3+B2 + c) - arcsm .MlJ Z = B ( r tg p\ + (A + Bf A-B + e 13
5. D = (A + B) ABsin A + B \ f 7*. IA2+B2+\AB\ ■BAcos A + B Ja2 + b2+\ab\ J J r K + M л ,yJK2+M2 K\ cos K' 7. T = 0,15ЛГ a \a + b+c\ sin(a-c) 8. P = \a(AB + C2)- sin2 Jab+c2 AB-C 9. Д = a + b + c( ^ a + b + c\( a+b+cY^ a + b + c 10. S = A(|c-s|)(sm(ln(A^)) + cos(ln(A«c-fi|)))) 11. / = (Ax3 + Bx2 + Cx)eAB c^Ma\) rsm(A+B2-\c\) 12. / = 13. К = Ы 14. M=ln2 f f A arcsin В I V sin(A + B2-\C\) A + B2-\C\ + arccos A + BZ-\C\ J) sin ,( InABC \ {2A + B/CJ f. ItcABC \ cos 1+ I, 2A + B/CJ 2ЯАВС 2A+B/C a + b + a' b2-l +4-sin 15. U = \V+V2 + ^-, { V + x2 sin V + V2 + 2 2-х ^ V + x2 W-2-х2 14
16. Тш f°i^irLT, sin^ln|/ + £ + fc3|) 17. G = - AC2 I AC2 А + 2В + ЗСШ + 2В + ЗС sin(/rA3 + C) 18. As S + K2 + S-K-cos(—S \ \ -tg K2 + SKcos 19. D-- F" H2 + FH + \ -In FH H2 + FH + l x+xy+x2+y2+y / 20. R = sm2(x+yn:)-e +yx -ctg [a+b+ab+a2yc2 ~(a+b+ab+a2}/c2 x+xy + x2 + y2 + }Л xy2 + yx2 21. G = b In sin — U J 22. / = in ma2 + — sm ч V m 2 b sm| ma H— m + COS к— 23. L = + Д3 + aR2 + ito2) j • cos2 jjr( Д3 + oR2 + 24. W = - 2 / mv ,2 =-sin 2 vfe mv +— m я-In 2 v& mv +— m 25. N =— In Г-sin2 лг— +e ^ k+xJ x ( I \ k x J 26. e = (Vx2 + r2+z2) 27. £ = eU o) -In V Wx2+y2+z2 xr К D 15
28. N = {]nJ(s-k)2 + s2 + k2^ctg2y(s-kf + s2 + k2)j 29. M=cfg(ln(|Af+ 2) + 2fi) 30. U = (l2-R2)"+^m{bi((l2-R2)H)} 3.2. Разветвляющиеся вычислительные процессы Ниже приведен пример оформления лабораторной работы. Л. Р. № Студент Иванов И. И. Группа ХХ-999 «Разветвляющиеся Дата дд.мм.гт вычислительные Допуск процессы» Выполнение Отчет Условие задачи 1 Ввести числах, выяснить что больше: целая часть числах, или его дробная часть, умноженная на 10. Если первое, то число разделить на 10, если второе, то дробную часть от него отнять. Тестовые примеры к задаче 1 1) Входные данные: X = 3.08763 Выходные данные: Целая часть числа равна 3 дробная часть числа равна 0.08763 целая часть больше число после изменения х=30.8763 2) Входные данные:Х = 1.2345 16
Выходные данные: удесятеренная дробная часть равна Целая часть числа равна 1 2.345 дробная часть числа равна 0.2345 число после изменения х=1 дробная часть, умноженная на 10 больше Блок-схема к задаче 1 Листинг программы на языке Pascal к задаче 1 program Zadl; var x,y,z:real; begin \угкеЬп('введите x'); readLn(x); 17
// рассчитываем целую часть y:=tmnc(x); ^угкеЬп('целая часть числа равна \ у); // рассчитываем дробную часть z:=frac(x); \угкеЬп(тдробная часть числа равнаz); // проверка условия if y>z*10 then begin х^гкеЬпСцелаячастьбольше'); x:=x*10; end else begin \угИеЬпСдробная часть, умноженная на 10 больше'); >угНеЬп('удесятеренная дробная часть равна ',z*10); x:=x-z; end; \угйе1л1('число после изменения х=',х); end. Условие задачи 2 Ввести четырёхзначное число, выяснить равны ли первая и последняя цифра в его записи. Если цифры равны и четны, то разделить их на два. Если цифры не равны и первая цифра больше последней, то поменять их местами. Если цифры не равны и первая цифра меньше последней, то поменять местами вторую и третью цифры. Тестовые примеры к задаче 2 РВходные данные:Х = 4124 I Выходные данные: 18
первая и последняя цифры четны и равны в результате преобразований получено число X = 2122 2)Входные данные:Х = 2658 Выходные данные: первая и последняя цифры не равны в результате преобразований получено число X = 2568 3)Входные данные:Х = 8562 Блок-схема к задаче 2 с L J ВводХ 7 Y : 'X г x1:=Y div 1000 Y« Ymod 1000 x2»Y div 100 6 Выходные данные: первая и последняя цифры не равны в результате преобразований получено число X = 2568 4)Входные данные:Х = 5125 Выходные данные: первая и последняя цифры равны, но они не четны в результате преобразований получено число X = 5125 1 Y:« Y mod 100 x3:=Y div 10 Y = Y mod 10 Y = 1000*x1+100*x2+ 10*x3 + x4 / Вывод X, Y, 7 / x1, x2, x3, x4 / 19
'первая и последняя цифры равны, но они не четны' х1>х4 >l" Y.=x1 Y=x2 i х4 =х4 div 2 х2=хЗ x4=Y x3:-Y X=1000*x1+100*x2+ 10*x3 + x4 Вывод X 7 ^ Конец ^ Листинг программы на языке Pascal к задаче 2 Program Ciferki; varX,Y,xl,x2,x3,x4: integer; begin els; writeLn('BBeflHTe четырёхзначное число'); readLn(X); //чтобы не потерять исходное число, копируем его в Y Y:=X; xl:=Ydiv 1000; // первая цифра Y:=Ymod 1000; // отбрасываем первую цифру x2:=Ydiv 100; // вторая цифра Y:=Ymod 100; // отбрасываем вторую цифру x3:=Ydiv 10; // третья цифра 20
Y:=Ymod 10; // отбрасываем третью цифру x4:=Ydiv 1; // четвертая цифра // проверяем правильно ли мы разложили введённое число Y:= 1000*xl + 100*х2 + 10*хЗ + х4; writeLn(*Ha входе было'Д,', на выходе получилось'^ writeLnCl-я цифра:', xl); \¥гкеЬп('2-я цифра:', х2); writeLn('3-H цифра:', хЗ); \¥гкеЬп('4-я цифра:', х4); if xl=x4 then begin if xl mod 2=0 й1еп/Мне^х>вфжм,тхх1=х4 begin writeLn(rj^Ba*Hnocra^i^ip^ xl:=xl div 2; x4:=x4 div 2; end else writeLn( 1-я и последняя щфрырашы, но ве четны); end else begin writeLn('пepвaя и последняя цифры не равны'); if xl>x4 then begin Y:=xl; xl:=x4; x4:=Y; end 21
else begin Y:=x2; x2:=x3; x3:=Y; end end; X:= 1000*xl + 100*x2 + 10*x3 +x4; writeLn('B результате преобразований получено число X); end. Контрольные вопросы по теме «Разветвляющиеся вычислительные процессы» 1. Определение разветвляющегося вычислительного процесса. 2. Блок-схема условного оператора и порядок его исполнения. 3. Оператор, реализующий разветвляющийся вычислительный процесс. 4. Запись условий: понятие условия, выражения отношения, логические операции, логические выражения. 5. Запись условия попадания значения в интервал и вне интервала. Варианты заданий по теме «Разветвляющиеся вычислительные процессы» Простые развилки 1. Вывести сумму чисел х + y + z, определить четная ли она, если четная, то найти значение произведения х • у • z. 22
2. Определить, делится ли на целое число х целое число у без остатка. Если делится, то разделить х на у и вывести его. 3. Проверить на неотрицательность значение выражения s'm(tg(2nx/k)y Если выражение неотрицательно, то значение к утроить. 4. Определить, имеет ли действительные корни уравнение ах1 + Ьх + с = 0. Если имеет, то значение а возвести в квадрат. 5. Ввести целое число X, получить число 7, которое равно половине X, если X - четное и удвоенному значению X в противном случае. 6. Ввести целые числа X и 7 и действительное число Z. Модифицировать число Z по формуле Z/k9 если X не делится на 7 и Z -к в противном случае, (к - остаток от деления X на 7) 7. Если 2т больше чем 2т, то m увеличить на 10, в противном случае т уменьшить в два раза. 8. Для двух неравных чисел тип определить, какая из дробей — или п — ближе к числу п. В первом случае число т удвоить, во втором т удвоить число п. 9. Определить, делится ли на 5 введенное число х, Если делится, то другому числу у присвоить 100, в противном случае у сделать равным 500. 10. Проверить, равно ли нулю выражение sm{x + a), где х - целая часть выражения tg(y). Если выражение обращается в ноль, то значение х утроить. 11. Для двух дробей — и —выяснить, равны ли их дробные части. Если п к дробные части равны, то вывести оба значения, если нет, то ограничиться выводом соответствующего сообщения. 23
12. Для двух дробей — и —выяснить, равны ли их дробные части. Если п к части равны, то вывести один раз значение дробной части; если не равны, то вывести обе дробные части. 13. Для дроби ~ определить, превышает ли дробная часть числа 0,5. п Если превышает, то число т удвоить, иначе удвоить число п. 14. Определить, превышает ли умноженная на 10 дробная часть числа т т _ — целую часть —. Если превышает, то вывести значение на сколько. п п 15. Определить, является ли целая часть числа — четной. Если она п четная, то т возвести в квадрат, иначе п утроить. 16. Возвести во вторую степень число —, если его целая часть больше п числа к, где к - остаток от деления т на 5. 17. Ввести три числа х, у, z9 определить их сумму s. Если сумма больше или равна 100, то оставить числа без изменения, в противном случае определить число к ~ сколько не хватает в сумме, чтобы она была равна 100. 18. Определить, превышает ли число х значение числа к, являющегося остатком от деления т на 7. Если превышает, то х уменьшить на к; в противном случае х увеличить в к раз. 19. Выяснить, превышает ли модуль числа cos(#2) значение V2 /2. Если превышает, то х уменьшить вдвое, в противном случае х удвоить. 20. Определить, можно ли из квадрата со стороной а вырезать круг с радиусом г. Если возможно, то определить, какая часть S площади квадрата пойдет при этом в «обрезки». 24
21. Определить, можно ли из куба со стороной а вырезать шар с радиусом г. Если возможно, то определить, какая часть V объема куба пойдет при этом в «обрезки». 22. Ввести четыре числа а\, Ы и а29 Ь2 - стороны прямоугольников. Выяснить, равны ли их площади. Если не равны, то выяснить модуль разности их площадей. 23. Ввести значение V - некий объем воды. Выяснить, поместится ли он в цилиндрический стакан высотой h и радиусом г. Если не поместится, то выяснить, сколько воды перельется через край. 24. Абонент сотовой сети общался в течение дня по тарифу 0,25 у.е./ мин - х минут, по тарифу 0,1 у.е./мин - у минут. Определить, проговорил ли он за день на 2 у.е.; если не проговорил, то определить, сколько минут по цене 0,25 ему не хватает до суммарного счета 2,5 у.е. 25. У абонента сотовой сети первые 10 минут в день стоят 0,25 у.е./мин, а далее - 0,1 у.е./мин. Сколько за день потратил абонент, проговорив х минут. 26. У абонента сотовой сети первые 10 минут в день стоят 0,25 у.е./мин, а далее - 0,1 у.е./мин. После проверки счета абонент обнаружил, что он за день потратил х у.е. Сколько минут он говорил по первому и сколько по второму тарифу? 27. Ввести два числа а и Ъ. Определить, превышает ли сумма остатков от деления на 11 этих чисел число 11. Если превышает, то увеличить их оба на 5. 28. Ввести два числа а и Ь. Поделить нацело а на Ь. Определить четность полученного числа. Если полученное число четное, то возвести а и Ъ в квадрат. 29. Определить, делится ли на 3 без остатка сумма трех чисел х, у и z. Если делится, то определить произведение этих чисел. 25
Задачи с несколькими развилками 1. Ввести три целых числа х, у, z. Если хотя бы одно из них четное, то первому четному числу присвоить значение произведения этих чисел. 2. Ввести три действительных числа. Наименьшее из них заменить их средним арифметическим значением, а наибольшее их удвоенным произведением. 3. Вычислить X = тж(а + Ь + с,\а + Ь-с\9тт(а-Ь,2-а-с)) 4. Ввести три действительных числа х9 у, z. Вычислить q, w по формулам: q = max(x- у- z, 3-z-x, 2-(х+ у + z))', w = min (3 • х • у - \z\, q/2). Вычисленные значения выдать на печать. 5. Ввести с клавиатуры координаты точки Л(х,,у1) и определить, в какой четверти координатной плоскости она находится, и выдать об этом сообщение. Если одна из координат равна нулю, выдать сообщение: «точка находится на оси». 6. Ввести числа xvyv х29у29 х39у3, которые являются значениями координат трех точек на плоскости. Определить, образуют ли они треугольник (точки не лежат на одной прямой), если, образуют, то определить, лежит ли он в первой четверти координат или нет, и выдать об этом сообщение. 7. Ввести положительные числа а9Ь9с. Определить, существует ли треугольник с длинами сторона, Ь,с и выдать об этом сообщение. Если треугольник существует, то определить является ли он равносторонним. 8. Ввести Jtpyp х2,у29 х39у3 - координаты трёх вершин прямоугольника, стороны которого параллельны координатным осям. Найти координаты его четвёртой вершины. 9. Определить значение абсолютной температуры воздуха Т на различных высотах и выдать его на печать. Значение высоты в метрах 26
h (0 < h < 4600) ввести с клавиатуры. На высоте ниже 11000 метров температура вычисляется, как Т = 288,16-0,0065-h. На высоте от 11000 до 25000 метров температура постоянна и равна 216,16. При высоте выше 25000 метров температура определяется по формуле Т = 216,16 + 0,00276098(& - 25000). Ю.На спортивных соревнованиях время учитывают три судьи. Если время бега хотя бы у двух судей совпадает, то результат равен этому значению, если все показания различны, то результат приравнивается среднему арифметическому показаний судей. Ввести три числа tl9t2,t3 - показания трех секундомеров. Определить и выдать на печать Т - время, засчитанное спортсмену. 11.Ввести три числа k,b,R. Определить и выдать на печать число точек пересечений прямой, заданной уравнением у = к-х + Ь9 с окружностью, заданной уравнением х2 + у2 = R2. 12. Даны целые числа к J. Если числа не равны, то заменить каждое из них числом, равным наибольшему из исходных, а если равны и отрицательны, то возвести их в квадрат, если равны и неотрицательны, то увеличить их значения в два раза. 13.Ввести с клавиатуры номер года. Определить является ли он високосным. Високосным является год, номер которого делится на 4. Если номер года оканчивается двумя нулями, то для високосности он должен делиться на 400. Например, 2000 - високосный, 1900 - невисокосный. 14.Ввести целочисленные переменные а9Ь,с9 если все три значения кратны 3, то вычислить их сумму, в противном случае чётные значения а,Ь,с утроить. 15.Ввести 3 числа А, В, С. Определить количество положительных и отрицательных чисел в этом наборе. 27
16.Ввести три числа: А, В9 С, Вывести все пары чисел одного знака. П.Известны три натуральных числа: С-часы, М- минуты, S - секунды. Написать программу, используя условный оператор, которая определяет время через 15 секунд. 18.Ввести три числа: А, В, С. Найти среднее из них (т. е. число, расположенное между наибольшим и наименьшим). 19.Ввести три числа: А, В, С. Найти произведение двух наименьших из них. 20.Ввести с клавиатуры значения координат вектора A(xa,ya,za) и вектора B(xb,yb,zb). Вычислить модули векторов и вывести значения на экран. Если модуль А окажется больше модуля вектора В, то вычислить скалярное произведение этих векторов S = (xaxb + yayb + zazb), иначе 21.Ввести два двузначных числа; выяснить, есть ли у них одинаковые цифры. Если таковые имеются, то указать какие это цифры и сколько их. 22.Дано трехзначное число. Выяснить, первая или последняя цифра в его записи наибольшая (выдать сообщение об этом). Если наибольшая первая цифра, то проверить на нечетность среднюю цифру, о чем тоже сообщить. Если средняя цифра окажется четной, то разделить ее пополам и вывести полученное число. 23. Дано трехзначное число. Выяснить, первая или вторая цифра в его записи наименьшая (выдать сообщение об этом). Если наименьшая первая цифра, то поменять местами первую и вторую цифры. Далее, проверив все число на кратность трем, вывести на печать вместе с результатом проверки. 24.Дано трехзначное число. Выяснить, делится ли на девять сумма его цифр. Если сумма делится, то все число целочисленно разделить на три и вывести. Для полученного числа проверить четность и в случае успеха разделить его пополам, а в противном случае удвоить. Результат вывести. вычислить значение выражения R = Лв\ - \А\ 28
25.Шестизначное число называют счастливым, если сумма первых трех его цифр равна сумме трех последних цифр. Число будет называться суперсчастливым, если оно, во-первых, счастливое, а во-вторых, сумма первых трех его чисел равна 11 или 22. Выяснить, является ли введенное шестизначное число счастливым, суперсчастливым или обыкновенным. 26.Дано четырехзначное число. Выяснить, какая цифра стоит раньше в его записи: 2 или 7. Выдать об этом сообщение, причем если таких цифр нет, то ответом должно стать сообщение «нет ни двоек, ни семерок в записи этого числа». 27.Ввести числа т9п. Если т2>п29 вычислить и отпечатать 28.Найти наибольшее среди четырех неравных чисел и уменьшить его в 5 раз. 29.Дано целое число вывести его строку-описание вида «отрицательное четное число», «нулевое число», «положительное нечетное число» и т. д. ЗО.Дано целое число, лежащее в диапазоне 1-999. Вывести его строку- описание вида «четное двузначное число», «нечетное трехзначное число» ит. д. 31.Даны три точки А(ха9уа), B{xb9yb)9 С(хс,ус). Выстроить эти точки в порядке удаленности от начала координат. 32.Написать программу для нахождения наименьшего из трех чисел. Если наименьших чисел 2, то домножить их на -1. Если все 3 числа равны, то выдать об этом сообщение. 33.Даны 3 точки А{ха9уа)9 B(xb9yb)9 С{хс9ус). Выяснить лежат ли они на одной прямой. Если не лежат, то вычислить периметр треугольника ими 29
образуемого, в противном случае проверить, проходит ли прямая, на которой они находятся,через начало координат. 34.Написать программу отыскания действительных корней уравнения ах3 + fcx=0 для произвольных а и b (учесть возможность равенства нулю а и b как одновременно, так и поодиночке). 35.3аданы размеры прямоугольного отверстия А и В. Определить, пройдет ли кирпич размерами X, Y, Z через это отверстие, если прикладывать его только ребрами параллельно сторонам отверстия. 3.3. Циклические вычислительные процессы Ниже приведен пример оформления лабораторной работы. Л. Р. № Студент Иванов И. И, Группа ХХ-999 «Циклические Дата дд.мм.гг вычислительные Допуск процессы» Выполнение Отчет Условие задачи 1 Трижды определить значение выражения, используя три различных цикла п + X Тестовые примеры к задаче 1 1) Входные данные: к = 5, х = 1 Выходные данные: S = 0.707+3.016+7.517+14.672+24.878 полученная сумма S = 24.878 2) Входные данные: к = 3, х = 0 Выходные данные: S = 1.000+3.828+ 9.025 полученная сумма S = 9.025 30
Блок-схемы к задаче 1 использование 5) в) цикла for использование использование цикла repeat цикла while Листинг программы на Pascal к задаче 1 (вариант с циклом for) program cicleForSumm; var n,k:integer; x,S:real; begin els; \¥гйеЬп('Введите k, x'); readLn(k,x); for n:=l to k do S :=S+sqr(n)/sqrt(n+x); 31
\¥гкеЬп('полученная сумма S=',S:8:3); end. Листинг программы на Pascal к задаче 1 (вариант с циклом repeat) program cicleRepeatSumm; var n,k: integer; x,S:real; begin els; \¥гйеЬп('Введите k, x'); readLn(k,x); S:=0; n:=l; repeat S:=S+sqr(n)/sqrt(n+x); writeLn(S,n:5); n:=n+l; until n>k; ^ткеЬп('полученнаясумма S=',S:8:3); end. Листинг программы на Pascal к задаче 1 (вариант с циклом while) program cicleWhileSumm; var n,k: integer; x5S:real; begin els; \угке1л1('Введите k, x'); readLn(k,x); S:=0; n:=l; 32
while n<= к do begin S:=S+sqr(n)/sqrt(n+x); n:=n+l; end; writeLn('nony4eHHaH сумма S=',S:8:3); end. Условие задачи 2 Трижды протабулировать функцию, используя три различных цикла / (х) = (х + af на интервале хе [-2; 3], Ах = 0,3, указав при этом значения функции с нечетной и четной целой частью. Тестовые примеры к задаче 2 Входные данные: а = 12 Выходные данные: f( -2.00) = 100.00 - целая часть 100 четная f( -1.70) = 106.09 - целая часть 106 четная f( -1.40) = 112.36 - целая часть 112 четная f( -1.10) = 118.81 - целая часть 118 четная f( -0.80) = 125.44 - целая часть 125 нечетная f( -0.50) = 132.25 - целая часть 132 четная f( -0.20) = 139.24 - целая часть 139 нечетная f( 0.10) = 146.41 - целая часть 146 четная f( 0.40) = 153.76 - целая часть 153 нечетная f( 0.70) = 161.29 - целая часть 161 нечетная f( 1.00) = 169.00 - целая часть 169 нечетная f( 1.30) = 176.89 - целая часть 176 четная f( 1.60) = 184.96 - целая часть 184 четная f( 1.90) = 193.21 - целая часть 193 нечетная f( 2.20) = 201.64 - целая часть 201 нечетная f( 2.50) 210.25 - целая часть 210 четная f( 2.80) = 219.04 - целая часть 219 нечетная 33
Блок-схемы к задаче 2 а) использование цикла for б) использование цикла repeat в) использование цикла while
Листинг программы на Pascal к задаче 2 (вариант с циклом for) program cicleForTabul; var xO,f,x,a:real; N,k: integer; begin els; writeLnCBBeflHTe a'); readLn(a); x0:=-2; N:=trunc((3-x0)/0.3); for k:=0toNdo begin x:=x0+0.3*k; f:=sqr(x+a); wTite(T(\x:8:2,') =',f:8.2); if trunc(f) mod 2 <> 0 then writeLn(f - целая часть '.trunc(f) ,' нечетная ') else writeLnC - целая часть f,trunc(f) четная'); end; end. Листинг программы на Pascal к задаче 2 (вариант с циклом repeat) program cicleRepeatTabul; var f,x,a:real; begin els; \угкеЬп('Введите a'); readLn(a); x:=-2; 35
repeat f:=sqr(x+a); writeOf(\x:8:2/) =',f:8:2); if trunc(f) mod 2 о 0 then writeLn(' - целая часть \trunc(f),' нечетная') else writeLnC - целая часть ',trunc(f),' четная'); x:=x+0.3; until x>3; end. Листинг программы на Pascal к задаче 2 (вариант с циклом while) program cicleWhileTabul; var f,x,a:real; begin els; writeLn('BBeflHTe a'); readLn(a); x:=-2; while x <= 3 do begin f:=sqr(x+a); writeCfC?x:8:2;) =\f:8:2); if trunc(f) mod 2 <> 0 then begin writeLnC - целая часть \trunc(f)нечетная ') end else writeLnC - целая часть ',trunc(f)четная'); x:=x+0.3; 36
end; end. Контрольные вопросы по теме «Циклические вычислительные процессы» 1) Какие алгоритмы называются циклическими? 2) Блок-схема цикла и назначение ее отдельных частей. 3) Классификация циклов. 4) Назначение циклов и их отдельных компонентов. 5) Укажите, сколько операторов можно разместить в теле цикла? 6) Можно ли в теле цикла изменять значение параметра цикла? 7) Можно ли вне тела цикла использовать значение параметра цикла? Варианты заданий по теме «Циклические вычислительные процессы» Задания по теме «Решение итерационных задач» Используя три различных цикла определить значение. б 1. Суммы, S = ]Г (л2 + х) • 4 2. Произведения, 3. Суммы, 4. Произведения, Р = Yl(n + х) • 9 5. Суммы, S = 2] bi (п). 6. Суммы, S = ^Г(л +1)2. п=1 7. Произведения, 37
8. Произведения, Р = Т~Т (-i=r + л 1. "W2w J 9. Суммы, 5 = 2](л;-и-1) . «=i 10. Произведения, Р = J^[^2^:-r--s/n^. ,1=1 б 11. Произведения, Р = |~[ (га + 2х). 12. Суммы, 5 = 5] и=1 4 tt + X £?(п + 1)2 13. Произведения, P = J"Jln(n + 2x). ,i=i 4 2 14. Суммы, 5=^ т гз" • «=i (л + я) 15. Произведения, P = fJ х + \\— • «=i ^ V л ^ * 5 16. Суммы, 5 = 2] (л + 3)3 4 Г /2^\ 17. Произведения, Р = ТТ 1 + J— „Д V п * 2П 18. Суммы, 5 = 2]—. Jk ои+1 19. Суммы, 5 = У—. п=1 71 + — 20. Произведения, Р = |~[ 5 21. Произведения, Р = |~[ (2л: - п2). ,1=1 38
к 22. Суммы, £ = ]Tsin(/rtt/9). и=1 5 23. Произведения, Р = + |sin(л • я7£)[). к 24. Суммы, S-^y/n-cos(/r-rc/8). «=i 4 1 4* W 25. Произведения, P^fJ 26. 27. ,1=1 l + \lx2+n2 к 2 + п3 Суммы, 5 = V , п=1\1Х2+П2 Произведения, Р = П-—7— ,i=i 2 +л/и3 28. Суммы, £ = £А±£. n=i y/l + n2 29. Произведения, Р = ]~| т=. ,i=i 1 + * 30. Суммы, S = V—г. Задания по теме «Табулирование функции». Используя три различных цикла, трижды протабулировать функцию. 1. f{x)- ^(х/а + а) на интервале хе [-2; 2.5], Ах = 0,35, указав значения аргумента, при которых функцию нельзя вычислить. 2. fix)-—,—^х*а на интервале *e[-4;5l, Д* = 1, указав v ' х~2х2-х+2 значения аргумента, при которых функцию нельзя вычислить. 3. f(x) = y/x3 -6л:2 +Ш-6 на интервале л:е[0;3.5], Ал: = 0,4, указав значения аргумента, при которых функцию нельзя вычислить. 39
4. /[к) = —£— 7 на интервале к е [-6; 3J, М = 1, учтя при этом, что О sin(0)=1 5. /(д:) = А -3 -г на интервале хе [-2; 3], Ах = 0,5, учтя х ""** 2х "~ "I- 2 sin(O) , при этом, что —^-^ = 1. 2* + 2~х 6. /(.*;) = — - на интервале л*е[-2;5], Ах = 0,75, указав х + 5х 4- 2,х—8 значения аргумента, при которых функцию нельзя вычислить. 7. /(*) = Г +1' ^ * четном на интервале А:е [-2; 5], М = 1. - а, и/ш £ нечетном q *п\ \к3 + а> при к четном г , 8. / (л) = ч на интервале к е [-3; 8J, М = 1. [а-к, при к нечетном 9. /(х) = ——-—- на интервале *е[-3;6], Д* = 1, указав значения аргумента, при которых функцию нельзя вычислить. ах2 + 3 10. f(x) = ; на интервале лге[-9;211, Ах = 3, указав значения sin(^;c/6) аргумента, при которых функцию нельзя вычислить. \(х + а)2, если |sin(x)|>^ 11. f\x)~\ на интервале хе [-3; 2], Ах = 0,3. |х + 1, если\&ш(х)\<$ fx + *Ja, если |cos(jc)| >-4- 1 1 V2 на интервале хе [-2; 7], Ах = 0,4. х-19 если |cos(x)|<-jj- 40
1 13. /(*) = хе[-2;7], Ах = 0,75. 14. /(х) = если л; + 5* + 2х-8 * О х3 + 5х2 + 2х - 87 на интервале а • еслих3 + 5х2 + 2х 8 = О если л:3 + 9л;2 + 26jc+24^0 л;3 + 9л;2 + 26л;+ 24' "^ 2\ еслих3 + 9л;2 + 26л; + 24 = О интервале хе [-5; 2], Ах = 0,5. 15. /(л) = ——^2+а на интервале х€[—4; 5], Ах = 1, указав х 2х Л- "Н 2 значения аргумента, при которых функцию нельзя вычислить. 16. /(x) = sin(tf-tg(x)) на интервале хе[-4;5], Ал: = 0,43, указав при этом, превышает модуль вычисленной функции •j-, или не превышает. 17. /(x) = sin2(ctg(x + a)) на интервале д:е[-2;8], Ах = 0,6, указав при этом, превышает модуль вычисленной функции или не превышает. 18. f(x) = tg(x2 + 3-fc-x) на интервале хе[-1;7], Ах = 0,6, указав при этом, делится или не делится на 3 целая часть вычисленной функции. 19. /(х) = yj^2a'x + х2 + ах - з| на интервале хе[-3;8], Ах = 0,8, указав при этом, делится или не делится на 5 целая часть вычисленной функции. 20. /(x) = ctg(x3-£-x) на интервале хе[-3;5], Ах = 0,6, указав при этом, превышает или не превышает значение ± модуль дробной части вычисленной функции. 21. f(x) = yj\yx -sin(x)| на интервале хе[-3.5;б], Дх = 0,7, указав при этом, превышает или не превышает значение ^ модуль дробной части вычисленной функции. 41
22. f(x) = \j\eKx * (l — sin(x))j на интервале x€[-5;8], Ax = 1,2, указав при этом, превышает или не превышает значение модуль дробной части вычисленной функции. 23. f(x) = \j3kx + 2kx на интервале х€[-2.5;7], Ах = 0,6, указав при этом превышает или не превышает остаток от деления целой части функции на 3 остаток от деления целой части этой функции на 4. 24. /(jc) = ^|з* • (cos(х2) + sin(х))| на интервале хе[-3.5;б], Ах = 0,7, указав при этом, превышает или не превышает функция значения]/: • sin (х)|. 25. /(х) = \1з~к2х + 2~к*2 на интервале ле [-1.5; 6], Ах = 0,4, указав при этом, превышает или не превышает функция значения |j- • cos(x)|. 26. /(х) = 2**(х2 + х-1) на интервале ле[-1.5;5], Ах = 0,4, указав при этом, превышает или не превышает остаток от деления целой части функции на 2 остаток от деления целой части этой функции на 3. ^+х\если |cos(x)|>^ на интервале хе [-3; 3J, ^-|cos(x)|, ecjm\cos(x)\uj- 27. /(х) = Ах = 0,35. sin(x3+x2-4x-4) 28. /(х) = А \ = на интервале хе[-3;3], Ах = 0,5,учтя х + х -4х-4 sin(O) при этом, что —= 1. , ч fa + 12divfe, при к четном г . 29. / (jfc) = J на интервале fee [-10; 10], М = 1. [к , ири & нечетном лЛ ./7ч (fe + a)2, при к четном . г , о1 А1 1 30. Д£) = <р ; ^ на интервале ке [-4; 8], М = 1. [fcmod3, при к нечетном 42
3.4. Одномерные массивы Ниже приведен пример оформления лабораторной работы. Л. Р. № Студент Иванов И. И. Группа ХХ-999 «Одномерные Дата дд.мм.гг массивы» Допуск Выполнение Отчет Условие задачи №1 Ввести одномерный массив А, состоящий из 9 элементов. Определить среднее арифметическое четных элементов. Тестовые примеры к задаче №1 1) Входные данные; Исходный массив А: 3 4 25 8 2 2 1 н 10 Выходные данные: В массиве всего 5 четных элементов, их сумма S = 4+8+2+2+10 - 26. Среднее арифметическое равно 26/5 = 5,2. 2) Входные данные: Исходный массив А: 15 22 11 23 Выходные данные: В массиве всего 3 четных элемента, их сумма S = 2+22+6 = 30. Среднее арифметическое равно 30/3 = 10. 43
Блок-схема к задаче №1 ^ Начало у -± -\ i := 1 , 9 V J Ввод А[ I ] J S =0 т к:=0 Листинг программы на Pascal к задаче №1 program ABC; var A:array[l ..9] of integer; i,k, S:integer; SrA:real; begin //ручной ввод массива \угйеЬп('Вводим элементы массива А:'); for i:=l to 9 do begin write('A[',i,']='); readLn(A[i]); end; // сумма и количество четных S:=0; k:=0; for i:=l to 9 do 44
if A[i] mod2 = 0then begin S:=S+A[i]; k:=k+l; end; // подсчет среднего арифметического SrA:=S/k; writeLn('cpenHee арифметическое четных = ',SrA:8:2); end. Условие задачи №3 Ввести одномерный массиве, состоящий из ^элементов. Каждый второй элемент увеличить в 10 раз. Массив вывести до изменения и после. Тестовые примеры к задаче №2 1) Входные данные:К = 9 Исходный массив А: 3 1 25 0 -2 4 1 12 10 Выходные данные: Полученный массив: 3 10 25 0 -2 40 1 120 10 2) Входные данные:Ы = 15 Исходный массив А: 9 1 15 5 2 22 11 23 6 2 3 7 21 31 17 Выходные данные: Полученный массив: 9 10 15 50 2 220 11 230 6 20 3 70 21 310 17 45
Блок-схема к задаче №2 Листинг программы на Pascal к задаче №2 program ABC; const Nmass=100; var A:array[l..Nmass] of integer; i,N: byte; begin //ручной ввод массива тойеЬп('Введите число элементов в массиве А'); readLn(N); \угкеЬп('Вводим элементы массива А:'); for i:=l to N do begin write('A[',i,']='); readLn(A[i]); 46
end; //вывод массива до изменения ткеЬп('Исходный массив А:1); for i:=l to N do write(A[i];5); writeLn; // модификация массива for i:=l to N do if i mod 2 = 0 then A[i]:=A[i]*10; //вывод массива поле изменения writeLn; writeLn('MaccHB А после изменения:'); for i:=l toNdo write(A[i]:5); end. Контрольные вопросы по теме «Одномерные массивы» 1. Что такое одномерный массив? 2. Почему одномерный массив является структурированным типом данных? 3. Что такое размерность массива? Какого типа могут быть элементы массива? 4. Какого типа могут быть индексы элементов массива? 5. Какими способами может быть заполнен массив? Какие действия выполняют обычно над элементами массива? 47
Варианты заданий по теме «Одномерные массивы. Простейшие алгоритмы обработки» Расчет данных 1. Ввести одномерный массив А из 10 элементов. Определить в нем количество элементов, кратных трем. 2. Ввести одномерный массив А из 12 элементов. Определить в нем произведение четных элементов. 3. Ввести одномерный массив А из 11 элементов. Определить в нем сумму элементов, значения которых лежат вне диапазона [-1; 5], 4. Ввести одномерный массив А из 9 элементов. Определить среднее геометрическое элементов, значения которых лежат в диапазоне [2; 10]. 5. Ввести одномерный массив А из 15 элементов. Определить в нем среднее геометрическое элементов, стоящих на нечетных позициях. 6. Ввести одномерный массив А из 14 элементов. Определить среднее арифметическое элементов, стоящих на позициях, не кратных тре. 7. Ввести одномерный массив А из 13 элементов. Определить произведение элементов, чье значение без остатка делится на 2 и не делится на 3. 8. Ввести одномерный массив А из 12 элементов. Определить в нем сумму элементов, чье значение без остатка делится на 3 и не делится на 2. 9. Ввести одномерный массив А из 11 элементов. Определить в нем сумму элементов, стоящих на позициях, чей номер больше записанного в них значения. 10. Ввести одномерный массив А из 10 элементов. Определить в нем количество элементов, квадрат которых больше 25. 11. Ввести одномерный массив А из 14 элементов. Определить в нем произведение элементов, квадрат которых меньше 16. 48
12. Ввести одномерный массив А из 13 элементов. Определить в нем сумму модулей отрицательных элементов. 13. Ввести одномерный массив А из 15 элементов. Определить в нем среднее геометрическое модулей отрицательных элементов. 14. Ввести одномерный массив А из 12 элементов. Определить в нем среднее геометрическое квадратов нечетных элементов. 15. Ввести одномерный массив А из 11 элементов. Определить в нем количество тех элементов, которые при делении на 3 дают остаток 2. 16. Ввести одномерный массив А из 13 элементов. Определить в нем среднее арифметическое тех элементов, которые при делении на 4 дают остаток 1 или 3. 17. Ввести одномерный массив А из 12 элементов. Определить в нем произведение тех элементов, чей модуль лежит в диапазоне [ 1; 5]. 18. Ввести одномерный массив А из 15 элементов. Определить в нем произведение тех элементов, чей модуль лежит в диапазоне [ 1; 5]. 19. Ввести одномерный массив А из 13 элементов. Определить количество тех элементов, которые без остатка делятся на собственный индекс. 20. Ввести одномерный массив А из 14 элементов. Определить количество тех элементов, стоящих на нечетных позициях, которые сами четны. 21. Ввести одномерный массив А из 14 элементов. Определить в нем сумму остатков от деления на 3 тех элементов, которые не кратны трем. 22. Ввести одномерный массив А из 13 элементов. Определить произведение остатков от деления на 4 тех элементов, которые не кратны четырем. 23. Ввести одномерный массив А из 10 элементов. Найти сумму индексов четных элементов массива. 49
24. Ввести одномерный массив А из 11 элементов. Найти произведение индексов элементов массива больших семи. 25. Ввести одномерный массив А из 14 элементов. Определить сумму квадратов индексов элементов делящихся на три без остатка. 26. Ввести одномерный массив А из 12 элементов. Определить среднее арифметическое модулей отрицательных элементов. 27. Ввести одномерный массив А из 11 элементов. Определить произведение элементов, которые при делении на 2 дают такой же остаток, как и при делении на 3. 28. Ввести одномерный массив А из 13 элементов. Определить сумму элементов, которые при умножении на 4 дают значение большее, чем при возведении в квадрат. 29. Ввести одномерный массив А из 14 элементов. Определить среднее геометрическое квадратов элементов, стоящих на позициях, кратных трем. 30. Ввести одномерный массив А из 15 элементов. Определить среднее арифметическое квадратов элементов, стоящих на позициях, которые при делении на 3 дают остаток 2. Обработка элементов массива. 1. Ввести одномерный массив А из N элементов. Каждый третий элемент массива умножить на собственный индекс. Массив вывести до и после преобразования. 2. Ввести одномерный массив А из N элементов. Каждый четный элемент массива нацело разделить на два. Массив вывести до и после преобразования. 3. Ввести одномерный массив А из N элементов. Каждый элемент, дающий в остатке двойку при делении на 3, увеличить на единицу. Массив вывести до и после преобразования. 50
4. Ввести одномерный массив А из N элементов. Каждый элемент, чей модуль больше 10, обнулить. Массив вывести до и после преобразования. 5. Ввести одномерный массив А из N элементов. Каждый второй элемент, в том случае, если он отрицателен, возвести в квадрат. Массив вывести до и после преобразования. 6. Ввести одномерный массив А из N элементов. Каждый второй элемент, в массиве заменить остатком от деления этого элемента на 10. Массив вывести до и после преобразования. 7. Ввести одномерный массив А из N элементов. Каждый элемент, стоящий на нечетной позиции в массиве, заменить остатком от деления этого элемента на 7. Массив вывести до и после преобразования. 8. Ввести одномерный массив А из N элементов. Каждый третий элемент в массиве заменить остатком от деления этого элемента на 2. Массив вывести до и после преобразования. 9. Ввести одномерный массив А из N элементов. Каждый четный элемент в массиве заменить результатом его целочисленного деления на 5. Массив вывести до и после преобразования. 10. Ввести одномерный массив А из N элементов. Каждый отрицательный элемент в массиве заменить результатом его целочисленного деления на 3. Массив вывести до и после преобразования. 11. Ввести одномерный массив А из N элементов. Каждый элемент в массиве, больший 7, домножить на результат целочисленного деления этого элемента на 7. Массив вывести до и после преобразования. 12. Ввести одномерный массив А из N элементов. Каждый элемент в массиве, чье значение лежит вне диапазона [-2; 8] увеличить на 10. » Массив вывести до и после преобразования. 51
13. Ввести одномерный массив А из N элементов. Каждый элемент в массиве, чье значение лежит вне диапазона [-8; 6]» возвести в квадрат. Массив вывести до и после преобразования. 14. Ввести одномерный массив А из N элементов. Каждый элемент в массиве, чье значение лежит в диапазоне [-1; 10]. умножить на 5. Массив вывести до и после преобразования. 15. Ввести одномерный массив А из N элементов. Каждый второй элемент в массиве, чье значение лежит в диапазоне [-3; 5], заменить единицей. Массив вывести до и после преобразования. 16. Ввести одномерный массив А из N элементов. Элементы массива, чей квадрат меньше 25, увеличить вдвое. Массив вывести до и после преобразования. 17. Ввести одномерный массив А из N элементов. Отрицательные элементы массива умножить на квадрат собственного индекса. Массив вывести до и после преобразования. 18. Ввести одномерный массив А из N элементов. К четным элементам массива прибавить значение собственного индекса. Массив вывести до и после преобразования. 19. Ввести одномерный массив А из N элементов. К элементам массива, не кратным трем, прибавить остаток от деления этого числа на три. Массив вывести до и после преобразования. 20. Ввести одномерный массив А из N элементов. Элементы массива, которые при делении нацело на собственный индекс дают значение большее 2, возвести в квадрат. Массив вывести до и после преобразования. 21. Ввести одномерный массив А из N элементов. Элементы массива, которые при делении нацело на собственный индекс дают четное значение увеличить на единицу. Массив вывести до и после преобразования. 22. Ввести одномерный массив А из N элементов. Все нули в массиве заменить единицами, а единицы - нулями. Массив вывести до и после преобразования. 52
23. Ввести одномерный массив А из N элементов. Все элементы меньшие восьми возвести в третью степень. Массив вывести до и после преобразования. 24. Ввести одномерный массив А из N элементов. Все элементы, чье значение, увеличенное на единицу и возведенное в квадрат, будет больше 50, домножить на 2. Массив вывести до и после преобразования. 25. Ввести одномерный массив А из N элементов. Все элементы, стоящие на четных позициях, с модулем значения больше 10, уменьшить на 3. Массив вывести до и после преобразования. 26. Ввести одномерный массив А из N элементов. Все элементы, которые нечетны и положительны, увеличить на 1. Массив вывести до и после преобразования. 27. Ввести одномерный массив А из N элементов. Все элементы, которые кратны 4 и стоят во второй половине массива, разделить нацело на 4. Массив вывести до и после преобразования. 28. Ввести одномерный массив А из N элементов. Все элементы, которые не кратны 4 и стоят в первой половине массива уменьшить на 10. Массив вывести до и после преобразования. 29. Ввести одномерный массив А из N элементов. Все элементы, которые не кратны 2 и лежат вне диапазона [-2; 6], увеличить на 5. Массив вывести до и после преобразования. 30. Ввести одномерный массив А из N элементов. Все элементы, которые при целочисленном делении на N дают ненулевое значение, увеличить на N. Массив вывести до и после преобразования. Варианты заданий по теме «Одномерные массивы. Специальные алгоритмы обработки» Фильтрация данных в массиве 1. Ввести одномерный массив А, вывести его. Найти номер первого отрицательного элемента. Все положительные элементы, следующие за 53
первым отрицательным, увеличить на модуль суммы отрицательных всего массива. 2. Ввести одномерный массив А целых чисел, вывести его. Найти произведение первых трех отрицательных элементов. Произведением заменить все нечетные элементы; если это невозможно, то сообщить об этом. 3. Ввести одномерный массив А, вывести его. Найти наибольший элемент среди тех, которые находятся на нечетных позициях. На полученное значение уменьшить элементы с чётными индексами массива. 4. Ввести одномерный массив А, вывести его. Найти среднее арифметическое Sr максимума и минимума массива. Далее возвести в квадрат все элементы меньшие чем Sr. 5. Ввести одномерный массив А, вывести его. Найти произведение его rmin max., элементов, принадлежащих интервалу L~""j~>"~^~~J- Значением этого произведения заменить первый и предпоследний элементы массива. 6. Ввести одномерный массив А целых чисел, вывести его, определить к - количество четных элементов в нём содержащихся. Далее максимальный элемент массива домножить из, к и снова вывести. 7. Ввести одномерный массив А, вывести его. Найти произведение элементов, стоящих слева и справа от минимального элемента массива. Разделить на найденное произведение минимум и максимум. Измененный массив вывести. 8. Ввести одномерный массив А, вывести его. Определить, максимальный или минимальный элемент в массиве встречается раньше. Если максимальный, то заменить минимумом первый элемент массива; если встречается раньше минимальный, то заменить максимумом последний элемент массива. 54
9. Ввести одномерный массив А, вывести его. Определить, упорядочены ли элементы массива по возрастанию. Если не упорядочены, то поменять в массиве первый и последний элементы массива, иначе эти элементы возвести в квадрат. 10. Ввести одномерный массив А, вывести его. Определить, упорядочены ли элементы массива по убыванию. Если не упорядочены, то определить номер первого элемента нарушающего порядок и поменять его с соседним элементом, иначе возвести в квадрат первый и последний элементы массива. 11. Ввести одномерный массив А, вывести его. Определить, упорядочены ли элементы массива по возрастанию. Если не упорядочены, то определить номер первого элемента нарушающего порядок, сам этот элемент обнулить, иначе поменять местами максимум и минимум в массиве. 12. Ввести одномерный массив А, состоящий из целых чисел, вывести его. Найти номер к - номер первого четного элемента массива. Преобразовать последние к элементов массива путем их умножения на значение первого четного. Если преобразование невозможно, то вывести соответствующее сообщение. 13. Ввести одномерный массив А, вывести его. Вычислить Srg - среднее геометрическое положительных элементов массива. Преобразовать элементы массива путем деления на Srg тех из них, значение которых меньше квадрата собственного индекса. Если преобразование невозможно, то выдать соответствующее сообщение. 14. Ввести одномерный массив ^, вывести его. Вычислить разность между суммой элементов, стоящих на четных местах, и суммой элементов, стоящих на нечетных местах. На полученную разность увеличить вторую половину массива. 55
15. Ввести одномерный массив ^, вывести его. Наибольший и наименьший элементы увеличить в три раза, а все остальные - в два раза. Исходный массив и преобразованный распечатать один под другим. 16. Ввести одномерный массив А, вывести его. На место минимального элемента массива записать сумму последних трех ненулевых элементов массива. На экран вывести массив после преобразования, или сообщение о невозможности модификации. 17. Ввести одномерный массив А9 вывести его. Найти максимальный и минимальный по модулю элементы массива. Если модуль максимального элемента превышает значение модуля минимального более чем на 10, то увеличить положительные элементы всего массива на значение модуля максимума, иначе уменьшить их на это значение. 18. Ввести одномерный массив А, вывести его. Найти сумму положительных, кратных трем, элементов массива и произведение отрицательных элементов. Если сумма окажется больше произведения, то найти максимальный элемент массива, а если нет - выдать об этом сообщение. 19. Ввести одномерный массив А, вывести его. Если в нем больше отрицательных чисел, все положительные числа заменить суммой отрицательных, если больше неотрицательных чисел, то поменять местами первый и последний элементы. 20. Ввести одномерный массив А, вывести его. Напечатать номера элементов, значение которых менее чем на три отличается от значения наименьшего элемента массива, и определить количество таких элементов. 21. Ввести одномерный массив А9 вывести его. Найти максимальный элемент среди элементов, стоящих на четных местах, и найденным 56
значением заменить все элементы массива, кратные 3 или 2. Преобразованный массив вывести на экран. 22. Ввести одномерный массив А, вывести его. Вычислить квадрат разности между минимальным и максимальным элементами массива и записать его на место предпоследнего элемента массива, а также на место максимума и минимума. Результат вывести на экран, 23. Ввести одномерный массив А, вывести его. Определить количество смен знака (К) для его элементов. Если К>0 , то все элементы после А[К] заменить значением квадратом разностей между первым и минимальным элементами массива. 24. Ввести одномерный массив А, вывести его. Найти максимум среди элементов первой половины массива и минимум среди второй половины массива, которые поменять местами. 25. Ввести одномерный массив А, вывести его. Найти минимум среди элементов первой половины массива и максимум среди второй половины. Вычислить произведение найденных значений и заменить им элемент, стоящий перед найденным, минимальным элементом. Если такого элемента нет, то выдать соответствующее сообщение. 26. Ввести одномерный массив А, вывести его. Вычислить сумму отрицательных элементов этого массива. Записать ее модуль на место элемента, стоящего после максимального. Если такого элемента нет, то выдать сообщение. Результат вывести на экран. 27. Ввести одномерный массив А, вывести его. Проверить, имеется ли в массиве хотя бы одна пара соседних чисел, являющихся противоположными. Если имеется, то поменять местами первую встретившуюся такую пару. 28. Ввести одномерный массив А, вывести его. Выяснить, какое число в массиве встретится ранее - положительное или отрицательное (нули не рассматривать). Если положительное - найти в массиве максимальный 57
элемент и возвести его в квадрат, если отрицательное - возвести в квадрат минимальный элемент. 29. Ввести одномерный массив А, вывести его. Вычислить наибольшее и наименьшее значения разности между соседними элементами. Найденными значениями заменить, соответственно, первый и последний элементы массива. 30. Ввести одномерный массив А, вывести его. Определить, есть ли в массиве три идущих подряд положительных элемента. Если есть, то заменить первую тройку этих элементов значением произведения последнего и предпоследнего элементов. Циклическая перестановка в одномерных массивах 1. Ввести одномерный целочисленный массив А, вывести его. В массиве отсортировать по возрастанию все элементы предшествующие максимальному. 2. Ввести одномерный целочисленный массив А, вывести его. В массиве отсортировать по убыванию все элементы, стоящие после минимального, 3. Ввести одномерный целочисленный массив А, вывести его. В массиве дважды произвести циклический сдвиг влево всех элементов предшествующих максимальному из нечетных. 4. Ввести одномерный целочисленный массив А, вывести его. В массиве трижды произвести циклический сдвиг вправо всех элементов следующих за минимальным из чётных. 5. Ввести одномерный целочисленный массив А, вывести его. Найти все повторяющиеся элементы в нем, следующие за максимальным. 6. Ввести одномерный массив А, вывести его. Найти все повторяющиеся элементы в нём, предшествующие последнему отрицательному. 58
7. Ввести одномерный массив А, вывести его. Переставить в обратном порядке все элементы между максимальным из отрицательных и минимальным элементами массива. 8. Ввести одномерный массив А, вывести его. Переставить в обратном порядке все элементы между максимальным и предпоследним отрицательным элементом. 9. Ввести одномерный массив А, вывести его. Переставить в обратном порядке его элементы, исключая от перестановки при этом элементы, расположенные между максимумом и минимумом. 10. Ввести одномерный массив А, вывести его. Найти в массиве максимум и часть до максимального элемента отсортировать по убыванию, а после максимума - по возрастанию. 11. Ввести одномерный массив А, вывести его. Найти в массиве минимум и часть до минимального элемента отсортировать по возрастанию, а после минимума - по убыванию. 12. Ввести одномерный целочисленный массив А, вывести его. Произвести циклический сдвиг влево его элементов столько раз, сколько раз в массиве встречаются четные числа. 13. Ввести одномерный целочисленный массив А, вывести его. Произвести циклический сдвиг вправо его элементов столько раз, сколько раз в массиве встречаются отрицательные числа. 14. Ввести одномерный целочисленный массив А, вывести его. Найти максимальный среди нечетных элементов. Далее трижды произвести циклический сдвиг влево элементов, стоящих справа от найденного максимума, и один раз вправо сдвиг элементов, стоящих слева от найденного максимума. 15. Ввести одномерный целочисленный массив А, вывести его. Найти минимальный среди четных элементов. Далее произвести циклический сдвиг вправо элементов, стоящих справа от найденного максимума, и 59
четыре раза влево сдвиг элементов стоящих слева от найденного максимума. 16. Ввести одномерный массив А, вывести его. Элементы первой половины массива отсортировать по возрастанию, а второй половины переставить в обратном порядке. 17. Ввести одномерный массив А, вывести его. Произвести циклический сдвиг элементов, расположенных вне границ между максимумом и минимумом вправо (элементы между максимумом и минимумом остаются на своих местах). 18. Ввести одномерный массив А, вывести его. Произвести циклический сдвиг его элементов вправо, при этом не затрагивая максимум и минимум. 19. Ввести целочисленный одномерный массив А, вывести его. Произвести его сортировку по возрастанию, при этом не затрагивая максимальный и минимальный из нечётных элементов. 20. Ввести целочисленный одномерный массив А, вывести его. Найти первый четный и последний положительный элементы. Произвести сортировку по возрастанию элементов,расположенных между ними. 21. Ввести целочисленный одномерный массив А, вывести его. Найти К - количество нечётных элементов в этом массиве. Произвести циклический сдвиг вправо элементов массива К раз, 22. Ввести одномерный массив А, в котором число элементов кратно трем, вывести его. Разбить массив на три равные части, каждую из которых отсортировать по возрастанию. 23. Ввести одномерный массив А, в котором число элементов кратно К, вывести его. Разбить массив на К равных частей, каждую из которых переставить в обратном порядке. 60
24. Ввести одномерный массив А, в котором число элементов кратно К, вывести его. Разбить массив на К равных частей, внутри каждой из областей осуществить циклический сдвиг элементов влево. 3.5. Двумерные массивы Ниже приведен пример оформления лабораторной работы. Студент Иванов И. И. Л. Р. Группа ХХ-999 «Двумерные массивы» Дата дд.мм.гг Допуск Выполнение Отчет Условие задачи №1 Ввести двумерный массив А3х4. Определить среднее геометрическое положительных четных элементов, считая, что они в нем есть. Тестовые примеры к задаче №1 Шходные данные: Исходный массив А: 3 4 25 8 2 1 7 11 12 4 7 9 Выходные данные: В массиве всего 5 четных элементов, их произведение Р = 4*8*2*12*4 = 3072. Среднее геометрическое равно SrG = #3072 = 4,98. 2)Входные данные: Исходный массив А: 13 4 5 8 12 11 17 14 10 41 16 91 61
Выходные данные: В массиве всего 6 четных элементов, их произведение Р = 4*8* 12* 14* 10* *16 =860160. Среднее геометрическое равно SrG = V860160 =975 Блок-схема к задаче № 1 ^ Начало ^ < i := 1 , 3 j:=1 ,4 Ввод Ар, j] k:=0 р:=1 >i Р:» P*A[i j] k:=k + 1 £ Srg:=VF Вывод k, p, SrG ^ Конец ^ Листинг программы на Pascal к задаче №1 program ABC; var A:array[ 1. .3,1. .4] of integer; i,j,k: byte; 62
P,SrG:real; begin els; //ручной ввод массива writeLn('BBOflHM элементы массива А:'); for i:=l to 3 do for j:=l to 4 do begin Wite('A[',i,7j/]='); readLn(A[ij]); end; k:=0; P:=l; for i:=l to 3 do for j:=l to 4 do if (A[ij] mod 2=0) and (A[ij]>0) then begin p:=p*A[ij]; k:=k+l; end; //вычисление среднего геометрического как корня k-й степени из произведения Р, составленного из к сомножителей SrG :=exp((l/k)*ln(p)); writeLn(fBcero четных элементов!, к); writeLn('HX произведениер); \\гйе!л1('среднее геометрическоеSrG:8:2); end. 63
Условие задачи №2 Ввести двумерный массив ANxM. Каждый положительный элемент увеличить на произведение индексов этого элемента. Массив вывести до изменения и после. Тестовые примеры к задаче №2 1) Входные данные: N = 3M = 3 Исходный массив А: Выходные данные: Полученный массив: -3 4 -2 2 1 -7 12 4 5 -3 8 -2 4 4 -7 36 24 45 2) Входные данные: N = 3M = 4 Исходный массив А: 1 1 1 1 1 1 1 1 1 1 1 1 Выходные данные: Полученный массив: 1 2 3 4 2 4 6 8 3 6 9 12 64
Блок-схема к задаче №2 Листинг программы на Pascal к задаче №2 program ABC; const Nmass= 10; var A:array[l ..Nmass,l ..Nmass] of integer; N,M,i,j:byte; begin els; //ручной ввод массива откеЬп('Введите число элементов в массиве А'); readLn(N,M); откеЬп(Ъводим элементы массива А:'); for i:=l to N do 65
for j:=l toMdo begin wite('A[',i,7j,']='); readLn(A[ij]); end; //вывод массива до изменения откеЬп('Исходный массив А:'); for i:=l to N do begin forj:=l toMdo write(A[i,j]:5); writeLn; end; //Умножение положительных эл-в на произведение индексов for i:=l toNdo for j:=l to M do if A[ij]>0 then A[ij]:=A[ij]*i*j; //вывод массива поле изменения writeLn; writeLn('MaccHB А после изменения:'); for i:=l to N do begin forj:=l toMdo write(A[ij]:5); writeLn; end; end. 66
Контрольные вопросы по теме «Двумерные массивы» 1. Что такое двумерный массив? 2. Может ли массив быть элементом массива? 3. Как определить местоположение элемента в массиве? 4. Что такое индекс? Каким требованиям он должен удовлетворять? 5. Каким образом задается описание массива, что в нем указывается? Варианты заданий по теме «Двумерные массивы. Простейшие алгоритмы обработки» Обработка матриц 1. Ввести двумерный массив А^м. Определить в нем сумму элементов, значения которых лежат вне диапазона [-1; 5]. 2. Ввести двумерный массив А4х3. Определить в нем среднее геометрическое элементов, значения которых лежат в диапазоне [2,10]. 3. Ввести двумерный массив А3х5. Определить в нем среднее геометрическое элементов, у которых оба индекса нечетные. 4. Ввести двумерный массив А5х3. Определить в нем среднее арифметическое элементов, стоящих на позициях с четной суммой индексов. 5. Ввести двумерный массив А1х5. Определить в нем произведение элементов, чье значение без остатка делится на 2 и не делится на 3. 6. Ввести двумерный массив А5х2. Определить в нем сумму элементов, чье значение без остатка делится на 3 и не делится на 2. 7. Ввести двумерный массив А^х5. Определить в нем сумму элементов, стоящих на позициях, чьи индексы в сумме больше записанного в них значения. 67
8. Ввести двумерный массив Азх4. Определить в нем количество элементов, квадрат которых больше 25. 9. Ввести двумерный массив А4х3. Определить в нём произведение элементов, квадрат которых меньше 16. 10. Ввести двумерный массив А5х2, Определить в нем сумму модулей отрицательных элементов. 11. Ввести двумерный массив А^. Определить в нем среднее геометрическое модулей отрицательных элементов. 12. Ввести двумерный массив А3х4. Определить в нем среднее геометрическое квадратов нечетных элементов. 13. Ввести двумерный массив А3х4, Определить в нем количество тех элементов, которые при делении на 3 дают остаток 2. 14. Ввести двумерный массив А4х3. Определить в нём среднее арифметическое тех элементов, которые при делении на 4 дают остаток 1 или 3. 15. Ввести двумерный массив А3х5. Определить в нем произведение тех элементов, чей модуль лежит в диапазоне [ 1; 5], 16. Ввести двумерный массив А4х3. Определить в нём произведение тех элементов, чей модуль лежит вне диапазона [ 1; 5]. 17. Ввести двумерный массив А5х3. Определить в нем количество тех элементов, которые без остатка делятся на собственный индекс (строки или столбца). 18. Ввести двумерный массив А^. Определить в нем количество тех элементов, стоящих на позициях с четной суммой индексов, которые сами четны. 68
19. Ввести двумерный массив ^43х4. Определить в нем сумму остатков от деления на 3 тех элементов, которые не кратны трем. 20. Ввести двумерный массив Л3х5. Определить в нем произведение остатков от деления на 4 тех элементов, которые не кратны четырем. 21. Ввести двумерный массив А^х3. Найти суммы индексов строк и столбцов четных элементов массива. 22. Ввести двумерный массив ^43х4. Найти произведение индексов строк и сумму индексов столбцов для элементов массива больших семи. 23. Ввести двумерный массив ^43х5. Определить сумму квадратов индексов (как строк, так и столбцов) элементов, делящихся на 3 без остатка. 24. Ввести двумерный массив А4х3. Определить среднее арифметическое модулей отрицательных элементов. 25. Ввести двумерный массив А3х4. Определить произведение элементов, которые при делении на 2 дают такой же остаток, как и при делении наЗ. 26. Ввести двумерный массив А4х3. Определить сумму элементов, которые при умножении на 4 дают значение большее, чем при возведении в квадрат. 27. Ввести двумерный массив ^43х4. Определить среднее геометрическое квадратов элементов, стоящих на позициях, у которых хотя бы один индекс кратен трем. 28. Ввести двумерный массив А5х3. Определить среднее арифметическое квадратов элементов, стоящих на позициях, у которых как минимум один из индексов при делении на 3 дает остаток 2. 69
29. Ввести двумерный массив А5х2. Определить в нем количество элементов, кратных трем. 30. Ввести двумерный массив А3х4. Определить в нем произведение четных элементов. Прямоугольные матрицы 1. Ввести двумерный массив ANxM . Все элементы, которые не кратны 4 и стоят в четных строках массива, уменьшить на 10. Массив вывести до и после преобразования. 2. Ввести двумерный массив ANxM . Все элементы, которые не кратны 2 и лежат вне диапазона [-2; 6], увеличить на 5. Массив вывести до и после преобразования. 3. Ввести двумерный массив ANxM. Все элементы, которые при целочисленном делении на N дают ненулевое значение, увеличить на М. Массив вывести до и после преобразования. 4. Ввести двумерный массив ANxM. Элементы в нечетных столбцах массива умножить на индекс строки, в которой они находятся. Массив вывести до и после преобразования. 5. Ввести двумерный массив ANxM . Каждый четный элемент массива нацело разделить на два. Массив вывести до и после преобразования. 6. Ввести двумерный массив ANxM. Каждый элемент, дающий в остатке двойку при делении на 3, увеличить на единицу. Массив вывести до и после преобразования. 7. Ввести двумерный массив ANxM. Каждый элемент, чей модуль больше 10, обнулить. Массив вывести до и после преобразования. 70
8. Ввести двумерный массив ANxM. Каждый второй элемент, в том случае, если он отрицателен, возвести в квадрат. Массив вывести до и после преобразования. 9. Ввести двумерный массив ANxM . Каждый второй элемент в массиве заменить остатком от деления этого элемента на 10. Массив вывести до и после преобразования. 10. Ввести двумерный массив ANxM. Каждый элемент, стоящий в массиве на позиции с четной суммой индексов, заменить остатком от деления этого элемента на 7. Массив вывести до и после преобразования. 11. Ввести двумерный массив ANxM . Каждую вторую строку в массиве заменить остатками от деления ее элементов на 2. Массив вывести до и после преобразования. 12. Ввести двумерный массив ANxM . Каждый четный элемент в массиве заменить результатом его целочисленного деления на 5. Массив вывести до и после преобразования. 13. Ввести двумерный массив ANxM . Каждый отрицательный элемент в массиве заменить результатом его целочисленного деления на 3. Массив вывести до и после преобразования. 14. Ввести двумерный массив ANxM. Каждый элемент в массиве, больший 7, домножить на результат целочисленного деления этого элемента на 7. Массив вывести до и после преобразования. 15. Ввести двумерный массив ANxM. Каждый элемент в массиве, чье значение лежит вне диапазона [-2; 8], увеличить на 10. Массив вывести до и после преобразования. 71
16. Ввести двумерный массив ANxM . Каждый элемент в массиве, чье значение лежит вне диапазона [-8; 6]» возвести в квадрат. Массив вывести до и после преобразования. 17. Ввести двумерный массив А^х^. Каждый элемент в массиве, чье значение лежит в диапазоне [-1; 10], умножить на 5. Массив вывести до и после преобразования. 18. Ввести двумерный массив ANxM . Каждый второй элемент в массиве с нечетной суммой индексов, чье значение лежит в диапазоне [-3; 5], заменить единицей. Массив вывести до и после преобразования. 19. Ввести двумерный массив ANxM. Элементы массива, чей квадрат меньше 25, увеличить вдвое. Массив вывести до и после преобразования. 20. Ввести двумерный массив ANxM . Отрицательные элементы массива умножить на сумму квадратов собственных индексов. Массив вывести до и после преобразования. 21. Ввести двумерный массив ANxM . К четным элементам массива прибавить значение собственного индекса строки. Массив вывести до и после преобразования. 22. Ввести двумерный массив ANxM , К элементам массива, не кратным 3, прибавить остаток от деления этого числа на три. Массив вывести до и после преобразования. 23. Ввести двумерный массив ANxM. Элементы массива, которые при делении нацело на собственный индекс строки, дают значение, большее 2, возвести в квадрат. Массив вывести до и после преобразования. 24. Ввести двумерный массив ANxM. Элементы массива, которые при делении нацело на собственный индекс столбца дают четное значение увеличить на единицу. Массив вывести до и после преобразования. 72
25. Ввести двумерный массив Атм. Все нули в массиве заменить единицами, а единицы - нулями. Массив вывести до и после преобразования. 26. Ввести двумерный массив ANxM . Все элементы, меньшие 8, возвести в третью степень. Массив вывести до и после преобразования. 27. Ввести двумерный массив Атм . Все элементы, чье значение увеличенное на единицу и возведенное в квадрат, будет больше 50, домножить на 2. Массив вывести до и после преобразования. 28. Ввести двумерный массив ANxM. Все элементы, стоящие на позициях, у которых один из индексов четный, с модулем значения больше 10, уменьшить на 3. Массив вывести до и после преобразования. 29. Ввести двумерный массив ANxM . Все элементы, которые нечетны и положительны, увеличить на 1. Массив вывести до и после преобразования. 30. Ввести двумерный массив ANxM . Все элементы, которые кратны 4, и стоят на позициях, у которых как минимум один из индексов четный, разделить нацело на 4. Массив вывести до и после преобразования. Варианты заданий по теме «Двумерные массивы. Специальные алгоритмы обработки» Обработка отдельных строк (столбцов) матрицы и работа с диагоналями 1. Ввести двумерный массив ANxN, вывести его. Если значение суммы элементов его главной диагонали превышает сумму элементов побочной, то квадратом полученной разности заменить отрицательные элементы под побочной диагональю. 2. Ввести двумерный массив ANxM, вывести его. Найти максимальный по значению элемент массива и увеличить его в два раза. Все остальные 73
элементы массива уменьшить на значение минимума последней строки массива. 3. Ввести двумерный массив ANxN, вывести его. Найти максимальный элемент массива. Если максимум лежит на одной из диагоналей (главной или побочной), то увеличить на его удвоенное значение элементы противоположной диагонали. 4. Ввести двумерный массив ANxM, вывести его. Найти сумму положительных элементов массива, исключая при этом те элементы, которые кратны 3. Полученной суммой заменить отрицательные элементы последнего столбца. 5. Ввести двумерный массив ANxM, вывести его. Возвести в квадрат те элементы, модуль значения которых принадлежит интервалу mini + Imaxl О;1 Определить, сколько таковых элементов оказалось в массиве. 6. Ввести двумерный массив ANxN, вывести его. Если сумма элементов над главной диагональю окажется больше, чем сумма элементов под ней, то умножить на 2 максимальный элемент среди элементов на побочной диагонали, иначе - минимальный элемент среди этих элементов (побочной диагонали) возвести в квадрат. 7. Ввести двумерный массив Амш, вывести его. Преобразовать исходный массив путем сложения его элементов с произведением элементов того столбца, который содержит минимальный элемент всего массива. 8. Ввести двумерный массив ANxN, вывести его. Если в массиве больше положительных элементов, то поменять максимальный элемент среди элементов над главной диагональю с максимальным элементом под ней, иначе - возвести в квадрат все отрицательные. 74
9. Ввести двумерный массив ANxN9 вывести его. Найти среднее арифметическое диагональных элементов (главной и побочной). Все элементы, большие найденного значения и расположенные над побочной диагональю, возвести в квадрат, а расположенные под ней - увеличить на минимум всего массива. 10. Ввести двумерный массив ANxM9 вывести его. Поменять местами строку, содержащую максимальный элемент со строкой, содержащий минимальный элемент. Если максимум и минимум в одной строке, то заменить эту строку единицами. 11. Ввести целочисленный двумерный массив ANxM, вывести его. Найти сумму его четных элементов, исключая максимальный и минимальный (всего массива). Найденной суммой заменить угловые элементы массива. 12. Ввести целочисленный двумерный массив ANxM9 вывести его. Заменить единицами сроку и столбец, содержащие максимальный среди тех элементов, значения которых кратны двум. 13. Ввести двумерный массив ANxN9 вывести его. Найти сумму положительных элементов, расположенных в части массива одновременно как над главной, так и над побочной диагональю. Найденной суммой заменить элементы, расположенные в части массива одновременно под главной и побочной диагоналями. 14. Ввести целочисленный двумерный массив ANxM9 вывести его. Найти суммы элементов первой и последней строк матрицы. Далее увеличить на значение максимума всей матрицы ту строку (первую или последнюю), чья сумма окажется меньше. 15. Ввести целочисленный двумерный массив ANxM, вывести его. Найти минимальный из положительных элементов матрицы и этим значением заменить все нулевые элементы матрицы, если они есть, а если их нет, то 75
заменить найденным минимумом последнюю строку матрицы. Если положительных нет, то вывести соответствующее сообщение. 16. Ввести целочисленный двумерный массив ANxM, вывести его. Найти максимальный и минимальный элементы массива, среди тех, значения которых кратны двум. Найденные элементы удвоить, а все остальные утроить. 17. Ввести целочисленный двумерный массив ANxM, вывести его. Найти сумму положительных угловых элементов. Найденной суммой заменить строку, содержащую минимальный элемент, и столбец, содержащий максимальный элемент. 18. Ввести двумерный массив ANxM, вывести его. Возвести в квадрат все строки, расположенные между строкой, содержащей максимум матрицы и строкой, содержащей минимум этой матрицы. 19. Ввести целочисленный двумерный массив ANxN, вывести его. Найти К- количество четных элементов на главной диагонали. Далее найти максимум в К-й строке и заменить его суммой нечетных элементов главной диагонали. 20. Ввести целочисленный двумерный массив АЫхМ, вывести его. Если максимум и минимум массива одновременно являются четными, то разделить их на два, иначе - поменять местами первый и предпоследний столбец массива. 21. Ввести целочисленный двумерный массив ANxM9 вывести его. Определить К{ - сколько в массиве элементов, кратных числу Imax' и К2- сколько кратных Imin, где Imax и Imin - номера строк, содержащих, соответственно, максимальный и минимальный элементы матрицы. Значением Кх заменить отрицательные, а значением К2 - неотрицательные элементы первой строки. 76
22. Ввести двумерный массив ANxM, вывести его. Все столбцы, расположенные правее от столбца, содержащего максимальный элемент матрицы, увеличить на минимальный элемент матрицы. 23. Ввести целочисленный двумерный массив ANxM, вывести его. Найти произведение тех элементов, которые нечетны и положительны. Если среди этих элементов встретится максимальный элемент всей матрицы, то не учитывать его в произведении. Найденным произведением заменить предпоследнюю строку матрицы. 24. Ввести целочисленный двумерный массив ANxM, вывести его. Найти минимальный элемент массива среди тех, значения которых кратны трем. Заменить все строки, предшествующие строке, содержащей найденный минимум, удвоенным произведением максимума и минимума, ранее найденных среди элементов всего массива. 25. Ввести целочисленный двумерный массив ANxN, вывести его. Определить К- сколько нечетных элементов содержится на диагоналях массива. Далее выяснить координаты максимума среди элементов, расположенных под побочной диагональю, и уменьшить этот элемент каК т 26. Ввести двумерный массив ANxM, вывести его. Найти координаты максимума всего массива. Далее найти минимум среди тех элементов, которые находятся в столбцах левее столбца, содержащего найденный максимум. Найденным минимумом заменить найденный максимум. 27. Ввести двумерный массив ANxN, вывести его. Найти К- количество max+min элементов, чей модуль превышает величину . Если К превышает количество Кх (количество отрицательных элементов массива), „ max+min то заменить отрицательные элементы величиной , в противном случае - поменять местами максимум и минимум. 77
28. Ввести двумерный массив ANxM, вывести его. Определить, в какой строке больше положительных элементов: в той, которая содержит максимум, или в той, которая содержит минимум. В строке, где положительных элементов больше, каждый из положительных элементов возвести в квадрат. 29. Ввести двумерный массив ANxM, вывести его. Найти сумму угловых элементов матрицы и сравнить ее с максимумом всей матрицы. Если сумма окажется больше, то угловые элементы обнулить, если равна, то угловые элементы заменить максимумом, а если меньше, то последний столбец матрицы утроить. 30. Ввести двумерный массив ANxN, вывести его. Найти максимум среди элементов над главной диагональю и поменять его с максимумом на побочной диагонали. Сложная обработка элементов матрицы 1. Ввести матрицу ANxM, вывести ее. Найти сумму элементов в той строке, где произведение элементов максимально. 2. Ввести целочисленную квадратную матрицу ANxN, вывести ее. В строках, где сумма элементов четная, все элементы увеличить на значение минимального элемента среди элементов побочной диагонали. 3. Ввести матрицу ANxM, вывести ее. Максимум каждого столбца матрицы заменить значением суммы кратных трем элементов всей матрицы. 4. Ввести матрицу ANxM, вывести ее. В матрице нечетные столбцы отсортировать по убыванию, а четные - по возрастанию. 5. Ввести матрицу ANxM, вывести ее. Выяснить, сколько строк, и какие строки в матрице не упорядочены по возрастанию. 78
6. Ввести матрицу ANxAf9 вывести ее. В матрице для каждого столбца, чьи элементы не упорядочены по убыванию, вместо последнего элемента столбца вписать "-Г. 7. Ввести матрицу ANxlA9 вывести ее. В матрице для каждой строки дважды произвести циклический сдвиг элементов влево. 8. Ввести матрицу ANxM, вывести ее. Отрицательные элементы каждой строки заменить суммой максимума и минимума этой строки. 9. Ввести матрицу ANxM, вывести ее. В каждой строке матрицы найти к - количество положительных элементов. В строках все элементы после k-го увеличить на сумму положительных элементов этой строки. 10. Ввести матрицу ANxM, вывести ее. Возвести в квадрат элементы той строки, где максимальный элемент встречается раньше. 11. Ввести матрицу ANxM, вывести ее. В каждом столбце матрицы поменять местами второй отрицательный и минимальный элемент столбца. Если в столбце нет двух отрицательных элементов, то оставить его без изменения. 12. Ввести матрицу ANxM, вывести ее. В каждой строке матрицы поменять местами минимальный среди четных элементов и первый элемент строки. Если нет четных элементов в строке, то оставить ее без изменения. 13. Ввести матрицу ANxM9 вывести ее. В строках, где число четных элементов превышает число нечетных, нечетные элементы заменить максимальным элементом всей матрицы. 14. Ввести матрицу Атм, вывести ее. В столбцах, где минимум находится в первой половине столбца, максимальный элемент столбца возвести в квадрат. 79
15. Ввести матрицу ANxM, вывести ее. В каждой строке найти сумму элементов, расположенных после первого нулевого элемента. Значения найденных сумм поместить в одномерный массив BN. 16. Ввести матрицу ANxM9 вывести ее, В каждой строке найти произведение элементов, предшествующих минимальному элементу строки. Произведения переписать в одномерный массив BN. 17. Ввести матрицу ANxM, вывести ее. В каждой строке максимум среди нечетных элементов умножить на номер строки, в которой он встречается. Если в строке нет нечетных элементов, то оставить ее без изменения. 18. Ввести матрицу ANxM9 вывести ее. В каждой строке матрицы элементы, расположенные до максимального, переставить в обратном порядке. 19. Ввести матрицу ANxM, вывести ее. В каждом столбце матрицы найти к - количество элементов, расположенных после минимального. Первые к элементов столбца переставить в обратном порядке. 20. Ввести матрицу ANxM, вывести ее. В каждой строке матрицы найти к - количество отрицательных элементов. Переставить в обратном порядке последние (М - к ) элементов матрицы. 21. Ввести матрицу ANxM9 вывести ее. В матрице упорядочить по возрастанию те строки, где сумма элементов четная. 22. Ввести матрицу ANxM9 вывести ее. В матрице упорядочить по убыванию те столбцы, где количество четных элементов больше либо равно числу нечетных. 23. Ввести квадратную матрицу ANxN, вывести ее. На главную диагональ записать "Iм, если сумма положительных элементов в соответствующей строке больше максимума всей матрицы, и " -1" в противном случае. 80
24. Ввести квадратную матрицу ANxN, вывести ее. В матрице определить к - количество четных элементов на побочной диагонали. Элементы первых к строк матрицы переставить в обратном порядке. 25. Ввести квадратную матрицу ANxN, вывести ее. Определить к- положение максимального элемента на главной диагонали. В каждом из последних к столбцов матрицы заменить отрицательные элементы суммой этих элементов (сумма ищется для каждого столбца). 26. Ввести матрицу ANxM, вывести ее. В матрице для каждого столбца определить количество четных элементов. Результат поместить в одномерный массив Вм, записывая для каждого столбца "1" если число четных в нем больше, если число нечетных больше, "О", если четных и нечетных элементов в столбце поровну. 27. Ввести матрицу Атм, вывести ее. Для каждой строки матрицы определить максимум среди соседних элементов этой строки. Результат записать в одномерный массив BN. 28. Ввести матрицу ANxM, вывести ее. В каждой строке матрицы определить, сколько в ней положительных, сколько отрицательных и сколько нулевых элементов. Если число положительных и отрицательных совпадает, то найти сумму элементов этой строки. 29. Ввести матрицу ANxM, вывести ее. Минимальный элемент каждой строки увеличить на сумму элементов, расположенных до этого минимума. 81
3.6. Обработка компонентных файлов Ниже приведен пример оформления лабораторной работы. Л. Р.№_ «Обработка компонентных файлов» Студент Иванов И. И. Группа ХХ-999 Дата дд.мм.гт Допуск Выполнение Вариант 88 Отчет Условие задачи Ввести файл F действительных чисел. В файле элементы, стоящие после второго нуля, переставить в обратном порядке. Вывести файл до и после преобразования. Тестовые примеры 1) Входные данные: файл f до изменения: 5 74 2802506541 56 Выходные данные: файл f после изменения: 5 74 280250 56 1 4 5 6 2) Входные данные: файл f до изменения: 5 74 280.2536541 56 Выходные данные: В файле меньше двух нулевых компонент. 82
Блок-схема 83
к<2 'второй ноль в файле на последнем месте\ Шаг 1-2 Алгоритм вывода файла F Ieft:=l2 0+1 right;=fileSize(f)-1 seek(f, right); a^F t seek(f.left); F<-a seek(f, right); left:=left+1; right:=right-1 алгоритм вывода файла F —— close(F) ^ Конец ^ 84
Листинг программы на Pascal program ABC; var a,b,i,left,right,I2_0,k;integer; f:file of integer; begin assign(f,'f.datf); writeLn('BBeAHTe первую компоненту файла f (признак конца ввода: "555")*); //ввод файла rewrite(f); readLn(b); i:=l; //номер компоненты файла while b<>555 do begin write(f,b); inc(i); writeLn(,ввeдитe 'Д,'-ую компоненту файла f); readLn(b); end; //вывод файла до изменения reset(f); отйеЬпОфайл f до изменения:'); while notEOF(f)d6 begin read(f,b); write(b:5); end; writeLn; // поиск позиции второго нуля 85
к:=0; reset(f); while (not EOF(f)) and (k<>2) do begin read(f,b); ifb=0then begin k:=k+l; ifk=2then I2_0:=filePos(f>l; end; end; // проверка возможности перестановки в файле ifk<2then writeLn('B файле нет двух нулей') else if I2_0=fileSize(f) then writeLn('BTopofi ноль в файле на последнем месте') else begin // перестановка элементов файла left:=I2J)+l; right:=fileSize(f)-l; while left<right do begin seek(f,left); read(f,b); seek(f,right); 86
read(f,a); seek(f,left); write(f,a); seek(f,right); write(f,b); left:=left+l; right:=right-l; end; //вывод файла после изменения reset(f); writeLn(^ata f после изменения:'); while not EOF(f) do begin read(f,b); write(b:5); end; writeLn; end; close(f); end. Дополнительные сведения для выполнения работы «Обработка типизированных файлов» Файл - именованная область на внешнем информационном носителе (диске, флэшнакопителе и т. п.), содержащая данные; это последовательность однотипных данных, расположенных в смежных ячейках памяти. 87
Язык Pascal содержит ряд достаточно продвинутых средств для работы с файлами. В Pascal файлы принято условно делить на физические и логические. Физический файл - собственно файл, который содержится на носителе информации. Одной из важнейших его характеристик является наличие имени в файловой системе, т. е. адреса. Например, C:\TP7\EXAMPLRPAS (имя в абсолютной адресации) или FF\DDD.DAT (имя в относительной адресации). Логический файл - файловая переменная языка Pascal, смысл его в том, чтобы компилятор «знал», какого типа файл записан по определенному адресу и как с ним следует обращаться. Это, по сути, ссылка на физический файл. Кроме того, наличие файловой переменной облегчает запись программ, делая их более наглядными и вы-разительными. Для связи логического и физического файлов существует процедура assign. Формат у нее следующий: assign( Файловая_переменная, путь к файлу); Путь к файлу - выражение строкового типа. Например, для связи файла F с именем C:\LabJL.dat следует ввести следующую команду: assign(F,' C:\LabJ.dat'); Файлы в Pascal бывают нескольких видов, а именно: компонентные (типизированние), текстовые, бинарные(блоковые). Бинарным называется файл состоящий из последовательности нулей и единиц без определенной структуры. Текстовый файл - файл, содержащий набор символов таблицы ASCIL Редактирование этого файла возможно с помощью простого текстового редактора типа NotePad, встроенного в ОС Windows. Компонентный файл - файл состоящий из однотипных ячеек. Компонентный файл при объявлении выглядит следующим образом: file of тип компонент; 88
Тип компонент в файле может быть любым, кроме файлового. Если файл вновь создаваемый, то следует использовать процедуру rewrite (Файловая_переменная);. Если ранее в файле, на который ссылается файловая переменная, уже существовала какая-либо информация, то она автоматически стирается. Для работы с существующим файлом следует использовать процедуру reset (Файловая_переменная);. При этом указатель автоматически сбрасывается на начало. После того как работа с файлом закончена, его следует закрыть при помощи процедуры close (Файловая_переменная);. Это команда операционной системе на освобождение системных ресурсов, а также предотвращение ошибок некорректного чтения/записи в то время, пока работа с ним не ведется. Если обработка элементов файла ведется от начала и до конца последовательно, без использования процедуры принудительного преставления курсора, то такая обработка называется последовательным доступом, иначе - произвольным доступом. Типовые процедуры и функции для работы с компонентными файлами: 8еек(Файловая_переменная, номер позиции); - переместить указатель на произвольную файловую позицию; /ИеРо8(Файловая_переменная); - эта функция через свое имя возвращает значение позиции, на которой в данный момент находится указатель; А1е81ге(Файловая_переменная); - эта функция через свое имя возвращает значение длины файла; read(Файловая переменная, Читаемая_переменная_1, Читаемая^ переменная_ 2,...); - чтение компоненты из файла; 89
м>гЫе(Файловая_переменная, Записываемйя_ переменная^ 1, Записываемая _ переменная_2, ...); - запись компоненты в файл; ЕОЕ(Файловая переменная); - функция возвращает логическое значение {TRUE или FALSE), в зависимости от того, достигнут конец файла или нет; 1гипса1е(Файповая^переменная); - усечение файла с текущей позиции. Контрольные вопросы по теме «Обработка компонентных файлов» 1. Дайте определение файла, 2. Назовите виды файлов в Pascal 3. Что такое физический и логические файлы? 4. Назовите роль указателя при работе с файлами. 5. Для чего ипользуются процедуры Assign,Reset, Rewrite, Close? 6. Что такое произвольный и последовательный доступ к компонентам файла? 7. Назовите типовые процедуры и функции для работы с компонентными файлами. Варианты заданий по теме «Обработка компонентных файлов» 1. Создать числовой файл F. Получить файл G, в который записать сначала положительные, затем отрицательные и, наконец, нулевые компоненты файла F. В файле G найти максимальный компонент. Файлы F и G вывести на печать. 2. Создать файл F целого типа. Получить два файла: Fl, F2. В файл FI последовательно писать четные числа, в файл F2 - все нечетные числа файла F. В файле F2 элементы, кратные 3 или 5, уменьшить на единицу. Файлы F9Fl,F2 распечатать. 90
3. Создать числовой файл F. Найти сумму положительных компонент файла, расположенных до максимальной компоненты. Найденной суммой заменить отрицательные компоненты, строящие после максимума. Файл и сумму распечатать (как до, так и после преобразования). 4. Создать числовой файл F. Найти в файле сумму и произведение максимальной и минимальной компонент. Выяснить что больше. Найденным значением заменить первую и предпоследнюю компоненты файла, если сумма окажется больше. Заменить все отрицательные компоненты, если большим будет произведение. Сумму, произведение, исходный файл и файл после замены распечатать. 5. Создать файл F целого типа. Вычислить сумму четных компонент файла. Суммой заменить вторую отрицательную компоненту файла, или вывести сообщение о невозможности таковой замены. Исходный и файл после замены распечатать. 6. Создать файл F вещественных чисел. Найти максимальную компоненту и дописать ее в конец файла; исходную максимальную компоненту уменьшить в два раза. Далее сформировать файл Н, записав в него каждую вторую компоненту файла F. Файлы распечатать. 7. Сформировать файл F целого типа. Найти и распечатать произведение максимальной и минимальной компонент файла. Произведением заменить все нулевые компоненты. Если нулевых компонент в файле нет, то поменять в нем местами максимум и минимум. Исходный и полученный файлы распечатать. 8. Создать файл F вещественных чисел. Найти SrA - среднее арифметическое элементов, расположенных левее максимума. Все компоненты файла, начиная с максимальной и по последнюю включительно, увеличить на число SrA и просуммировать, Суммой заменить максимальную компоненту файла. 91
9. Ввести файл F, посчитать к - количество положительных компонент файла F, которые расположены на тех позициях, номера которых кратны трем. Далее все компоненты от к-й и до максимальной заменить единицами. 10. Сформировать файл F, компонентами которого являются действительные числа. Найти и распечатать сумму компонент файла, произведение отрицательных компонент файла и среднее арифметическое компонент файла. Эти три значения вписать в файл справа от его максимума. Файл вывести до и после преобразования. 11. Сформировать файл F. Определить сумму и произведение наибольшего и наименьшего из значений компонент. Заменить значением суммы первую и последнюю компоненты, а на значение произведения - увеличить каждую третью компоненту файла. Файл вывести до и после преобразования. 12. Ввести файл F1. Записать в файл F2 компоненты файла FI в обратном порядке. В каждом из файлов элемент, стоящий справа от максимума, продублировать значением этого максимума. Файлы вывести до и после преобразования (при решении задачи вспомогательных массивов и файлов не использовать). 13. Ввести файлы FI и F2. Переписать с сохранением порядка следования компоненты файла FI в файл F2, а компоненты файла F2 - в файл F1. При решении допускается использование вспомогательного файла Н. Файлы вывести до и после преобразования с возведением в квадрат их максимальных компонент. 14. Сформировать два файла целых чисел одинаковой длины FI и F2. Затем необходимо слить их в файл F3 таким образом, чтобы сначала шла компонента из F1, потом из F2 и т. д. В файле F3 поменять местами минимальную и предпоследние компоненты. Файлы вывести до и после преобразования. 92
15. Сформировать файл F целых чисел. Произвести «зеркалирование» файла, т. е. увеличение его длины в два раза методом добавления в конец собственных элементов в обратном порядке. В конец файла дописать произведение его нечетных и сумму четных элементов (при решении вспомогательных файлов и массивов не использовать). 16. Задан числовой файл F. Найти максимум среди компонент, расположенных на четных позициях файла, и минимум среди компонент на нечетных позициях. Все нулевые компоненты заменить значением максимума, а значение минимума дописать в конце файла пять раз. Файл до и после преобразований распечатать. 17. Задан числовой файл F. Найти сумму компонент, стоящих между минимальной и максимальной. Заменить этой суммой все элементы, из которых она сформирована (элементы между максимумом и минимумом). Файл вывести как до, так и после преобразования. 18. Дан целочисленный файл F. Все его отрицательные компоненты увеличить в два раза, положительные уменьшить в три раза, на место нулевых компонент записать их количество. Файл F распечатать как до, так и после преобразования. 19. Ввести файл F действительных чисел. Заменить в нем максимальный и минимальный компоненты на значение среднего арифметического всех положительных компонент файла. Выдать на печать файл до преобразования и после. В случае невозможности преобразования дать об этом сообщение. 20. Ввести файл целых положительных чисел F1. Компоненты файла FI, меньшие числа SrA (среднего арифметического его элементов), записать в файл F2. В файле F\ этим компонентам присвоить значение «ноль». Выдать на печать файлы FI и F2 как до, так и после преобразования. 93
21. Ввести с клавиатуры файл F действительных чисел. Компоненты файла, стоящие между наибольшим и наименьшим компонентом, переставить в обратном порядке. Выдать на печать исходный и преобразованный файл. 22. Ввести с клавиатуры файл F с числовыми компонентами и выдать его на печать. Определить среднее арифметическое компонентов файла и все компоненты, меньшие среднего арифметического, увеличить в два раза, а большие уменьшить в три раза. Преобразованный файл выдать на печать. 23. Ввести файл F целых чисел. Определить в нем первую компоненту, кратную 5, и поменять ее местами с минимальной по модулю компонентой в файле. Выдать на печать файл до преобразования и после. Если преобразование невозможно, то выдать об этом сообщение. 24. Ввести числовой файл F. Переставить в нем все компоненты, предшествующие минимальной в обратном порядке. Определить в измененном файле, на какой позиции находится максимум. Файл вывести как до, так и после преобразования. 25. Ввести числовой файл F9 продублировать все компоненты файла, расположенные между максимумом и минимумом, дописав их в конец файла. Исходный файл, максимум, минимум и файл после преобразования вывести. 26. Ввести целочисленный файл F, Найти значение * - количество четных элементов в файле, далее найти сумму последних * элементов. Полученным значением заменить каждую вторую компоненту файла. Вывести на экран файл как до, так и после преобразования. 94
27. Ввести с клавиатуры файл F действительных чисел и выдать его на печать. Определить среднее геометрическое положительных компонент файла, стоящих после третьей отрицательной компоненты, и записать его в конец файла. Выдать на печать файл после преобразования, значение вычисленного среднего геометрического или сообщение о невозможности преобразования. 28. Ввести числовой файл F. Если первая компонента файла положительна, то домножить все его компоненты на квадрат минимального элемента, если отрицательна, то домножить все компоненты на квадрат максимума. В случае нулевой первой компоненты максимум и минимум продублировать, записав их значения в конец файла. Файл до и после преобразования отпечатать. 29. В файле F заменить все нулевые компоненты значением суммы первой и последней компонент файла, все отрицательные компоненты уменьшить на значение суммы, а также найти среднее арифметическое положительных компонент, которым заменить сами положительные элементы. Файл вывести как до, так и после преобразования. 30. Ввести файл F действительных чисел и выдать его на печать. Поменять местами наибольший по модулю и первый компоненты файла. Преобразовать его, не создавая нового файла, разделив компоненты на абсолютное значение наибольшего по модулю компонента. 3.7. Обработка компонентных файлов и массивов Ниже приведен пример оформления лабораторной работы. Л. Р.№_ «Обработка компонентных файлов и массивов» Студент Иванов И. И. Группа ХХ-999 Дата дд.мм.гг Допуск Выполнение Вариант 88 Отчет 95
Условие задачи Ввести файл F, вывести его. Сформировать квадратную матрицу А\ЖхЖ максимально возможного размера из всех элементов левее максимума и матрицу А22х3 из положительных элементов правее максимума (если формирование невозможно, то сообщить об этом). Для вывода матриц использовать подпрограммы. Тестовый пример Входные данные: введенный файл F: 12 3 4 5 6100 2 3 4 5 -3 -2 4 3 2 Выходные данные: Матрица А1 после формирования: 1 2 3 4 Матрица А2 после формирования: 2 3 4 5 4 3 96
Блок-схема Начало Assign(F, 'F.dat') t : Rewrite(F) (5 Вывод матрицы max:=buf t I kmax:=filePos(F)-1 97
»k(F,kmax+1) Листинг программы на Pascal program MaxMInExch; const L=10; type T2M = array[1.. L,1..L] of integer; Tname = string[4J; varAl,A2:T2M; ij,Nl,kmax,nPol:byte; 98
buf,max:integer; F: file of integer; begin // инициализация файла Assign(F/F.daf); rewrite(F); \¥гкеЬп('введите первую компоненту файла'); readLn(buf); while buf<>999 do begin write(F,buf); writeLn(,ввeдитe следующую компоненту:'); readLn(buf); end; // вывод файла writeLn(,ввeдeнный файл F:'); reset(F); while not EOF(F) do begin read(F,buf); write(buf:4); end; writeLn; // поиск максимума reset(F); read(F,max); kmax:=0; while not EOF(F) do begin 99
read(F,buf); if buf>max then begin max:=buf; kmax:=fflePos(F)-l; end; end; if kmax=0 then writeLnC Левее максимума нет элементов, формирование матрицы А1 невозможно') else begin reset(F); N1 :=trunc(sqrt(kmax)); for i:=l to N1 do for j:=l to N1 do begin read(f,buf); Al[ij]:=buf; end; writeLn(fMaTpH4a Al после формирования:'); for i:=l to N1 do begin forj:=l toNl do write(Al[ij]:4); writeLn; end; end; seek(F,kmax+l); 100
nPol:=0; while not EOF(F) do begin read(F,buf); ifbuf>Othen inc(nPol); end; ifnPol<2*3then begin writeLn('cnpaBa от максимума нет 2*3=6 пол. элементов,'); writeLn('a потому формирование матрицы А2(2хЗ) невозможно'); end else begin seek(F,kmax+l); i:=l; j:=i; repeat read(F,buf); if buf>0 then // если элемент >0, то его в матрицу begin A2[ij]:=buf; inc(j); if j>3 then begin inc(i); j:=l; end; end; 101
until i>2; writeLn('MaTpmj,a A2 после формирования:1); for i:=l to 2 do begin forj:=l to3do write(A2[i,j]:4); writeLn; end; end; close(F); end. Контрольные вопросы по теме «Обработка компонентных файлов и массивов» 1. Напишите фрагмент программы создания файла. 2. Напишите фрагмент программы вывода файла на печать. 3. Как установить указатель в конец файла? 4. Как удалить в файле компоненты, начиная с номера N? 5. Какая процедура используется для прямого доступа к компонентам файла? 6. Напишите фрагменты программ копирования элементов файла в одномерный массив, и наоборот. 102
Варианты заданий по теме «Обработка компонентных файлов и массивов» 1. Ввести целую квадратную матрицу A(N,N) (N«=10). Из четных ее элементов сформировать файл F. Из файла F сформировать файл G, в который сначала записать сумму всех элементов файла F, затем максимальное значение файла F, затем все его компоненты в обратном порядке. 2. Создать файл F вещественных чисел. Получить вектор В, записывая в него каждую третью компоненту файла, читая файл с начала, и вектор А, читая файл с конца. Файл и полученные векторы распечатать.Задан числовой файл F. Определить произведение первых N ненулевых компонент файла и сумму последних N компонент. Сформировать из файла вектор В(10), в конец которого дописать сумму, а затем произведение. Вектор распечатать. Если формирование вектора невозможно, то сделать об этом сообщение. 3. Ввести с клавиатуры .квадратную матрицу X (М,М) (М<=10). Определить в ней максимальные элементы каждой строке и записать вычисленные значения в файл F1. Определить минимальную компоненту в файле F1. Выдать на печать матрицу X, файл F1, минимальную компоненту и ее номер. 4. Из компонент файла F1, введенного с клавиатуры, создать квадратную матрицу X максимально возможного размера. Определить в матрице X сумму элементов каждого столбца и записать вычисленные суммы в конец файла. Выдать на печать файл F1 до преобразования и после, а также матрицу X в виде таблицы. 5. Сформировать файл F целого типа. Найти S — сумму первых трех положительных компонент файла. Если S>10, то получить из файла одномерный массив А, записывая в него каждую вторую компоненту файла. Массив распечатать. Если S<=10, то каждую компоненту файла увеличить на величину S. Файл распечатать. 103
6. Сформировать матрицу A(N,M) (N<=10, М<=15). Получить из матрицы файл, записывая в него сначала строку, затем столбец, содержащие максимальный элемент матрицы. Файл распечатать. 7. Сформировать файл F целого типа. Из файла получить матрицу A(N,M). Начиная с 1-ой и по (N-l)-yio строки формировать, читая компоненты файла с начала, N-ую строку заполнить компонентами, читая файл с конца. Матрицу распечатать. Если матрицу сформировать нельзя, то сделать сообщение. Значения N, М вводятся с клавиатуры. 8. Создать файл F вещественных чисел. Сформировать из файла матрицу A(N,N), заполняя ее строками. Если для формирования матрицы не хватает компонент файла, то дописать числа 1,2,3,...п. Матрицу распечатать. 9. Создать числовой файл F. Найти сумму всех компонент и произведение отрицательных компонент файла. Получить из него два вектора: А и В. В вектор А последовательно записать положительные компоненты файла и в конец — полученную сумму; в вектор В записать сначала вычисленное произведете, а далее — отрицательные компоненты файла. Вектора А,В распечатать 10. В заданной целочисленной матрице A(N,M) (N<=10, М<=15) строки, не содержащие ни одного нуля, переписать последовательно в файл F. Если файл не сформирован, сделать текстовое сообщение. 11. Дана матрица A(N,N) (N<=10, М<=15), получить файл F, записывая в него минимальные элементы каждого столбца, в конец файла записать последний элемент 2^ строки и первый элемент последней строки. В файле вычислить сумму каждой второй компоненты и записать ее на место 2~ компоненты. Файл распечатать. 104
12. Элементы файла F поместить на главную и побочную диагональ матрицы D(N,N) (N<=10). Отрицательные элементы полученного массива дописать в файл F. Файл и матрицу вывести на экран. 13. Создать числовой файл F1. Из положительных компонент файла F1 получить квадратную матрицу A(N,N) возможного размера. В конец файла записать сумму элементов главной и побочной диагонали. Файл и матрицу напечатать. 14. Сформировать матрицу C(N,N) (N<=10). Строки с отрицательным элементом на главной диагонали последовательно записать в файл F1. В конец файла F1 дописать сумму первой и последней компонент, а затем 1^ и последний элемент матрицы С. Файл F1 распечатать. 15. Ввести целую квадратную матрицу A(N,N) (N<=10). Из положительных ее элементов сформировать файл f, причем формирование файла вести, рассматривая матрицу по столбцам. После записи столбца матрицы дописывать в файл количество положительных элементов в столбце и среднее арифметическое их значение. Файл F распечатать. 16. Сформировать матрицу A(N,N) (N<=10) вещественного типа. Найти суммы элементов главной и побочной диагоналей. Записать в файл F1 сначала элементы диагонали, имеющей большее значение суммы, а затем элементы последней строки матрицы. В файле F1 каждую вторую компоненту, начиная с середины файла, уменьшить вдвое. Файл F1 распечатать. 17. Дана матрица X(N,M) (N<=10, М<=15). Строки матрицы, которые начинаются с положительного элемента, последовательно писать в файл F1. В конец файла дописать сумму максимальной и минимальной компоненты файла, а также первый и последний элементы матрицы. Файл F1 распечатать. 105
18. Ввести две матрицы A(N,N), В(К,К) (N<=10, К<=15). Матрицу с наименьшим минимальным элементом записать в файл F1. Запись выполнять по строкам. В конец файла записать минимальный элемент оставшейся матрицы. В файле вычислить среднее арифметическое всех компонент. Файл, среднее арифметическое напечатать. 19. Сформировать квадратную матрицу А(М,М) (М<=15). Создать файл F, записывая в него последовательно строки с отрицательным элементом на главной диагонали. Если файл не сформирован, то сделать сообщение. Если файл сформирован, то удалить из файла 1-ую компоненту и распечатать. 20. Сформировать файл F целого типа, вывести его. Определить в нем кх- количество четных и к2- количество нечетных компонент. Если к]>к2, то сформировать квадратную матрицу ANxN максимально возможного размера из первых кх компонент, а в противном случае из первых к2 компонент файла. 21. Сформировать файл F целого типа, вывести его. Найти Р- произведение первых к компонент (к- количество кратных трём компонент файла). Из компонент файла F сформировать матрицу А^, читая файл с начала, если к четно и матрицу , если к нечетно. Если матрицу создать невозможно, сделать сообщение. 22. Сформировать файл F целого типа, вывести его. Найти сумму последних к компонент файла (к- количество элементов между максимумом и минимумом файла). Компоненты первой половины файла переписать в вектор В1, а отрицательные компоненты второй половины в вектор В2. 106
23. Сформировать матрицу AlNwm, вывести ее. Получить файл F, записывая в него элементы нечетных строк матрицы. В файле F вычислить S - сумму отрицательных компонент. Если сумма окажется четной, то из элементов файла сформировать квадратную матрицу A2NlxN1 максимально возможного размера. 24. Сформировать матрицу А\тхШ, вывести ее. Получить файл F1, записывая в него элементы нечетных столбцов матрицы и файл F2, записывая элементы четных. В матрице угловые элементы заменить произведением максимума первого файла и минимума второго. Ввести целую квадратную матрицу ANxN> вывести ее. Из положительных элементов матрицы сформировать файл F, который вывести. Далее из файла F сформировать файл G, в который сначала записать сумму всех элементов файла F, затем максимальное значение файла F, затем все его компоненты в обратном порядке. 25. Создать файл F вещественных чисел. Получить вектор В, записывая в него каждую третью компоненту файла, читая файл с начала, и вектор А, читая файл с конца. Файл и полученные векторы распечатать. 26. Ввести с клавиатуры квадратную матрицу ANxNi вывести ее. Создать файлы F и G следующим образом: в файл G сначала записать элементы главной диагонали, затем побочной, в файл G по строкам вписать элементы матрицы, исключая диагональные. В конец файлов приписать удвоенную сумму всех элементов матрицы. 27. Ввести с клавиатуры квадратную матрицу ANxN, вывести ее. Определить в матрице максимальные элементы каждой строки и записать их значения в файл F. Определить минимальную компоненту в файле F, которую утроить. 107
28. Из компонент файла F, введенного с клавиатуры, создать квадратную матрицу ANxN максимально возможного размера. Определить в матрице сумму элементов каждого столбца и записать вычисленные суммы в конец файла. Выдать файл F до преобразования и после, а также матрицу в виде таблицы. 29. Сформировать матрицу В (М,М) (М<=15). Создать файл F, записывая в него последовательно столбцы с четным элементом на побочной диагонали. Если файл не сформирован, то сделать сообщение. Если файл сформирован, то удалить из файла макимальную компоненту и распечатать. 30. Ввести с клавиатуры матрицу ANxN, вывести ее. Определить в матрице сумму отрицательных элементов каждой строки и записать их значения в файл F. Определить минимальную компоненту в файле F, которую записать вместо макимальной компоненты файла и матрицы. 3.8. Построение подпрограмм Ниже приведен пример оформления лабораторной работы. Л. Р. № _ Студент Иванов И. И. Группа ХХ-999 «Построение Дата дд.мм.гг подпрограмм» Допуск Выполнение Вариант 88 Отчет Условие задачи Ввести двумерные массивы X1(N1, N1), X2(N2, N2\ X3(N3, N3). Найти наименьший из максимумов этих массивов. Значением найденного минимального максимума заменить элементы побочных диагоналей всех матриц. Далее переписать в одномерный массив Y главную диагональ той 108
матрицы, в которой максимум окажется наибольшим {при решении реализовать процедуры ввода и вывода массивов: Vvod2m(A, N, Name), Vivod2m(A, N, Name), Vivodlm(A, N, Name); Form(A, B, N) - процедуру формирования из двумерного массива А одномерного массива В; Zamena(A, N, Chislo) - замена побочной диагонали значением Chislo; и функцию Maximum(A,N,M): <тип матрицы> - максимум в матрице; а также функцию min(x,y) :<тип матрицы> - минимум из пары чисел х, у) Тестовые примеры Входные данные: N1=2 XI- 1 2 3 4 N2=3 Х2= -2 -4 5 6 -7 9 10 1 -6 N3=3 хз= -9 4 -9 1 16 5 1 13 34 Максимум в XI = 4; максимум в Х2 = 10; максимум в ХЗ = 34. Наименьший из этих максимумов - в массивеХ1, он равен 4. Выходные данные № 1 Результаты преобразования массивов путем замены значением найденного минимального максимума элементов побочных диагоналей всех матриц: Х1= 1 4 4 4 109
Х2= -2 -4 4 6 4 9 4 1 -6 Х3= -9 4 4 1 4 5 4 13 34 Следующий шаг решения: Наибольший из этих максимумов в массиве ХЗ, он равен 34. Выходные данные № 2 Формирование одномерного массива Y путем записи главной диагонали матрицы ХЗ. 7=-Р 4 34 ПО
Блок-схема ввод двумерного массива procedure Vvod2m(var A:T2m; var N:byte; const Name:TName) L Ввод N < " i := 1 N ▼ f j:=1 N > >1 L Ввод A[i, j] i ^ Выход ^ Name A - N M Vvod2m Maximum A N -max вывод двумерного массива Vivod2m(const A:T2m; const N:byte; const Name:TName) < i := 1 , N j := 1 , N >i Вывод A[i, j] =ZD 7 ^ Выход ^ Vi Na г ' Vivod2m me A N Form mm -mm 111
N - Nam_ e Vivodlm N - Chisl Zamena вывод одномерного массива f^/ivod1m(const A:T1m; const N:byte; I const Name:TName) замена элементов побочной диагонали матрицы te\ ^рп procedure Zamena(var A:T2m, const N.byte; const ChisIo:integer) = 1 ,N J Вывод A[i,J] J Q Выход ^ поиск максимума в двумерном массиве function Maximum(const А: N,M byte).fnteger i :T2m;^ T i - 1 , N / A[i,N-i+1]:=Chisio / I Г Q Выход ^ формирование одномерного массива В из двумерного А procedure Form (const A:T2m; var B:T1m; const N:byte) 0 i := 1 , N з: / B[tj:=A[i,i] J Q Выход ^ поиск наименьшего из пары чисел function min(const x,y:integer)integer 112
Основная программа ^ Начало ^ VvodamCXI.NVXI') Vvod2m(X2,N2,,X2,) vvod2m(X3,N3,'X3') Vivod2m(X1lN1,'X1') + max1-Maximum(X1,N1,N1) L Вывод max1 7 VJvod2m(X2,N2,'X2') max2:=Maximum(X2,N2,N2) L Вывод max2 7 VJvod2m(X3,N3,,X3') max3=Maximum(X3,N3,N3) Вывод тахЗ 7 MinOfMax:=min(max1, min(max2,max3)) Вывод MinOfMax"^ <5~ Zamena(X1,N1,MinOfMax) Zamena(X2,N2,MinOfMax) Zamena(X3,N3,MinOfMax) Vivod2m(X1IN1l,Xr) VJvod2m(X2,N21,X2') Х/^гп^ХЗ^З/ХЗ1) Ny-N1 form(X1,Y,Ny) Ny:=N2 form(X2,Y,Ny) form(X3,Y,Ny) ' I Vivod1m(Y,Ny,T) 1 ^ Конец ^ 113
Листинг программы на Pascal program Zl 9; const MaxRazm = 10; type Tlm=array[l..sqr(MaxRazm)] of integer; T2m=array[l..MaxRazm,L.MaxRazm] of integer; TName=string[5]; varXl,X2,X3:T2m; Y:Tlm; Nl,N2,N3,Ny:byte; maxl,max2,max3,MinOMax,MaxOfMax:integer; // ввод двумерного массива procedure Vvod2m(var A:T2m; var N:byte; const Name:TName); vari,j:byte; begin \угкеЬп('вводите массивName/:'); write('pa3MepHOCTb массива N='); readLn(N); for i:=l toNdo forj:=l toNdo begin write(Name,,[,,i,,;,j;]='); readLn(A[i,j]); end; end; // вывод двумерного массива procedure Vivod2m(const A:T2m; const Nrbyte; const Name:TName); var i,j:byte; begin ^УгкеЬп('выводим массивName,':'); 114
for i:=l to N do begin forj:=l toNdo write(A[ij]:5); writeLn; end; end; // поиск максимума в двумерном массиве function Maximum(const A:T2m; N,M:byte):integer; var max:integer; i,j:byte; begin max:=A[l,l]; for i:=l to N do forj:=l toMdo if A[i,j]>max then max:=A[i,j]; Maximum:=max; end; // поиск наименьшего из пары чисел function min(const x,y:integer):integer; begin if x<y then min:=x else min:=y; end; // замена элементов побочной диагонали матрицы procedure Zamena(var A:T2m; const N:byte; 115
const Chislo:integer); var irbyte; begin for i:=l to N do A[i,N-i+l]:=Chislo; end; // формирование одномерного массива В из матрицы А procedure Form(const A:T2m; var B:Tlm; const N:byte); var i:byte; begin for i:=l to N do B[i]:=A[i,i]; end; // вывод одномерного массива procedure Vivodlm(const A:Tlm; const N:byte; const Name:TName); var i:byte; begin хугкеЬпОВыводим одномерный массивName,':'); for i:=l to N do write(A[i]:5); writeLn; end; begin // вводим массивы Vvod2m(Xl,Nl,,Xl'); Vvod2m(X2,N2,'X2'); Vvod2m(X3,N3,'X3'); // выводим массивы до преобразования // ищем максимумы в массивах 116
Vivod2m(Xl,Nl,'Xl'); max 1: =Maximum(X 1 ,N 1 ,N 1); writeLn('max 1=',max 1); Vivod2m(X2,N2,'X2'); max2:=Maximum(X2,N2,N2); writeLn(rnax2=f,max2); Viv6d2m(X3,N3,'X3'); max3 :=Maximum(X3 ,N3 ,N3); writeLn('max3=,,max3); // ищем минимальный максимум MinOMax:=min(maxl?min(max2,max3)); wгiteLn(fминимaльный максимум равен ',MinOfMax); // заменяем побочные диагонали в матрицах Zamena(Xl ,N15MinOfMax); Zamena(X2,N2,MinOfMax); Zamena(X3,N3,MinOfMax); // выводим матрицы после замены Vivod2m(Xl,Nl,'Xl'); Vivod2m(X2,N2,'X2f); Vivod2m(X3,N3;X3'); // формирование одномерного массива if (maxl>max2) and (maxl>max3) then begin Ny:=Nl; form(Xl,Y,Ny); end else if max2>max3 then begin 117
Ny:=N2; form(X2,Y,Ny); end else begin Ny:=N3; form(X3,Y,Ny); end; // выводим одномерный массив Vivodlm(Y,Ny,'Y); end. Дополнительные сведения для выполнения работы «Построение подпрограмм» Подпрограмма - это снабженный заголовком внутренний программный блок, расположенный в разделе описаний внешнего программного блока или программы. Подпрограммы делятся на процедуры и функции. Функция - подпрограмма языка Pascal, реализующая некоторый алгоритм, результатом которого является формирование некоторого единственного значения. Обращение к функции происходит через ее имя. Функция всегда возвращает, как минимум, один параметр, через свое имя, например, function sin(x:real):real. Процедура - подпрограмма языка Pascal, предназначенная для формирования нескольких значений и или выполнения некоторых действий не связанных напрямую с изменением значений параметров. Заголовок выглядит следующим образом: procedure имя_процедуры (список формальных параметров). 118
Подпрограммы описываются в разделе описаний программы до исполняемой части в любом порядке, а вызыются в исполняемой части программы (в разделе операторов) в строго опредленном порядке. Идентификаторы, описанные в подпрограмме, являются локальными для нее, т. е. работа с ними возможна только внутри этой подпрограммы и внутри вложенных в нее блоков. Имена, описанные в модулях более высокого уровня, являются глобальными для всех своих подчиненных. Эти имена могут быть использованы в любом модуле, стоящем ниже на иерархической лестнице, а также в исполнительной части самого модуля. Для того чтобы подпрограмма могла быть использована многократно для разных наборов входных и выходных параметров, используют наборы формальных и фактических параметров. Формальные параметры - это локальные переменные, необходимые для описания алгоритма подпрограммы, они описываются в ее заголовке и используются в собственном разделе операторов. Формальные параметры указываются в скобках справа от названия подпрограммы при ее описании. Потому описание формальных параметров происходит только один раз. Фактические параметры - это набор данных, в обработке которых и заключается предназначение алгоритма. В момент вызова формальные параметры заменяются фактическими во всей подпрограмме. Фактические параметры - все то, что указывается в скобках справа от названия процедуры или функции при ее вызове. Фактические параметры у подпрограммы могут меняться при каждом вызове, а формальные нет. Формальные и фактические параметры должны совпадать: • по количеству, т. е. количество заявленных и реально используемых переменных должно совпадать; • по типу, т. е, тип заявленных и реально используемых переменных 119
должен совпадать; • по порядку следования, т. е. переменные в описании подпрограммы и при ее вызове должны быть перечислены в одинаковом порядке. • по способу передачи, т .е. статус параметров в главной программе должен быть совместимым с заявленным статусом параметров подпрограммы. Фомальные параметры делятся: • на параметры-константы - параметры, переданные по ссылке без права их изменения. Параметры-константы используются, когда передаются входные данные, являющиеся сложными структурированными переменными (например, массивы). При таком способе передачи изменение формального параметра запрещено; если переданный параметр будет изменяться, компилятор выдаст ошибку; • параметры-переменные - параметры, переданные по ссылке с правом их изменения. Параметры-переменные используются для передачи выходных значений процедур. При изменении параметров- переменных изменяется соответствующий фактический параметр; таким образом, изменения сохранятся и после завершения работы подпрограммы. Для использования этого способа передачи в списке формальных параметров перед параметром-переменной ставится префикс var. Следует отметить, что переменная типа file всегда описывается как параметр-переменная. При передаче структурированных типов (файлов, массивов, записей и т.д.) необходимо создавать новый тип в разделе описаний типов type. Контрольные вопросы по теме «Построение подпрограмм» 1. Назовите преимущетва использования подпрограмм. 2. Чем подпрограмм-процедура отличается от подгфограммы-функщш? 120
3. Укажите назначение формальных и фактических параметров. Где они располагаются? 4. Назовите критерии соответствия формальных и фактических параметров. Должны ли они совпадать по идентификаторам? 5. Что такое локальные и глобальные параметры и где они описываются? 6. Чем параметры-константы отличаются от параметров-переменных? Варианты заданий по теме «Построение подпрограмм» Обработка массивов с использованием подпрограмм 1. Ввести одномерные массивы XIт, X2N2 и X3N3. Заменить в каждом из них максимальный элемент средним арифметическим положительных элементов (если оно существует) соответствующего массива. Вывести массивы до преобразования и после (при решении реализовать процедуры ввода и вывода массивов Vvodlm(AJNJName) и Vivodlm(A,N,Name), а также функции IndMax(A,N):byte - поиск индекса максимума и SrAPol(A,N):real - поиск среднего арифметического положительных элементов (равно нулю, если положительных нет)). 2. Ввести матрицы XNxxMx и YNyxMy. В матрицах найти максимумы, которые вывести. Преобразовать каждую матрицу, уменьшив ее положительные элементы на значение максимума другой матрицы. Исходные и преобразованные матрицы вывести на экран (при решении реализовать процедуры ввода и вывода массивов: Vvod2m(A,N,MJVame), Vivod2m(A,N,M,Name) и Zamena(A,N,M,Vichet) - уменьшение положительных элементов матрицы на величину Vichet, а также функцию Maximum(A,N,M):<mun массива> - поиск максимума). 121
3. Ввести одномерные массивы XlNl, X2N2 и X3N3. Определить в каждом из них среднее арифметическое отрицательных элементов. Если среднее арифметическое отрицательных существует, то поместить его в четные ячейки соответствующего массива. Вывести массивы до преобразования и после (при решении реализовать процедуры ввода и вывода массивов Vvodlm(A,N,Name) и Vivodlm(A,N,Name), функцию SrArOtr(A,N):real - поиск среднего арифметического отрицательных, которая равна нулю, если отрицательных нет, и процедуру ZamenaChet(A,N,Chislo) - замена четных ячеек значением Chislo). 4. Ввести квадратные матрицы XlNum, X2N2xN2 и X3N3xN3. Найти минимальное из трех чисел: Tr\, 7>2, 7V3, каждое из которых является следом соответствующей матрицы (суммой диагональных элементов). В матрицах поменять местами первую строку и побочную диагональ. Матрицы вывести до и после преобразования (при решении реализовать процедуры ввода и вывода массивов: Vvod2m(A,N,Name), Vivod2m(A,N,Name), а также функции Trace(A,N):<mun массива> - поиск следа и Min(p, q):<mun массива> - минимум среди двух чисел; Zamena(AfN) - замена первой строки и побочной диагонали в матрице). 5. Ввести двумерные массивы Х\Иыт и X2N2xM2. Найти наибольший элемент в каждом из массивов. В каждой матрице записать в строку, содержащую этот элемент, нули, исключая сам максимальный элемент. Вывести на экран матрицы до преобразования и после (при решении реализовать процедуры ввода и вывода массивов: Vvod2m(A,N,MfName), Vivod2m(A,N,M,Name) и ZamenaStr(A,Iz,M>Jz) - замена нулями элементов строки Iz, кроме элемента расположенного в столбце Jz; а также процедуру Maximum(A,N,M,Imax,Jmax) - поиск координат максимума). 122
6. Ввести одномерные массивы Xlm, X2N2 и ХЗт. Разделить каждый из элементов на максимальный элемент среди отрицательных элементов соответствующего массива. Массивы вывести на экран до и после преобразования (или сообщение о невозможности преобразования) (при решении реализовать процедуры ввода и вывода массивов: Vvodlm(A,N,Name) и Vivodlm(A,N,Name); функцию MaxOtr(A,N):<mun массива> - максимум среди отрицательных, которая равна нулю, если отрицательных нет; и процедуру Delenie(A,N,Chislo) - деление элементов массива на Chislo). 7. Ввести двумерные массивы XlmxNl, X2N2xN2. Заменить в каждом массиве элементы главной диагонали на произведение положительных элементов противоположной матрицы. Матрицы вывести на экран до и после преобразования (если преобразование невозможно, то вывести соответствующее сообщение) (при решении реализовать процедуры ввода и вывода массивов: Vvod2m(A,N,Name), Vivod2m(A,N,Name), а также функцию PrPol(A,N):<тип массива> - поиск произведения положительных (равна нулю при их отсутствии) и процедуру ZamenaDiag(A,N,Chislo) - замена диагонали значением Chislo). 8. Ввести двумерные массивы XlNlxMl, X2N2xM2. Переписать элементы строки матрицы, содержащей минимальный элемент, соответственно, в одномерные массивы Y\m и Y2M2. Обе матрицы и массивы вывести на экран (при решении реализовать процедуры ввода и вывода массивов: Vvod2m(A,N,M,Name), Vivod2m(A9NJ\I,Name), Vivodlm(A,N,Name), а также функцию IndMin(A,N,M):byte - индекс строки, содержащей минимум и процедуру FormFromStr(A,B,M,Str) - перепись изАвВ строкиStr). 9. Ввести одномерные массивы X1N, X2N. Определить новый вектор-массив X3N как ХЗ = Х1*+Х2*, где знак «*» означает, что все 123
компоненты этого вектора получены из исходного путем его деления на максимальную компоненту (производится нормировка) (при решении реализовать процедуры ввода и вывода массивов: Vvodlm(A,N,Name) и Vivodlm(A,N,Name); функцию MaxOtr(A,N):<mun массива> - максимум массива; процедуру Delenie(A,N,Chislo) - деление элементов массива на значение Chislo; процедуру Form(AlyA2,A3,N) - формирование третьего массива из пары исходных). 10. Ввести двумерные массивы XlNlxm, X2N2xM2. Если максимальный элемент массива XI больше максимального элемента массива Х2, то заменить им - все отрицательные элементы обеих матриц. В противном случае - все положительные элементы. Массивы до и после преобразования вывести на экран (при решении реализовать процедуры ввода и вывода массивов: Vvod2m(A,N,M,Name), Vivod2m(A,N,M,Name), а также функцию Maximum(A,N>M):<mun массива> - максимум массива и процедуры ZamenaPol(A,N,M,Chislo), ZamenaOtr(A,NJ\f>Chislo) - замена, соответственно, положительных и отрицательных элементов значением Chislo). 11. Ввести двумерные массивы XlNlxMl, X2N2xM2. Переписать элементы столбцов обоих матриц, содержащих максимальные элементы в своих матрицах в одномерный массив Ym+N2. Обе матрицы и массив Y вывести на экран (при решении реализовать процедуры ввода и вывода массивов: Vvod2m(A^VMName), Vivod2m(A9N^MJName), Vivodlm(A,N,Name), а также функцию IndMin(A,N,M):byte - индекс столбца, содержащего минимум и процедуру Form(A1^42,BfNl,N2,Stlbl,Str2) - перепись из А1, А% в одномерный массив В столбцов Stlbl, Stlb2). 12. Ввести двумерные массивы XlNUNl9 X2N2xN2, X3N3xN3. Заменить в них элементы побочной диагонали на произведение положительных и кратных 3 элементов соответствующей матрицы. Исходные и 124
преобразованные матрицы вывести на экран (или сообщение о невозможности преобразования) (при решении реализовать процедуры ввода и вывода массивов: Vvod2m(A,N,Name), Vivod2m(A,N,Name); функцию PrKr3Pol(A,N):integer - поиск произведения положительных и кратных трем (если произведение не существует, то функция равна нулю); процедуру ZamenaDiag(A,N,Chislo) - замена побочной диагонали значением Chislo). 13. Ввести двумерные массивы XlNlxMl, X2N2xM2. В этих массивах найти минимальные элементы. Преобразовать каждую матрицу, увеличив ее отрицательные элементы на значение минимального по модулю элемента другой матрицы. Исходные и преобразованные матрицы вывести на экран (при решении реализовать процедуры ввода и вывода массивов: Vvod2m(A,N,M,Name), Vivod2m(A,N,M,Name); а также функцию Mini- mumMod(A,N,M):<mun матрицы> - поиск минимального по модулю элемента; процедуру ZamenaOtr(A,N,M,Chislo) - увеличение элементов матрицы на значение Chislo). 14. Ввести двумерные массивы XlNlxNl, X2N2xN2, X3N3xN3. В каждом массиве найти среднее арифметическое положительных элементов. Преобразовать каждый из массивов по правилу: деление элементов 1-го столбца на сумму положительных элементов 1-й строки, элементы, 2-го столбца на сумму положительных элементов 2-й строки и т. д. (при решении реализовать процедуры ввода и вывода массивов: Vvod2m(A,N,Name), Vivod2m(A,N,Name); а также процедуру Modi- fication(AyN) - деление столбцов на суммы строк; и функцию SrAPol(A,N):real - поиск среднего арифметического положительных элементов (равно нулю, если положительных нет)). 15. Ввести двумерные массивы XlNxN, X2NxN. Получить массивы X3NxN, XANxN, элементы которых вычисляются по формулам 125
X3[i, j] := Xl[i, j] + X2[i9 J], X4[i9 j] := X2[i, j] + X3[i, j]. Вывести все вышеупомянутые массивы вместе со значением соответствующего максимума среди элементов главной диагонали (при решении реализовать процедуры ввода и вывода массивов: Vvod2m(A,N,Name), Vivod2m(A,N,Name); а также процедуру Summ(A,Ax^iy,N) - суммирование матриц Ах, Ау с сохранением результата в А; и функцию MaxDiag(A,N):<mun массива> - максимум среди элементов главной диагонали). 16. Ввести двумерные массивы XlNxM9 X2NxM, X3NxM. Получить массив X4NxM по формуле X4[iJ]^m^{X\[iJ],X2[iJ],X3[iJ}) и X5NxM по формуле X5[i>j]:=max(Xl[i,j],X2[i,j]9X4[i9j]y Все вышеупомянутые массивы вывести (при решении реализовать процедуры ввода и вывода массивов: Vvod2m(A,NJ\i,Name), Vivod2m(A,N,M,Name); а также процедуру Sozd(A9AxyAy,Az,NyM) - создание матрицы А, на основе Ах, Ay, Az; и функцию Мах(р,ф:<тип массива> - максимум среди пары элементов). 17. Ввести двумерные массивы X\NUMl9 X2N2xM2> ХЗтхМ3. Для этих матриц найти MinO/Min - минимум среди минимальных элементов - и MinOfMax - минимум среди максимальных элементов, - которым заменить нулевые элементы в каждом массиве. Вывести массивы до и после замены (при решении реализовать процедуры ввода и вывода массивов: Vvod2m(A,N,M,Name), Vivod2m(A,N,M,Name); а также функции Min2mass(A,N,M):<mun массива> и Max2mass(A,N,M):<mun массива> - поиск минимума и максимума в матрицах; и функцию Мт(р,ф:<тип массива> — минимум среди пары элементов; ZamenaZero(A,N,M,Chislo) - замена нулевых элементов значением Chislo). 18. Ввести квадратные двумерные массивы XlNUm, X2N2xN2 и X3N3xN3. Вывести эти матрицы. Найти S-SI-S2-S3, где SI,S2,S3 - произведение диагональных элементов (главной и побочной) и 126
m = ml + m2 + m3, где ml,m2,m3 - максимумы вышеупомянутых матриц. Значением S заменить нулевые элементы в каждой из матриц (при решении реализовать процедуры ввода и вывода массивов: Vvod2m(A9N9Name), Vivod2m(A,N,Name); а также функции SumDiag(A9N):<mun массива> - сумма диагональных элементов и Maximum(A,N):<mun массива> - поиск максимума в матрице, а также процедуру замены нулевых элементов значением Chislo: ZamenaZero(A,N9M,Chislo)). 19. Ввести квадратные двумерные массивы XIтхЖ и X2N2xN2. Вывести эти матрицы. В матрицах вычислить и отпечатать средние арифметические элементов, расположенных под главной диагональю, которыми заменить элементы побочной диагонали противоположной матрицы (при решении реализовать процедуры ввода и вывода массивов: Vvod2m(A,N,Name), Vivod2m(A9N,Name); а также функция SrArDiag(A9N):real — среднее арифметическое поддиагоналъных элементов, и ZamenaPoboch(A9N,Chislo) - замена побочных элементов на значение Chislo). 20. Для заданных четырех матриц XlNlxN1, X2N2xN2, X3N3xN3 и X4N4xN4 найти и напечатать длины векторов Ya3 = {sl,s2,s3} и Yb3-{s29s3,s4} где sl,s2,s3,s4 - суммы положительных элементов соответствующих матриц. Следует напомнить, что длина вектора вычисляется как квадратный корень из суммы квадратов координат (при решении реализовать процедуры ввода и вывода массивов: Vvod2m(A,N,Name), Vivod2m(A9N9Name); а также функции SummPol(A9N):<mun массива> — сумма положительных элементов, и Dlina(p,q,r):real - длина вектора с координатамиp,q,r). 21. Ввести три матрицы XlNlxNU X2N2xN2i X3N3xN3. Вычислить и отпечатать значение функции z-bxy2 +Ъ2у + й3, если у вводится с 127
клавиатуры; bl9b2,b3 - следы матриц XI, Х2, ХЗ (следом матрицы называется сумма элементов главной диагонали). Значением z заменить нулевые элементы выше главной диагонали в каждой из матриц. Матрицы вывести до и после преобразования (при решении реализовать процедуры ввода и вывода массивов: Vvod2m(A,N,Name), Vivod2m(A,N,Name), а также функцию Sled(A,N):<mun массива> - след, и процедуру Zamena(A,N9Chislo) - замена нулевых элементов выше главной диагонали на Chislo). 22. Ввести три массива Х\т, X2N2, X3N3. Найти и вывести на экран г - минимальное из трех чисел: г\9 г2, гЗ (количества положительных чисел для каждого из массивов). Значением г заменить нулевые элементы в каждом из массивов. Массивы вывести до и после преобразования (при решении реализовать процедуры ввода и вывода массивов: Vvodlm(A,N,Name), Vivodlm(A9N9Name), а также функцию KolPol(A,N):byte - количество положительных, и процедуру Zamena(A,N,Chislo) — замена нулевых элементов значением Chislo). 23. Ввести одномерные массивы целых чисел XIт, X2N2, X3N3. Определить в каждом массиве среднее арифметическое положительных элементов, кратных 5 или 3, и записать его целую часть (встроенная функция целой части: trunc(x))) на место первого, последнего и предпоследнего элемента соответствующего массива (при условии существования среднего арифметического). Вывести массивы до преобразования и после (при невозможности вычислить среднее арифметическое, вывести соответствующее сообщение) (при решении реализовать процедуры ввода и вывода массивов: Vvodlm(A9N,Name), Vivodlm(A,N,Name), а также функцию SrAkr53(A,N):reat - среднее арифметическое положительных, кратных пяти или трем (функция равна 128
равна «-\», если оно не существует), и процедуру Zamena(A,N,Chislo) - замена первого, последнего и предпоследнего значением Chislo). 24. Ввести одномерные массивы Xlm, X2N2, X3N3. Найти и отпечатать максимальные по модулю отрицательные элементы в каждом из массивов. Найденными значениями заменить положительные элементы соответствующих массивов (при решении реализовать процедуры ввода и вывода массивов: Vvodlm(A,N,Name), Vivodlm(A,N,Name), а также функцию MaxModOtr(A,N):<mun массива> - максимальное по модулю отрицательное (функция равна нулю при отсутствии отрицательных), и процедуру Zamena(A9N9Chislo) - замена положительных элементов значением Chislo). 25. Ввести квадратные матрицы XlmxMl, X2N2xN2. Обменять главную и побочные диагонали у той матрицы, у которой значение суммы ее элементов окажется больше. Матрицы вывести до и после преобразования (при решении реализовать процедуры ввода и вывода массивов: Vvod2m(A,N,Name), Vivod2m(A,N9Name), а также функцию Sum- ma(A,N):<mun массива> - сумма элементов, и процедуру Obmen(A,N) - обмен диагоналей в матрице) 26. Ввести квадратные матрицы XlNxM, X2NxM. Заменить первой строкой одной матрицы первую строку другой матрицы. Матрица, строка которой будет дублирована в другой матрице, определяется минимальным значением (у какой матрицы минимальный элемент меньше - та и является донором, т. е. источником). Матрицы вывести до и после преобразования вместе со значением их минимумов (при решении реализовать процедуры ввода и вывода массивов: Vvod2m(A9N9M9Name), Vivod2m(A9N9M9Name), а также функцию Minimum(A9N9M):<mun массива> - минимум матрицы, и процедуру Zamena(Al9A29M9Str) - замена строки номер Sir в матрице А1 строкой Sir в матрице А2). 129
27. Ввести квадратные матрицы XlNlxN1, X2N2xN2. Матрицу, у которой над побочной диагональю окажется больше четных элементов, транспонировать. Матрицы вывести до и после преобразования (при решении реализовать процедуры ввода и вывода массивов: Vvod2m(A,N,Name), Vivod2m(A,N,Name), а также функцию ChetNadPob(A,N):byte - количество четных над побочной диагональю, и процедуру Transp(A,N) — транспонирование матрицы). 28. Ввести матрицы Х1мит, Х2М2хМ2. Матрицу, у которой сумма элементов последнего столбца окажется меньше, преобразовать. Преобразование заключается в замене отрицательных элементов каждой строки суммой положительных элементов этой строки. Матрицы вывести до и после преобразования (при решении реализовать процедуры ввода и вывода массивов: Vvod2m(A,N,M,Name), Vivod2m(A,N,M,Name), а также функцию SumPoslStlb(A,N):<mun матрицы> - сумма элементов последнего столбца и процедуру Modif(A,N,M) — замена элементов в строках). 29. Ввести матрицы Х1М1хШ, Х2М2хМ2. Сформировать из матриц пару одномерных массивов YlNyl и Y2Ny2, в которые поместить положительные элементы соответствующих матриц. В одномерных массивах найти количество четных элементов и вывести их вместе с самими массивами (при решении реализовать процедуры ввода и вывода массивов: Vvod2m(A,N,M,Name), Vivod2m(A,N,M,Name), Vivodlm(AyN9Name), процедуру FormPol(A,Na,Ma,B,Nb) - формирование из положительных элементов двумерного массива А одномерного массива В, а также функцию KolChet(A,N):byte - количество четных элементов в одномерном массиве). 30. Ввести матрицы XlNlxMl, X2N2xM2. Сформировать из матриц пару одномерных массивов и Y2Ny2, в которые поместить элементы, 130
превышающие среднее арифметическое соответствующих матриц (при решении реализовать процедуры ввода и вывода массивов: Vvod2m(A,N,M,Name), Vivod2m(A,N9M,Name), Vivodlm(A9N9Name)9 процедуру Form(A,Na,Ma,B,Nb,Chislo) - формирование из элементов двумерного массива А, превышающих значение Chislo, одномерного массива В; функцию SrA(A,N,M):real - среднее арифметическое элементов двумерного массива). Обработка компонентных файлов и массивов с использованием подпрограмм 1. Ввести 2 квадратные матрицы: А1мит и А2тм\ вывести их. Далее переписать в файл F построчно ту из матриц, у которой модуль суммы отрицательных элементов под побочной диагональю окажется больше. В конец файла дописать полученные суммы (в случае равенства предпочтение отдать матрице А\). Полученный файл вывести (прим.: при решении использовать подпрограммы. 2. Ввести 3 файла - Fx, Fy и Fz - одинаковой длины М. Вывести их друг под другом. Сформировать из этих файлов двумерный массив Аъш, в котором верхняя строка - последовательно записанные элементы файла Fx; средняя - элементы Fy, & нижняя, соответственно, элементы Fz. Матрицу отсортировать по первой строке и вывести ее как до, так и после преобразования (прим.: при решении использовать подпрограммы). 3. Ввести 3 файла: FI, F2, F3; вывести их. Упорядочить их по убыванию методом пузырька. Переписать в одномерный массив Вк элементы того файла, чья сортировка потребует наибольшее число перестановок (в случае равенства переписать первый среди равных). Массив В вывести (прим.: при решении использовать подпрограммы). 131
4. Ввести 2 файла - Fx и Fy - одинаковой длины М £ 2. Вывести их друг под другом. Далее сократить размер каждого из файлов на 1, заменяя в нем компоненты разностью соседних ячеек (от правой отнять левую). Файлы вывести. После этого сформировать одномерный массив Вм_х > элементами которого являются частные от деления соответствующих элементов Fy на Fx. Полученный массив вывести (прим.: при решении использовать подпрограммы). 5. Ввести файл F1, из положительных элементов которого сформировать другой файл F2 9 читая FI от конца к началу. Из этих файлов сформировать, соответственно, квадратные матрицы ALNwm и A2N2xN2 максимально возможного размера, записывая в них элементы построчно. В полученных матрицах поменять местами первую строку и главную диагональ. В процессе решения задачи выводить файлы и матрицы как до, так и после преобразований (прим.: при решении использовать подпрограммы). 6. Ввести 2 числа: N<1 и М<1. Сформировать 2 квадратные матрицы - Ашм и Вшм - по правилу atJ.= (/ + /-1)! (факториал числа); вывести их. Переписать в файл F четные строки матрицы А и нечетные столбцы матрицы В, файл вывести. После этого каждую третью компоненту файла заменить значением суммы и вновь его вывести. (прим.: при решении использовать подпрограммы). 7. Ввести файлы Fxl и Fx2 вещественных чисел, вывести их. Дважды протабулировать функцию у = 2х2 + 4' сначала читая значения х из файла Fxl, а затем из файла Fx2 (для корректной табуляции файл нужно предварительно отсортировать по возрастанию). Во время табуляции сформировать двумерные массивы А12хМ] и А22хМ2 (на экран вывести именно эти 2 матрицы, минуя вывод при вычислении у(х)). В данных 132
матрицах (Al и А2) первые строки - копии соответствующих файлов (Fxl и Fxl), а вторые - значения функций в соответствующих точках (прим.: при решении использовать подпрограммы). 8. Ввести 2 целочисленных файла FI и F29 в которых первая компонента - количество строк, а вторая - количество столбцов в хранящихся в этих файлах матрицах. Третья компонента - сумма всех элементов в этих матрицах. Восстановить исходные матрицы Al, А2 и вывести их. В случае невозможности проведения операции восстановления (элементов в файле меньше заявленного или размерность меньше 1) вывести об этом сообщение. Кроме того, вывести истинную и заявленные суммы элементов в матрицах (прим.: при решении использовать подпрограммы). 9. Ввести 2 равноразмерные матрицы: А\шм и A2NxM. Вывести их. Из элементов этих матриц сформировать файлы F1 и F29 записывая построчно в первый файл max(alu,a2,7), а во второй, соответственно, тш(а1и9а21г/), нулевые элементы пропускать. Полученные файлы вывести. Далее отсортировать их по убыванию и снова вывести (прим.: при решении использовать подпрограммы). 10. Ввести файлы FI и F2, вывести их. Поменять в них местами перекрестно максимальные и минимальные компоненты (т. е. max из первого файла идет на место max из второго и наоборот, для min аналогично). Далее элементы, стоящие после первого встреченного в файле экстремального значения (максимума или минимума), переписать в одномерные массивы Ж и В2 соответственно. Массивы вывести (прим.: при решении использовать подпрограммы). 11. Ввести файлы F1 и F2, вывести их. Посчитать в файлах среднее арифметическое. Все элементы, значения которых отличаются от среднего арифметического соответствующего файла более чем в полтора 133
раза по модулю (как в большую так и в меньшую сторону), переписать в одномерные массивы Bi и В2, которые отсортировать по убыванию. Полученные массивы и файлы вывести, (прим.: при решении использовать подпрограммы). 12. Ввести 2 действительных файла F1 и F2 одинаковой длины N. Вывести их. Далее сформировать массив BN по формуле bf = (Kl2 + К22)•(!!• /2t. + П• Д), где К19 К2 - соответственно максимальные по модулю компоненты файлов F1 и F2. LI, L2 - количество неотрицательных компонент в этих файлах, соответственно, меньших чем |ЛГ1|/2 и |£2|/2, Массив В вывести (прим.: при решении использовать подпрограммы). 13. Ввести матрицу ANxM, вывести ее. Далее из четных строк матрицы сформировать файл F1, а из нечетных столбцов - файл F2, вывести их. В файле, где собственный наименьший элемент окажется наибольшим, поменять местами максимум и минимум (в случае равенства минимумов в файлах F1 и F2 замену провести в обоих) (прим.: при решении использовать подпрограммы). 14. Ввести файлы F1 и F2 одинаковой длины N, вывести их. Вставить все элементы файла FI в середину F2 между его элементами, а элементы F2, соответственно, в середину между элементами F1 (можно воспользоваться вспомогательным массивом). Показать полученные файлы. Каждый из файлов проверить на отсортированность по убыванию составляющих его элементов (вывести сообщение «отсортирован» или «не отсортирован») (прим.: при решении использовать подпрограммы). 15. Ввести три одномерных массива: Bl, В2 и ЯЗ. Вывести эти массивы. Переписать элементы из массивов в файл F. Сначала переписать массив с наибольшим средним арифметическим, далее - с наименьшим, а потом - оставшийся. Файл вывести, найдя в нем значение и позицию 134
максимального по модулю элемента (прим.: при решении использовать подпрограммы). 16. Ввести файлы FI и F2, найти в них количество элементов К\ и К2, стоящих после максимального четного (считать что в файлах есть хоть один четный элемент). Файлы вывести. Из этих двух файлов сформировать построчно квадратную матрицу ANxN максимально возможного размера, читая в ней сначала F1, а затем F2. Первый и последний элементы матрицы домножить на сумму К1+К2. Матрицу вывести (прим.: при решении использовать подпрограммы). 17. Ввести 2 квадратные матрицы А\тхт и A2N2xN2i вывести их. В каждой из них упорядочить по возрастанию элементы главной диагонали. Матрицы вывести. Далее по столбцам переписать в файл F ту из матриц, у которой меньше положительных элементов в нижнем треугольнике (в случае равенства переписать обе). Файл вывести (прим.: при решении использовать подпрограммы). 18. Ввести матрицы А1тхМ и A2N2xM2. Вывести их. Сформировать файлы F1 и F29 записывая в них периметр матрицы (начиная с первого элемента и далее - против часовой стрелки). Полученные файлы вывести. В файле, где наименьший элемент встречается позже, все компоненты после наименьшего заменить нулями (в случае равенства позиций минимумов в файлах F1 и F2 замену провести в FI). Файлы вывести. (прим.: при решении использовать подпрограммы). 19. Ввести 2 матрицы А\тхМ1 и А2М2хМ2, вывести их. Далее из суммы квадратов столбцов каждой из матриц сформировать файлы F1 и F2. Из каждого элемента файлов извлечь квадратный корень. Файлы вывести. Элементы файла F2 в обратном порядке дописать к файлу F1. F1 снова отпечатать (прим.: при решении использовать подпрограммы). 135
20. Ввести 2 матрицы А1тхШ и А2М2хМ2, вывести их. Максимальные элементы из каждого столбца поместить, соответственно, в файлы FI и F2. Вывести их вместе с сообщением о том, в каком из файлов раньше встречается минимальный среди положительных элемент (прим.: при решении использовать подпрограммы). 21. Ввести матрицы А1тш] и A2N2xM2, вывести их. В матрицах найти предмаксимальные элементы (по значению) и разделить все элементы этих матриц на соответствующие полученные значения. Далее переписать в файл F элементы из матриц по столбцам. Файл вывести, поменять в нем максимальный и первый элементы местами и снова вывести (прим.: при решении использовать подпрограммы). 22. Ввести матрицы А1тхМ и А2М2хМ, вывести их. Далее из этих матриц сформировать файл F 9 записывая в него сначала элементы первой строки матрицы А1, далее - первую строку А2, потом - вторую строку из А, вторую строку из А2 (и т. д.) до М-й строки. Файл вывести. В полученном файле провести усреднение элементов по следующему правилу: f,=(ft.l+f,)/2; первый элемент вычисляется как fx =(fx+f2)/2. Файл вывести (прим.: при решении использовать подпрограммы). 23. Ввести 3 квадратные матрицы А1мит, АМ2хМ2 и АЗМЗхМ3. Вывести их. Найти в них максимальные по модулю элементы на побочных диагоналях Ml, М2 и МЗ. Далее переписать в файл Fy отрицательные значения функции y(x) = Mh((M3+M2)cos(x)) если хе[-я\2я\, Ах = я/4, а в файл Fx - соответствующие значения х. Полученные файлы вывести. (прим.: при решении использовать подпрограммы). 24. Ввести 3 файла FI, F2, F3, вывести их. Далее из них составить матрицу А3хМ, где М - это размерность длиннейшего файла. В матрице А первая строка - файл F1, вторая - F2, третья - F3 (если элементов в файле не хватает, то конец строки заполнить нулями). 136
Матрицу вывести. Далее в матрице поменять местами первый и последний столбцы (прим.: при решении использовать подпрограммы). 25. Сформировать файлы F1 и F2 длины М и N2 по правилу последовательности Фибоначчи: #, = ам + а,_2, причем a1=a2=l-i i = 1,2,3,...,N. Полученные файлы вывести. Далее составить из файлов 2 квадратные матрицы Al и А2 максимально возможного размера. Матрицы вывести. Транспонировать эти матрицы и снова вывести (прим.: при решении использовать подпрограммы). 26. Ввести матрицу ANxM9 вывести ее. Далее из четных строк сформировать файл FI, а из нечетных - файл F2. Файлы вывести. Затем отсортировать каждый из файлов. Получить новый файл F 9 записывая в него сначала F2 в прямом, а потом FI в обратном порядке, пропуская нулевые элементы. Файлы вывести (прим.: при решении использовать подпрограммы). 27. Ввести матрицы А\мът и A2N2xM2, вывести их. Отсортировать в них четные столбцы по возрастанию, а нечетные - по убыванию. Матрицы вывести. Переписать построчно в файл F сначала элементы матрицы Al 9 превышающие величину SI = max All 2, а потом А29 превышающие величину 52 = тахЛ2/2. Значения 51, 52 и полученный файл вывести. (прим.: при решении использовать подпрограммы). 28. Ввести 2 матрицы А1тшх и A2N2xM2 (ЛП,М2>2), вывести их. В каждой из матриц найти все суммы четных элементов в соседних столбцах. Полученные суммы сохранить, соответственно, в файлах FI и F2. Файлы вывести, указав в каком из файлов больше положительных компонент. (прим.: при решении использовать подпрограммы). 29. Ввести матрицу ANxMi вывести ее. Найти в ней координаты максимума. Далее в матрице определить, в какой из четвертей относительно максимума больше всего элементов (слева и выше; справа и выше; 137
слева и ниже; или справа и ниже). Из этих элементов сформировать матрицу А1миш, а из оставшихся элементов - файл F1; в конец файла приписать сумму его элементов, далее файл вывести. Для матрицы AlNUMl проделать аналогичные действия, сформировав при этом матрицу A2N2xM2 и файл F2 (прим.: при решении использовать подпрограммы). 30. Ввести матрицу Амш, вывести ее. Найти в ней координаты минимума. Далее из элементов, расположенных правее и ниже найденного минимума, сформировать матрицу AlNUMl, а из оставшихся элементов - файл F1. Для матрицы AlNUm проделать аналогичные действия, сформировав при этом матрицу A2N2xM2 и файл F2. Файлы вывести. Далее вывести еще раз тот файл, в котором больше положительных элементов совместно с найденным числом (прим.: при решении использовать подпрограммы).
БИБЛИОГРАФИЧЕСКИЙ СПИСОК 1. Акулов, Л. Г. Введение в информатику. Основы программирования на языке Pascal: учеб. пособие для студентов заочной формы обучения / Л. Г. Акулов, Р. С. Богатырев, В. Ю. Наумов ; ВолгГТУ. - Волгоград, 2013.-247 с. 2. Информатика и программирование: руководство к лабораторным и практическим занятиям. Часть 1 : учеб. пособие / О. А. Авдеюк, Л. Г. Акулов, О. В. Гостевская, И. Г. Лемешкина, Е. С. Павлова, В. Ю. Наумов ; ВолгГТУ. - Волгоград, 2014. - 79 с. 3. Информатика и программирование: руководство к лабораторным и практическим занятиям. Часть 2 : учеб. пособие / О. А. Авдеюк, Л. Г. Акулов, О. В. Гостевская, И. Г. Лемешкина, Е. С. Павлова, В. Ю. Наумов ; ВолгГТУ. - Волгоград, 2014. - 59 с. 4. Информатика. Основы объектно-ориентированного программирования. Конспект лекций : учеб. пособие / Л. Г. Акулов, О. А. Авдеюк, В. Ю. Наумов, Е. С. Павлова ; ВолгГТУ. - Волгоград, 2013. - 111 с.
Учебное издание Оксана Алексеевна Авдеюк Леонид Геннадьевич Акулов Ольга Владиславовна Гостевская Вадим Юрьевич Наумов ЛАБОРАТОРНЫЙ ПРАКТИКУМ ПО ПРОГРАММИРОВАНИЮ НА ЯЗЫКЕ ПАСКАЛЬ Учебное пособие Редактор Л. Н. Рыжих Темплан 2016 г. (учебники и учебные пособия). Поз. № 9. Подписано в печать 15.04.2016. Формат 60x84 1/16. Бумага газетная. Гарнитура Times. Печать офсетная. Усл. печ. л. 8,14. Уч.-изд. л. 6,09. Тираж 100 экз. Заказ 231. Волгоградский государственный технический университет. 400005, г. Волгоград, просп. им. В. И. Ленина, 28, корп. 1. Отпечатано в типографии ИУНЛ ВолгГТУ. 400005, г. Волгоград, просп. им. В. И. Ленина, 28, корп. 7.