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

Работа с текстовым файлом

20.11.2013, 11:22. Показов 1117. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вариант № 19
Создать текстовой файл, содержащий следующую информацию о каждом из студенте первого курса:
* фамилия,
* группа,
* оценка1,
* оценка2,
* оценка3.
Первая оценка - экзамен по высшей математике, вторая - по физике, третья по истории России. Написать программу, которая выдает следующую информацию: название предмета, который был сдан лучше всего.

Нужно сначала найти среднее число всех оценок студентов по отдельным предметам, потом найти максимальное среди них. Но вот у меня не получается сложить все числа в столбце (компонент StringGrid) находится среднее значение для каждой цифры кто может помогите Вот код и само приложение!Приложение.rar
Кликните здесь для просмотра всего текста
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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;
 
type
s30=string[30];
  p=record
    familia:string[30];
    group:string[30];
    mat:integer;
    viz:integer;
    istor:integer;
  end;
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Edit1: TEdit;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Label1: TLabel;
    Button1: TButton;
    StringGrid2: TStringGrid;
    procedure Button6Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
var
  m,f,h,i,sum:integer;
begin
  for i:=1 to stringgrid1.ColCount-1 do
begin
  m:=strtoint(StringGrid1.Cells[2,i]);
  f:=strtoint(StringGrid1.Cells[3,i]);
  h:=strtoint(StringGrid1.Cells[4,i]);
  StringGrid2.Cells[0,i]:=floattostr((m)/2);
  StringGrid2.Cells[1,i]:=floattostr((f)/2);
  StringGrid2.Cells[2,i]:=floattostr((h)/2);
end;
end;
 
procedure TForm1.Button3Click(Sender: TObject);
var i:integer;
begin
  stringGrid1.RowCount:=stringgrid1.RowCount+1;
  for i:=0 to 4 do
    stringgrid1.Cells[i,stringgrid1.RowCount-1]:='';
end;
 
procedure TForm1.Button4Click(Sender: TObject);
var
  m,f,h,i,sum:integer;
begin
  for i:=1 to stringgrid1.RowCount-1 do
begin
  m:=strtoint(StringGrid1.Cells[2,i]);
  f:=strtoint(StringGrid1.Cells[3,i]);
  h:=strtoint(StringGrid1.Cells[4,i]);
  StringGrid1.Cells[5,i]:=floattostr((m+f+h)/3);
end;
end;
 
procedure TForm1.Button5Click(Sender: TObject);
var
i:integer;
z:p;
f:file of p;
begin
 i:=1;
 system.Assign(f,edit1.Text);
 reset(f);
 while not Eof(f) do
begin
  read(f,z);
  stringgrid1.Cells[0,i]:=z.familia;
  stringgrid1.Cells[1,i]:=z.group;
  stringgrid1.Cells[2,i]:=inttostr(z.mat);
  stringgrid1.Cells[3,i]:=inttostr(z.viz);
  stringgrid1.Cells[4,i]:=inttostr(z.istor);
  stringgrid1.RowCount:=i+1;
  i:=i+1
end;
system.Close(f);
end;
 
procedure TForm1.Button6Click(Sender: TObject);
var
i:integer;
s:string;
z:p;
f:file of p;
begin
 s:=edit1.Text;
 System.Assign(f,s);
 rewrite(f);
 for i:= 1 to stringgrid1.RowCount do
 if  stringgrid1.Cells[0,i]<>'' THEN
 begin
 z.familia:=stringgrid1.Cells[0,i];
 z.group:=stringgrid1.Cells[1,i];
 z.mat:=strtoint(stringgrid1.Cells[2,i]);
 z.viz:=strtoint(stringgrid1.Cells[3,i]);
 z.istor:=strtoint(stringgrid1.Cells[4,i]);
 write(f,z);
 end;
System.Close(f);
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  StringGrid1.Cells[0,0]:='Фамилия';
  StringGrid1.Cells[1,0]:='Группа';
  StringGrid1.Cells[2,0]:='Оценка математика';
  StringGrid1.Cells[3,0]:='Оценка физика';
  StringGrid1.Cells[4,0]:='Оценка история России';
  StringGrid1.Cells[5,0]:='Средний балл';
  StringGrid2.Cells[0,0]:='Оценка математика';
  StringGrid2.Cells[1,0]:='Оценка физика';
  StringGrid2.Cells[2,0]:='Оценка история России';
end;
 
end.


Работаю в Embarcadero RAD Studio XE!
Заранее спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.11.2013, 11:22
Ответы с готовыми решениями:

Работа с текстовым файлом
Помогите,пожалуйста. Нужно разработать программу, которая: а) создает текстовый файл File1 с...

Работа с текстовым файлом
Задано n ключевых слов. Разработать программу, которая: а) создает текстовый файл TF3_1 с...

Работа с текстовым файлом
Приветствую! Прошу помощи. Как звучит задание: нужно написать программу, которая создает файл с...

Работа с текстовым файлом
Сформируйте массив из N чисел,значения элементов введите из внешнего файла.Напишите...

15
692 / 509 / 238
Регистрация: 02.10.2012
Сообщений: 1,741
20.11.2013, 12:03 2
в чем проблема сложить столбец?
Delphi
1
2
for i:=1 to StringGrid1.ColCount-1 do
sum:=sum+strtoint(StringGrid1.Cells[0,i]);
вот можно это сделать так

Добавлено через 3 минуты
а среднее этого столбца соответственно
Delphi
1
sred:=sum/(StringGrid1.ColCount-1);
1
2 / 2 / 1
Регистрация: 05.12.2012
Сообщений: 77
20.11.2013, 12:34  [ТС] 3
Цитата Сообщение от Immo Посмотреть сообщение
в чем проблема сложить столбец?
Delphi
1
2
for i:=1 to StringGrid1.ColCount-1 do
sum:=sum+strtoint(StringGrid1.Cells[0,i]);
вот можно это сделать так

Добавлено через 3 минуты
а среднее этого столбца соответственно
Delphi
1
sred:=sum/(StringGrid1.ColCount-1);
Это получается мне в процедуре
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
procedure TForm1.Button1Click(Sender: TObject);
var
  m,f,h,i,sum:integer;
begin
  for i:=1 to stringgrid1.ColCount-1 do
begin
  m:=strtoint(StringGrid1.Cells[2,i]);
  f:=strtoint(StringGrid1.Cells[3,i]);
  h:=strtoint(StringGrid1.Cells[4,i]);
  StringGrid2.Cells[0,i]:=floattostr((m)/2);
  StringGrid2.Cells[1,i]:=floattostr((f)/2);
  StringGrid2.Cells[2,i]:=floattostr((h)/2);
end;
end;
вот так изменить?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm1.Button1Click(Sender: TObject);
var
  sum1,sred1,sum2,sred2,sum3,sred3,i:integer;
begin
  for i:=1 to StringGrid1.ColCount-1 do
  sum1:=sum1+strtoint(StringGrid1.Cells[2,i]);
  sum2:=sum2+strtoint(StringGrid1.Cells[3,i]);
  sum3:=sum3+strtoint(StringGrid1.Cells[4,i]);
  sred1:=sum1/(StringGrid1.ColCount-1);
  sred2:=sum2/(StringGrid1.ColCount-1);
  sred3:=sum3/(StringGrid1.ColCount-1);
  StringGrid2.Cells[0,i]:=floattostr(sred1);
  StringGrid2.Cells[1,i]:=floattostr(sred2);
  StringGrid2.Cells[2,i]:=floattostr(sred3);
end;
0
692 / 509 / 238
Регистрация: 02.10.2012
Сообщений: 1,741
20.11.2013, 12:37 4
sred тип риал, потому что при деление, мы получим уже не целое число
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
procedure TForm1.Button1Click(Sender: TObject);
var
  sum1, sum2, sum3, i: Integer;
  sred1, sred2, sred3: Real;
begin
  for i:=1 to StringGrid1.ColCount-1 do 
    Begin
     sum1:=sum1+strtoint(StringGrid1.Cells[2,i]);
     sum2:=sum2+strtoint(StringGrid1.Cells[3,i]);
     sum3:=sum3+strtoint(StringGrid1.Cells[4,i]);
  end;
 
//вычислили сумму, и вне цикла находим ее среднее значение
     sred1:=sum1/(StringGrid1.ColCount-1);
     sred2:=sum2/(StringGrid1.ColCount-1);
     sred3:=sum3/(StringGrid1.ColCount-1);
 
//записываем эти значения во вторую таблицу
  for i:=1 to StringGrid1.ColCount-1 do 
    Begin
     StringGrid2.Cells[0,i]:=floattostr(sred1);
     StringGrid2.Cells[1,i]:=floattostr(sred2);
     StringGrid2.Cells[2,i]:=floattostr(sred3);
   end;
end;
1
2 / 2 / 1
Регистрация: 05.12.2012
Сообщений: 77
20.11.2013, 12:50  [ТС] 5
Цитата Сообщение от Immo Посмотреть сообщение
sred тип риал, потому что при деление, мы получим уже не целое число
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
procedure TForm1.Button1Click(Sender: TObject);
var
  sum1, sum2, sum3, i: Integer;
  sred1, sred2, sred3: Real;
begin
  for i:=1 to StringGrid1.ColCount-1 do 
    Begin
     sum1:=sum1+strtoint(StringGrid1.Cells[2,i]);
     sum2:=sum2+strtoint(StringGrid1.Cells[3,i]);
     sum3:=sum3+strtoint(StringGrid1.Cells[4,i]);
  end;
 
//вычислили сумму, и вне цикла находим ее среднее значение
     sred1:=sum1/(StringGrid1.ColCount-1);
     sred2:=sum2/(StringGrid1.ColCount-1);
     sred3:=sum3/(StringGrid1.ColCount-1);
 
//записываем эти значения во вторую таблицу
  for i:=1 to StringGrid1.ColCount-1 do 
    Begin
     StringGrid2.Cells[0,i]:=floattostr(sred1);
     StringGrid2.Cells[1,i]:=floattostr(sred2);
     StringGrid2.Cells[2,i]:=floattostr(sred3);
   end;
end;
Странно но при расчете выдает ошибку мол "" is not a valid integer value. Это как я понял не правильно тип задан да?
0
692 / 509 / 238
Регистрация: 02.10.2012
Сообщений: 1,741
20.11.2013, 12:57 6
это значит что программа считывает по очереди данные с стрингрида, и в какой то ячейки нету числа.
На какую конкретно строчку ругается?
1
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
20.11.2013, 12:59 7
Программа мне кажется составлена совсем не по условию.
Нужно создать текстовый файл примерно такого содержания
Иванов 1234 4 5 5
Петров 1234 3 4 3
Панова 1235 5 5 5
Адамова 1235 5 4 5
Пауков 1234 4 4 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
{$R *.dfm}
const fname='111.txt';//файл в папке с программой
//сделаем заготовку таблицы
procedure TForm1.FormCreate(Sender: TObject);
begin
with StringGrid1 do
 begin
  fixedcols:=0;
  fixedrows:=0;
  colcount:=5;
  //rowcount:=1;
  defaultcolwidth:=80;
  width:=410;
 { }
 end; 
end;
procedure TForm1.Button1Click(Sender: TObject);
var n,i,j,sm,jmx,mx:integer;
    s:string;
    t:textfile;
begin
//посчитаем количество записей в файле
assignfile(t,fname);
reset(t);
n:=0;
while not eof(t) do
 begin
  readln(t,s);
  n:=n+1;
 end;
with StringGrid1 do
 begin
  RowCount:=n;
  //грузим файл в нулевой столбец таблицы
  Cols[0].LoadFromFile(fname);
  //разбиваем строки по колонкам
  for i:=0 to n-1 do
   begin
    Rows[i].Delimiter:=' ';   //задаем символ-разделитель столбцов
    Rows[i].DelimitedText:=StringGrid1.Cells[0,i];
   end;
  //добавим фиксированную строку для заголовка 
  FixedRows:=1;
  RowCount:=n+1;
  for i:=n downto 1 do
  Rows[i]:=Rows[i-1];
  cells[0,0]:='Фамилия';
  cells[1,0]:='Группа';
  cells[2,0]:='Выс.математ.';
  cells[3,0]:='Физика';
  cells[4,0]:='Ист.России';
 end;
mx:=0;
jmx:=-1;
for j:=2 to 4 do
 begin
  sm:=0;
  for i:=1 to n do
  sm:=sm+strToint(StringGrid1.Cells[j,i]);
  if sm>mx then
   begin
    mx:=sm;
    jmx:=j
   end;
end;
case jmx of
2:s:='высшая математика';
3:s:='физика';
4:s:='история России';
end;
Edit1.Text:='Лучше всего сдан предмет '+s;
end;
1
2 / 2 / 1
Регистрация: 05.12.2012
Сообщений: 77
20.11.2013, 13:08  [ТС] 8
Цитата Сообщение от Immo Посмотреть сообщение
это значит что программа считывает по очереди данные с стрингрида, и в какой то ячейки нету числа.
На какую конкретно строчку ругается?
Но он не указывает на строку просто ошибка!
Приложение.rar
0
2 / 2 / 1
Регистрация: 05.12.2012
Сообщений: 77
20.11.2013, 13:10  [ТС] 9
Цитата Сообщение от Puporev Посмотреть сообщение
Программа мне кажется составлена совсем не по условию.
Нужно создать текстовый файл примерно такого содержания

положить его в паку с программой и написать примерно так
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
{$R *.dfm}
const fname='111.txt';//файл в папке с программой
//сделаем заготовку таблицы
procedure TForm1.FormCreate(Sender: TObject);
begin
with StringGrid1 do
 begin
  fixedcols:=0;
  fixedrows:=0;
  colcount:=5;
  //rowcount:=1;
  defaultcolwidth:=80;
  width:=410;
 { }
 end; 
end;
procedure TForm1.Button1Click(Sender: TObject);
var n,i,j,sm,jmx,mx:integer;
    s:string;
    t:textfile;
begin
//посчитаем количество записей в файле
assignfile(t,fname);
reset(t);
n:=0;
while not eof(t) do
 begin
  readln(t,s);
  n:=n+1;
 end;
with StringGrid1 do
 begin
  RowCount:=n;
  //грузим файл в нулевой столбец таблицы
  Cols[0].LoadFromFile(fname);
  //разбиваем строки по колонкам
  for i:=0 to n-1 do
   begin
    Rows[i].Delimiter:=' ';   //задаем символ-разделитель столбцов
    Rows[i].DelimitedText:=StringGrid1.Cells[0,i];
   end;
  //добавим фиксированную строку для заголовка 
  FixedRows:=1;
  RowCount:=n+1;
  for i:=n downto 1 do
  Rows[i]:=Rows[i-1];
  cells[0,0]:='Фамилия';
  cells[1,0]:='Группа';
  cells[2,0]:='Выс.математ.';
  cells[3,0]:='Физика';
  cells[4,0]:='Ист.России';
 end;
mx:=0;
jmx:=-1;
for j:=2 to 4 do
 begin
  sm:=0;
  for i:=1 to n do
  sm:=sm+strToint(StringGrid1.Cells[j,i]);
  if sm>mx then
   begin
    mx:=sm;
    jmx:=j
   end;
end;
case jmx of
2:s:='высшая математика';
3:s:='физика';
4:s:='история России';
end;
Edit1.Text:='Лучше всего сдан предмет '+s;
end;
дело в том чтобы нужно создать текстовый файл уже в приложении сохранить и с ним работать!
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
20.11.2013, 13:17 10
Я как-то больше привык доверять своим глазам, а написано так.
Цитата Сообщение от Lambodiablo Посмотреть сообщение
Создать текстовой файл, содержащий следующую информацию о каждом из студенте первого курса:
Цитата Сообщение от Lambodiablo Посмотреть сообщение
Написать программу, которая выдает следующую информацию: название предмета, который был сдан лучше всего
1
2 / 2 / 1
Регистрация: 05.12.2012
Сообщений: 77
20.11.2013, 13:24  [ТС] 11
Цитата Сообщение от Puporev Посмотреть сообщение
Я как-то больше привык доверять своим глазам, а написано так.
Я понимаю но преподаватель сказал делать именно через заполнение в StringGrid и сохранении в .txt с последующим расчетом!
0
692 / 509 / 238
Регистрация: 02.10.2012
Сообщений: 1,741
20.11.2013, 13:43 12
я пока не дома помочь не могу, но если такая ошибка проверьте весь ли диапазон заполнен, т.е если при создании вы указали длину столбца 10 элементов, то все эти элементы должны быть заполнены
1
2 / 2 / 1
Регистрация: 05.12.2012
Сообщений: 77
20.11.2013, 13:52  [ТС] 13
Цитата Сообщение от Immo Посмотреть сообщение
я пока не дома помочь не могу, но если такая ошибка проверьте весь ли диапазон заполнен, т.е если при создании вы указали длину столбца 10 элементов, то все эти элементы должны быть заполнены
поменял длину на 2 все заполнил ошибка осталась!
0
692 / 509 / 238
Регистрация: 02.10.2012
Сообщений: 1,741
20.11.2013, 20:02 14
если ввожу все значения, все работает
Миниатюры
Работа с текстовым файлом  
1
692 / 509 / 238
Регистрация: 02.10.2012
Сообщений: 1,741
20.11.2013, 20:05 15
и как я понял, во второй таблице достаточно по 1 значению, убери что у нас было в цикле, и место i-элемента поставь единички
Delphi
1
2
3
  StringGrid2.Cells[0,1]:=floattostr(sred1);
  StringGrid2.Cells[1,1]:=floattostr(sred2);
  StringGrid2.Cells[2,1]:=floattostr(sred3);
1
2 / 2 / 1
Регистрация: 05.12.2012
Сообщений: 77
21.11.2013, 13:46  [ТС] 16
Всем спасибо все я сделал!
0
21.11.2013, 13:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.11.2013, 13:46
Помогаю со студенческими работами здесь

Работа с текстовым файлом
Что надо сделать в Delphi, чтобы без появления диалогового окна, нашел указанный текстовый файл,...

Работа с текстовым файлом
В текстовом файле вычислить количество положительных чисел

Работа с текстовым файлом...
Ув. форумчане подскажите как осуществить. Программа в файле .cfg ищет строку &quot;connect 127.0.0.1&quot;,...

Работа с текстовым файлом
Код procedure TForm1.BitBtn1Click(Sender: TObject); Var F1,F2:TextFile; i,k:integer; begin...

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

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


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

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