![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Требуется помощь. Буду очень признателен.
Есть задание: 1. Составить процедуру формирования типизированного файла, компонентами которого является одномерный массив Type mas=array [1..5] of real. 2. Составить процедуру преобразования типизированного файла в текстовый. Элементы массивов расположить по строкам текстового файла. 3. Составить функцию для определения суммы элементов одномерного массива типа real. 4. Составить функцию для определения номера компоненты типизированного файла, имеющей минимальную сумму элементов. 5. Составить процедуру вывода k-ой компоненты типизированного файла на экран. Есть сами процедуры и функции(правда, 4 позиция не выполняется, собственно, там у меня какая то грандиозная ошибка): Это Юнит Код:
unit Unit1;
interface
type
mas=array [1..5] of real;
ftip=file of mas;
mas1=array [1..1000] of real;
procedure form_tipfile(var f:ftip; n:integer);
procedure txt_from_tip(var f1:textfile; var f:ftip);
function OBR(a:mas):real;
function nomer(var f:ftip; n:integer):integer;
procedure vivod(var f:ftip; k:integer; n:integer);
implementation
procedure form_tipfile(var f:ftip; n:integer);
var j,i:integer; a:mas;
begin
rewrite(f);
writeln('введите составляющие');
for j:=1 to n do
begin
for i:=1 to 5 do
readln(a[i]);
write(f,a);
writeln;
end;
closefile(f);
end;
procedure txt_from_tip(var f1:textfile; var f:ftip);
var i:integer; a:mas;
begin
reset(f);
rewrite(f1);
while not eof(f) do begin
read(f,a);
for i:=1 to 5 do write(f1,a[i]:6:2);
writeln(f1);
end;
closefile(f1);
closefile(f);
end;
function OBR(a:mas):real;
var s:real; i:integer;
begin
s:=0;
for i:=1 to 5 do
s:=s+a[i];
OBR:=s;
end;
function nomer(var f:ftip; n:integer):integer;
var j:integer; a:mas; min:real; l:integer; g:mas1;
begin
reset(f);
for j:=1 to n do
begin
read(f,a);
g[j]:=OBR(a);
end;
min:=g[1];
for j:=2 to n do
begin
if min>g[j] then min:=g[j];
l:=j;
end;
nomer:=l;
closefile(f);
end;
procedure vivod(var f:ftip; k:integer; n:integer);
var a:mas; i:integer;
begin
reset(f);
seek(f,k-1);
read(f,a);
for i:=1 to 5 do
writeln(a[i]:6:2);
closefile(f);
end;
end.меню Код:
program Kuzinp;
{$APPTYPE CONSOLE}
uses
SysUtils,
Unit in 'Unit1.pas';
var a:mas; name, name1:string; f:ftip; f1:textfile; n,k,variant,l:integer;
begin
repeat
writeln('1-form_tipfile');
writeln('2-txt_from_tip');
writeln('3-nomer');
writeln('4-vivod');
writeln('5-выход');
writeln('выберете вариант');
readln(variant);
case variant of
1: begin
writeln('введите название типизированого файла');
readln(name);
assignfile(f,name);
writeln('введите количество компонент');
readln(n);
form_tipfile(f,n);
end;
2:begin
writeln('введите название текстового файла');
readln(name1);
assignfile(f1,name1);
txt_from_tip(f1,f);
end;
3:begin
nomer(f,n);
writeln('минимум');
writeln(l);
end;
4:begin
writeln('введите номер компоненты');
readln(k);
vivod(f,k,n);
end;
5: halt else writeln('нет варианта, повторите')
end;
until false;
end.Заранее благодарен вам! Админ: используем теги по назначению! Последний раз редактировалось Admin, 07.05.2014 в 19:25. |
|
#2
|
|||
|
|||
|
Если я правильно понял - Вам нужно из несколько Memo записать в один файл.
Для этого Вам надо составить по сути еще один memo, который можно скрыть, а потом его записывать в файл. или через переменную Код:
var s: Tstringlist;
i: integer;
begin
s:=TstringList.Create;
for i:= 0 to memo1.Lines.Count-1 do s.Add(memo1.Lines[i]);
{ в нужном порядке пишите строки }
for i:= 0 to memo2.Lines.Count-1 do s.Add(memo2.Lines[i]);
for i:= 0 to memo3.Lines.Count-1 do s.Add(memo3.Lines[i]);
s.SaveToFile('ИМЯ ФАЙЛА');
s.Free;
end; |
|
#3
|
||||
|
||||
|
Да нет, похоже ТСу нужно собрать типизированный файл (ФПД) где в мемо формируются поля записей: один мемо - одно поле, текстовым он становится лишь во втором пункте, во время считывания сохранённых записей. Иначе это уже не файл прямого доступа
|
|
#4
|
|||
|
|||
|
Цитата:
Мне нужно записать произвольное количество массивов в типизированный. Из одного memo сделать это нельзя? |
|
#5
|
||||
|
||||
|
Я за него. Можно, но только если один массив из произвольного кол-ва это одна запись. т.е.
Код:
... type mas = array [0..4] of real; ... var f : file of mas; buf: mas; i: integer; begin for i:= 0 to High(buf) do buf[i]:= StrToFloat(Memo1.Lines[i]); AssignFile(f,'File Name'); try Reset(f); Seek(f, 1); // первая запись Write(f,buf); // запись Read(f, buf); // чтение // ... finally CloseFile(f); end; end; |
|
#6
|
|||
|
|||
|
Цитата:
А как это можно привязать к button? И, получается, мы в данной процедуре выбираем файл из имеющихся, чтобы туда сохранить массивы? |
|
#7
|
||||
|
||||
|
Возник вопрос - а как массив должен заполняться, вручную, методом набора в мемо, или автоматом, рендомно?
|
|
#8
|
|||
|
|||
|
Цитата:
Набираем в мемо один массив из пяти значений - сохраняем в файл. Стираем, по идее, набираем новый - сохраняем. |