• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

И снова Паскаль

Регистрация
29 Фев 2012
Сообщения
120
Реакции
0
Баллы
0
И снова Паскаль

1)Написать программу, которая вычисляет сумму двух заданных дробей. Результат представить в виде несократимой дроби.
2)Написать программу, которая формирует новый массив, состоящий из элементов заданного массива, значение которых не превышает номера ячейки, в которой они расположены.
3)Написать программу, которая по заданным натуральным значениям и вычисляет результат выражения:

S=1+(sin 2a)/a^2+(sin 4a)/a^4+...(sin(2n-2)a)/a^(2n-2)
Ребята помогите пожалуйста бедному студенту.НАдо решить в паскале и экселе.
 
1)Написать программу, которая вычисляет сумму двух заданных дробей. Результат представить в виде несократимой дроби.
Код:
Var
 nom1,nom2,denom1,denom2:Word;
 nom3,denom3,d,min,max:LongInt;
 i,j,p:Byte;
 Code:Integer;
 S,S1,S2:String;
Begin
 Writeln('First fraction (n/d, e.g. 67/458):');
 Readln(S);
 i:=0;
 S1:='';
 S2:='';
 Repeat
  Inc(i);
  If S[i]<>'/' then S1:=S1+S[i];
 Until S[i]='/';
 Val(S1,nom1,Code);
 For j:=i+1 to Length(S) do S2:=S2+S[j];
 Val(S2,denom1,Code);
 Writeln('Second fraction:');
 Readln(S);
 i:=0;
 S1:='';
 S2:='';
 Repeat
  Inc(i);
  If S[i]<>'/' then S1:=S1+S[i];
 Until S[i]='/';
 Val(S1,nom2,Code);
 For j:=i+1 to Length(S) do S2:=S2+S[j];
 Val(S2,denom2,Code);
 denom3:=denom1*denom2;
 nom3:=nom1*denom2+nom2*denom1;
 If nom3<=denom3 then
  begin
   p:=1;
   min:=nom3;
   max:=denom3;
  end
 else
  begin
   p:=2;
   min:=denom3;
   max:=nom3;
  end;
 For d:=(min div 2) downto 2 do
  If ((min mod d)=0) and ((max mod d)=0) then
   begin
    min:=min div d;
    max:=max div d;
   end;
 Writeln('Result:');
 If p=1 then Writeln(min,'/',max) else Writeln(max,'/',min);
 Readln;
End.
 
2)Написать программу, которая формирует новый массив, состоящий из элементов заданного массива, значение которых не превышает номера ячейки, в которой они расположены.
Код:
Const
 N=20;
Var
 A,B:Array[1..N] of Byte;
 i,j:Byte;
Begin
 Randomize;
 Writeln('Initial array:');
 For i:=1 to N do
  begin
   A[i]:=Random(2*N);
   Write(A[i]:4);
  end;
 Writeln;
 j:=0;
 Writeln('New array:');
 For i:=1 to N do
  If A[i]<=i then
   begin
    Inc(j);
    B[j]:=A[i];
   end;
 For i:=1 to j do Write(B[i]:4);
 Readln
End.
 
3)Написать программу, которая по заданным натуральным значениям и вычисляет результат выражения: S=1+(sin 2a)/a^2+(sin 4a)/a^4+...(sin(2n-2)a)/a^(2n-2)
Код:
Var
 a,Sum,q:real;
 n,i:byte;
Begin
 Write('a= ');
 Readln(a);
 Write('n(>1)= ');
 Readln(n);
 Sum:=1;
 q:=1;
 For i:=2 to n do
  begin
   q:=q*Sqr(a);
   Sum:=Sum+Sin(a*(2*i-2))/q;
  end;
 Writeln('Sum= ',Sum:0:5);
 Readln
End.
 
А вот еще забыл добавить, эти задания нужно оформить как процедуру или функцию, а в 3 задании обязательно использовать рекурсию.
 
а в 3 задании обязательно использовать рекурсию.
В общем, так, уважаемый. Рекурсий я не знаю (за ненадобностью), немного подразобрался, программа работает, НО! для очень маленьких значений n. Так, в Turbo Pascal n не превышает n=4, во Free Pascal - n=6. При попытке запустить с бОльшими значениями происходит переполнение стека рекурсивной функции и на том вся любовь заканчивается. Как с этим бороться, я не в курсе. Возможно, есть какие-то директивы, расширяющие стек - не ведаю. Если устроит - пожалуйста:
Код:
Var
 a,S:real;
 n:Byte;

Function Pow(b:real;m:Byte):Real;
begin
 If m>1 then Pow:=b*Pow(b,m-1) else Pow:=b;
end;

Function Sum(k:Byte):Real;
begin
 If k>1 then Sum:=Sin(a*(2*k-2))/Pow(a,(2*k-2))+Sum(k-1) else Sum:=0;
end;

Begin
 Write('a= ');
 Readln(a);
 Write('n(>1, <5)= ');
 Readln(n);
 S:=1+Sum(n);
 Writeln('Sum= ',S:0:5);
 Readln
End.
 
Назад
Сверху