|
|
Регистрация | << Правила форума >> | 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
|
|||
|
|||
Цитата:
Набираем в мемо один массив из пяти значений - сохраняем в файл. Стираем, по идее, набираем новый - сохраняем. |