Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.033 c
14-1127354240
Ученик чародея
2005-09-22 05:57
2005.10.16
Если бы у вас был шанс задать один вопрос Богу,


3-1125919282
DSKalugin
2005-09-05 15:21
2005.10.16
Длина строки средствами SQL в FireBird 1.5.2


1-1127802201
Mishenka
2005-09-27 10:23
2005.10.16
Как отловить событие перехода фокуса?


1-1127494403
злобная танька
2005-09-23 20:53
2005.10.16
Инициализация массива


4-1124218450
SuperMatser
2005-08-16 22:54
2005.10.16
Еще вопрос! Никак не получается найти ОКНО!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский