Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Паскаль
Регистрация

Восстановить пароль
Повторная активизация e-mail


Присылайте нам Донат :), напишите за что прислали )


Ответ
 
Опции темы
Старый 21.05.2012, 19:37   #1
GoldSieg
Пользователь
 
Регистрация: 02.10.2011
Сообщений: 45
Репутация: 10
По умолчанию Оптимизация программы

Здравствуйте
мне нужно оптимизировать программу.
Код:

uses
  crt;

type
  Mas = array[1..100] of integer;

function Sum(k: byte; x: Mas): integer;
begin
  if k = 0 then Sum := 0 else Sum := x[k] + Sum(k - 1, x)
  
end;
var
  a: Mas;
  i, n, m: Byte;

begin
  clrscr;
  randomize;
  write('Количество элементов массива n=');
  readln(n);
  for i := 1 to n do
  begin
    a[i] := Random(20);
    write(a[i], ' ');
  end;
  writeln;
  write('Сумма=', Sum(n, a));
  readln
end.

интересны ваши предложения.
GoldSieg вне форума   Ответить с цитированием
Старый 21.05.2012, 19:47   #2
Leshii
Форумчанин
 
Регистрация: 26.07.2011
Адрес: г.Киев, Украина.
Сообщений: 376
Репутация: 50

skype: polymorph91
По умолчанию

Поведайте ещё суть программы, и тогда наверное можна подумать
__________________
Люблю на ты.Я человек простой
Leshii вне форума   Ответить с цитированием
Старый 21.05.2012, 19:57   #3
s-andriano
Профессионал
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,230
Репутация: 563
По умолчанию

Вычислять сумму без рекурсии простым циклом.
s-andriano вне форума   Ответить с цитированием
Старый 21.05.2012, 20:06   #4
Arigato
СуперПрограммист
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Адрес: Россия РФ Регистрация: 27.07.2008
Сообщений: 13,683
Репутация: 3613
По умолчанию

Мой вариант оптимизации:
Код:

var
  a, Sum: Integer;
  i, n: Byte;

begin
  randomize;
  write('Количество элементов массива n=');
  readln(n);
  Sum := 0;
  for i := 1 to n do
  begin
    a := Random(20);
    write(a, ' ');
    Inc (Sum, a);
  end;
  writeln;
  write('Сумма=', Sum);
  readln
end.

__________________
E-Mail: arigato.freelance@gmail.com
Arigato вне форума   Ответить с цитированием
Старый 21.05.2012, 20:18   #5
GoldSieg
Пользователь
 
Регистрация: 02.10.2011
Сообщений: 45
Репутация: 10
По умолчанию

нужно написать программу которая будет выводить сумму числового ряда. функция должна быть рекурсивной.

Последний раз редактировалось GoldSieg; 21.05.2012 в 20:45.
GoldSieg вне форума   Ответить с цитированием
Старый 21.05.2012, 22:35   #6
GoldSieg
Пользователь
 
Регистрация: 02.10.2011
Сообщений: 45
Репутация: 10
По умолчанию

Че больше предложений нет?
GoldSieg вне форума   Ответить с цитированием
Старый 21.05.2012, 22:48   #7
Arigato
СуперПрограммист
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Адрес: Россия РФ Регистрация: 27.07.2008
Сообщений: 13,683
Репутация: 3613
По умолчанию

Ну а чем вас ваше решение не устраивает?
__________________
E-Mail: arigato.freelance@gmail.com
Arigato вне форума   Ответить с цитированием
Старый 21.05.2012, 23:31   #8
s-andriano
Профессионал
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,230
Репутация: 563
По умолчанию

опять же, каков критерий оптимизации?
s-andriano вне форума   Ответить с цитированием
Старый 22.05.2012, 00:04   #9
GoldSieg
Пользователь
 
Регистрация: 02.10.2011
Сообщений: 45
Репутация: 10
По умолчанию

Ну а чем вас ваше решение не устраивает?

Понимаете. меня оно устраивает. оно не устраивает моего преподавателя...
на счет критерия.. а как можно сделать так чтоб функция не держала в памяти весь массив.?
GoldSieg вне форума   Ответить с цитированием
Старый 22.05.2012, 00:18   #10
BDA
Модератор
Заслуженный модератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Адрес: RF Moscow
Сообщений: 5,401
Репутация: 2485

icq: 438888048
По умолчанию

Код:

uses
  crt;

function Sum(k: integer): longint;
var
  a: integer;
begin
  if k = 0 then
  begin
    sum := 0;
    exit;
  end;
  a := Random(20);
  write(a, ' ');
  Sum := a + Sum(k - 1);  
end;

var
  n: integer;

begin
  clrscr;
  randomize;
  write('Количество элементов массива n=');
  readln(n);
  write('Сумма=', Sum(n));
  readln
end.

Но нужно учитывать, что на стеке вызовов все равно будут храниться временные переменные.
__________________
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
оптимизация программы Arsenx777 Работа с сетью в Delphi 1 28.08.2011 14:00
Оптимизация программы 0479 Помощь студентам 7 09.03.2011 18:15
Оптимизация программы Lenya Помощь студентам 2 05.01.2011 19:56
Оптимизация программы!!! $T@LKER Общие вопросы Delphi 10 08.08.2010 21:23


02:21.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru