Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 07.05.2014, 19:22
Koontz Koontz вне форума
Прохожий
 
Регистрация: 07.05.2014
Сообщения: 4
Версия Delphi: Delphi Turbo
Репутация: 10
Восклицание Нужна помощь! Пожалуйста

Требуется помощь. Буду очень признателен.
Есть задание:
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.
Собственно сама моя огромная просьба. Надо реализовать эти процедуры через интерфейс в Delphi, с использованием нескольких Memo. Первый же мой камень преткновения - не могу из Memo ввести в файл несколько компонент. Если вы решили помочь бедному студенту, то можно все написать максимально просто?
Заранее благодарен вам!

Админ: используем теги по назначению!

Последний раз редактировалось Admin, 07.05.2014 в 19:25.
Ответить с цитированием
  #2  
Старый 08.05.2014, 11:44
draginimp draginimp вне форума
Прохожий
 
Регистрация: 02.04.2014
Сообщения: 37
Версия Delphi: delphi 7
Репутация: 10
По умолчанию

Если я правильно понял - Вам нужно из несколько 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  
Старый 08.05.2014, 12:18
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Да нет, похоже ТСу нужно собрать типизированный файл (ФПД) где в мемо формируются поля записей: один мемо - одно поле, текстовым он становится лишь во втором пункте, во время считывания сохранённых записей. Иначе это уже не файл прямого доступа
Ответить с цитированием
  #4  
Старый 10.05.2014, 11:29
Koontz Koontz вне форума
Прохожий
 
Регистрация: 07.05.2014
Сообщения: 4
Версия Delphi: Delphi Turbo
Репутация: 10
По умолчанию

Цитата:
Сообщение от draginimp
Если я правильно понял - Вам нужно из несколько 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;

Мне нужно записать произвольное количество массивов в типизированный. Из одного memo сделать это нельзя?
Ответить с цитированием
  #5  
Старый 10.05.2014, 12:06
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Я за него. Можно, но только если один массив из произвольного кол-ва это одна запись. т.е.
Код:
...
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  
Старый 10.05.2014, 20:23
Koontz Koontz вне форума
Прохожий
 
Регистрация: 07.05.2014
Сообщения: 4
Версия Delphi: Delphi Turbo
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Я за него. Можно, но только если один массив из произвольного кол-ва это одна запись. т.е.
Код:
...
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;

А как это можно привязать к button?
И, получается, мы в данной процедуре выбираем файл из имеющихся, чтобы туда сохранить массивы?
Ответить с цитированием
  #7  
Старый 11.05.2014, 13:14
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Возник вопрос - а как массив должен заполняться, вручную, методом набора в мемо, или автоматом, рендомно?
Ответить с цитированием
  #8  
Старый 11.05.2014, 21:01
Koontz Koontz вне форума
Прохожий
 
Регистрация: 07.05.2014
Сообщения: 4
Версия Delphi: Delphi Turbo
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Возник вопрос - а как массив должен заполняться, вручную, методом набора в мемо, или автоматом, рендомно?

Набираем в мемо один массив из пяти значений - сохраняем в файл. Стираем, по идее, набираем новый - сохраняем.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:48.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter