Просмотр полной версии : Помогите решить задачи в Pascal'e
Ichimaru Gin
13.05.2011, 13:11
Прошу помощи в решении данных задач
1. При помощи оператора цикла вычислить Y=1!+2!+3!+...+N!(N>1).
2. Для массива из N вещественных чисел определить количество элементов,значения которых меньше среднего арифметического всех задааных величин.
3.Двумерный массив. Дана матрица вещественных чисел размерностью MхN,определить максимальный элемент в каждом столбце матрицы и поменять местами с первым элементом соответствующего столбца.
Ну я так понимаю вам всёравно сдавать это дело и с паскалем разбираться тоже прийдется, поэтому накидаю алгоритмику на С подобном:
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(.....);
ну и так далее
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.
Ну вам прийдется рано или поздно с ним столкнуться 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
все равно ничего непонятно,мы не такой язык изучаем
ну нема у меня на работе компилятора 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,но впринципе ход решения становится понятным
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.
Powered by vBulletin® Version 4.2.1 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot