Сумма квадратов элементов динамического массива (Pascal)
Заранее большое спасибо!!!
Заранее большое спасибо!!!
Что именно непонятно? В Паскале нет динамического массива, значит, его надо написать ручками. Для линейного массива вполне подойдёт двусвязный список из элементов типа "запись". Красивее всего создать объект (класс), в нём реализовать структуру данных и методы работы с этой структурой. Можно написать модуль в качестве хранилища методов работы с двусвязным списком. Например, тот же ввод на экран. В определении суммы квадратов элементов массива нет никакой сложности - в цикле пробежать по всему списку до конца, для каждого элемента посчитать квадрат и сложить.
Тут, правда, есть тонкость. Если вещественный файл - это набор четырёхбайтных последовательностей, каждая из которых инетрпретируется как число типа real, сумма будет иметь неточное значение. Если же в списке будут храниться целочисленные значения, то очень быстро может наступить выход за границы типа.
Const FName='number';
Type
TMas = array [1..1] of Real;
Var M: ^TMas;
F: file of Real;
N,i: Integer;
PMem: Pointer;
Procedure DataIn;
Begin {$I-} Assign(F, FName); Reset(F);
If IOResult = 0 then begin
N:=FileSize(F);
GetMem(M,SizeOf(Real)*N);
For i:=1 to N do Read(F, M^);
Close(F);
end else begin Randomize;
N:=Random(100)+10;
GetMem(M,SizeOf(Real)*N);
ReWrite(F);
For i:=1 to N do begin
M^:=Random(100);
Write(F, M^);
end;
Close(F);
end;
End;
А дальше не знаю((((
[COLOR="Red"]Правила раздела Студентам прочитай и следуй им.Название темы должно отражать суть задачи,код надо оформлять при помощи тегов.[/COLOR]модератор.
Const FName='number';
Type
TMas = array [1..1] of Real;
Var M: ^TMas;
F: file of Real;
N,i: Integer;
PMem: Pointer;
Procedure DataIn;
Begin {$I-} Assign(F, FName); Reset(F);
If IOResult = 0 then begin
N:=FileSize(F);
GetMem(M,SizeOf(Real)*N);
For i:=1 to N do Read(F, M^);
Close(F);
end else begin Randomize;
N:=Random(100)+10;
GetMem(M,SizeOf(Real)*N);
ReWrite(F);
For i:=1 to N do begin
M^:=Random(100);
Write(F, M^);
end;
Close(F);
end;
End;
А дальше не знаю((((
Procedure DataOut
Begin
For i:=1 to N do begin
Write(M^:8:2);
end;
end;
Как дальше описать функцию???