48466 (Работа с двумерными числовыми массивами), страница 4
Описание файла
Документ из архива "Работа с двумерными числовыми массивами", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.
Онлайн просмотр документа "48466"
Текст 4 страницы из документа "48466"
Результат выполнения пятого задания:
Строки отсортированы в невозрастающем порядке сумм:
-
30727 18102 20673 -32373 23140
-
4490 6540 -12901 20330 -6046
-
-12309 26284 20788 -21316 -25044
-
-15721 -14704 17504 -23934 21020
-
-16762 -1303 5821 21065 -25295
-
-16794 -24715 28069 -2485 -11281
-
-27459 -22256 26705 14852 -30502
-
-24472 27091 -6385 -13002 -22009
-
23701 -11502 -30162 -14325 -20739
-
-27932 7054 -30557 -28698 -19302
Тест 4: матрица с большими по модулю числами.
Исходная матрица:
-
0 -2000000000 -2100000000 -2000000000 1
-
1000000000 -800000000 400000000 3 15
-
0 -2000000000 -2000000000 -2000000000 1
-
1000000000 -800000000 400000000 3 15
-
0 -2000000000 -2000000000 -2000000000 1
-
1000000000 -800000000 400000000 3 15
-
0 -2000000000 -1900000000 -200000000 1
Результат выполнения первого задания:
Максимальные элементы по строкам: 1; 1000000000; 1; 1000000000; 1; 1000000000; 1
Столбцы с максимальными элементами: 5; 1; 5; 1; 5; 1; 5
Результат выполнения второго задания:
S1 = -7699999981
S2 = -7499999981
S1 < S2, матрица была изменена:
-
0 -2000000000 -1900000000 -2000000000 1
-
1000000000 -800000000 400000000 3 15
-
0 -2000000000 -2000000000 -2000000000 1
-
1000000000 -800000000 400000000 3 15
-
0 -2000000000 -2000000000 -2000000000 1
-
1000000000 -800000000 400000000 3 15
-
0 -2000000000 -2100000000 -2000000000 1
Результат выполнения третьего задания:
Число столбцов нечётно – был произведён сдвиг «вниз»
-
0 -2000000000 -1900000000 -2000000000 1
-
0 -2000000000 -2100000000 -2000000000 1
-
1000000000 -800000000 400000000 3 15
-
0 -2000000000 -2000000000 -2000000000 1
-
1000000000 -800000000 400000000 3 15
-
0 -2000000000 -2000000000 -2000000000 1
-
1000000000 -800000000 400000000 3 15
Результат выполнения четвёртого задания:
Матрица, «развёрнутая» против часовой стрелки: 0; 1000000000; 0; 1000000000; 0; 1000000000; 0; -2000000000; -1900000000; -2000000000; 1; 15; 1; 15; 1; 15; 1; -2000000000; -2100000000; -2000000000; -800000000; -2000000000; -800000000; -2000000000; -800000000; 400000000; 3; -2000000000; 3; -2000000000; 3; 400000000; -2000000000; 400000000; -2000000000
Результат выполнения пятого задания:
Строки отсортированы в невозрастающем порядке сумм:
-
1000000000 -800000000 400000000 3 15
-
1000000000 -800000000 400000000 3 15
-
1000000000 -800000000 400000000 3 15
-
0 -2000000000 -1900000000 -2000000000 1
-
0 -2000000000 -2000000000 -2000000000 1
-
0 -2000000000 -2000000000 -2000000000 1
-
0 -2000000000 -2100000000 -2000000000 1
Тест 5: матрица с ошибками.
Исходная матрица:
-
9999999999 123 fdf
-
456 rt 8888888888
-
1234567890 9876543210 789
-
q 0xf e
-
-77777777777 000 -13
-
915 -376 19
-
ddd -ddd 1111111111
Внутри программы такая матрица будет интерпретирована следующим образом:
-
0 123 0
-
456 0 0
-
1234567890 0 789
-
0 15 0
-
0 0 -13
-
915 -376 19
-
0 0 1111111111
Результат выполнения первого задания:
Максимальные элементы по строкам: 123; 456; 1234567890; 15; 0; 915; 1111111111
Столбцы с максимальными элементами: 2; 1; 1; 2; 1; 1; 3
Результат выполнения второго задания:
S1 = 123
S2 = 1111111130
S1 < S2, матрица была изменена:
-
0 0 1111111111
-
456 0 19
-
1234567890 0 789
-
0 15 0
-
0 0 -13
-
915 -376 0
-
0 123 0
Результат выполнения третьего задания:
Число столбцов нечётно – был произведён сдвиг «вниз»
-
0 0 1111111111
-
0 123 0
-
456 0 0
-
1234567890 0 789
-
0 15 0
-
0 0 -13
-
915 -376 19
Результат выполнения четвёртого задания:
Матрица, «развёрнутая» против часовой стрелки: 0; 456; 1234567890; 0; 0; 915; 0; 0; 1111111111; 19; -13; 0; 789; 0; 0; 123; 0; 0; 15; 0; -376
Результат выполнения пятого задания:
Строки отсортированы в невозрастающем порядке сумм:
-
1234567890 0 789
-
0 0 1111111111
-
915 -376 19
-
456 0 0
-
0 123 0
-
0 15 0
-
0 0 -13
Приложение 2. Полный листинг формы (файл form.pas)
-
{
-
Модуль, содержащий форму, переменную для хранения исходной матрицы,
-
процедуры синхронизации содержания матрицы и элементов формы, а так же
-
процедуру задания размеров матрицы
-
}
-
unit form;
-
interface
-
uses
-
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
-
Dialogs, Menus, StdCtrls, ExtCtrls, ComCtrls, Grids,
-
//модули программы
-
fileIO, MatrixOperations;
-
type
-
TMainForm = class(TForm)
-
Pages: TPageControl;
-
Task1: TTabSheet;
-
Task2: TTabSheet;
-
Task3: TTabSheet;
-
Task4: TTabSheet;
-
Task5: TTabSheet;
-
Menu: TMainMenu;
-
A1: TMenuItem;
-
load: TMenuItem;
-
save: TMenuItem;
-
N1: TMenuItem;
-
quit: TMenuItem;
-
N4: TMenuItem;
-
M_Task1: TMenuItem;
-
M_Task2: TMenuItem;
-
M_Task3: TMenuItem;
-
M_Task4: TMenuItem;
-
M_Task5: TMenuItem;
-
GroupBox1: TGroupBox;
-
G_Matrix: TStringGrid;
-
E_RowsN: TEdit;
-
Label1: TLabel;
-
Label2: TLabel;
-
E_ColsN: TEdit;
-
B_SetDimms: TButton;
-
SaveDialog: TSaveDialog;
-
OpenDialog: TOpenDialog;
-
Label3: TLabel;
-
Label4: TLabel;
-
G_Task1B: TStringGrid;
-
Label5: TLabel;
-
Label6: TLabel;
-
G_Task1C: TStringGrid;
-
B_Task1Run: TButton;
-
Label7: TLabel;
-
Label8: TLabel;
-
Label9: TLabel;
-
E_Task2S1: TEdit;
-
B_Task2Run: TButton;
-
E_Task2S2: TEdit;
-
L_Task2MatrxChanged: TLabel;
-
Label10: TLabel;
-
B_Task3Run: TButton;
-
L_Task3Result: TLabel;
-
Label11: TLabel;
-
B_Task4Run: TButton;
-
Label12: TLabel;
-
B_Task5Run: TButton;
-
about: TMenuItem;
-
MEM_Task4: TMemo;
-
procedure saveClick(Sender: TObject);
-
procedure loadClick(Sender: TObject);
-
procedure B_SetDimmsClick(Sender: TObject);
-
procedure FormCreate(Sender: TObject);
-
procedure quitClick(Sender: TObject);
-
procedure M_Task1Click(Sender: TObject);
-
procedure M_Task2Click(Sender: TObject);
-
procedure M_Task3Click(Sender: TObject);
-
procedure M_Task4Click(Sender: TObject);
-
procedure M_Task5Click(Sender: TObject);
-
procedure B_Task1RunClick(Sender: TObject);
-
procedure FormDestroy(Sender: TObject);
-
procedure B_Task2RunClick(Sender: TObject);
-
procedure B_Task3RunClick(Sender: TObject);
-
procedure B_Task4RunClick(Sender: TObject);
-
procedure B_Task5RunClick(Sender: TObject);
-
procedure aboutClick(Sender: TObject);
-
private
-
procedure readMatrix;
-
procedure writeMatrix;
-
public
-
published
-
{ Public declarations }
-
end;
-
var
-
MainForm: TMainForm;
-
workMatrix: TMatrix;
-
implementation
-
uses Math;
-
{$R *.dfm}
-
{заполнить матрицу в соответствии с содержанием таблицы на форме}
-
procedure TMainForm.ReadMatrix;
-
var rowN, colN: integer;
-
begin
-
SetLength(workMatrix, G_Matrix.RowCount-1, G_Matrix.ColCount-1);
-
for rowN:= 0 to G_Matrix.RowCount-2 do
-
for colN:= 0 to G_Matrix.ColCount-2 do
-
workMatrix[rowN, colN]:= StrToIntDef(G_Matrix.Cells[colN+1, rowN+1], 0);
-
end;
-
{заполнить таблицу на форме в соответствии с содержанием матрицы}
-
procedure TMainForm.writeMatrix;
-
var rowN, colN: integer;
-
begin
-
G_Matrix.Cells[1, 1]:= '';//если матрица пуста
-
//обновим размеры матрицы
-
E_RowsN.Text:= IntToStr(high(workMatrix) + 1);
-
if(E_RowsN.Text <> '0') then
-
E_ColsN.Text:= IntToStr(high(workMatrix[low(workMatrix)]) + 1)
-
else E_ColsN.Text:= '0';
-
B_SetDimmsClick(self);
-
//заполним таблицу
-
for rowN:= low(workMatrix) to high(workMatrix) do
-
for colN:= low(workMatrix[rowN]) to high(workMatrix[rowN]) do
-
G_Matrix.Cells[colN+1, rowN+1]:= IntToStr(workMatrix[rowN, colN]);
-
end;
-
{обработчик Файл->Сохранить}
-
procedure TMainForm.saveClick(Sender: TObject);
-
var
-
outFile: TextFile;
-
begin
-
//отобразим диалог выбора файла для сохранения, если отмена - выходим
-
if SaveDialog.Execute = false then exit;
-
AssignFile(outFile, SaveDialog.Files[0]);
-
ReWrite(outFile);//создадим файл
-
readMatrix;//прочтём матрицу из таблицы
-
Write2DArray(workMatrix, outFile);//запишем матрицу в файл
-
CloseFile(outFile);//закроем файл
-
end;
-
{обработчик Файл->Загрузить}
-
procedure TMainForm.loadClick(Sender: TObject);
-
var
-
inFile: TextFile;
-
begin
-
//отобразим диалог выбора фала для загрузки, если отмена - выходим
-
if OpenDialog.Execute = false then exit;
-
AssignFile(inFile, OpenDialog.Files[0]);
-
Reset(inFile);//подготовим файл к чтению
-
Read2DArray(workMatrix, inFile);//прочтём матрицу из файла
-
writeMatrix;//отобразим матрицу
-
CloseFile(inFile);//закроем файл
-
end;
-
{обраюотчик уствновки размеров матрицы}
-
procedure TMainForm.B_SetDimmsClick(Sender: TObject);
-
var
-
i: integer;
-
RowsN, ColsN: integer;
-
begin
-
//значения размеров не должны быть меньше 1
-
RowsN:= StrToIntDef(E_RowsN.Text, 0);
-
if RowsN < 1 then begin RowsN:= 1; E_RowsN.Text:= '1' end;
-
ColsN:= StrToIntDef(E_ColsN.Text, 0);
-
if ColsN < 1 then begin ColsN:= 1; E_ColsN.Text:= '1' end;
-
//число строк и столбцов в таблице, учитывая колонку и строку с номерами
-
G_Matrix.RowCount:= RowsN + 1;
-
G_Matrix.ColCount:= ColsN + 1;
-
//в этих таблицах отображаются одномерные массивы из первого задания
-
G_Task1B.RowCount:= RowsN;
-
G_Task1C.RowCount:= RowsN;
-
//одномерный массив из четвёртого задания имеет длину, равную числу элементов исходной матрицы
-
//G_Task4.ColCount:= RowsN * ColsN;
-
//расставим номера строк и столбцов
-
for i:= 0 to RowsN do
-
begin
-
G_Matrix.Cells[0, i+1]:= IntToStr(i+1);
-
G_Task1B.Cells[0, i]:= IntToStr(i+1);
-
G_Task1C.Cells[0, i]:= IntToStr(i+1);
-
end;
-
for i:= 0 to ColsN do
-
G_Matrix.Cells[i+1, 0]:= IntToStr(i+1);
-
//for i:= 0 to RowsN * ColsN do
-
// G_Task4.Cells[i, 0]:= IntToStr(i+1);
-
G_Matrix.Refresh;
-
end;
-
{при создании формы задаём размер матрицы по умолчанию}
-
procedure TMainForm.FormCreate(Sender: TObject);
-
begin
-
B_SetDimmsClick(Sender);
-
end;
-
{при уничтожении формы освобождаем память, выделенную для хранения матрицы}
-
procedure TMainForm.FormDestroy(Sender: TObject);
-
begin
-
workMatrix:= nil;
-
end;
-
{обработчик Файл->Выход}
-
procedure TMainForm.quitClick(Sender: TObject);
-
begin
-
if mrYes = MessageDlg('Вы уверены, что хотите выйти?', mtConfirmation, [mbYes, mbNo], 0)
-
then Close;
-
end;
-
{обработчик Задачи->задача 1}
-
procedure TMainForm.M_Task1Click(Sender: TObject);
-
begin
-
Pages.ActivePageIndex:= 0;
-
end;
-
{обработчик Задачи->задача 2}
-
procedure TMainForm.M_Task2Click(Sender: TObject);
-
begin
-
Pages.ActivePageIndex:= 1;
-
end;
-
{обработчик Задачи->задача 3}
-
procedure TMainForm.M_Task3Click(Sender: TObject);
-
begin
-
Pages.ActivePageIndex:= 2;
-
end;
-
{обработчик Задачи->задача 4}
-
procedure TMainForm.M_Task4Click(Sender: TObject);
-
begin
-
Pages.ActivePageIndex:= 3;
-
end;
-
{обработчик Задачи->задача 5}
-
procedure TMainForm.M_Task5Click(Sender: TObject);
-
begin
-
Pages.ActivePageIndex:= 4;
-
end;
-
{выполнение первого задания}
-
procedure TMainForm.B_Task1RunClick(Sender: TObject);
-
var
-
maxVal: TVector; //массив максимальных элементов из каждой строки
-
maxValCol: TVector; //массив номеров столбцов с максимальными элементами
-
RowN: integer;
-
begin
-
readMatrix;//прочитаем матрицу из таблицы
-
GetMaxVals(maxVal, maxValCol, workMatrix);//сформируем массивы по заданию
-
for RowN:= low(maxVal) to high(maxVal) do
-
begin//выведем сформированные массивы в элементы формы
-
G_Task1B.Cells[1, RowN]:= IntToStr(maxVal[RowN]);
-
G_Task1C.Cells[1, RowN]:= IntToStr(maxValCol[RowN]+1);
-
end;
-
//освободим память
-
maxVal:= nil;
-
maxValCol:= nil;
-
end;
-
{выполнение второго задания}
-
procedure TMainForm.B_Task2RunClick(Sender: TObject);
-
var S1, S2: Int64;//суммы выше и ниже пересечения диагоналей
-
begin
-
readMatrix;//проситаем матрицу из таблицы
-
//высчитаем суммы
-
S1:= GetSumAbove(workMatrix);
-
S2:= GetSumBelow(workMatrix);
-
//выведем суммы в элементы формы
-
E_Task2S1.Text:= IntToStr(S1);
-
E_Task2S2.Text:= IntToStr(S2);
-
if S1 >= S2 then L_Task2MatrxChanged.Caption:= 'Матрица не была изменена'
-
else
-
begin//если S1 < S2, то
-
SwapAboveBelow(workMatrix);//меняем местами элементы выше и ниже пересечения диагоналей
-
writeMatrix;//выводим изменённую матрицу на форму
-
L_Task2MatrxChanged.Caption:= 'Матрица была изменена'
-
end;
-
end;
-
{выполнение третьего задания}
-
procedure TMainForm.B_Task3RunClick(Sender: TObject);
-
begin
-
readMatrix;//прочтём матрицу из таблицы
-
if (high(workMatrix)+1) mod 2 = 0 then
-
begin//если число строк - чётное
-
CircuarShift(workMatrix, true);//осуществим циклический сдвиг вверх
-
L_Task3Result.Caption:= 'был произведён сдвиг "вверх"';
-
end
-
else
-
begin//иначе, если число строк - нечётное
-
CircuarShift(workMatrix, false);//осуществим циклический сдвиг вниз
-
L_Task3Result.Caption:= 'был произведён сдвиг "вниз"';
-
end;
-
writeMatrix;//выведем изменённую матрицу в таблицу
-
end;
-
{выполнение четвёртого задания}
-
procedure TMainForm.B_Task4RunClick(Sender: TObject);
-
var arrayB: TVector;//массив, содержащий "развёрнутую" матрицу
-
var i: integer;
-
begin
-
readMatrix;//прочтём матрицу из таблицы
-
UnwindMatrix(workMatrix, arrayB);//наполним массив, обходя матрицу по спирали
-
MEM_Task4.Lines[0]:= '';
-
for i:= 0 to high(arrayB) do
-
begin//выведем все элементы из массива на форму
-
//G_Task4.Cells[i, 1]:= IntToStr(arrayB[i]);
-
MEM_Task4.Lines[0]:= MEM_Task4.Lines[0] + IntToStr(arrayB[i]) + '; '
-
end;
-
arrayB:= nil;//освободим память
-
end;
-
{выполнение пятого задания}
-
procedure TMainForm.B_Task5RunClick(Sender: TObject);
-
begin
-
readMatrix;//прочтём матрицу из таблицы
-
SortRows(workMatrix);//отсортируем строки матрицы по убыванию сумм
-
writeMatrix;//выведем матрицу в таблицу
-
end;
-
{обработчик About}
-
procedure TMainForm.aboutClick(Sender: TObject);
-
var info: string;
-
begin
-
info:= 'Курсовая работа по дисциплине "Программирование на ЯВУ"'#10#10 +
-
'Тема: "Работа с двумерными числовыми массивами"'#10 +
-
'Выполнил: студент группы ВСМ-06-08 Филон Д. В.'#10#10#10 +
-
#9#9#9#9#9#9'Москва 2010 год';
-
MessageDlg(info, mtInformation, [mbIgnore], 0);
-
end;
-
end.