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





Группа: Пользователи
Сообщений: 8
Пол: Мужской

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


Интересно, в каком вузе дают подобные программы? Ну в смысле, что явно академическая задача и "давайте её оптимизировать".

Цитата
написать оптимизированную по размеру исполняемого файла

-и сколько получилось?

Матрица по спирали - попробуйте, сравните.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


Цитата(Халявов @ 21.12.2017 22:32) *

Интересно, в каком вузе дают подобные программы? Ну в смысле, что явно академическая задача и "давайте её оптимизировать".

Цитата
написать оптимизированную по размеру исполняемого файла

-и сколько получилось?

Матрица по спирали - попробуйте, сравните.


Моя после компиляции без всяких особых натроек компилятора весит 3104 байта
Вами, приведённая 3776 байт

Задано в КубГУ, ну как задано... За самую маленькую в группе самоэкз получить можно)
Рекорд за всё время говорят где-то к 1200 байт приблизился.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4





Группа: Пользователи
Сообщений: 8
Пол: Мужской

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


Цитата(Akusov @ 24.12.2017 2:13) *
Моя после компиляции без всяких особых натроек компилятора весит 3104 байта
А чем компилировали? Поделитесь секретом smile.gif

Сообщение отредактировано: Халявов -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

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

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


Цитата(Халявов @ 24.12.2017 1:42) *

Цитата(Akusov @ 24.12.2017 2:13) *
Моя после компиляции без всяких особых натроек компилятора весит 3104 байта
А чем компилировали? Поделитесь секретом smile.gif


BPC Старый добрый BPC. Это собственно и есть компилятор для соревнований. Всё в досбоксе собирается.


Добавлено через 3 мин.
Счёт идёт на байты. Вообще задание полностью так звучит - Нужно написать две программы спиральной матрицы для размерность от 2 до 9. Одну на ассемблере, другую на паскале и в суме они должны быть меньше 3000 байт, и тот чья прога меньше остальных, тот и получает самоэкз. В программе на паскале использовать asm end. Запрещено.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





Группа: Пользователи
Сообщений: 8
Пол: Мужской

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


Понятно, Ассемблер всё объясняет. А то задача выглядит как злобный троллинг препода.

Я бы начал думать как сэкономить на WriteLn. Теоретически, у вас два вызова с разным набором параметров.
На Си можно было бы сделать подобие
printf("..формат..", Элемент_Массива, i==n?"\n":" ");
хотя само вычисление может оказаться большим.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Akusov   Оптимальный алгоритм спиральной матрицы   20.12.2017 5:31
OCTAGRAM   Какая-то довольно специфическая оптимизация. На фо…   20.12.2017 14:11
Халявов   Интересно, в каком вузе дают подобные программы? Н…   22.12.2017 2:32
Akusov   Интересно, в каком вузе дают подобные программы? …   24.12.2017 2:13
Akusov   Как думаете? Вообще реально написать такую програм…   24.12.2017 4:18
Халявов   Моя после компиляции без всяких особых натроек ком…   24.12.2017 5:42
Akusov   Моя после компиляции без всяких особых натроек ко…   24.12.2017 5:56
Халявов   Понятно, Ассемблер всё объясняет. А то задача выгл…   24.12.2017 6:15
Akusov   Понятно, Ассемблер всё объясняет. А то задача выг…   24.12.2017 6:32
OCTAGRAM   Пытался использовать модуль dos с его Intr и MsDos…   27.12.2017 5:33
Akusov   В общем. Немного модифицировал и обнаружил, что те…   24.12.2017 8:40
Akusov   Как ни странно - я смог ужать программу ещё сильн…   24.12.2017 10:41
Akusov   Пораскинув мозгами, смог ужать итоговый екзешник д…   25.12.2017 23:36
Akusov   Я изучив exe-шник - обнаружил длиннющую строку с и…   26.12.2017 3:46
Akusov   Последние вести с полей. Уменьшил прогу до 1936 ба…   26.12.2017 5:14
Федосеев Павел   Можно ещё чуток, если заменить 1. bx := bx + 1; на…   27.12.2017 0:24
Akusov   Можно ещё чуток, если заменить 1. bx := bx + 1; н…   27.12.2017 3:14
Akusov   Решил попробовать компилятор Turbo Pascal 5.5 В ко…   28.12.2017 11:55
Халявов   Turbo Pascal 5.5 В командной строке набираю TPC SP…   28.12.2017 12:05
Akusov   Turbo Pascal 5.5 В командной строке набираю TPC S…   28.12.2017 17:11
OCTAGRAM   Можно ещё попробовать директивами отключить эмуляц…   28.12.2017 18:04
Akusov   Можно ещё попробовать директивами отключить эмуля…   29.12.2017 4:21
Akusov   Уже 1680. Нашёл просто дичайшую неоптимизированнос…   29.12.2017 4:45


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

 





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