0 / 0 / 0
Регистрация: 28.11.2011
Сообщений: 4
1

Перевести код с Паскаля на Фортран

29.11.2011, 22:06. Показов 2723. Ответов 9
Метки нет (Все метки)

собсна, просто перевести код. желательно не усложнять программу.
заранее спасибо

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
uses crt;
const
  a = 0;{нижний предел}
  b = 1;{верхний предел}
  e=0.0001;{точность}
function F(x:real):real;
begin
F:=exp(2*x)-exp(x)-ln(abs(x)+1)*cos(x);
end;
 
var n,i:integer;
    h,k,s1,s2: real;
begin
clrscr;
write('Количество разбиений n=');
readln(n);//начальное число
s1:=0;//итоговый интеграл
h:=(b-a)/n;//шаг
s2:=h*F(a);//текущий интеграл
repeat
s1:=s2;//запомним текущий
h:=(b-a)/n;
k:=a;//левый край
for i:=1 to n-1 do
 begin
  k:=k+h;//наращиваем
  if i mod 2 = 0 then s2:=s2+2*f(k)//считаем новый интеграл
  else s2:=s2+4*f(k);
 end;
s2:=(s2+f(a)+f(b))*h/3;//конечное значение
n:=n*2;//если точность не достигнута удваиваем количество разбиений
until abs(s1-s2)<=e;
write('Интеграл=',s2:0:6);
readln
end.
Добавлено через 23 часа 54 минуты
уже сам попытался сделать, но выдаёт некорректный результат.
помогите, пожалуйста исправить..

Fortran
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
program lab5
 
real h,k,s1,s2,a,b,e 
integer n,i
 
 
print*, 'n'
read*, n
print*, 'a'
read*, a
 
print*, 'b'
read*, b
print*, 'e'
read*, e
 
s1=0
h=(b-a)/n
s2=h*f(a)
 
do while (abs(s1-s2)<=e)
 
s1=s2
h=(b-a)/n
k=a
 
 
  do i=1,(n-1)
  k=k+h
  if (i==0) then 
  s2=s2+2*f(k)
  else 
  s2=s2+4*f(k)
  endif
 enddo
 
 
s2=(s2+f(a)+f(b))*(h/3)
n=n*2
 
end do
 
 
 
print*, 's2=',s2
end
 
function f(x)
real f,x
f=(exp(2*x))-(exp(x))-((alog(abs(x)+1))*cos(x))
end
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.11.2011, 22:06
Ответы с готовыми решениями:

Каким образом можно перевести код Паскаля в код Фортран?
Здравствуйте уважаемые программисты! Может быть банальная, но довольно сложная проблема - перевод...

К сможет перевести простой код с Паскаля на Фортран?
С Фортрана на Паскаль можно конвертировать с помощью разных программ а обратной не нашла....

Перевести с Паскаля на Фортран
uses crt; type Link = ^Number; Number = record ID: integer; Cislo : real; NextRec: Link;...

Перевести из паскаля в фортран
program KAV; var a,b,c,r:real; begin writeln ('vvedite a,b,c'); readln (a,b,c); If (a&lt;&gt;0) and...

9
35 / 35 / 0
Регистрация: 26.09.2011
Сообщений: 143
29.11.2011, 22:17 2
В паскальной программе:
Pascal
1
if i mod 2 = 0 then
А у вас:
Fortran
1
if (i==0) then
Кроме того, я подозреваю, что в условии while должно стоять
Fortran
1
(abs(s1-s2)>=e)
WHILE - выполнять, пока выполняется условие
UNTIL - видимо, выполнять, пока условие не выполнится.
Слова то разные.
0
0 / 0 / 0
Регистрация: 28.11.2011
Сообщений: 4
29.11.2011, 22:40  [ТС] 3
исправил, и тогда s2 равно нулю.

насчёт i==0, я думаю не существенно.
можно и меньше либо равно погрешности написать..
0
35 / 35 / 0
Регистрация: 26.09.2011
Сообщений: 143
29.11.2011, 23:49 4
Цитата Сообщение от energyman Посмотреть сообщение
исправил, и тогда s2 равно нулю.
насчёт i==0, я думаю не существенно.
Что вы исправили и что несущественно?
0
0 / 0 / 0
Регистрация: 28.11.2011
Сообщений: 4
30.11.2011, 00:13  [ТС] 5
не существенно какое условие: приблизительно равен нулю, равен погрешности, или меньше погрешности, или до 3-й цифры после запятой..

Добавлено через 46 секунд
исправил на знак ">"
0
35 / 35 / 0
Регистрация: 26.09.2011
Сообщений: 143
30.11.2011, 13:09 6
Не понял ничего.

В оригинальной программе
Pascal
1
if i mod 2 = 0 then
- Это эквивалентно
Fortran
1
if (MOD(i,2) == 0) THEN
, а вовсе не равенству i нулю.

А знак я предлагал поменять с "<" на ">" - потому что в Фортране программа будет выполняться пока (WHILE) НЕ достигнута необходимая точность, т.е. разница БОЛЬШЕ точности.
0
0 / 0 / 0
Регистрация: 28.11.2011
Сообщений: 4
30.11.2011, 23:04  [ТС] 7
собсна, огромное вам спасибо за помощь.
знак, кстати менять не надо было. как показала практика, while и until одно и тоже.
а вот с командой mod вы написали всё верно.

есть ещё один вопрос, для самообразования: что именно эта команда выполняет? отбрасывает определённое количество цифр после запятой??
0
35 / 35 / 0
Регистрация: 26.09.2011
Сообщений: 143
01.12.2011, 20:50 8
Цитата Сообщение от energyman Посмотреть сообщение
знак, кстати менять не надо было. как показала практика, while и until одно и тоже.
Не верю, но вам виднее.


Цитата Сообщение от energyman Посмотреть сообщение
есть ещё один вопрос, для самообразования: что именно эта команда выполняет? отбрасывает определённое количество цифр после запятой??
Для самообразования есть гугль и фортрановские стандарты.
А mod возвращает остаток от деления.
0
0 / 0 / 1
Регистрация: 12.09.2011
Сообщений: 5
07.12.2011, 00:19 9
program semistrovaia4;

const
Nmass = 100;

var
X: array [1..Nmass] of integer;
sum, N, i, c1, c2: integer;
max: real;

begin
Writeln('Введите число N');
readln(N);
for i := 1 to N do
begin
write('X[', i, ']=');
readln(X[i]);
end;
max := x[1];
c1 := 0;
c2 := 1;
for i := 1 to N do
begin
if (X[i] > max) then
begin
max := x[i];
c2 := i;
end;
if((X [i] <> max) and (x[i] mod 3 = 0) and (c1 < c2)) then
begin
c1 := i;
end;
if(X [i] < 0) then
begin
sum := sum + x[i];
end;
end;
if(c1 > c2) then
x[c1] := abs(sum)
else
writeln('Нет такого элемента , массив не изменный');
writeln(' Замена числа кратного трем,на сумму модуля отрицательных чисел стояшего после мах работает:');
for i := 1 to N do
begin
write('X[',i,']=',X[i],' ');
end;
end.

Добавлено через 51 минуту
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
program semistrovaia4;
 
const
Nmass = 100;
 
var
X: array [1..Nmass] of integer;
sum, N, i, c1, c2: integer;
max: real;
 
begin
Writeln('Введите число N');
readln(N);
for i := 1 to N do
begin
write('X[', i, ']=');
readln(X[i]);
end;
max := x[1];
c1 := 0;
c2 := 1;
for i := 1 to N do
begin
if (X[i] > max) then
begin
max := x[i];
c2 := i;
end;
if((X [i] <> max) and (x[i] mod 3 = 0) and (c1 < c2)) then
begin
c1 := i;
end;
if(X [i] < 0) then
begin
sum := sum + x[i];
end;
end;
if(c1 > c2) then
x[c1] := abs(sum)
else
writeln('Нет такого элемента , массив не изменный');
writeln(' Замена числа кратного трем,на сумму модуля отрицательных чисел стояшего после мах работает:');
for i := 1 to N do
begin
write('X[',i,']=',X[i],' ');
end;
end.
0
1 / 1 / 0
Регистрация: 03.11.2010
Сообщений: 18
04.01.2012, 20:49 10
Здравствуйте,уважаемые эксперты.Прошу перевести эти программы на фортран:

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
uses crt;
var a,b,x,y,z,t:real;
begin
writeln('Введите значения a,b,x');
read(a,b,x);
if a>b then y:=a*x*x*x+b*b+x*x*x*x*x
else 
 begin
  if x<>0 then 
   begin
    if cos(a/2)=0 then y:=-1
    else y:=(sin(a/2)/cos(a/2))*b*x 
   end
  else y:=-1;
 end;
if y>0 then write('y>0')
else if y=0 then write('a=',a:0:2,' b=',b:0:2,' x=',x:0:2)
else
 begin
  t:=exp(2*x)+3*a*a*a*b; 
  if t=0 then z:=0
  else if t>0 then  z:=exp(ln(t)/5)
  else z:=-exp(ln(-t)/5);
  write('z=',z:0:2);
 end;
end.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
uses crt;
const a=2.8;
      b=-0.3;
      c=4;
var xn,xk,x,h,y:real;
begin
xn:=0.8;
xk:=2.8;
h:=0.2;
x:=xn;
while x<xk+h/2 do
 begin
  if x<1.4 then y:=(a+b*x)/sqrt(x*x+4)
  else if x=1.4 then y:=a*x*x+b*x+c
  else y:=a/x+exp(a*b);
  writeln('x=',x:4:1,'  y=',y:5:2);
  x:=x+h;
 end;
end.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
uses crt;
var n,i,k:integer;
begin
repeat
write('Введите натуральное число >=3 n=');
read(n);
until n>2;
i:=3;
k:=0;
while i<=n do
 begin
  k:=k+1;
  write(i,' ');
  if k mod 10=0 then writeln;
  i:=i+3;
 end;
end.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
uses crt;
const nmax=15;
var a:array[1..nmax] of real;
    n,i,imn,k:integer;
    mn,mx,s:real;
begin
repeat
write('Размер массива до ',nmax,' n=');
read(n);
until n in [1..nmax];
writeln('Введите элементы массива:');
for i:=1 to n do
 begin
  write('a[',i,']=');
  read(a[i]);
 end;
clrscr;
writeln('Исходный массив:');
mn:=a[1];
mx:=a[1];
imn:=1;
for i:=1 to n do
 begin
  write(a[i]:0:2,' ');
  if a[i]<mn then
   begin
    mn:=a[i];
    imn:=i;
   end;
  if a[i]>mx then mx:=a[i];
 end;
writeln;
writeln('Минимальный элемент=',mn:0:2,' его индекс=',imn);
writeln('Максимальный элемент=',mx:0:2);
repeat
write('Сколько последних элементов включить в сумму от 1 до ',n,' k=');
read(k);
until k in [1..n];
s:=0;
for i:=n downto n-k+1 do
s:=s+a[i];
writeln('сумма последних ',k,' элементов=',s:0:2);
a[imn]:=s;
writeln('замена минимального суммой:');
for i:=1 to n do
write(a[i]:0:2, ' ');
writeln;
if mn>=0 then
 begin
  writeln('Минимальный элемент >=0');
  for i:=1 to n do
  a[i]:=a[i]*mn*mn;
 end
else
 begin
  writeln('Минимальный элемент <0');
  for i:=1 to n do
  a[i]:=a[i]*mx*mx;
 end;
for i:=1 to n do
write(a[i]:0:2,' ');
end.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.01.2012, 20:49
Помогаю со студенческими работами здесь

Перевести программу с паскаля на фортран, используя Параллельные вычисления и OpenMP
Есть несложная программа на паскале, надо ее перевести в фортран с помощью параллельных вычислений...

Как перевести код с паскаля на Java. Пытался сам но код не хочет работать переведенный
А сам код на паскале работает. Вот код на паскале var i,j,m,c,d: integer; A:array of...

Перевести код с Паскаля на С#
Помогите пожалуйста переделать код с Паскаля uses Graph, Crt; type mas= array of longint; ...

Перевести код с Паскаля на C#
program lm; uses crt; Type P= array of integer; M= array of integer; Var a:p; b:m;...

Перевести код с Паскаля на СИ
Попробовал перевести но выдает не те результаты. Не подскажите где ошибка? Program P1; Var Map:...

Перевести код с Паскаля на C
var f,g: text; s: string; begin assign(f,'F:\text1.txt'); assign(g,'F:\text2.txt');...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru