Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2016, 20:33   #21
nobody_nohead
Пользователь
 
Регистрация: 30.11.2016
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
пожалуйста.

функцию самостоятельно Calculate напишете? сюда готовый код выложите?
имхо, неплохо, если в теме останется готовое решение, которое может пригодиться кому-то...
Вот, сделал несколько тестов - вроде работает.
Не могли бы Вы, пожалуйста, указать на моменты, которые можно было сделать проще? Что-бы в дальнейшем не приходилось писать такой г**но-код при решении столь простых задач.
Хотя сомневаюсь, что у кого-то есть желание рыться в этом...
Код:
program test3;
const nmax = 1000;
type massive = array[1..nmax] of integer;
procedure calculate(myarray: massive; x, y: integer; maxresult: longint; var result: longint;  sumpos: integer);
         {Определение наилушчего расположения знаков умножения}
         begin
         if y = x+1 then
            begin
            result:= myarray[x] * myarray[y] * myarray[y + 1];
            if result > maxresult then
               sumpos:= myarray[x] + myarray[y] + myarray[y + 1];
            end
         else
            begin
            result:= myarray[x] * myarray[x + 1] + myarray[y] * myarray[y + 1];
            if result > maxresult then
               sumpos:= myarray[x] + myarray[x + 1] + myarray[y] + myarray[y + 1];
            end;
         end;
var n, i, j, rposi, rposj, sumpos, sumthis: integer; myarray: massive; fin, fout: text; result, maxresult: longint;
begin
{Обработка данных из входного файла}
assign(fin, 'fin.txt'); assign(fout, 'fout.txt');
reset(fin);
readln(fin, n);
for i:= 1 to n do
    readln(fin, myarray[i]);
close(fin);

maxresult:= -maxlongint;
{Обработка массива}
for i:=1 to (n-2) do
    begin
    for j:=i+1 to (n-1) do
        begin
        calculate(myarray, i, j, maxresult, result, sumpos);
        if result > maxresult then
           begin
           maxresult:= result;
           rposi:= i;
           rposj:= j;
           end;
        {Выбор лучшего варианта в случае, когда суммы умножений равны}
        if result = maxresult then
           begin
           if j = i+1 then
              begin
              sumthis:= myarray[i] + myarray[j] + myarray[j + 1];
              end
           else
               begin
               sumthis:= myarray[i] + myarray[i + 1] + myarray[j] + myarray[j + 1];
               end;
           if sumthis > sumpos then
              begin
              rposi:= i;
              rposj:= j;
              end;
           end;
        end;
    end;
{Переприсваивание элементов массива, задействованных в умножении}
myarray[rposi]:= maxresult;
myarray[rposi+1]:= 0; myarray[rposj]:= 0; myarray[rposj+1]:= 0;
{Вычисление суммы}
maxresult:= 0;
for i:= 1 to n do
    maxresult:= maxresult + myarray[i];
{Запись данных в выходной файл}
rewrite(fout);
write(fout, maxresult);
close(fout);
readln;
end.

Последний раз редактировалось nobody_nohead; 02.12.2016 в 01:55.
nobody_nohead вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача turbo pascal на тему: файлы с произвольным доступом в Pascal ExCiTeC Паскаль, Turbo Pascal, PascalABC.NET 0 28.01.2013 20:36
Turbo Pascal задача Инокентий09 Паскаль, Turbo Pascal, PascalABC.NET 1 02.06.2012 11:36
Задача в Turbo Pascal Cooltik Паскаль, Turbo Pascal, PascalABC.NET 10 28.04.2012 19:24
Задача на Turbo Pascal spezzA Фриланс 3 06.04.2011 23:13