Главная страница
    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.037 c
11-1108062669
Unknown Mystic
2005-02-10 22:11
2005.10.16
TVM_GETIMAGELIST в NewTreeView (модуль KOL.PAS)


3-1125669985
jeka_t
2005-09-02 18:06
2005.10.16
Как в запросе указать условие отбора по дате с временем...


4-1124115667
NikNet
2005-08-15 18:21
2005.10.16
ListBox с иконками слева?


14-1127442865
КаПиБаРа
2005-09-23 06:34
2005.10.16
А что будет, если


14-1127143583
Ученик чародея
2005-09-19 19:26
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский