Каким кампилятором откомпилировать?

  • Автор теми Автор теми OAVko
  • Дата створення Дата створення
Статус: Офлайн
Реєстрація: 09.04.2007
Повідом.: 184
Каким кампилятором откомпилировать?

Есть код программы
Код:
program riski;
uses crt;
type mas=array[1..10] of real;
     mas2=array[1..10,1..10] of real;
var a:real;
     m,be,bm:mas;
     B,E,b1,e1:mas2;
     i,k,c,v,l,j,n:integer;
     mp,ebe,mbm,ebm,x,mbe:real;

 procedure base;
     begin
       for i:=1 to n do        {обращение матрицы B}
       begin
           for c:=1 to n do            {дублирование матриц}
             begin
               for v:=1 to n do
                 begin
                 B1[c,v]:=B[c,v];
                 e1[c,v]:=e[c,v];
                 end;
             end;
         for k:=1 to n do
           begin
             B[i,k]:=B1[i,k]/b1[i,i];         {делим строки на разрешающий элемент}
             E[i,k]:=E1[i,k]/b1[i,i];for l:=1 to n do
               begin                 {находим остальные элементы}
                if l<>i then
                  begin
                    B[l,k]:=(B1[l,k]-(B1[l,i]*B1[i,k]/B1[i,i]));
                    E[l,k]:=(E1[l,k]-(B1[l,i]*E1[i,k]/B1[i,i]));
                  end;
               end;
           end;
      end;

      for i:=1 to n do    {суммирование по строкам, формирование вектора-столбца Be}
      begin
         for j:=1 to n do
           begin
             be[i]:=be[i]+e[i,j];
           end;
      end;

      for i:=1 to n do     {формирование вектора-столбца Bm}
      begin
        for j:=1 to n do
        begin
          Bm[i]:=Bm[i]+m[j]*e[i,j];
        end;
      end;

      for i:=1 to n do
      begin                 {нахождение констант}
        ebe:=ebe+be[i];  {суммирование по стоблцу}
        ebm:=ebm+bm[i];
        mbm:=mbm+m[i]*bm[i];
        mbe:=mbe+m[i]*be[i];
      end;
      end;
 procedure vvod ;
      label out1, out2, out3, out4, out5;
      var z:real; mi,ma:real;
   begin
      writeln;
      writeln('                        ПРОЕКТ');
      writeln;
      writeln;
      writeln(' ПО ДИСЦИПЛИНЕ ');
      writeln;
      writeln('    АВТОР:  ');
      writeln;
      writeln('    ТЕМА:   ЗАДАЧА ОПТИМИЗАЦИИ РИСКОВОГО ПОРТФЕЛЯ.');
      writeln;
      writeln;
      writeln;
      out1:
      writeln;
      writeln('  Введите количество видов ценных бумаг, из которых вы хотите ');
      write('     сформировать портфель (не более 10):  ');
      readln(n);
      if (n<=0) or (n<>int(n)) or (n>10) then
      begin
        writeln('  Ошибка ввода! Число должно быть натуральным и меньше 10 ! ');
        goto out1;
      end;
      writeln;

      writeln('  Введите эффективности (доходности) ценных бумаг:');
     for i:=1 to n do
     begin
        E[i,i]:=1;
        out2:
        write(' ',i,'-ого вида :  ');
        readln(m[i]);
        if (m[i]<0) then
        begin
        writeln('  Ошибка ввода! Число должно быть положительным! ');
        goto out2;
        end;
     end;
     writeln;
     writeln('!!! При вводе рисков и совместных вариаций ценных бумаг следует');
     writeln('    быть внимательным, так как программа не расчитана на линейную');
     writeln('    связь доходностей ценных бумаг. Поэтому рекомендуется не вводить');
     writeln('    пропорциональные риски и совместные вариации ценных бумаг!!!');
     writeln;
     writeln('  Введите риск (среднее квадратическое отклонение(СКО)) ценных бумаг: ');
     for i:=1 to n do
     begin
        out3:
        write(' ',i,'-ого вида :  ');
        readln(z);
        if (z<0)  then
        begin
        writeln('  Ошибка ввода! Число должно быть положительным! ');
        goto out3;
        end;
        b[i,i]:=z*z;
     end;

     writeln;
     writeln(' Введите совместную вариацию (корреляционный момент) ценных бумаг.');
     writeln('  Она не должна быть больше произведения СКО этих бумаг.');
        for i:=1 to n do
        begin
        for j:=i+1 to n do        {ввод матрицы ковариаций}
        begin
          out4:
          write(' ',i,'-го и ',j,'-го вида:  ');
          readln(z);
          if  abs(z)>=sqrt(b[i,i])*sqrt(b[j,j]) then
          begin
          writeln('  Ошибка ввода! Число должно быть положительным и меньше произведения СКО этих бумаг! ');
          goto out4;
          end;
          b[i,j]:=z;
          b[j,i]:=z;
          if i<>j then begin E[i,j]:=0; end;
        end;
        end;
        writeln;
        ma:=0;
        for i:=1 to n do
         begin
            if m[i]>ma then ma:=m[i];
         end;
          mi:=100000000;
        for i:=1 to n do
         begin
            if m[i]<mi then mi:=m[i];
         end;
        writeln('  Введите желаемую эффективность портфеля.  ');
        write('  Она должна быть в пределах эффективностей ценных бумаг: ');
        out5:
        readln(mp);
      if (mp<mi) or (mp>ma) then
        begin
        writeln('  Ошибка ввода!');
        write('  Число должно быть в пределах эффективностей ценных бумаг!:  ');
        goto out5;
        end;
      end;


 procedure vivod ;
    begin
      writeln;
      writeln('  Структура портфеля. Доли ценных бумаг.');
      for i:=1 to n do
      begin
        x:=((mbm-mp*ebm)*be[i]+(mp*ebe-mbe)*bm[i])/(ebe*mbm-mbe*mbe);
        writeln(' ',i,'-го вида: ',x:6:5);
        if x<0 then
        begin
        writeln('  Так как доля бумаг ',i,'-го вида отрицательна, то необходимо ');
        writeln('  провести сделку "short sale", исключить бумаги этого вида из портфеля');
        writeln('  и решить задачу заново.');
        end;
      end;
      writeln;
      writeln('  Минимальный риск портфеля:  ',sqrt((mp*mp*ebe-2*mp*mbe+mbm)/(ebe*mbm-mbe*mbe)):6:5);
   end;

begin
     clrscr;
     textcolor(yellow);
     textbackground(blue);
     vvod;
     base;
     vivod;
     readln;
end.

Чем откомпилить?
Delphi?
 
Т. Паскаль?
 
можно и делфями, немного подпилив код
 
Переписать на C эти три строчки и не морочить голову.
 

Так?
<html>
program riski;
uses crt;
type mas=array[1..10] of real;
mas2=array[1..10,1..10] of real;
var a:real;
m,be,bm:mas;
B,E,b1,e1:mas2;
i,k,c,v,l,j,n:integer;
mp,ebe,mbm,ebm,x,mbe:real;

procedure base;
begin
for i:=1 to n do {обращение матрицы B}
begin
for c:=1 to n do {дублирование матриц}
begin
for v:=1 to n do
begin
B1[c,v]:=B[c,v];
e1[c,v]:=e[c,v];
end;
end;
for k:=1 to n do
begin
B[i,k]:=B1[i,k]/b1[i,i]; {делим строки на разрешающий элемент}
E[i,k]:=E1[i,k]/b1[i,i];for l:=1 to n do
begin {находим остальные элементы}
if l<>i then
begin
B[l,k]:=(B1[l,k]-(B1[l,i]*B1[i,k]/B1[i,i]));
E[l,k]:=(E1[l,k]-(B1[l,i]*E1[i,k]/B1[i,i]));
end;
end;
end;
end;

for i:=1 to n do {суммирование по строкам, формирование вектора-столбца Be}
begin
for j:=1 to n do
begin
be:=be+e[i,j];
end;
end;

for i:=1 to n do {формирование вектора-столбца Bm}
begin
for j:=1 to n do
begin
Bm:=Bm+m[j]*e[i,j];
end;
end;

for i:=1 to n do
begin {нахождение констант}
ebe:=ebe+be; {суммирование по стоблцу}
ebm:=ebm+bm;
mbm:=mbm+m*bm;
mbe:=mbe+m*be;
end;
end;
procedure vvod ;
label out1, out2, out3, out4, out5;
var z:real; mi,ma:real;
begin
writeln;
writeln(' ПРОЕКТ');
writeln;
writeln;
writeln(' ПО ДИСЦИПЛИНЕ ');
writeln;
writeln(' АВТОР: ');
writeln;
writeln(' ТЕМА: ЗАДАЧА ОПТИМИЗАЦИИ РИСКОВОГО ПОРТФЕЛЯ.');
writeln;
writeln;
writeln;
out1:
writeln;
writeln(' Введите количество видов ценных бумаг, из которых вы хотите ');
write(' сформировать портфель (не более 10): ');
readln(n);
if (n<=0) or (n<>int(n)) or (n>10) then
begin
writeln(' Ошибка ввода! Число должно быть натуральным и меньше 10 ! ');
goto out1;
end;
writeln;

writeln(' Введите эффективности (доходности) ценных бумаг:');
for i:=1 to n do
begin
E[i,i]:=1;
out2:
write(' ',i,'-ого вида : ');
readln(m);
if (m<0) then
begin
writeln(' Ошибка ввода! Число должно быть положительным! ');
goto out2;
end;
end;
writeln;
writeln('!!! При вводе рисков и совместных вариаций ценных бумаг следует');
writeln(' быть внимательным, так как программа не расчитана на линейную');
writeln(' связь доходностей ценных бумаг. Поэтому рекомендуется не вводить');
writeln(' пропорциональные риски и совместные вариации ценных бумаг!!!');
writeln;
writeln(' Введите риск (среднее квадратическое отклонение(СКО)) ценных бумаг: ');
for i:=1 to n do
begin
out3:
write(' ',i,'-ого вида : ');
readln(z);
if (z<0) then
begin
writeln(' Ошибка ввода! Число должно быть положительным! ');
goto out3;
end;
b[i,i]:=z*z;
end;

writeln;
writeln(' Введите совместную вариацию (корреляционный момент) ценных бумаг.');
writeln(' Она не должна быть больше произведения СКО этих бумаг.');
for i:=1 to n do
begin
for j:=i+1 to n do {ввод матрицы ковариаций}
begin
out4:
write(' ',i,'-го и ',j,'-го вида: ');
readln(z);
if abs(z)>=sqrt(b[i,i])*sqrt(b[j,j]) then
begin
writeln(' Ошибка ввода! Число должно быть положительным и меньше произведения СКО этих бумаг! ');
goto out4;
end;
b[i,j]:=z;
b[j,i]:=z;
if i<>j then begin E[i,j]:=0; end;
end;
end;
writeln;
ma:=0;
for i:=1 to n do
begin
if m>ma then ma:=m;
end;
mi:=100000000;
for i:=1 to n do
begin
if m<mi then mi:=m;
end;
writeln(' Введите желаемую эффективность портфеля. ');
write(' Она должна быть в пределах эффективностей ценных бумаг: ');
out5:
readln(mp);
if (mp<mi) or (mp>ma) then
begin
writeln(' Ошибка ввода!');
write(' Число должно быть в пределах эффективностей ценных бумаг!: ');
goto out5;
end;
end;


procedure vivod ;
begin
writeln;
writeln(' Структура портфеля. Доли ценных бумаг.');
for i:=1 to n do
begin
x:=((mbm-mp*ebm)*be+(mp*ebe-mbe)*bm)/(ebe*mbm-mbe*mbe);
writeln(' ',i,'-го вида: ',x:6:5);
if x<0 then
begin
writeln(' Так как доля бумаг ',i,'-го вида отрицательна, то необходимо ');
writeln(' провести сделку "short sale", исключить бумаги этого вида из портфеля');
writeln(' и решить задачу заново.');
end;
end;
writeln;
writeln(' Минимальный риск портфеля: ',sqrt((mp*mp*ebe-2*mp*mbe+mbm)/(ebe*mbm-mbe*mbe)):6:5);
end;

begin
clrscr;
textcolor(yellow);
textbackground(blue);
vvod;
base;
vivod;
readln;
end.
</html>
 
под какую платформу?
 
под DOS конечно
 
тогда компилятор Free Pascal под DOS
использовать режим TP — режим совместимости с Turbo Pascal:



наверное имелось в виду JavaScript?

Именно HTML. Это была шутка: вспомнился
⚠ Тільки зареєстровані користувачі бачать весь контент та не бачать рекламу.
.
 
Спасибо. Все получилось!
 
Останнє редагування:
Назад
Зверху Знизу