Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
2 / 2 / 0
Регистрация: 04.12.2009
Сообщений: 95
1

Работа с файлами

12.03.2010, 19:52. Показов 1002. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста, уже так запутался, не пойму корректно ли работает моя программа, вот условие
Багаж пассажира характеризуется количеством вещей и
общим весом вещей. Дан файл f, содержащий информацию о
багаже нескольких пассажиров, информация о багаже каждого
отдельного пассажира представляет собой соответствующую
пару чисел. Найти багаж, средний вес одной вещи в котором
отличается не более чем на 0,3 кг от общего среднего веса
вещи. Вроде все правильно, если нет укажите на ошибку и как исправить, саму прогу тоже выложил
Вот код
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;
 
type
  TForm1 = class(TForm)
    g1: TStringGrid;
    Button1: TButton;
    Button2: TButton;
    g2: TStringGrid;
    Button3: TButton;
    OpenDialog1: TOpenDialog;
    Memo1: TMemo;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button4: TButton;
    SaveDialog1: TSaveDialog;
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
  Const m=2; n=3;
  Type bagag=record
  name:shortstring;
  kol:integer;
  ves: real;
  end;
  Var f:file of bagag;
implementation
 
{$R *.dfm}
 
procedure TForm1.FormCreate(Sender: TObject);
Var i,j:integer; //Номерация
begin
For i:=1 to n do
g1.Cells[0,i]:=inttostr(i);
g1.Cells[1,0]:='Багаж';
g1.Cells[2,0]:=' Вес';
g1.Cells[3,0]:='Количество вещей';
For i:=0 to n do
g1.cells[1,i+1]:=' Багаж № '+inttostr(i+1);
 
 
end;
procedure TForm1.Button2Click(Sender: TObject);
var i,j:integer;  temp:bagag;//Создание файла
begin
AssignFile(f,'1.dat');
Rewrite(f);
for i:=1 to g1.RowCount-1 do
begin
temp.name:=g1.cells[1,i];
temp.ves:=strtofloat(g1.Cells[2,i]);
temp.kol:=strtoint(g1.Cells[3,i]);
 
write(f,temp);
   end;
CloseFile(f);
  end;
 
procedure TForm1.Button3Click(Sender: TObject);
begin // Загрузка файла
 
end;
 
procedure TForm1.Button1Click(Sender: TObject);
Var i,j,k,kol:integer; sum,tmp,obsum:real; temp:bagag;
begin  // обработка файла
AssignFile(f,'1.dat');
reset(f);
kol:=0; sum:=0; obsum:=1; k:=0;   tmp:=1;
While not EOF(f) do
begin
read(f,temp);
 //ищем сумму вещей
sum:=sum+temp.ves;
edit1.Text:=floattostr(sum);
//ищем количество вещей
Kol:=kol+temp.kol;
edit2.Text:=inttostr(kol);
// средний веc одной вещи
obsum:=sum/kol;
edit3.Text:=floattostr(obsum);
tmp:=(temp.ves/temp.kol)-obsum;
// Проверяем на отличен  не более чем на 0,3 к
if tmp<=0.3 then
k:=k+1;
g2.Cells[0,1]:=temp.name;
     end;
CloseFile(f);
    end;
 
procedure TForm1.Button4Click(Sender: TObject);
var i,j:integer;// очишаем результат
begin
for I:=1 to n do
for j:=1 to n do
g2.Cells[0,i]:=' ';
end;
 
end.
Вложения
Тип файла: rar Задание 2.rar (201.0 Кб, 25 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.03.2010, 19:52
Ответы с готовыми решениями:

Работа с файлами , хотелось бы с windows system файлами
всем привет, нужна интересная идея по программированию, работа с файлами , хотелось бы с windows...

Работа с файлами(Запись,чтение,работа с данными)
Здравствуйте, никак не могу осилить файлы... Для начала вот само задание: В справочной автовокзала...

Лабораторная работа №5. Работа с файлами и алгоритмы сортировки
1. Написать функцию Load для считывания из текстового файла (например, Workers.txt) информации о...

Работа с файлами, чтение/работа со строкой
Доброго времени суток. Начал работать с C++ Builder 6. Есть текстовый файл .txt с различными...

9
2 / 2 / 0
Регистрация: 04.12.2009
Сообщений: 95
13.03.2010, 11:28  [ТС] 2
Ну что не кто не проверит?

Добавлено через 12 часов 37 минут
Ну проверить кто-то, в понедельник уже сдавать, а нужно знать коректо ли работает...
0
306 / 187 / 26
Регистрация: 14.02.2010
Сообщений: 544
13.03.2010, 16:14 3
Дан файл f, содержащий информацию о багаже нескольких пассажиров
А где в Вашем коде разделение на пассажиров?
Delphi
1
2
    // средний веc одной вещи
    obsum := sum/kol;
и все это в цикле, а не по его завершению - получаете для первой итерации не средний вес, а фактически вес первой вещи, на второй итерации - средний вес первых двух, и так далее...

далее, наверное, и продолжать не стоит, т.к. Ваше решение абсолютно не соответствует задаче.
0
2 / 2 / 0
Регистрация: 04.12.2009
Сообщений: 95
13.03.2010, 16:22  [ТС] 4
Помогите исправтть тогда...
0
306 / 187 / 26
Регистрация: 14.02.2010
Сообщений: 544
13.03.2010, 16:48 5
тогда конкретизируйте, что понимается под "информация о багаже представляет собой соответствующую пару чисел". Что именно понимается под числами?
0
2 / 2 / 0
Регистрация: 04.12.2009
Сообщений: 95
13.03.2010, 17:07  [ТС] 6
То есть ВЕС Количеств вещей.
0
306 / 187 / 26
Регистрация: 14.02.2010
Сообщений: 544
13.03.2010, 17:30 7
Ваше объяснение ничего не прибавило. И так ясно, что это вес и количество. И вряд ли имя.
Короче, если понимается, что для каждого пассажира (багажа) имеется в файле единственная запись, то Вашу процедуру обработки кнопки OK я вижу так
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
procedure TForm1.OkBtnClick(Sender: TObject);
var
  total_kol: Word;
  total_ves: Real;
 
  rec: TBagag;
  f: file of TBagag;
begin  // обработка файла
  AssignFile(f, ExtractFilePath(Application.ExeName) + '1.dat');
  try
    Reset(f);
  except
    MessageBox(Handle, PChar('Нет файла ' + myPath + '1.dat'), nil, MB_ICONERROR);
    Exit; // судя из описания AssignFile надо было бы сделать CloseFile, однако, это приводит к ошибке
          // лучше бы сначала проверить существование файла, хотя и это не избавит от всех возможных ошибок
  end;
 
  total_kol := 0;
  total_ves := 0;
 
  while not EOF(f) do begin
    read(f, rec);
    total_kol := total_kol + rec.kol;
    total_ves := total_ves + rec.ves;
  end;
 
  if total_kol > 0 then
    total_ves := total_ves / total_kol // лучше, конечно, во избежание путаницы, завести дополнительную переменную, но это уж сами
  else
    total_ves := 0;
 
  // if total_ves = 0 then сообщить об ошибке ???
 
  Reset(f);
  while not EOF(f) do begin
    read(f, rec);
    if abs(total_ves - rec.ves / rec.kol) <= 0.3 then begin
      // вывод куда надо
    end;
  end;
 
  CloseFile(f);
end;
код немного поменян, но уж такая привычка.
в любом случае, пока не прочитаете весь файл, средний вес всего багажа неизвестен.
можно применить список, куда писать полученные данные, но тогда лучше уж использовать указатели, впрочем для Вашего задания, это, скорее всего излишества.
И еще совет: во всех процедурах, использующих сетку, лучше не обращаться через константы, а через RowCount / ColCount. Или, в крайнем случае, выставлять эти сеточные величины где-то в динамике на свои константы, а не использовать заданное в конструкторе.
А константы лучше применять, скажем для обращения к колонкам сетки, т.е., например, colName = 1, colVes = 2. Тогда строка вида Cell[colName, row_idx] будет нагляднее, чем Cell[1, row_idx], да и в случае, если решите переместить колонку в другое место, поможет.
MyPath - это строка, полученная путем ExtractFilePath(Application.ExeName)
1
2 / 2 / 0
Регистрация: 04.12.2009
Сообщений: 95
13.03.2010, 20:01  [ТС] 8
kukuruku310, если можно киньте программой, а то что-то переделываю но все равно не так. Спасибо.
0
306 / 187 / 26
Регистрация: 14.02.2010
Сообщений: 544
13.03.2010, 23:56 9
Ловите. Только у меня Delphi 5, поэтому могут быть траблы с именами модулей. Но, сколько помню, в вашем примере использован (кстати совершенно ненужно) только Variants, так что все должно быть нормально. С ANSI-строками в DFM все версии Delph'ей, насколько знаю, работают без проблем.
Вложения
Тип файла: rar ловите.RAR (3.7 Кб, 22 просмотров)
0
306 / 187 / 26
Регистрация: 14.02.2010
Сообщений: 544
14.03.2010, 15:02 10
и еще, как-то сразу упустил - при заполнении левой таблицы из файла надо добавить контроль числа строк - примерно как для правой таблицы
0
14.03.2010, 15:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.03.2010, 15:02
Помогаю со студенческими работами здесь

Работа с файлами
Здравствуйте помогите написать програмку, которая бы создавала два файла ( имя мы должны написать...

Работа с файлами!
В каждой строке записано произвольное количество чисел, записанных в форме f. Сформировать новый...

Работа с файлами C++
Доброго времени суток. Написал программу с выводом в файл, но она выводит совсем левое число,...

Работа с файлами в С++
Суть заключается в том, что мне нужно открыть файл, из него считать строку, выяснить максимальную...

Работа с файлами на С++
Как сохранить результат вычислений на текстовом файле? Я пробовал открыт текстовый файл в начале...

Работа с файлами
Всем привет! Начал изучать android, пока моим достижением стал собственный калькулятор. Сегодня...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru