Текст программы.
PROGRAM KorrMas;
{ Лабораторная работа N 7 Вариант N 31
Обработка массива
А.Я.Умненькая, ст. гр. Я-007 }
TYPE
Massiv = array[1..13,1..10] of integer;
Stroka = string[30];
CONST Quest1: Stroka='Задайте число строк массива';
Quest2: Stroka='Задайте число столбцов массива';
VAR A :Massiv;
M,N,I,j : integer;
Fin : file of integer;
Fout : file of text;
{ Процедура ввода размеров массива }
PROCEDURE InpMN(Txt:Stroka; MaxK:integer;
Var Kol:integer);
Begin
WriteLn; WriteLn(Txt);
Repeat
Readln(Kol);
If Kol>MaxKol then
Writeln('Можно не более ',MaxK,'задайте снова');
until Kol<=MaxK;
End;
{ Процедура вывода массива в файл протокола }
PROCEDURE PrintMas(Txt: string; Var Mas: Massiv;
NStr,NKol: integer);
VAR i,j : integer;
Begin
Writeln(Fout,Txt);
For i:= 1 to NStr do
begin
For j:= 1 to Nkol do Write(Fout,Mas[I,j]:7);
WriteLn(Fout);
end;
End;
{ Функция вычисления суммы четных элементов заданной строки массива }
FUNCTION Sum(Var Mas: Massiv; N,St: integer)
:integer;
VAR j,S : integer;
Begin
S:=0;
For j:=1 to N do
If not Odd(Mas[St,j]) then S:=S+Mas[St,j];
Sum:=S;
End;
BEGIN { Основная программа }
InpMn(Quest1,13,M);
InpMn(Quest2,10,N);
Assign(Fout,'Umnik7.res');
ReWrite(Fout);
WriteLn(Fout,'Сумма четных элем. в последний столбец');
Assign(Fin,'D:\LAB1\DATI.BIN');
ReSet(Fin);
Seek(Fin,32);
for i:=1 to M do
for j:=1 to N do Read(Fin,A[I,j]);
Close(Fin);
PrintMas (' Исходный массив', A,M,N);
for I:=1 to M do A[I,N]:=Sum(A,N,I);
PrintMas (' Обработанный массив', A,M,N);
Close(Fout);
END.
Содержимое набора данных UMNIK7.RES:
Сумма четных элем. в последний столбец
Исходный массив
9 8 0 -7 0 -5 7 -5 5
6 9 9 2 -2 -8 3 -8 -9
8 -4 -4 1 3 6 4 0 -5
4 1 -2 4 2 1 -2 -6 -5
-1 5 0 9 4 -3 -6 -691 885
-709 800 382 -396 -140 -841 923 368 -686
737 624 169 -610 458 -188 -423 126 355
Обработанный массив
9 8 0 -7 0 -5 7 -5 8
6 9 9 2 -2 -8 3 -8 -10
8 -4 -4 1 3 6 4 0 10
4 1 -2 4 2 1 -2 -6 0
-1 5 0 9 4 -3 -6 -691 -2
-709 800 382 -396 -140 -841 923 368 328
737 624 169 -610 458 -188 -423 126 410
Варианты заданий
Таблица 26. Варианты заданий лабораторной работы №7
№ вар. | Программа | Процедуры (Функции) | M<= | N<= | Файл с данными |
В прямоугольном массиве с помощью функции найти элемент, у которого самая большая сумма "соседей". Найденный элемент и его индексы напечатать. Исходные числа из файла читать, начиная с 27 числа. | 1) Распечатать исходный массив с помощью процедуры. 2) Построить функцию, которая для произвольного внутреннего элемента передаваемого ей массива находит сумму всех соседних (8 штук). | DATF.TXT | |||
В прямоугольном массиве с помощью процедуры убрать все строки, у которых оба конца – с четными значениями. Исходные данные из файла читать, начиная с 44 числа. | 1) Печатать двумерный массив до и после корректировки с помощью процедуры. 2) Построить процедуру, которая удаляет (со сдвигом вверх всех нижележащих строк) заказанную строку передаваемого ей прямоугольного массива | DATI.TXT | |||
В прямоугольном массиве, найдя с помощью процедуры место минимального элемента, удалить строку и столбец, проходящие через него. Исходные числа из файла читать, начиная с 99 числа. | 1) Печатать массив до и после корректировки с помощью процедуры. 2) Построить процедуру, которая находит в передаваемом массиве номер строки и номер столбца самого маленького элемента. | DATI.BIN | |||
Квадратный массив заполнить данными из файла, начиная с 21 числа. С помощью функции в исходном массиве поменять элементы главной диагонали с максимальными значениями в строке. | 1) Исходный и полученный массивы печатать процедурой. 2) Построить функцию, которая возвращает номер максимального элемента заказанной строки прямоугольного массива. | DATF.TXT | |||
Одномерный символьный массив длиной 300 элементов заполнить символами из файла, начиная с начала. С помощью процедуры заполнить новый одномерный символьный массив символами из исходного массива без повторения символов. | 1) Построить процедуру, которая в исходном массиве заменяет пробелом все вхождения первого встретившегося символа (не пробела) и возвращает этот стертый символ в вызывающую программу. 2) Печатать каждый массив с помощью процедуры. | SIMBOL. TXT | |||
В квадратном массиве, используя процедуру сортировки, сделать все строки упорядоченными по возрастанию. Исходные числа из файла читать, начиная с 20 числа. | 1) Печатать массив до и после сортировки с помощью процедуры. 2) Построить процедуру, которая в заказанной строке передаваемого ей квадратного массива упорядочивает элементы по возрастанию методом выбора. | DATF.TXT | |||
Прочитать в одномерный строковый массив (строки по 80 символов, количество строк не более 50), текст составленной Паскаль-программы. Используя функцию, подсчитать количество операторов в тексте программы. Перед каждым "end" должен стоять символ ';'. | 1) Составить процедуру подсчета и печати количества групп операторов (заключенных в скобки "begin ..end") в исходном массиве строк. 2) Составить функцию, возвра-щающую количество символов ';' в строке. | *.PAS | |||
В прямоугольном массиве с помощью процедуры сделать все строки упорядоченными по убыванию. Исходные числа из файла читать, начиная с "К"-го числа, где К вводить с клавиатуры | 1) Печатать массив до и после сортировки с помощью процедуры. 2) Построить процедуру, которая в заказанной строке передаваемого ей прямоугольного массива упорядочивает элементы по возрастанию методом обмена. | DATI.BIN | |||
Заполнить одномерный массив из М элементов. Затем с помощью процедуры заполнить одномерный целочисленный массив длиной 10 элементов, в котором i-й элемент указывает, сколько чисел исходного массива лежит в диапазоне от (i–1)*10 до i*10. Исходные числа из файла читать, начиная с 6 числа. | 1) Исходный и полученный массивы печатать процедурой. 2) Построить процедуру, которая подсчитывает, сколько чисел в передаваемом ей одномерном целочисленном массиве попадает в заказанный диапазон. | 100.. 200 | DATI.BIN | ||
Одномерный массив строк длиной по 80 символов заполнить из файла. Используя функцию, найти, какая русская буква (не различая прописные и строчные) встречается чаще. К функции обращаться, передавая ей строчную и прописную буквы и символьную строку массива. | 1) Распечатать исходный массив процедурой. 2) Составить функцию, возвра-щающую суммарное количество вхождений двух заданных символов в заданной строке длиной 80 символов. | RUS.TXT | |||
Прямоугольный символьный массив размером 10x30 заполнить из файла начиная с 29 символа. С помощью процедуры заполнить два одномерных массива длиной 10 элементов каждый. В первом массиве – наиболее частые символы, а во втором – их количество в каждой строке исходного массива. Получен-ные массивы также распечатать. | 1) Исходный массив печатать процедурой. 2) Построить процедуру, которая в заказанной строке произвольного символьного массива (размерами до 10х30) находит, какой символ встречается чаще всего и сколько раз. | SIMBOL. TXT | |||
Заполнить исходную квадратную матрицу А числами из файла, начиная с 39-го числа. Используя процедуры, вычислить матрицу С=А*В, где В – транспонированная матрица А. | 1) Печатать все массивы с помощью процедуры. 2) Построить процедуру транспонирования квадратной матрицы (размерами до 7х7). 3) Построить процедуру, перемножения двух квадратных матриц размерами до 7х7 (см. пояснения к 5 лабораторной). | DATF.TXT | |||
Прочитать в одномерный строковый массив (строки по 80 символов), количество строк не более 50, текст составленной Паскаль-программы. Используя функцию, подсчитать количество управляющих операторов в этой программе. Распечатать название и количество операторов каждого вида. Перед подсчетом перевести все латинские символы в прописные. | 1) Составить процедуру печати двух массивов в форме: название оператора – количество вхождений. В процедуру передать строчный массив названий и числовой – количеств. 2) Составить функцию, возвра-щающую количество вхождений заданной строки в массиве из 50 строк по 80 символов. (Функцию использовать для строк: 'if', 'goto', 'for', 'case', 'while', 'repeat'.) | *.PAS | |||
Используя процедуру заполнить одномерный целочисленный массив длиной 15 элементов, в котором каждый элемент указывает, сколько в исходном одномерном символьном массиве символов "а", "б" и т.д. до "п". Исходный массив заполнять из файла, пропустив 10 символов | 1) Исходный массив печатать процедурой. 2) Построить процедуру, которая подсчитывает, сколько раз в передаваемом ей одномерном символьном массиве длиной N элементов встречается заказан-ный символ. | SIMBOL. TXT | |||
В прямоугольном массиве с помощью функции найти элемент, у которого самая маленькая сумма соседних вместе с ним. Полученный элемент напечатать. Исходные числа из файла читать, начиная с 29 числа. | 1) Печатать исходный массив с помощью процедуры. 2) Построить функцию, которая для произвольного внутреннего элемента передаваемого ей массива (размерами до 11x7), находит сумму элемента и всех соседних с ним (всего 9 штук). | DATF.BIN | |||
Прямоугольный символьный массив размером 20x30 заполнить символами из файла, пропустив 49 символов. С помощью процедуры в массиве найти и заменить на '*' элемент с самой маленькой суммой кодов соседних символов. | 1) Построить процедуру, которая для заказанного внутреннего элемента массива подсчитывает сумму кодов восьми соседних элементов. 2) Печатать каждый массив с помощью процедуры. | SIMBOL. TXT | |||
Прямоугольный массив заполнить из файла каждым третьим числом. Используя логическую функцию распечатать для каждой строки исходного массива фразу "четных чисел больше" или "четных чисел не больше". | 1) Распечатать исходный массив процедурой. 2) Составить функцию, возвра-щающую значение TRUE, если в заданной строке массива больше четных чисел и FALSE в противном случае. | DATI.BIN | |||
В прямоугольном массиве с помощью процедуры сделать все строки упорядоченными по возрастанию. Исходные числа из файла читать, начиная с "К"-го числа, где К<10 вводить с клавиатуры. | 1) Печатать массив до и после сортировки с помощью процедуры. 2) Построить процедуру, которая в заказанной строке передаваемого ей прямоугольного массива упорядочивает элементы по убыванию методом выбора. | DATF.TXT | |||
Массив из M строк и пяти столбцов частично (первые три столбца) заполнить числами из файла, начиная с 33-го числа файла. Рассматривая первые три числа в каждой строке матрицы в качестве коэффициентов при нулевой, первой и второй степени Х, заполнить четвертый и пятый элементы значениями корней уравнения с помощью процедуры. | 1) Построить процедуру, вычис-ляющую вещественные корни квадратного уравнения по трем передаваемым ей коэффициентам (если отсутствует один или оба вещественных корня, процедура должна возвращать значения корней, равные нулю). 2) Заполненный массив распе-чатать процедурой. | - | DATF.BIN | ||
С помощью процедуры в исходном массиве сделать все строки упорядоченными по возрастанию. Перед обращением к процедуре копировать строку в одномерный массив, после – копировать обратно. Исходный массив заполнить числами из файла, начиная с 18-го. | 1) Печатать массив до и после сортировки с помощью процедуры. 2) Построить процедуру, которая в одномерном целочисленном массиве упорядочивает элементы по возрастанию методом выбора. | DATI.BIN | |||
Прямоугольный массив заполнить числами из файла, начиная с четвертого числа. С помощью функции в исходном массиве сделать элементы первой строки равными максимальному элементу соответствующего столбца. | 1) Исходный и полученный массивы печатать процедурой. 2) Построить функцию, которая возвращает максимальное значение в заказанном столбце прямоугольного массива. | DATI.TXT | |||
В квадратном массиве, используя процедуру сортировки, сделать все столбцы упорядоченными по возрастанию (перед обращением к процедуре копировать столбец в одномерный массив, после – копировать обратно). Исходные числа из файла читать, начиная с 18-го. | 1) Печатать двумерный массив до и после сортировки с помощью процедуры. 2) Построить процедуру, которая в одномерном вещественном массиве упорядочивает элементы по убыванию методом выбора. | DATF.BIN | |||
Одномерный символьный массив длиной 300 элементов заполнить из файла, начиная с начала, и распечатать по 60 символов в строке. С помощью процедур сосчитать и распечатать, сколько трех-, шести- и девяти- символьных слов в массиве. | 1) Построить процедуру, которая в передаваемом ей исходном массиве заменяет все разделители (символы: ' ', '.',',','-','(',')','"') на единый – точку. 2) Построить процедуру, которая в передаваемом ей массиве определяет количество слов заданной длины (слово – символы между двумя точками.) | SIMBOL. TXT | |||
В прямоугольном массиве, используя процедуру, сделать все столбцы упорядоченными по возрастанию. Исходные числа из файла читать, начиная с 12-го. | 1) Печатать массив до и после сортировки с помощью процедуры. 2) Построить процедуру, которая в заказанном столбце произвольного прямоугольного массива упорядочивает элементы по возрастанию методом обмена. | DATI.BIN | |||
Одномерный символьный массив длиной 300 элементов заполнить из файла и распечатать по 60 символов в строке. С помощью функции заполнить два массива из 26 элементов, соответственно буквой и числом ее повторений (перед этим все символы массива сделать прописными). Упорядочить массив букв по убыванию повторений методом пересчета. Распечатать оба массива. | 1) Распечатать исходный массив процедурой. 2) Составить функцию, возвра-щающую количество вхождений заданного символа в строке. | LAT.TXT | |||
Используя процедуры, по исходным квадратным массивам (матрицам) А и В вычислить матрицу С=А*В+А. Исходные числа из файла читать, начиная с 18-го. | 1) Печатать все массивы с помощью процедуры. 2) Построить две процедуры, которые для двух квадратных матриц (размерами до 7х7) вычисляют третью матрицу той же размерности: первая – сумму, вторая – произведение. | DATF.TXT | |||
Одномерный символьный массив заполнить из числового файла, рассматривая его как символьный (пропуская концы строк). Используя функцию, заполнить два массива: цифр и числа их повторений. Пересортировать массив цифр по возрастанию числа повторений методом выбора. Распечатать оба массива до и после сортировки. | 1) Распечатать исходный массив процедурой. 2) Составить процедуру печати массивов цифр и их повторений. 3) Составить функцию, возвращающую количество вхождений заданного символа в символьном массиве. | DATF.TXT | |||
В прямоугольном вещественном массиве размером 9x7 заполнить первые пять столбцов числами, прочитанными из файла (читать начиная с 28 числа). С помощью этой процедуры в исходном массиве заполнить последний столбец | 1) Построить процедуру, которая в заказанной строке прямоугольного массива 9х7 элементов находит самую большую по модулю разность двух элементов (не обязательно соседних) среди первых шести элементов и заносит найденное значение в седьмой элемент строки массива. 2) Заполненный массив распечатать процедурой | DATF.BIN | |||
Прочитать в одномерный массив строк (длиной по 74 символа) первые 73 символа каждой строки файла DATF.TXT. Используя функцию, заполнить выходной одномерный строчный массив (элементы – строки длиной восемь символов) отдельными "словами" – изображениями чисел. | 1) Составить строковую функцию, выбирающую из строки первое "слово" – первую подстроку между пробелами, заменяя при выборе в исходной строке выбранные символы пробелами. 2) Печать выходного массива по пять "слов" в строке выполнить с помощью процедуры. | DATF.TXT | |||
Одномерный массив длиной M элементов из файла, начиная с 106 числа. Используя процедуру, заполнить целый одномерный массив длиной десять элементов, в котором каждый элемент будет равен суммарному количеству цифр каждого значения (от нуля до девяти) во всех числах прочитанного массива. Распечатать этот массив. | 1) Исходный массив печатать процедурой. 2) Построить процедуру, которая подсчитывает, сколько цифр каждого значения (от нуля до девяти) встречается в передаваемом ей целом числе. Использовать операцию вычисления остатка от целочисленного деления на десять (целые числа содержат меньше шести цифр). | 100.. | DATI.TXT | ||
Прямоугольный массив заполнить числами из файла, начиная с 33-го. С помощью функции в исходном массиве сделать элементы последнего столбца, равными сумме всех элементов соответствующей строки. | 1) Исходный и полученный массивы печатать процедурой. 2) Построить функцию, которая возвращает сумму четных по значению элементов заказанной строки прямоугольного массива. | DATI.BIN |