![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 02.06.2016
Сообщений: 5
|
![]()
Сортировка матрицы A [m, n] методом обмена с использованием флажка (метод пузырька усовершенствованный) по возрастанию. Начальное состояние матрицы - упорядоченна по возрастанию) сортировка работает. Но не могу найти причину, почему-то не выводится время в миллисекундах с начала работы программы по встроенной функции Milliseconds. Есть ещё два кода с таким же методом, с состоянием матриц - упорядочена по убыванию и не упорядочена,- оба кода работают и выдают время как надо.
Код:
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
что значит - "не выдаёт время" ?!
|
![]() |
![]() |
![]() |
#3 |
Регистрация: 02.06.2016
Сообщений: 5
|
![]()
не выводит на єкран сообщение:
Sorting time: 20(на пример) ms |
![]() |
![]() |
![]() |
#4 |
Регистрация: 02.06.2016
Сообщений: 5
|
![]()
Но вот попробовал у flag поменять значения false-true местами, и вроде как напечатало: 13 ms. Это уже лучше! А всё таки, нужно же чтоб программа останавливалась(показатель-активная кнопка запуска)!?
|
![]() |
![]() |
![]() |
#5 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
ну правильно, не выводит.
висит в бесконечном цикле. скажи, ты процедуру ExchSortFlag сам писал?! там же ошибка в логике! смотри: Код:
исправляй процедуру и всё у тебя получится! Цитата:
|
|
![]() |
![]() |
![]() |
#6 |
Регистрация: 02.06.2016
Сообщений: 5
|
![]()
Да, спасибо большое! Уже здорово помог. Так по условию, - изначально как вариант, матрица должна быть упорядочена по возрастанию (как один из вариантов). Сортировка тоже по возрастанию, по этому,- визуализации к сожалению нет по факту, что происходит. Но вот два других кода можно сказать, что точно работают, так как визуализация есть. А блок Сортировки такой же, с разницей в позициях flag - false/true.
Вот на пример: // 3.2.1.1_ExchangeSortingFlag(BubllSo rt)_NxM Сортировка матрицы A [m, n] методом обмена с использованием флажка (метод пузырька усовершенств) //(состояние матрицы 1 - не упорядоченное) Код:
Source massiv A: 806 895 450 544 306 275 138 978 23 403 30 541 194 895 190 300 322 946 747 198 339 Sort massiv A: 23 30 138 190 194 198 275 300 306 322 339 403 450 541 544 747 806 895 895 946 978 Sorting time: 21 ms |
![]() |
![]() |
![]() |
#7 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]() Цитата:
Сейчас Вы вводите время с начала запуска программы (т.е. включая время, которое потратили на заполнение массива и на его вывод на экран). Если Вы хотите вывести время выполнения процедуры ExchSortFlag тогда нужно это записать так: Код:
p.s. а матрицу можно заполнять случайными числами ![]() |
|
![]() |
![]() |
![]() |
#8 |
Регистрация: 02.06.2016
Сообщений: 5
|
![]()
Да Вы правы, мне нужно время работы всей программы без вывода матриц на экран. Вывод на экран просто для тестирования(визуализации) сортировок. Я думал над этим, чтоб вывод не влиял на время, поэтому я просто отключал все writeln/write в процедурах. Вот я поставил например:
const n = 170; m =130; и при всех отключенных writeln/write в процедурах, в запусках 1). И вот вариант при: begin outputData(masTest); inputData(masTest); Milliseconds; или без //Milliseconds; ExchSortFlag(masTest, masTemp); LapsTime := MillisecondsDelta(); outputData(masTest); Writeln('Sorting time: ', LapsTime, ' ms'); //readln; end. Выходит Sorting time: 2250/2260 ms 2). И вот вариант при: //outputData(masTest); //inputData(masTest); Milliseconds; или с //Milliseconds; //ExchSortFlag(masTest, masTemp); LapsTime := MillisecondsDelta(); outputData(masTest); Writeln('Sorting time: ', LapsTime, ' ms'); //readln; end. Выходит Sorting time: 0/10 ms Даже при всех "включённых" writeln/write и как при первом - 1). условии Выходит Sorting time: 2250 ms Вывод: 1. В случае 2) ни чего не происходит (не меряет время), т. к. отключено то, что нужно мереть. 2. При первом-1) варианте со всеми "включёнными" в последнем блоке процедурами, учитывается только время работы программы без вывода матриц на экран, не смотря на то, что он (вывод матриц) присутствует!? Если это так, то это здорово! Теперь понял, что не нужно лазить по коду и отключать/включать writeln/write. Просто я хотел понять (убедится) как оно(MillisecondsDelta) работает. Так ли я всё понял? Спасибо! |
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
Да, всё именно так.
согласно документации MillisecondsDelta показывает время от запуска предыдущего Milliseconds |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Программы обработки текстовых файлов в PascalABC.NET | serge-first | Паскаль, Turbo Pascal, PascalABC.NET | 7 | 03.03.2014 10:55 |
Вывести время работы процедуры | celest | Помощь студентам | 1 | 09.04.2013 21:22 |
Вывести данные в виде колонок ListBox PascalABC.net | Konstantin1706 | Помощь студентам | 1 | 22.12.2012 20:57 |
GraphABC + процедуры и функции (PascalABC.NET) | Vova_P | Помощь студентам | 1 | 11.12.2011 18:33 |
Ввод вычисляемой функции во время работы программы | DAV88 | Помощь студентам | 4 | 25.04.2009 15:41 |