HOME FORUMS MEMBERS RECENT POSTS LOG IN  
× Авторизация
Имя пользователя:
Пароль:
Нет аккаунта? Регистрация
Баннер 1   Баннер 2
НОВЫЕ ТОРГОВАЯ НОВОСТИ ЧАТ
loading...
Скрыть
Вернуться   ANTICHAT > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 02.03.2009, 15:57
Algol
Регистрация: 29.05.2002
Сообщений: 1,793
С нами: 12604706

Репутация: 0


По умолчанию

Цитата:
Сообщение от Moldman  
Задание 2
Написать программу, которая оптимальным образом расставляет скобки при перемножении матриц. Размерности матриц считать из файла. На экран вывести промежуточные вычисления и результат.

М1[5x4], M2[4x7], M3[7x3], М4[3x8], M5[8x3], M6[3x7], M7[7x2], M8[2x2].
Оптимально по чем? По числу операций, по объему памяти, по быстродействию?
 
Ответить с цитированием

  #2  
Старый 02.03.2009, 23:39
Algol
Регистрация: 29.05.2002
Сообщений: 1,793
С нами: 12604706

Репутация: 0


По умолчанию

Цитата:
Сообщение от Moldman  
Задание 2
Написать программу, которая оптимальным образом расставляет скобки при перемножении матриц. Размерности матриц считать из файла. На экран вывести промежуточные вычисления и результат.

М1[5x4], M2[4x7], M3[7x3], М4[3x8], M5[8x3], M6[3x7], M7[7x2], M8[2x2].
Код:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
  TMatrixInfo =
  record
    size: array [0..1] of integer;
    desc: string;
  end;

  TMatrixes =
    array [0..7] of TMatrixInfo;


var bestSolveMemoryVolume: integer;
    bestSolve: TMatrixes;
    matrixSizes: TMatrixes;


procedure GenerateSolves(solve: TMatrixes; count: integer; maxMemoryVolume: integer);
var memoryVolume:integer;
    i, j: integer;
    newSolve: TMatrixes;
begin
 
  if count=1 then
  begin
    //построение варианта решения - закончено
    //проверяем - лучшее ли оно ?
    if (maxMemoryVolume < bestSolveMemoryVolume) then
      begin
      bestSolveMemoryVolume :=  maxMemoryVolume;
      bestSolve := solve;
      end;
    exit;
  end;

  {строим варианты решения}
  for i:=0 to count-2 do
  begin
    for j:=0 to count-2 do
    if(j<i) then
      begin
        //копируем элементы
        newSolve[j].size[0] := solve[j].size[0];
        newSolve[j].size[1] := solve[j].size[1];
        newSolve[j].desc := solve[j].desc;
      end
    else
    if j=i then
      begin
        //имитируем произведение матриц i и i+1
        newSolve[j].size[0] := solve[j].size[0];
        newSolve[j].size[1] := solve[j+1].size[1];
        newSolve[j].desc := '('+solve[j].desc+'*'+solve[j+1].desc+')';
        //счтаем сколько памяти нужено под новую матрицу
        memoryVolume := newSolve[i].size[0]*newSolve[i].size[1];
        if(memoryVolume>maxMemoryVolume) then
            maxMemoryVolume :=memoryVolume;
      end
    else
      begin
        //копируем элементы
        newSolve[j].size[0] := solve[j+1].size[0];
        newSolve[j].size[1] := solve[j+1].size[1];
        newSolve[j].desc := solve[j+1].desc;
      end;
    //если текущее решение уже хуже лучшего, то не продолжаем дальше
    if maxMemoryVolume>bestSolveMemoryVolume then
      exit;
    //моделируем следующее перемножение
    GenerateSolves(newSolve, count-1, maxMemoryVolume);
  end;
 
end;


begin
matrixSizes[0].size[0] :=5;
matrixSizes[0].size[1] :=4;
matrixSizes[0].desc := 'M[5x4]';
matrixSizes[1].size[0] :=4;
matrixSizes[1].size[1] :=7;
matrixSizes[1].desc := 'M[4x7]';
matrixSizes[2].size[0] :=7;
matrixSizes[2].size[1] :=3;
matrixSizes[2].desc := 'M[7x3]';
matrixSizes[3].size[0] :=3;
matrixSizes[3].size[1] :=8;
matrixSizes[3].desc := 'M[3x8]';
matrixSizes[4].size[0] :=8;
matrixSizes[4].size[1] :=3;
matrixSizes[4].desc := 'M[8x3]';
matrixSizes[5].size[0] :=3;
matrixSizes[5].size[1] :=7;
matrixSizes[5].desc := 'M[3x7]';
matrixSizes[6].size[0] :=7;
matrixSizes[6].size[1] :=2;
matrixSizes[6].desc := 'M[7x2]';
matrixSizes[7].size[0] :=2;
matrixSizes[7].size[1] :=2;
matrixSizes[7].desc := 'M[2x2]';

bestSolveMemoryVolume := MaxInt;
//перебираем все возможные варианты, ищем лучший вариант
GenerateSolves(matrixSizes, 8, 0);

//рисуем решение
Writeln(bestSolve[0].desc);
Writeln('Max matrix: '+ intToStr(bestSolveMemoryVolume) + ' items');

Readln;

end.

Последний раз редактировалось Algol; 02.03.2009 в 23:52..
 
Ответить с цитированием

  #3  
Старый 02.03.2009, 18:48
Moldman
Участник форума
Регистрация: 12.06.2007
Сообщений: 153
С нами: 9954588

Репутация: 58
По умолчанию

по объему памяти
 
Ответить с цитированием

  #4  
Старый 02.03.2009, 21:51
Unregistered
Познающий
Регистрация: 15.01.2009
Сообщений: 37
С нами: 9115288

Репутация: 26
По умолчанию

Дано действительное число y, натуральное число n и сгенерированное случайное действительное число x (x=0…n). Вычислить . Вивести дробовую часть результата. IDE: Borland Pascal 7.0.
 
Ответить с цитированием

  #5  
Старый 03.03.2009, 22:10
lll6
Познающий
Регистрация: 01.03.2008
Сообщений: 99
С нами: 9577084

Репутация: 51
По умолчанию

Цитата:
Сообщение от Unregistered  
Дано действительное число y, натуральное число n и сгенерированное случайное действительное число x (x=0…n). Вычислить . Вивести дробовую часть результата. IDE: Borland Pascal 7.0.
Код:
program primer;
  var n:integer;
      y,x:real;
begin
  readln (y,n);
  x:=random(n-1)+random; {random - для получения случайного вещественного числа, у меня работает}
  writeln ('Ответ: ',frac((cos(exp(ln(y)*x))+x-y/3)/(2*sqr(x)-y+1)));
end.

Последний раз редактировалось lll6; 03.03.2009 в 22:14..
 
Ответить с цитированием

  #6  
Старый 03.03.2009, 04:18
Irdis
Участник форума
Регистрация: 06.02.2006
Сообщений: 177
С нами: 10661593

Репутация: 88
По умолчанию

snAKe
на практике используется метод Монте-Карло
суть
разбрасываем(случайным образом аля random()) достаточное кол-во точек (чем больше тем лучше) по области, и считаем отношение тех точек что попали в область к тем которые попали в нужное пересечение
(за область сойдет квадрат достаточных размеров(чем меньше тем лучше))
(что на что делить объяснять не буду)
================
при каком R вопрос более интересный, ну в общем за +++
найду, хотя зная основы интегрального исчисления, это не составит труда...

Последний раз редактировалось Irdis; 03.03.2009 в 10:13..
 
Ответить с цитированием

  #7  
Старый 03.03.2009, 09:08
/Boom\
Познающий
Регистрация: 14.02.2008
Сообщений: 62
С нами: 9599589

Репутация: 4
По умолчанию

Срочно надо запрограммировать две кнопки.
Вот исходник
http://depositfiles.com/files/prd7xllpl
http://webfile.ru/2996960

на втором Unit Кнопочки "Удалить" "редактировать"

Последний раз редактировалось /Boom\; 03.03.2009 в 09:18..
 
Ответить с цитированием

  #8  
Старый 03.03.2009, 16:48
Unregistered
Познающий
Регистрация: 15.01.2009
Сообщений: 37
С нами: 9115288

Репутация: 26
По умолчанию

http://forum.antichat.ru/showpost.php?p=1146649&postcount=1130
I'm sorry. Но актуально а своих наработок нету. Спасибо.
 
Ответить с цитированием

  #9  
Старый 03.03.2009, 21:46
Algol
Регистрация: 29.05.2002
Сообщений: 1,793
С нами: 12604706

Репутация: 0


По умолчанию

Цитата:
Сообщение от Unregistered  
http://forum.antichat.ru/showpost.php?p=1146649&postcount=1130
I'm sorry. Но актуально а своих наработок нету. Спасибо.
А какая тут проблема ?
Вычислить выражение не можешь? Это же в одну строчку вычисляется.
 
Ответить с цитированием

  #10  
Старый 04.03.2009, 01:42
MihakeR
Новичок
Регистрация: 03.02.2008
Сообщений: 22
С нами: 9615108

Репутация: 11
По умолчанию

Составить программу вычисления двойного произведения:
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Американским студентам запретили пользоваться Skype KPOT_f!nd Мировые новости. Обсуждения. 1 28.09.2006 03:47
Любителям квестов сюда!! FoX's Болталка 10 25.01.2005 20:42



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


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




ANTICHAT ™ © 2001- Antichat Kft.