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

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Как можно улучшить эффективность и качество ПП?
1147
сообщение 29.01.2009 14:15
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 205
Пол: Мужской
Реальное имя: Евгений

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


Такое задание по курсу технологии программирования:
дан текст программы (Pascal). Программа создает динамический список неповторяющихся целых чисел в диапазоне от -50 до 50, обеспечивает прямой и обратный вывод элементов списка, должна посчитать сумму 1+n, 2+n-1,...i+n-1+1,...n/2+n/2+1
Необходимо улучшить эффективность и качество данной программы, что увеличит скорость ее выполнения, устранит возможные недостатки и возможно улучшит другие характеристики...
Если кто заметит в ней какие-либо недостатки или фрагменты которые можно улучшить (например операцию умножения заменить на смещение и т.д.), огромная просьба пояснить мне в чем заключается улучшение, как его реализовать и какой фрагмент кода можно преобразовать, возможно есть чтото лишнее в коде...

{построение динамического списка }
Program din;
uses crt;
type tpo=^tn; tn=record x:real; p1,p2:tpo; end;
var s,b:tpo; f,k:pointer;
i,n,x,dd:integer; z:real;

begin
clrscr; n:=6; dd:=9;
{создание списка }
new(s); randomize; z:=random(100)-50; s^.x:=z; f:=s; s^.p2:=nil;
for i:=1 to n-1 do begin new(b); z:=random(100)-50; b^.x:=z;
s^.p1:=b; b^.p2:=s; s:=b; end;
s^.p1:=nil; k:=s;

textcolor(13);
Write(' прямой вывод: ');
s:=f; x:=18;
while s<>nil do
begin gotoxy(x,wherey); write(s^.x:1:1); s:=s^.p1; x:=x+dd;
end;
writeln;
x:=20;
for i:=1 to N do begin gotoxy(x,wherey); write('+'); x:=x+dd;
end;
writeln;

Write('обратный ввод: ');
b:=k; x:=18;
while b<>nil do
begin gotoxy(x,wherey); write(b^.x:1:1); b:=b^.p2; x:=x+dd;
end;
x:=wherex;
writeln; textcolor(11);
for i:=1 to x do begin gotoxy(i,wherey); write('_'); end;
writeln;
writeln;
Write(' результат: ');
s:=f; b:=k; x:=18;
while s<>nil do
begin z:=s^.x+ b^.x; gotoxy(x,wherey); write(z:1:1);
s:=s^.p1; b:=b^.p2; x:=x+dd; end;
readkey;
end.
;
end.


Тегами пользоваться не забывай

Сообщение отредактировано: volvo - 29.01.2009 14:35
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 1.02.2009 17:55
Сообщение #2


Гость






Потому что такты - вещь
1) очень чувствительная;
2) крайне ненадежная, поскольку у тебя не Real-Time ОС, а Windows, да? Многозадачная ОС, понимаешь ли. Как планировщик решит, так приложение и будет выполняться... Кстати, это касается и других способов замера времени тоже.

Добавлено через 46 сек.
A3 не нужно, опечатка, чуть позже исправлю...
 К началу страницы 
+ Ответить 
1147
сообщение 1.02.2009 17:59
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 205
Пол: Мужской
Реальное имя: Евгений

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


да, у меня windows. Но тогда получается что в результате оптимизированная программа вполне возможно будет работать дольше первоначальной smile.gif . Если с помощью gettime проверку сделать нельзя, то в данном случае, я так понимаю, вообще не получится произвести точного сравнения времени выполнения программ?

Добавлено через 1 мин.
или можно воспользоваться средним арифметическим значением...

Добавлено через 10 мин.
и еще.. в ассемблере например время выполнения программы всегда одинаковое. последний раз у меня было 47ms. и это значение не менялось. как это объясняется?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
1147   Как можно улучшить эффективность и качество ПП?   29.01.2009 14:15
volvo   Во-первых, в твоем коде я не увидел проверку на по...   29.01.2009 14:33
1147   Получается что программа содержит эти 2 недочета, ...   29.01.2009 14:48
volvo   Для начале надо создать корректно (а не кое-как) р...   29.01.2009 15:05
1147   Большое спасибо за полезные советы Volvo, с осталь...   29.01.2009 15:10
1147   Если мы список заменим на массив, как это поможет ...   31.01.2009 6:15
volvo   Если мы список заменим на массив - это поможет зна...   31.01.2009 13:29
1147   type подойдет для того чтобы избавиться от gotoxy?...   31.01.2009 13:39
volvo   Смотри внимательно, что изменилось в программе: Pr...   31.01.2009 14:23
1147   :good: Огромное спасибо volvo, этого разумеется хв...   31.01.2009 14:43
1147   Последний вопрос у меня, но не столько по самой пр...   1.02.2009 11:27
volvo   Твоя программа выполняется слишком быстро, чтобы з...   1.02.2009 11:50
1147   {$N+} procedure ReadTSC(Var counter : Comp);...   1.02.2009 14:00
volvo   Нет-нет... У тебя здесь - основная программа. Проц...   1.02.2009 14:09
1147   Получается таким образом {$N+} procedure Read...   1.02.2009 14:46
1147   Так, ну с этим вопросом я разобрался, вот только т...   1.02.2009 16:22
volvo   Значит, что-то сделал не так... У меня ничего не с...   1.02.2009 16:51
1147   а почему значение времени выполнения программы каж...   1.02.2009 17:47
volvo   Потому что такты - вещь 1) очень чувствительная; 2...   1.02.2009 17:55
1147   да, у меня windows. Но тогда получается что в резу...   1.02.2009 17:59
volvo   Делай среднее арифметическое. Способ с GetTime, кс...   1.02.2009 18:13
1147   Еще раз хочу поблагодарить тебя volvo, твоя помощь...   2.02.2009 9:44


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

 



- Текстовая версия 19.07.2025 3:55
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"