IPB
ЛогинПароль:

> 

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Оптимальный алгоритм спиральной матрицы
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Мужской
Реальное имя: Кирилл Мамонов
Компонентный Паскаль: Сторонник
Free Pascal: Сторонник
Turbo Pascal: Установлен

Репутация: -  0  +


Здравствуйте! Есть задача - написать оптимизированную по размеру исполняемого файла без ассемблерных вставок(можно использовать прерывания) программу для заполнения матрицы по спирали для случаев от 1 до 9. Задачу решил и написал самый оптимизированный алгоритм, который я смог из себя выдавить. Скажите, что ещё здесь можно оптимизировать или уже стоит приступать к замене ввода на безэховый и вывода через прерывания? Может от каких переменных избавиться? Или циклы оптимизировать можно?
 
program spiral;
var
m: array [1..9, 1..9] of word; //Сама матрица
n: word; //Размерность матрицы
i: word; //Индексы матрицы
j: word;
c: word; //Вводимое число
l: word; //Длина стороны
s: integer; //Флаг меняющийся между значениями -1 и 1
t: word; //Координата поворота
p: ^word; //Указатель на координаты
begin
readln(n);
l := n;
t := n;
s := 1;
i := 1;
p := @j;
repeat
p^ := p^ + s;
c := c + 1;
//Если достигнута точка поворота
if p^ = t then begin
//Меняем изменяемую координату
if p = @j
then begin
p := @i;
l := l - 1;
end else begin
p := @j;
s := -s;
end;
//Узнаём координату следующего поворота
t := p^ + s*(l);
end;
m[i,j] := c;
until l = 0;
//Обычный вывод
for i:=1 to n do begin
for j:=1 to n do write(m[i,j]:3);
writeln;
end;
end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
2 страниц V < 1 2  
 Ответить  Открыть новую тему 
Ответов(20 - 22)
сообщение
Сообщение #21


Большевик–концептуал
***

Группа: Пользователи
Сообщений: 194
Пол: Мужской
Реальное имя: Иван Левашев
Jabber: bu_gen@octagram.name
Skype: i.levashew
QQ: 3152538431
WeChat
Ада: Сторонник
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик
Turbo Pascal: Установлен

Репутация: -  1  +


Можно ещё попробовать директивами отключить эмуляцию сопроцессора и все проверки, включая I/O. Каждая из них может потенциально по графу зависимостей подтягивать куски библиотеки времени исполнения. Хотя, насколько я помню, в System.pas и Crt.pas большая часть была написана в отдельных файлах на ассемблере и подключена как OBJ. А OBJ, если уж тащится, то тащится целиком.

Буфер, если печатать моим способом, должен быть поменьше, string[15], чтоб только хватило напечатать число, потом пробел или перенос строки.

Вынесение m в локальные переменные процедуры вообще влияет на размер хоть как-то?

Сообщение отредактировано: OCTAGRAM -


--------------------
If you want to get to the top, you have to start at the bottom
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #22


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Мужской
Реальное имя: Кирилл Мамонов
Компонентный Паскаль: Сторонник
Free Pascal: Сторонник
Turbo Pascal: Установлен

Репутация: -  0  +


Цитата(OCTAGRAM @ 28.12.2017 14:04) *

Можно ещё попробовать директивами отключить эмуляцию сопроцессора и все проверки, включая I/O. Каждая из них может потенциально по графу зависимостей подтягивать куски библиотеки времени исполнения. Хотя, насколько я помню, в System.pas и Crt.pas большая часть была написана в отдельных файлах на ассемблере и подключена как OBJ. А OBJ, если уж тащится, то тащится целиком.

Буфер, если печатать моим способом, должен быть поменьше, string[15], чтоб только хватило напечатать число, потом пробел или перенос строки.

Вынесение m в локальные переменные процедуры вообще влияет на размер хоть как-то?


Я с помощью TPC всё же смог получить 1696 байтов, но занесение всей проги в процедуру погоды не делает. Точнее наоборот. программ увеличивается.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #23


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Мужской
Реальное имя: Кирилл Мамонов
Компонентный Паскаль: Сторонник
Free Pascal: Сторонник
Turbo Pascal: Установлен

Репутация: -  0  +


Уже 1680. Нашёл просто дичайшую неоптимизированность и заменил её.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V < 1 2
 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 12.05.2024 20:47
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name