1. Заголовок или название темы должно быть информативным ! 2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК ! 4.НЕ используйте форум для личного общения! 5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
...чтобы работать с динамическими матрицами, проще всего представить матрицу, как массив векторов...
http://volvo71.narod.ru/faq_folder/dyn_arr.htm А как работать с ними если сделать "сложнее" (если объявить размерность через запятую). Вопрос тупой - прошу такой же ответ, т.к. задача стоит сортировать трехмерный массив и замерить время, а если использовать представление трехмерного массива как массив матриц, то показатели должны исказиться, что недопустимо.
Вот как-то так: type ta = array[1..1 .. maxint div sizeof(TType),1 .. maxint div sizeof(TType)] :TType;
Цель курсача: сравнивание времени сортировки вектора, трехмерного массива разной формы. Суммарное количество элементов одинаковое.
Брр... скорее всего, я не тот вопрос задал. Вот "гвоздь программы": На сколько я понимаЛ, обращение к элементу массива a^[1] должно было быть дольше чем b[1], но вот эта программка на миллионе проверок выдает результаты одинаковые, то чуть больше в одну сторону, то в другую. Так ли это на самом деле?
Код(Показать/Скрыть)
uses Dos; uses Dos;
type pa = ^Ta; ta = array[1..maxint div sizeof(integer)] of integer; tb = array[1..1] of integer; tc = array[1..1, 1..1] of integer;
var a: pa; b: tb; c: tc;
i,j: longint; x: integer; start: longint;
const n = 30000;
type TTime = record {Тип для зберігання часу} Hours, {години} Minutes, {хвилини} Seconds, {секунди} HSeconds: Word {соті долі секунди} end;
var StartTime,FinishTime: TTime;
function ResTime(const STime, FTime: TTime): Longint; {Визначає різницю між часом закінчення і часом старту алгоритму} begin ResTime := 360000*(FTime.Hours - STime.Hours )+ {часы} 6000*(FTime.Minutes - STime.Minutes)+ {минуты} 100*(FTime.Seconds - STime.Seconds)+ {секунды} (FTime.HSeconds - STime.HSeconds) {сотые секунды} end;
begin GetMem(a,1*sizeof(integer)); a^[1] := 1; with StartTime do GetTime(Hours,Minutes,Seconds,HSeconds); for i:=-n to n do for j:=-n to n do x := a^[1]; with FinishTime do GetTime(Hours,Minutes,Seconds,HSeconds); writeln(ResTime(StartTime, FinishTime)); FreeMem(a,1*sizeof(integer));
b[1] := 1; with StartTime do GetTime(Hours,Minutes,Seconds,HSeconds); for i:=-n to n do for j:=-n to n do x := b[1]; with FinishTime do GetTime(Hours,Minutes,Seconds,HSeconds); writeln(ResTime(StartTime, FinishTime));
c[1,1] := 1; with StartTime do GetTime(Hours,Minutes,Seconds,HSeconds); for i:=-n to n do for j:=-n to n do x := c[1,1]; with FinishTime do GetTime(Hours,Minutes,Seconds,HSeconds); writeln(ResTime(StartTime, FinishTime)); readln; end.
Вааще ниче не шарю: выводит такие результаты: 1921 2304 2288 Все наоборот.. FPC, win7. из под ДосБокса, к сожалению, не могу попробовать, чтобы принудительно уменьшить скорость процессора, поэтому брал количеством.