Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 1
Регистрация: 29.09.2013
Сообщений: 30

зависает программа

29.10.2013, 21:07. Показов 2041. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
procedure asd(var f1, f2: TFStudent);
var
  st, x, y, sp : TStudent;
  k, g, i, j, fg: integer;
begin
  g:=0;
  fg:=2;
  reset(f1);
  rewrite(f2);
  for k:=1 to 11 do begin
  g:=g+1;
  while not eof(f1) do begin
  if st.clas = g  then begin
  seek(f2,filesize(f2));
  write(f2, st);
  end;
  end;
  for i:=0 to filesize(f2)-2 do   
    for j:=i+1 to filesize(f2)-1 do   
  begin
    seek(f2,i);  
    read(f2,x);  
    seek(f2,j);   
    read(f2,y);  
    if (x.growth<y.growth)and(st.clas = g) then    
      begin
       sp:=x;  
       x:=y;
       y:=sp;
       seek(f2,i);  
       write(f2,x);
       seek(f2,j);
       write(f2,sp);
      end;
   end;
    seek(f2, fg);
    truncate(f2);
    fg:=fg+3;
  end;
close(f1);
close(f2);
end;
программа зависает после того, как в этой процедуре ввожу название файла в которого переписываются записи отсортированные.
задача этой процедуры : в новый файл переписать информацию о 3х самых высоких учениках в каждой параллели. все остальные процедуры в программе работают нормально
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.10.2013, 21:07
Ответы с готовыми решениями:

На android зависает программа, при компиляции на windows работает стабильно
procedure TForm4.Tqueue; var i ,j,g:integer; queueArray:array of array of string; buffer: String; fileQueue: text; list:...

Почему зависает программа?
Почему зависает программа, код которой: uses GraphABC; const background = 'Start.jpg'; MainMenu = 'MainMenu.jpg'; ...

Программа зависает, если знак > заменить на <
Программа удаления элементов последенего столбца массива, значения которых меньше введенного числа Р. Прога зависает. Если же заменить...

14
 Аватар для Крюгер
40 / 60 / 8
Регистрация: 16.11.2012
Сообщений: 460
Записей в блоге: 7
29.10.2013, 21:10
tirant, у тебя вложенный цикл... из-за этого

Добавлено через 44 секунды
перепиши по другому, глючить не должно
0
0 / 0 / 1
Регистрация: 29.09.2013
Сообщений: 30
29.10.2013, 21:12  [ТС]
Цитата Сообщение от Крюгер Посмотреть сообщение
tirant, у тебя вложенный цикл... из-за этого

Добавлено через 44 секунды
перепиши по другому, глючить не должно
что именно исправить?
0
 Аватар для Крюгер
40 / 60 / 8
Регистрация: 16.11.2012
Сообщений: 460
Записей в блоге: 7
29.10.2013, 21:15
tirant, что бы не было вложенного цикла, у тебя в циклк
Pascal
1
 for k:=1 to 11 do begin
вложен
Pascal
1
 while not eof(f1) do begin
плюс там еще куча всего. так делать не нужно

Добавлено через 37 секунд
скорость выполнения теряется однако

Добавлено через 31 секунду
а как переделать ты уж сам думай...голова же на месте, наверное
0
0 / 0 / 1
Регистрация: 29.09.2013
Сообщений: 30
29.10.2013, 21:18  [ТС]
Цитата Сообщение от Крюгер Посмотреть сообщение
tirant, что бы не было вложенного цикла, у тебя в циклк
Pascal
1
 for k:=1 to 11 do begin
вложен
Pascal
1
 while not eof(f1) do begin
плюс там еще куча всего. так делать не нужно

Добавлено через 37 секунд
скорость выполнения теряется однако

Добавлено через 31 секунду
а как переделать ты уж сам думай...голова же на месте, наверное
убрал его, все равно зависает
0
 Аватар для Крюгер
40 / 60 / 8
Регистрация: 16.11.2012
Сообщений: 460
Записей в блоге: 7
29.10.2013, 21:21
а это...
Pascal
1
2
3
 for i:=0 to filesize(f2)-2 do   
    for j:=i+1 to filesize(f2)-1 do   
  begin
упростите всё... нельзя столько циклов много юзать
1
0 / 0 / 1
Регистрация: 29.09.2013
Сообщений: 30
29.10.2013, 22:01  [ТС]
Цитата Сообщение от Крюгер Посмотреть сообщение
а это...
Pascal
1
2
3
 for i:=0 to filesize(f2)-2 do   
    for j:=i+1 to filesize(f2)-1 do   
  begin
упростите всё... нельзя столько циклов много юзать
теперь не зависает, но переписывает в новый файл вот так:
Имя:
Рост: 0
Класс: 0 ""

Имя:
Рост: 0
Класс: 0 ""

Имя:
Рост: 0
Класс: 0 ""

Имя:
Рост: 0
Класс: 0 ""

Имя:
Рост: 0
Класс: 0 ""

Имя:
Рост: 0
Класс: 0 ""

Имя:
Рост: 0
Класс: 0 ""

Имя:
Рост: 0
Класс: 0 ""

Имя:
Рост: 0
Класс: 0 ""
в чем ошибка может быть?
0
 Аватар для Крюгер
40 / 60 / 8
Регистрация: 16.11.2012
Сообщений: 460
Записей в блоге: 7
29.10.2013, 22:16
tirant, выложи код , я не ясновидящий ведь..
0
0 / 0 / 1
Регистрация: 29.09.2013
Сообщений: 30
29.10.2013, 22:21  [ТС]
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
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
type
  TStudent = record 
    name: string[30];
    growth: word;
    clas: word;
    bukva: string[3];
    sr: real;
  end;
  TFStudent = file of TStudent;
 
procedure InputRec(var st: TStudent);
begin
  with st do
  begin
    Write('Введите ФИО:  ');
    readln(name);
    write('Введите рост ученика:  ');
    readln(growth);
    write('Введите класс:  ');
    readln(clas);
    write('Введите букву:  ');
    readln(bukva);
  end; 
end;
 
procedure AddRec(var f: TFStudent; st: TStudent);
begin
  reset(f);
  seek(f, Filesize(f));
  write(f, st);
  close(f);
end;
 
procedure CreateFile(var f: TFStudent);
var
  st: TStudent; c: char;
begin
  rewrite(f);
  repeat
    writeln('Введите информацию об ученике');
    InputRec(st);
    AddRec(f, st);
    writeln('Выйти?');
    readln(c);
  until c in ['y', 'Y'];
end;
 
procedure DelRec(var f: TFStudent; var n: byte);
var
  st: TStudent;
begin
  reset(f);
  if n <> Filesize(f) - 1 then begin
    seek(f, Filesize(f) - 1);
    read(f, st);
    seek(f, n);
    write(f, st);
  end;
  seek(f, Filesize(f) - 1);
  Truncate(f);
  close(f);
end;
 
procedure sred(var f: TFStudent; var sredn: real);
var
  st: TStudent;
  sum: real;
  k: byte;
begin
  reset(f);
  sum := 0;
  k := 0;
  while not (eof(f)) do
  begin
    read(f, st);
    k := k + 1;
    sum := sum + st.growth;
  end;
  if k = 0 then k := 1;
  sredn := sum / k;
  close(f);
end;
 
procedure FiletoFileRec(var f1, f2: TFStudent);
var
  st, x, y, sp : TStudent;
  k, g, i, j, fg, p: integer;
begin
  g:=0;
  fg:=2;
  reset(f1);
  rewrite(f2);
  for k:=1 to 11 do begin
  g:=g+1;
  for p:=1 to filesize(f2) do 
  if st.clas = g  then begin
  seek(f2,filesize(f2));
  write(f2, st);
  end;
  for i:=0 to filesize(f2)-2 do   
    for j:=i+1 to filesize(f2)-1 do   
  begin
    seek(f2,i);  
    read(f2,x);  
    seek(f2,j);   
    read(f2,y);  
    if (x.growth<y.growth)and(st.clas = g) then    
      begin
       sp:=x;  
       x:=y;
       y:=sp;
       seek(f2,i);  
       write(f2,x);
       seek(f2,j);
       write(f2,sp);
      end;
   end;
    seek(f2, fg);
    truncate(f2);
    fg:=fg+3;
  end;
close(f1);
close(f2);
end;
 
procedure FiletoFileTxt(var f1: TFStudent; var f3: text);
var
  st: TStudent;
  sr: real;
begin
  reset(f1);
  rewrite(f3);
  sred(f1, sr);
  writeln(sr);
  reset(f1);
  Rewrite(f3);
  while not eof(f1) do
  begin
    read(f1, st);
    if (st.growth > sr) then writeln(f3, 'Имя:   ', st.name);
    if (st.growth > sr) then writeln(f3, 'Рост:  ', st.growth);
    if (st.growth > sr) then writeln(f3, 'Класс: ', st.clas, ' "', st.bukva, '"');
    if (st.growth > sr) then writeln(f3);
  end;
  close(f1);
  close(f3);
end;
 
procedure ViewFileRec(var f: TFStudent);
var
  st: TStudent;
begin
  reset(f);
  while not eof(f) do 
  begin
    read(f, st);
    writeln('Имя:   ', st.name);
    writeln('Рост:  ', st.growth);
    writeln('Класс: ', st.clas, ' "', st.bukva, '"');
    writeln;
  end;
  close(f);
end;
 
procedure ViewFileTxt(var f: text);
var
  s: string;
begin
  reset(f);
  while not eof(f) do 
  begin
    readln(f, s);
    writeln(s);
  end;
  close(f);
end;
 
var
  f1, f2: TFStudent;
  f3: text;
  fname1, fname2, fname3: string;
  n, m1, m2: byte;
  st: TStudent;
 
begin
  repeat
    writeln('Выберете действие:');
    writeln('1. Создание исходного файла');
    writeln('2. Работа с файлом записи');
    writeln('3. Просмотр файла записи');
    writeln('4. Просмотр текстового файла');
    writeln('5. Сведения о 3 самых высоких');
    writeln('6. Сведения об учениках чей рост больше среднего по школе');
    writeln('7. Удалить файл');
    writeln('0. Выход');
    writeln('Ваш выбор:');
    readln(m1);
    case m1 of
      1: 
        begin
          write('Введите имя файла: ');
          readln(fname1);
          assign(f1, fname1);
          CreateFile(f1);
        end;
      2: 
        begin
          repeat
            write('Имя: ');
            readln(fname1);
            assign(f1, fname1);
            ViewFileRec(f1);
            writeln('Выберете действие');
            writeln('1. Добавить ЗП');
            writeln('2. Удалить ЗП');
            writeln('0. Выход');
            writeln('Ваш выбор: ');
            readln(m2);
            case m2 of
              1: 
                begin
                  InputRec(st);
                  AddRec(f1, st);
                end;
              2: 
                begin
                  writeln('Введите № ЗП y/ удалится');
                  readln(n);
                  n := n - 1;
                  DelRec(f1, n);
                end;
              3: 
                begin
                  write('Введите № ЗП у/ редакт');
                  readln(n);
                  DelRec(f1, n);
                  InputRec(st);
                  AddRec(f1, st);
                end;
            end;
          until m2 = 0
        end;
      3: 
        begin
          writeln('Введите имя файла');
          readln(fname1);
          assign(f1, fname1);
          writeln;
          ViewFileRec(f1);
        end;
      4: 
        begin
          write('Введите имя файла: ');
          readln(fname3);
          assign(f3, fname3);
          ViewFileTxt(f3);
        end;
      5: 
        begin
          writeln('Введите имя исходного файла');
          readln(fname1);
          if Fileexists(fname1) then begin
            assign(f1, fname1);
            write('Введите имя результирующего файла: ');
            readln(fname2);
            assign(f2, fname2);
            FiletoFileRec(f1, f2);
          end
          else writeln('Такого файла не существует');
        end;
      6: 
        begin
          writeln('Введите имя исходного файла');
          readln(fname1);
          if Fileexists(fname1) then begin
            assign(f1, fname1);
            write('Введите имя результирующего файла: ');
            readln(fname3);
            assign(f3, fname3);
            FiletoFileTxt(f1, f3);
          end
          else writeln('Такого файла не существует');
        end;
      7:
        begin
          writeln('Введите имя файла');
          readln(fname1);
          assign(f1, fname1);
          Erase(f1);
        end;
    end;
  until m1 = 0;
end.
вот вся программа, проблема только в процедуре filetofilerec
0
 Аватар для Крюгер
40 / 60 / 8
Регистрация: 16.11.2012
Сообщений: 460
Записей в блоге: 7
29.10.2013, 22:35
вроде бы ты перепутал read(**,***); с Writeln(**,**)

Добавлено через 1 минуту
или я посмотрел не там
0
0 / 0 / 1
Регистрация: 29.09.2013
Сообщений: 30
29.10.2013, 22:41  [ТС]
Цитата Сообщение от Крюгер Посмотреть сообщение
вроде бы ты перепутал read(**,***); с Writeln(**,**)

Добавлено через 1 минуту
или я посмотрел не там
в каком месте процедуры?
0
 Аватар для Крюгер
40 / 60 / 8
Регистрация: 16.11.2012
Сообщений: 460
Записей в блоге: 7
29.10.2013, 22:43
Pascal
1
2
3
4
5
6
 begin
    seek(f2,i);  
    read(f2,x);  
    seek(f2,j);   
    read(f2,y);  
    if (x.growth<y.growth)and(st.clas = g) then
но возможно я не совсем вкурил то что ты хочешь там сделать
0
0 / 0 / 1
Регистрация: 29.09.2013
Сообщений: 30
29.10.2013, 22:48  [ТС]
Цитата Сообщение от Крюгер Посмотреть сообщение
Pascal
1
2
3
4
5
6
 begin
    seek(f2,i);  
    read(f2,x);  
    seek(f2,j);   
    read(f2,y);  
    if (x.growth<y.growth)and(st.clas = g) then
но возможно я не совсем вкурил то что ты хочешь там сделать
считываю две рядом стоящие записи для сравнения по одному из полей, если условия выполняется, мы меняем записи местами.(сортировка по убыванию)
0
 Аватар для Крюгер
40 / 60 / 8
Регистрация: 16.11.2012
Сообщений: 460
Записей в блоге: 7
29.10.2013, 22:52
tirant, попробуй сделать в месте где запись идет проверку не пустая ли переменная...
(с файлами я не очень дружу, так что вряд ли смогу еще чем то помочь.к сожалению)
0
0 / 0 / 1
Регистрация: 29.09.2013
Сообщений: 30
30.10.2013, 18:49  [ТС]
up.....

Добавлено через 5 часов 1 минуту
up...

Добавлено через 1 час 39 минут
up....
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.10.2013, 18:49
Помогаю со студенческими работами здесь

Зависает программа при входе с меню
Добрый день. Проблема следующая: в чистом виде программа работает отлично, но после того, как я засунул ее в меню, при ее вызове программа...

Зависает программа при запуске
Доброго времени суток. Изначально данная программа в Турбо Паскале работает(программа озвучивания клавиш) {$M $1000,0,0} Program...

После ввода первого обучающегося программа зависает
Готовлюсь к ЕГЭ по информатике и делаю С4 (С досрочного ЕГЭ). Вот такое задание: Муниципальный этап олимпиады по информатике...

Программа зависает при создании массива динамического и вывода на экран
Такая проблема, при создании массива динамического и вывода на экран , если вывести на экран матрицу 6на6 программа &quot;зависает&quot;...

Xerox WorkCentre 3550. При попытке напечатать текст (без разницы какая программа) программа из которой идет печать зависает. Картинки печатаются норм.
Вот такая вот байда. Кто сталкивался? Подскажите где тут собака зарыта :) з.ы. никогда не покупайте данный принтер. С ним одни проблемы...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru