Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.
Внимание! Некоторое время письма не доходят до аккаунтов MAIL RU GROUP, не доходят на все почтовые ящики mail.ru, inbox.ru, bk.ru. Пишите им жалобы, чтобы быстрее восстановили получение писем, регистрируйтесь через яндекс почту и gmail, туда письма с активизацией доходят.

Вернуться   Форум программистов > 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,234
Репутация: 563
По умолчанию

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

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

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,623
Репутация: 3609
По умолчанию

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

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


20:44.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


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