- •Предисловие
- •Общая схема выполнения лабораторной работы
- •Требования к программе
- •Содержание программы
- •Общие пояснения
- •Var r,d: real; {раздел описаний переменных может
- •Требования к программе
- •Общие пояснения
- •If Pr then {здесь Pr – логическая переменная,}
- •Разбор контрольного варианта Задание
- •Лабораторная работа № 3
- •Задачи лабораторной работы Вопросы, изучаемые в работе
- •Задание (общее ко всем вариантам).
- •Требования к программе.
- •Общие пояснения
- •Разбор контрольного варианта Задание
- •Алгоритм
- •Текст программы
- •Vvod: writeln('Сколько будет чисел?');
- •Варианты заданий
- •Требования к программе
- •Содержание программы
- •Общие пояснения
- •Var Massiv1,Nmbs:IntMasMax; {завели 2 целочисл. Массива}
- •Разбор контрольного варианта Задание.
- •Текст программы
- •Результаты работы
- •Варианты заданий
- •Требования к программе
- •Содержание программы.
- •Общие пояснения
- •Var {здесь выделяется место под все массивы }
- •Разбор контрольного варианта Задание
- •Формирование таблицы идентификаторов
- •Алгоритм
- •Текст программы.
- •Содержимое файла результатов umnik5.Res
- •Варианты заданий
- •Требования к программе
- •Содержание программы
- •Общие пояснения
- •Разбор контрольного варианта Задание
- •Рассмотрение метода решения
- •Алгоритм
- •Текст программы.
- •Vvod_eps:writeln('введите минимальный размер слагаемого);
- •Результаты расчета
- •Варианты заданий
- •Требования к программе и отчету по работе
- •Содержание программы.
- •Пояснения к лабораторной работе Общие пояснения к использованию процедур и функций.
- •Механизм параметров
- •Разбор контрольного варианта Задание
- •Б Рисунок 7. Алгоритм 31-го варианта лок-схема алгоритма Текст программы.
- •Общие пояснения Графический режим экрана
- •Алгоритмы построения графиков на экране
- •Стандартный модуль работы с графическим экраном Graph
- •Разбор контрольного варианта № 31 Задание
- •Алгоритм
- •Текст программы
- •X,y, { текущие значения переменных х и y }
- •Xmin,Xmax,{минимальное и максимальное значения х на графике}
- •Imin,Imax, {координаты экрана, соответствующие Ymin и Ymax}
- •Разбор контрольного варианта № 32 Задание
- •X,y:mas; { текущие значения переменных х и y }
- •Xmin,Xmax,t,tmin,tmax, { минимальное и максимальное значения х на графике }
- •Imin,Imax, { координаты экрана, соответствующие Ymin и Ymax }
- •Варианты заданий
- •Требования к программе
- •Содержание программы
- •Общие пояснения
- •Односвязные списки
- •Двусвязные списки
- •Нульсвязные списки
- •Описание файлов с данными
- •Inc(I); { стандартная процедура увеличения на 1 }
- •Разбор контрольного варианта Задание
- •Содержание программы
- •Алгоритм
- •Текст программы
- •If Beg then { если добавляем в начало }
- •If Beg then { если удаление из начала }
- •Варианты заданий
- •Литература
- •Приложение а. Система меню и команды Турбо-Паскаля Меню системы программирования Турбо-Паскаль
- •Главное меню
- •Опции главного меню
- •Локальные меню
- •Основные команды встроенного редактора текста
- •Приложение б. Сообщения об ошибках
- •Сообщения об ошибках на шаге выполнения
- •Приложение в. Описание числовых файлов для лабораторных работ
- •I,j : integer; {I- счетчик элементов массива, j - номер символа в файле }
- •Приложение г. Таблица ascii-кодов (с альтернативной кодировкой)
- •Содержание
Алгоритм
Должен содержать следующие шаги:
-
Открытие входного и выходного файлов. Текстовый входной файл связывается с набором данных с вещественными числами 'D:\LAB1\DATF.TXT' и открывается для чтения. Выходной файл связывается с новым набором данных 'UMNIК5.RES' (т.к. без указания пути – значит в текущем каталоге) и открывается для записи.
-
Ввод количества строк массива. Контроль на попадание M в диапазон 2..7. Потребуется метка возврата (Vvod_M).
-
Ввод количества столбцов массива. Контроль на попадание N в диапазон 2..7. Потребуется метка возврата (Vvod_N).
-
Двойной цикл заполнения массива числами из файла. Запрос на ввод не требуется, так как ввод из файла. Контроль не требуется.
-
Распечатка исходного массива. Сначала печать заголовка ("Исходный массив"), затем печать по строкам с форматом, выделяя на число 10 позиций. После печати каждой строки массива – переход на новую запись в выходном файле.
-
Поиск столбца с минимальным элементом, запоминание его номера. Двойной цикл (по всем элементам массива), перед которым первый элемент запоминается в переменной Amin, а в переменной для номера Jmin запоминается 1.
-
Определение признака незанятого элемента выходного массива. В качестве признака незанятого элемента выходного массива следует использовать число, которое наверняка не встречается в исходном массиве. Таким числом будет любое, меньшее чем минимальное в массиве, в частности Amin –1.
-
Цикл заполнения выходного массива признаком незанятого места. Простой цикл присваивания M элементам массива A значения Pr.
-
Цикл работы с "i-м" элементом сортируемого столбца:
-
Цикл расчета числа элементов, меньших "i-го". Перед циклом ki делаем равным не нулю, а единице, т.к. после подсчета числа элементов, меньших данного, его выходной номер должен стать на единицу больше этого числа.
-
Поиск места в выходном массиве, для рассматриваемого элемента. Если найденное место уже занято, следует двигаться дальше по массиву, пока не встретится незанятое место. Этот процесс необходим, если в сортируемом ряду несколько одинаковых чисел, претендующих, на одно и тоже место.
-
-
Печать номера сортированного столбца.
-
Печать отсортированного массива (начинается с печати заголовка "Упорядоченный массив"), и печать одномерного выходного массива с тем же форматом, что и для входного массива.
-
Закрытие файлов.
При оформлении лабораторной работы, алгоритм следует изобразить в форме блок-схемы.
Текст программы.
PROGRAM SortNum;
{ Программа Лабораторной работы N 5
Вариант N 31.
А.Я.Умненькая, ст. гр. Я-007 }
VAR
M,N,Jmin,i,j,i1,ki : integer;
Amin,Pr : real;
A : array [1..7,1..7] of real;
B : array [1..7] of real;
Fin,Fout : text;
LABEL
Vvod_M, Vvod_N;
BEGIN
{ Открытие входного и выходного файлов }
assign(Fout,'UMNIK5.RES');
rewrite(Fout);
assign(Fin,'D:\LAB1\DATF.TXT');
reset(Fin);
{ Ввод количества строк массива }
Vvod_M:
writeln ('Введите число строк массива');
readln(M);
if (M < 2) or (M > 7) then
begin
writeln('Недопустимое значение!');
goto Vvod_M;
end;
{ Ввод количества столбцов массива }
Vvod_N:
writeln ('Введите число столбцов массива');
readln(N);
if (N < 2) or (N > 7) then
begin
writeln('Недопустимое значение!');
goto Vvod_N;
end;
{ заполнение массива числами из файла }
for i:=1 to M do
for j:=1 to N do
read(Fin,A[i,j]);
{ Закрытие входного файла }
close(Fin);
{ Распечатка исходного массива }
Writeln(Fout,' Исходный массив из ',M,'x',N,
' элементов');
for i:=1 to M do
begin
for j:=1 to N do
Write(Fout,A[i,j]:8:2); {печать текущей строки }
Writeln(Fout);
end;
Writeln(Fout);
{ Поиск столбца с минимальным элементом }
Amin := A[1,1];
Jmin := 1;
for i:=1 to M do
for j:=1 to N do
if A[i,j] < Amin then
begin
Amin := A[i,j];
Jmin := j;
end;
{ Определение признака незанятого места }
Pr := Amin - 1.0;
{ Очистка выходного массива }
for i:=1 to M do B[i] := Pr;
{ сортировка "Jmin-го" столбца в выходной файл пересчетом }
for i:= 1 to M do
begin
ki := 1;
for i1:=1 to M do
if A[i1,Jmin] < A[i,Jmin] then ki := ki+1;
{ сдвиг дальше, если элемент уже занят }
while B[ki] <> Pr do ki := ki+1;
B[ki] := A[i,Jmin];
end;
{ Печать номера столбца c минимальным элементом }
Writeln(Fout,'Результаты работы':30);
Writeln(Fout);
Writeln(Fout,' Минимальный элемент находится в ',
Jmin,' столбце');
{ Печать отсортированного массива }
Writeln(Fout,'Сортированный массив':30);
for i:=1 to M do
Write(Fout,B[i]:8:2);
Writeln(Fout);
{ Закрытие выходного файла }
close(Fout);
END.