Рубрики

Паскаль!

Страницы:123
1.Помагите решить задачку в паскале. Дано натуральное число N. Вычислить y=2*4*6*…*(2N)
stud
08.05.2008 13:48
2.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 будет выходить за пределы.
mavrik
08.05.2008 23:53
3.Эхх, не удержался =) Паскаль, правда, плохо помню...
Но выше программа алгоритмически неправильна, правильней тогда будет, например, так:

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.
Wizard
09.05.2008 03:04
4.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 Денис.
den
09.05.2008 04:42
5.ошибка stud'a видимо в строке y:=0; при которой любой результат =0 т и тогда в строке перемножения элементов при любых дейстиях будет результат=0.
кстати и в моей программе - она только для целых чисел.
den
09.05.2008 05:05
6.Ну, если на то пошло, то ещё два варианта:

//с предусловием
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
09.05.2008 08:06
7.Ха, Wizard мощно замутил насчет "программа алгоритмически неправильна"))))) ладно, попробую так же: в корне не согласен с вышеизложенным wizard-ом!!
mavrik
09.05.2008 15:56
8.и вообще, нафига, ребята, из такой простой задачи делать такое извращение из кучи лишних действий?
mavrik
09.05.2008 15:58
9.ладно, я тож скажу свое слово))

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.

я считаю так рациональней. опять же не проверял в паскале, может где опечатался опять =) вроде все ок!
mavrik
09.05.2008 16:11
10.ой ё... ну вы блин даете...
задачка из школьного курса программирования, ориентированая на алгоритмизацию, причем задача оооочень старая и весь фикус в ней в том что при больших n циклами она решалась очень долго (да-да... простая задача могла решаться часами, при неправильно построенном алгоритме)... хотя в современности тоже нужен быстрый код
с математикой у меня туговато, поэтому мог ошибится при выведении формулы, но у меня получилась вот что:
a^n + (2a+d(n-1))*n/2
ну и имея под рукой функцию возведения в степень, решение сводится к 3-4 строчкам кода, причем сам код достаточно быстрый
editor
13.05.2008 00:16
Страницы:123

Добавить комментарий могут только участники форума.
Чтобы стать участником форума необходимо зарегистрироваться.

Реклама