Форум: "Начинающим";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];
Вниззадача на Pascal Найти похожие ветки
← →
Drow (2005-09-11 13:40) [0]Уважаемые мастера,прощу помощи с написанием программы из курсовой...вот:
Заменить каждый элемент массива средним арифметичекским всех предшествующих ему элементов.Число элементов N>=100.Итоговый массив записываеться в файл с контролем на экране монитора.Исходный массив сформировать из случайныйх действительныйх чисел и хранить на МД.
Буду очень благодарен если хотя бы укажете примерный алгоритм решения.
← →
Virgo_Style © (2005-09-11 13:45) [1]Drow (11.09.05 13:40)
примерный алгоритм решения.
1. Заполнить массив случайными числами
2. Записать его на МД (магнитный диск?)
3. Посчитать средние значения
4. Записать в файл и вывести на экран.
п. 1 и 2, а также 3 и 4 могут быть объединены.
Средние значения можно писать в новый массив или слегка извратиться, используя один и тот же массив:
Mid(n) = (Sum(A0..An)/n) = (Mid(n-1)*(n-1)+An)/n, если не путаю.
← →
Наиль © (2005-09-11 13:47) [2]Два цикла:
1: a[i]:=a[i-1]+a[i]; i=2..N
2: a[i]:=a[i-1]/(i-1); i=2..N
← →
Drow (2005-09-11 14:04) [3]to Наиль
а какого типа тогда должен быть массив A[i]?
я делаю его типа Real.вот такой код:
program z1n1;
var
i,:integer;
A:array[1..10] of real;
begin
for i:=1 to 10 do begin
A[i]:=random(11);
write("*",A[i]);
end;
for i:=2 to 10 do begin
A[i]:=a[i-1]+a[i];
end;
for i:=2 to 10 do begin
A[i]:=a[i-1]/(i-1);
end;
writeln;
for i:=1 to 10 do begin
writeln("#",A[i]);
end;
readln;
end.
← →
Наиль © (2005-09-11 14:16) [4]Среднее значение редко бывает целым.
Значит массив должен быть Real или, в крайнем случае, Extended.
Алгоритм я придумывал на лету. Так что тебе придётся его проверить (ручка+бумага=GOOD).
← →
Drow (2005-09-11 15:39) [5]program z1n1;
uses crt;
type
tarr=array[1..100] of single;
var
mass:Tarr;
n,j,k:integer;
function Sr(var x:Tarr;size,p:integer):single;
var
i:integer;
s:single;
begin
s:=0;
for i:=1 to p do
s:= s+x[i];
s:=s/(p);
Sr:=s;
end;
begin
clrscr;
writeln("ISHODNIY MASSIV :");
for k:=1 to 100 do begin
mass[k]:=random(100)+1;
write(" * ",mass[k]:3:0);
end;
writeln;
writeln("POLUCHENIY MASSIV :");
for j:=n downto 2 do
mass[j] :=Sr(mass,n,j-1);
for k:=1 to 100 do begin
write(" ",mass[k]:3:1);
end;
readln;
end.
вот написал,но почему то исходный и полученный массив одинаковые...помогите найти ошибку...
← →
begin...end © (2005-09-11 15:56) [6]> Drow (11.09.05 13:40)
> Заменить каждый элемент массива средним арифметичекским
> всех предшествующих ему элементов.
А чему тогда должен быть равен первый элемент полученного массива?
← →
Drow (2005-09-11 16:05) [7]2begin...end
первый элемент полученного массива будет равен первому элементу исходного массива.
← →
begin...end © (2005-09-11 16:07) [8]> Drow (11.09.05 16:05) [7]
Тогда, получается, задание было сформулировано не совсем верно: каждый элемент массива нужно заменить на среднее арифметическое предшествующих элементов и самого этого элемента (т.е. текущий элемент тоже нужно учитывать при вычислении среднего). Так?
← →
Drow (2005-09-11 16:16) [9]2begin...end
нет,сам элемент не считаеться.
первый без изменеий,второй получаеться равен первому,третий сумме 1+2 /2 и т.д.
← →
begin...end © (2005-09-11 16:56) [10]> Drow (11.09.05 16:16) [9]
type
TRealArray = array [1..100] of Real;
procedure P(var A: TRealArray; Count: Integer);
var
I: Integer;
Sum, Temp: Real;
begin
if (Count > 0) and (Count <= High(A)) then
begin
Sum := 0;
Temp := A[1];
for I := 2 to Count do
begin
Sum := Sum + Temp;
Temp := A[I];
A[I] := Sum / (I - 1)
end
end
end.
Писал прямо здесь, мог ошибиться.
← →
Drow (2005-09-11 17:07) [11]спасибо,сейчас попробую...
← →
Zeqfreed © (2005-09-11 17:14) [12]
program evalarr;
{$APPTYPE CONSOLE}
const
NUM_COUNT = 10;
type
TSingleArray = array[1..NUM_COUNT - 1] of Single;
var
MyArr : TSingleArray;
procedure SaveArrayToFile(const Filename : String; const Src : TSingleArray);
var
i : Integer;
f : TextFile;
begin
AssignFile(f, Filename);
Rewrite(f);
for i := Low(TSingleArray) to High(TSingleArray) do begin
WriteLn(f, Src[i]:3:3);
end;
CloseFile(f);
end;
function EvalArray(const Src : TSingleArray) : TSingleArray;
var
i : Integer;
q : Single;
begin
q := 0;
Result[Low(TSingleArray)] := Src[Low(TSingleArray)];
for i := Low(TSingleArray) + 1 to High(TSingleArray) do begin
q := q + Src[i - 1];
Result[i] := (q / (i - 1));
end;
end;
function GenerateArray(const MinVal, MaxVal : Integer) : TSingleArray;
var
i : Integer;
begin
Randomize();
for i := Low(TSingleArray) to High(TSingleArray) do begin
Result[i] := Random(MaxVal - MinVal) + MinVal;
end;
end;
begin
WriteLn("Welcome!");
MyArr := GenerateArray(1, 6);
WriteLn("Array was generated");
SaveArrayToFile("source array.txt", MyArr);
WriteLn("Generated array saved");
SaveArrayToFile("destination array.txt", EvalArray(MyArr));
WriteLn("Array was evaluated and saved");
WriteLn("Thank you for using this example!");
ReadLn;
end.
Вот тебе ещё вариант, вроде работает как надо.. :)
← →
Zeqfreed © (2005-09-11 17:18) [13]Zeqfreed © (11.09.05 17:14) [12]
NUM_COUNT - 1
следует заменить наNUM_COUNT
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.10.16;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.037 c