Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 21.05.2012, 22:32   #1 (permalink)
ВасилийНемтырев
Member
 
Регистрация: 29.02.2012
Сообщений: 120
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3
По умолчанию И снова Паскаль

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

S=1+(sin 2a)/a^2+(sin 4a)/a^4+...(sin(2n-2)a)/a^(2n-2)
Ребята помогите пожалуйста бедному студенту.НАдо решить в паскале и экселе.
ВасилийНемтырев вне форума   Ответить с цитированием

Старый 21.05.2012, 22:32
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Посетители форума могли уже решить эту проблему в какой то из этих тем

Компьютер включается и выключается. И так снова и снова
Ах, снова эти Lego....

Старый 22.05.2012, 11:09   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от ВасилийНемтырев Посмотреть сообщение
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.
Vladimir_S вне форума   Ответить с цитированием
Старый 22.05.2012, 12:11   #3 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от ВасилийНемтырев Посмотреть сообщение
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.
Vladimir_S вне форума   Ответить с цитированием
Старый 22.05.2012, 12:33   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от ВасилийНемтырев Посмотреть сообщение
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.
Vladimir_S вне форума   Ответить с цитированием
Старый 23.05.2012, 22:14   #5 (permalink)
ВасилийНемтырев
Member
 
Регистрация: 29.02.2012
Сообщений: 120
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3
По умолчанию

А вот еще забыл добавить, эти задания нужно оформить как процедуру или функцию, а в 3 задании обязательно использовать рекурсию.
ВасилийНемтырев вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 29.05.2012, 18:38   #6 (permalink)
ВасилийНемтырев
Member
 
Регистрация: 29.02.2012
Сообщений: 120
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3
По умолчанию

Почему все молчат??
ВасилийНемтырев вне форума   Ответить с цитированием
Старый 01.06.2012, 15:36   #7 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от ВасилийНемтырев Посмотреть сообщение
а в 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.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 07:38.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.