Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.64/56: Рейтинг темы: голосов - 56, средняя оценка - 4.64
3 / 1 / 0
Регистрация: 23.11.2012
Сообщений: 35
1

Чтение чисел из файла. Чтение после конца потока невозможно

07.12.2014, 02:15. Просмотров 10868. Ответов 4
Метки нет (Все метки)

Товарищи, помогите.
В Pascal'e я не силен, так что не бейте меня ногами, но есть задача: написать обычную программу для расчета некоторых параметров.
Однако я решил сделать все изподвыподвыверта, обзаведясь таким надежным помощником как Google.

Вот часть программы:
Кликните здесь для просмотра всего текста
Pascal
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
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
Program RGR;
Uses Crt;
Var t:file of real; 
tn,tpm,tr,tmo,dtn,dts,dtw,dte,dtch,H,R1,RP,R2,R3,R4,R5,RR:real;
Q1T1,Q1T2,Q1T3,Q1TR,Q1C1,Q1C2,Q1C3,Q1CR,Q11,Q12,Q13,Q1R:real; otvet,y:char;
Label m1,m2;
 
 
Procedure Temperature(var tn:real);
Var m,d:integer; tsm,tam:real;
Begin
writeln('---------Определение наружной расчетной температуры---------');
write('Укажите массивность ограждения: ');
writeln('1 - Массивное или средней массивности; ', '2 - Легкое.');
readln(m);
writeln('Введите требуемые температуры, зависящие от места расположения холодильника');
write('Среднемесячная температура самого жаркого месяца: ');
readln(tsm);
write('Температура абсолютноо максимума: ');
readln(tam);
if m=1 then d:=0 else d:=10;
tn:=0.6*tsm+0.4*tam+d;
End;
 
Procedure Kamera1(Var Q1T1,Q1C1,Q11:real);
Var Ln,Lr,Lmo,LK,BK:real; L1,L2,L3:array [1..10] of real; n1,n2,n3,i:integer;
Begin
writeln('---Расчет теплопритока от окружающего воздуха в камеру №1---');
write('Введите количество стен, сообщающихся с наружным воздухом: ');
readln(n1);
write('Введите длины наружных стен: ');
 for i:=1 to n1 do readln(L1[i]);
 Ln:=0;
 for i:=1 to n1 do Ln:=Ln+L1[i];
write('Введите количество участков стен, сообщающихся с рампой: ');
readln(n2);
write('Введите длины участков стен, сообщающихся с рампой: ');
 for i:=1 to n2 do readln(L2[i]);
 Lr:=0;
 for i:=1 to n2 do Lr:=Lr+L2[i];
write('Введите количество участков стен, сообщающихся с машинным отделением: ');
readln(n3);
write('Введите длины участков стен, сообщающихся с машинным отделением: ');
 for i:=1 to n3 do readln(L3[i]);
 Lmo:=0;
 for i:=1 to n3 do Lmo:=Lmo+L3[i];
write('Введите расчетную длину камеры: ');
readln(LK);
write('Введите расчетную ширину камеры: ');
readln(BK);
Q1T1:=(Ln*H*(tn-tpm)/R1)+(Lr*H*(tr-tpm)/R2)+(Lmo*H*0.7*(tmo-tpm)/R3)+
(LK*BK*0.7*(tn-tpm)/R4)+(LK*BK*(tn-tpm)/R5);
Q1C1:=((L1[1]*H*dtn+L1[2]*H*dtw)/R1)+LK*BK*dtch/R4;
Q11:=Q1T1+Q1C1;
End;
 
Procedure Kamera2(Var Q1T2,Q1C2,Q12:real);
Var Ln,Lr,Lmo,LK,BK:real; L1,L2,L3:array [1..10] of real; n1,n2,n3,i:integer;
Begin
writeln('---Расчет теплопритока от окружающего воздуха в камеру №2---');
write('Введите количество стен, сообщающихся с наружным воздухом: ');
readln(n1);
write('Введите длины наружных стен: ');
 for i:=1 to n1 do readln(L1[i]);
 Ln:=0;
 for i:=1 to n1 do Ln:=Ln+L1[i];
write('Введите количество участков стен, сообщающихся с рампой: ');
readln(n2);
write('Введите длины участков стен, сообщающихся с рампой: ');
 for i:=1 to n2 do readln(L2[i]);
 Lr:=0;
 for i:=1 to n2 do Lr:=Lr+L2[i];
write('Введите количество участков стен, сообщающихся с машинным отделением: ');
readln(n3);
write('Введите длины участков стен, сообщающихся с машинным отделением: ');
 for i:=1 to n3 do readln(L3[i]);
 Lmo:=0;
 for i:=1 to n3 do Lmo:=Lmo+L3[i];
write('Введите расчетную длину камеры: ');
readln(LK);
write('Введите расчетную ширину камеры: ');
readln(BK);
Q1T2:=(Ln*H*(tn-tpm)/R1)+(Lr*H*(tr-tpm)/R2)+(Lmo*H*(tmo-tpm)/R3)+
(LK*BK*0.7*(tn-tpm)/R4)+(LK*BK*(tn-tpm)/R5);
Q1C2:=((L1[1]*H*dtw+L1[2]*H*dts)/R1)+LK*BK*dtch/R4;
Q12:=Q1T2+Q1C2;
End;
 
Procedure Kamera3(Var Q1T3,Q1C3,Q13:real);
Var Ln,Lr,Lmo,LK,BK:real; L1,L2,L3:array [1..10] of real; n1,n2,n3,i:integer;
Begin
writeln('---Расчет теплопритока от окружающего воздуха в камеру №3---');
write('Введите количество стен, сообщающихся с наружным воздухом: ');
readln(n1);
write('Введите длины наружных стен: ');
 for i:=1 to n1 do readln(L1[i]);
 Ln:=0;
 for i:=1 to n1 do Ln:=Ln+L1[i];
write('Введите количество участков стен, сообщающихся с рампой: ');
readln(n2);
write('Введите длины участков стен, сообщающихся с рампой: ');
 for i:=1 to n2 do readln(L2[i]);
 Lr:=0;
 for i:=1 to n2 do Lr:=Lr+L2[i];
write('Введите количество участков стен, сообщающихся с машинным отделением: ');
readln(n3);
write('Введите длины участков стен, сообщающихся с машинным отделением: ');
 for i:=1 to n3 do readln(L3[i]);
 Lmo:=0;
 for i:=1 to n3 do Lmo:=Lmo+L3[i];
write('Введите расчетную длину камеры: ');
readln(LK);
write('Введите расчетную ширину камеры: ');
readln(BK);
Q1T3:=(Ln*H*(tn-tpm)/R1)+(Lr*H*(tr-tpm)/R2)+(Lmo*H*0.7*(tmo-tpm)/R3)+
(LK*BK*0.7*(tn-tpm)/R4)+(LK*BK*(tn-tpm)/R5);
Q1C3:=((L1[1]*H*dtn+L1[2]*H*dtw+L1[3]*H*dts)/R1)+LK*BK*dtch/R4;
Q13:=Q1T3+Q1C3;
End;
 
Procedure Rampa(Var Q1TR,Q1CR,Q1R:real);
Var Ln,Lmo,LR1,BR1,LR2,BR2:real; L1,L3:array [1..10] of real; n1,n3,i:integer;
Begin
writeln('---Расчет теплопритока от окружающего воздуха на рампу---');
write('Введите количество стен, сообщающихся с наружным воздухом: ');
readln(n1);
write('Введите длины наружных стен: ');
 for i:=1 to n1 do readln(L1[i]);
 Ln:=0;
 for i:=1 to n1 do Ln:=Ln+L1[i];
write('Введите количество участков стен, сообщающихся с машинным отделением: ');
readln(n3);
write('Введите длины участков стен, сообщающихся с машинным отделением: ');
 for i:=1 to n3 do readln(L3[i]);
 Lmo:=0;
 for i:=1 to n3 do Lmo:=Lmo+L3[i];
write('Введите расчетную длину 1-го участка рампы: ');
readln(LR1);
write('Введите расчетную ширину 1-го участка рампы: ');
readln(BR1);
write('Введите расчетную длину 2-го участка рампы: ');
readln(LR2);
write('Введите расчетную ширину 2-го участка рампы: ');
readln(BR2);
Q1TR:=(Ln*H*(tn-tr)/RR)+(Lmo*H*0.7*(tmo-tr)/RR)+
((LR1*BR1+LR2*BR2)*0.7*(tn-tr)/R4)+((LR1*BR1+LR2*BR2)*(tn-tr)/R5);
Q1CR:=((L1[1]*H*dtn+L1[2]*H*dte+L1[3]*H*dts+L1[3]*H*dtw)/RR)+
(LR1*BR1+LR2*BR2)*dtch/R4;
Q1R:=Q1TR+Q1CR;
End;
 
Begin
ClrScr;
Temperature(tn);
writeln('Наружная расчетная температура окружающего воздуха: ', tn:2:0);
write('Загрузить исходные данные из файла? ');
read(otvet);
if otvet=y then
Begin
write('Введите температуру воздуха в охлаждаемых помещениях: ');
readln(tpm);
write('Введите температуру воздуха на рампе: ');
readln(tr);
write('Введите температуру воздуха в машинном отделении: ');
readln(tmo);
write('Введите термическое сопротивление наружных стен камер: ');
readln(R1);
write('Введите термическое сопротивление перегородки между камерами: ');
readln(RP);
write('Введите термическое сопротивление участков стен камер, сообщающихся с рампой: ');
readln(R2);
write('Введите термическое сопротивление участков стен камер, сообщающихся с машинным отделением: ');
readln(R3);
write('Введите термическое сопротивление чердачного перекрытия: ');
readln(R4);
write('Введите термическое сопротивление перекрытия над проветриваемым подпольем: ');
readln(R5);
write('Введите термическое сопротивление наружных стен рампы: ');
readln(RR);
write('Введите расчетную высоту ограждений: ');
readln(H);
writeln('Введите избыточные разности температур солнечной радиации по сторонам света');
write('Север: ');
readln(dtn);
write('Юг: ');
readln(dts);
write('Запад: ');
readln(dtw);
write('Восток: ');
readln(dte);
writeln('Введите избыточную разность температур солнечной радиации для расчета теплопритока через чердачное перекрытие');
readln(dtch);
End
else 
Begin
assign(t, 'input.txt');
reset(t);
while not Eof(t) do
Begin
read(t,tpm,tr,tmo,R1,RP,R2,R3,R4,R5,RR,H,dtn,dts,dtw,dte,dtch);
End
End;
close(t);
 
Kamera1(Q1T1,Q1C1,Q11);
writeln('Теплоприток возникающий вследствие разности температур: ', Q1T1:5:1, ' Вт');
writeln('Теплоприток возникающий от действия солнечной радиации: ', Q1C1:5:1, ' Вт');
writeln('Суммарный теплоприток от окружающего воздуха', Q11:5:1, 'Вт');
Kamera2(Q1T2,Q1C2,Q12);
writeln('Теплоприток возникающий вследствие разности температур: ', Q1T2:5:1, ' Вт');
writeln('Теплоприток возникающий от действия солнечной радиации: ', Q1C2:5:1, ' Вт');
writeln('Суммарный теплоприток от окружающего воздуха', Q12:5:1, 'Вт');
Kamera3(Q1T3,Q1C3,Q13);
writeln('Теплоприток возникающий вследствие разности температур: ', Q1T3:5:1, ' Вт');
writeln('Теплоприток возникающий от действия солнечной радиации: ', Q1C3:5:1, ' Вт');
writeln('Суммарный теплоприток от окружающего воздуха', Q13:5:1, 'Вт');
Rampa(Q1TR,Q1CR,Q1R);
writeln('Теплоприток возникающий вследствие разности температур: ', Q1TR:5:1, ' Вт');
writeln('Теплоприток возникающий от действия солнечной радиации: ', Q1CR:5:1, ' Вт');
writeln('Суммарный теплоприток от окружающего воздуха', Q1R:5:1, ' Вт');
readln;
 
End.



Конкретно у меня не получается осуществить чтение данных из файла - строка 195. В процессе работы программы вылетает ошибка "Чтение после конца потока невозможно":
Кликните здесь для просмотра всего текста

Структура файла:
Кликните здесь для просмотра всего текста
-25,0 6,0 16,0 6,04 1,7 6,04 6,88 6,04 3,2 5,81 0,0 6,0 7,2 6,0 6,0


Спасибо за помощь.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.12.2014, 02:15
Ответы с готовыми решениями:

Чтение после конца потока невозможно
Сам код: Uses Crt; var i,k:integer; f: file; a,b:real; Begin Assign(f,...

Чтение после конца потока невозможно
Здравствуйте, упёрся в ошибку по потокам, не могу никак найти решение. Проблема в процедуре...

Подпрограмма выдает ошибку времени выполнения: Чтение после конца потока невозможно
Дан файл, содержащий сведения об игрушках: указывается название игрушки, ее стоимость в рублях и...

Чтение после конца потока невозможно
var f:file of integer; i,a,max,l:integer; begin assign(f,'f.txt'); reset(f); i:=0; while...

4
161 / 122 / 85
Регистрация: 16.10.2013
Сообщений: 1,738
07.12.2014, 09:43 2
Mol3culo, пока что у вас я заметил одну ошибку,
Цитата Сообщение от Mol3culo Посмотреть сообщение
Pascal
1
2
3
4
5
6
7
8
9
Begin
assign(t, 'input.txt');
reset(t);
while not Eof(t) do
Begin
read(t,tpm,tr,tmo,R1,RP,R2,R3,R4,R5,RR,H,dtn,dts,dtw,dte,dtch);
End
End;
close(t);
close(t) нужно внести в блок else, иначе файл будет всегда закрываться, даже если не открыт)
Вторая ошибка(или нет, может так и задумано)
Цитата Сообщение от Mol3culo Посмотреть сообщение
Pascal
1
if otvet=y then
Вот только yпросто переменная которой не присвоено значение, всегда будет вызываться считывание из файла при таком раскладе)
2
3 / 1 / 0
Регистрация: 23.11.2012
Сообщений: 35
07.12.2014, 13:22  [ТС] 3
dimabubyakin, спасибо за помощь!
Цитата Сообщение от dimabubyakin Посмотреть сообщение
close(t) нужно внести в блок else, иначе файл будет всегда закрываться, даже если не открыт)
Поправил, теперь так:
Pascal
1
2
3
4
5
6
7
8
9
Begin
assign(t, 'input.txt');
reset(t);
while not Eof(t) do
Begin
read(t,tpm,tr,tmo,R1,RP,R2,R3,R4,R5,RR,H,dtn,dts,dtw,dte,dtch);
close(t);
End
End;
Теперь возникает ошибка "Файл не открыт"

Цитата Сообщение от dimabubyakin Посмотреть сообщение
Вот только yпросто переменная которой не присвоено значение, всегда будет вызываться считывание из файла при таком раскладе)
Я думал что программа будет сравнивать параметр otvet с заданным символом.
0
161 / 122 / 85
Регистрация: 16.10.2013
Сообщений: 1,738
07.12.2014, 17:03 4
Цитата Сообщение от Mol3culo Посмотреть сообщение
Pascal
1
2
3
4
5
while not Eof(t) do
Begin
read(t,tpm,tr,tmo,R1,RP,R2,R3,R4,R5,RR,H,dtn,dts,dtw,dte,dtch);
close(t);
End
Снова не верно)
Вот так)
Pascal
1
2
3
4
5
6
7
Begin
assign(t, 'input.txt');
reset(t);
while not Eof(t) do
read(t,tpm,tr,tmo,R1,RP,R2,R3,R4,R5,RR,H,dtn,dts,dtw,dte,dtch);
close(t);
End;
0
3 / 1 / 0
Регистрация: 23.11.2012
Сообщений: 35
07.12.2014, 23:39  [ТС] 5
dimabubyakin, Спасибо, поправил, но все равно ошибка "Чтение после конца потока невозможно"

Добавлено через 4 часа 49 минут
Написал простенькую программку с созданием файла и вводом в него параметров, а затем выводом параметров из этого файла - работает, при открытии текстового документа в нем вместо нужной информации наблюдаются различные каракули, получается ошибка в моем случае вылетает из за несоответствия кодировок документа с кодировкой, требуемой паскалем, поэтому придется сейчас дописывать часть с вводом параметров

Добавлено через 59 минут
Собственно тогда возникает вопрос: можно ли как то выводимый файл привести к нормальному отображению параметров (числовых) сохраненных в нем.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.12.2014, 23:39

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Внешняя сортировка бинарного файла (чтение после конца файла невозможно)
Помогите отладить программу, не вижу, что здесь можно сделать. Похоже, курсор файла где-то в коде...

Ошибка при чтении файла: Чтение после конца потока невозможно
Всем добрый вечер! Пытаюсь считать данные из rtf файла и загрузить их в excel файл. Но выпадает...

Чтение после конца потока невозможно
Выдаёт такую ошибку. Помогите :-|

Чтение после конца потока невозможно
Файл для чтения создан в Паскале. type base=record n1,n2:string; tel:string; ...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.