Помагите решить задачку в паскале. Дано натуральное число N. Вычислить y=2*4*6*…*(2N) | |
uses crt; var i: integer; n: byte; y: longint; begin clrscr; write('Vvedite N: ');readln(n); y:=1; for i:=1 to n do y:=y*2*n; writeln('Y = ',y); readkey; end.
Только при больших N переменная Y будет выходить за пределы. | |
Эхх, не удержался =) Паскаль, правда, плохо помню... Но выше программа алгоритмически неправильна, правильней тогда будет, например, так:
var i: integer; n: byte; y: longint; begin y := 1; write('Input N: '); readln(n); for i:=2 to 2*n do if i div 2 = i/2 then y:=y*i; writeln('Y = ',y); end. | |
program y2N; var n: integer; { кол-во членов ряда } i: integer; { номер элемента ряда } x: integer; { значение элемента ряда } y: integer; { произведение элементов ряда }
begin writeln('y=2N'); write('N:'); readln(n); y:=1; write('y='); for i:=1 to n do begin x:=2*i; write(x); if i<n then write('*'); if i=n then write('='); y:=y*x; end; write(y); end.
более понятнее и красивее наверное, всем студентам контрольные, рефераты, курсовые, дипломы недорого icq: 318584987 e-mail: denis_lysva@rambler.ru сот. тел. : 8-909-113-4755 Денис. | |
ошибка stud'a видимо в строке y:=0; при которой любой результат =0 т и тогда в строке перемножения элементов при любых дейстиях будет результат=0. кстати и в моей программе - она только для целых чисел. | |
Ну, если на то пошло, то ещё два варианта:
//с предусловием var i: integer; n: integer; y: integer; begin write('Количество элементов ряда N = '); readln(n); y := 1; i := 2; write('Считаем произведение y='); while (i<2*n) do begin y := y*i; write(i,'*'); i := i+2; end; y := y*i; writeln(i); writeln('Произведение ряда y = ', y); end. //с постусловием аналогично, писать не вижу смысла.
//с помощью рекурсии: var n: integer; y: integer; i: integer; function seriesMultiplying(var i,y: integer): integer; begin y := y*i; i := i+2; if i<=n*2 then seriesMultiplying := seriesMultiplying(i, y) else seriesMultiplying := y; end; begin write('Количество элементов ряда N = '); readln(n); y := 1; i := 2; writeln('Произведение ряда y=', seriesMultiplying(i, y)); end. | |
Ха, Wizard мощно замутил насчет "программа алгоритмически неправильна"))))) ладно, попробую так же: в корне не согласен с вышеизложенным wizard-ом!! | |
и вообще, нафига, ребята, из такой простой задачи делать такое извращение из кучи лишних действий? | |
ладно, я тож скажу свое слово))
uses crt; var i: integer; n: byte; y: longint; begin clrscr; write('Vvedite N: ');readln(n); y:=1; write('Y='); for i:=1 to n-1 do begin y:=y*2*i; {здесь кстати как раз не n, а i... выше ошибся} write(2*i,'*'); end; y:=y*2*n; write(2*n,'=',y); readkey; end.
я считаю так рациональней. опять же не проверял в паскале, может где опечатался опять =) вроде все ок! | |
ой ё... ну вы блин даете... задачка из школьного курса программирования, ориентированая на алгоритмизацию, причем задача оооочень старая и весь фикус в ней в том что при больших n циклами она решалась очень долго (да-да... простая задача могла решаться часами, при неправильно построенном алгоритме)... хотя в современности тоже нужен быстрый код с математикой у меня туговато, поэтому мог ошибится при выведении формулы, но у меня получилась вот что: a^n + (2a+d(n-1))*n/2 ну и имея под рукой функцию возведения в степень, решение сводится к 3-4 строчкам кода, причем сам код достаточно быстрый | |