21.05.2012, 22:32 | #1 (permalink) |
Member
Регистрация: 29.02.2012
Сообщений: 120
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3
|
И снова Паскаль
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
Регистрация: 08.03.2016
Сообщений: 0
|
Посетители форума могли уже решить эту проблему в какой то из этих тем Компьютер включается и выключается. И так снова и снова Ах, снова эти Lego.... |
22.05.2012, 11:09 | #2 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Код:
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. |
|
22.05.2012, 12:11 | #3 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Код:
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. |
|
22.05.2012, 12:33 | #4 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Код:
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. |
|
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
|
01.06.2012, 15:36 | #7 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
В общем, так, уважаемый. Рекурсий я не знаю (за ненадобностью), немного подразобрался, программа работает, НО! для очень маленьких значений 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. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|