PDA

Просмотр полной версии : Помогите решить задачи в Pascal'e



Ichimaru Gin
13.05.2011, 13:11
Прошу помощи в решении данных задач





1. При помощи оператора цикла вычислить Y=1!+2!+3!+...+N!(N>1).

2. Для массива из N вещественных чисел определить количество элементов,значения которых меньше среднего арифметического всех задааных величин.

3.Двумерный массив. Дана матрица вещественных чисел размерностью MхN,определить максимальный элемент в каждом столбце матрицы и поменять местами с первым элементом соответствующего столбца.

void
13.05.2011, 13:54
Ну я так понимаю вам всёравно сдавать это дело и с паскалем разбираться тоже прийдется, поэтому накидаю алгоритмику на С подобном:

1. Вы уверены, что вам нужна сумма факториалов? Если так то



public int summaFaktorialov(int n){

int prevFakt = 1;

int result = 0;

for(int i=1; i<n; i++)[

prevFakt *= i;

result += prefFakt;

}

return result;

}

это если более менее оптимально... можно разложить на запчасти



public int faktorial(int n){

int result = 1;

for(int i=0; i<n; i++){

result *=i;

}

return result;

}



public int summaFaktorialov(int n){

int result = 0;

for(int i=0; i<n;i++){

result += faktorial(i);

}

return result;

}



как раскурите первую задачку - дайте знать, вторую накидаю.

Ichimaru Gin
13.05.2011, 14:40
какой-то вовсе мне не понятен данный язык,

мне нужно по такой схеме



program_summafact;

var <описание переменных>:real;

begin

writeln(.....);

readln(.....);

ну и так далее

asik
13.05.2011, 14:50
1)


program Project2;



{$APPTYPE CONSOLE}



uses

SysUtils;



var N:int64;

answer:int64;

i:integer;



function Fact(x:integer):int64;

begin

result := x;

for x := result - 1 downto 1 do result := result * x;

end;



begin

{ TODO -oUser -cConsole Main : Insert code here }

write('N=');

readln(N);

answer := 0;

for i := 1 to N do answer := answer + Fact(N);

writeln('answer = ',answer);

readln;



end.

void
13.05.2011, 14:51
Ну вам прийдется рано или поздно с ним столкнуться http://forum.modelka.com.ua/public/style_emoticons/<#EMO_DIR#>/smile.gif

Поскольку пакаль я не признаю, то предлагаю вам перевести этот непонятный С на понятный паскаль


var <описание переменных>:integer;

это

int prevFakt = 1;

int result = 0;

можете еще добавить что-то типа

var n:integer;

и после бегина попросить пользователя его ввести или задать ему значение в коде.




for(int i=1; i<n; i++)[

prevFakt *= i;

result += prefFakt;

}

это собственно решение вашей задачи. Цикл for в паскале есть - как он там синтаксически выглядит я не помню.

prevFakt *= i; это тоже самое, что prevFakt := prevFakt*i; в паскале



после выполнения цикла в переменной result у вас будет ответ вашей задачи. дальше можете его выводить куда хочете и как хочете. напимер


writeln(.....);



Update:

вот вам уже привели второй вариант решения.

Ichimaru Gin
13.05.2011, 15:02
все равно ничего непонятно,мы не такой язык изучаем

asik
13.05.2011, 15:14
ну нема у меня на работе компилятора TP или BP... Есть FreePascal(Lazarus), kylex, delphi.... Я привёл решение на delphi

так будет на BP 7.0




program SumFak;

var N:integer;

answer:integer;

i:integer;



function Fact(x:integer):integer;

begin

result := x;

for x := result - 1 downto 1 do result := result * x;

end;



begin

write('N=');

readln(N);

answer := 0;

for i := 1 to N do answer := answer + Fact(N);

writeln('answer = ',answer);

readln;

end.

Ichimaru Gin
13.05.2011, 15:15
мне как раз нужно решение на Free Pascale,но впринципе ход решения становится понятным

asik
13.05.2011, 15:26
2)




program Project2;



uses

SysUtils;



const maxN=1000;

type myArray= array[1..maxN]of real;



var

i:integer;

A:myArray;

n:integer;

avgArray:real;

countElMensheAVG:integer;



function calcAVG(aIn:myArray;N:integer):real;

var i:integer;

begin

result := 0;

for i := 1 to N do

result := result + aIn[i];

result := result / N;

end;



begin

write('N=?');

readln(N);

if N>maxN then

begin

writeln('Vvedennoe N>',maxN);

end else

begin

for i:=1 to N do

begin

write('a[',i,']=?');

readln(a[i]);

end;



avgArray := calcAVG(a,N);

countElMensheAVG:=0;

for i:=1 to N do

begin

if a[i]<avgArray then inc(countElMensheAVG);

end;

writeln('kolichestvo el-tov menshe srednego=',countElMensheAVG);

readln;

end;

end.



на 3-ю нет времени, сори но обед закончился =)

Ichimaru Gin
13.05.2011, 15:27
спасибо и на том!!!

Ichimaru Gin
13.05.2011, 21:54
Вот моя наработка,помогите найти ошибку.

При помощи оператора цикла вычислить Y=1!+2!+3!+...+N!(N>1).

program sumfak;

var N,i,answer,fact,k:integer;

begin

writeln('vvedite N');

readln(N);

fact:=1;

k:=1;

answer:=0;

for i:=1 to N do

fact:=i*fact*k;

k:=fact;

answer:=answer+fact;

writeln('answer=',answer);

readln;

end.