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

Программа закрывается при сортировке данных (найти ошибку)

12.06.2010, 17:42. Показов 1278. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот моя программа еще сырая. Помогите разбраться в моих ошибка, в процедуре сортировки, после выполнения происхожит закрытие программы.
Прошу ткнуть меня носмом в мои ошибки.
Спасибо!
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
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
program bazAr;
uses crt;
type
 baz = record
 
       pun : string[20];    {punkt naznachenia}
       tim:real;       {vrema otpravlenia}
       nom:real;         {nomer samoleta}
       tip:string;         {tip samoleta}
 end;
 fstr= file of baz;
 
const
   filename = 'baz.db';
 
function menu:integer;
var
 m : integer;
begin
     writeln('1. zapolnit bazu');
     writeln('2. sohranenia i izmenenia');
     writeln('3. zagruzit baz');
     writeln('4. vivodit baz po nomiru reisa');
     writeln('5. vivod nomer i  tip samoleta po ');
     writeln('6. vivod DANUH PO VOZRASTANIU # REISA ');
     writeln('0. vyhod');
     readln(m);
     menu := m;
end; {procedure menu}
 
procedure zapolnenie(var f:fstr);
var
 s,p:baz;              {stroka}
 cor:boolean;          {korrektnost dannyx}
 cor_av:boolean;       {avtomaticheskaj proverka}
 a:char;
 temp:string;
 code:integer;
begin
 clrscr;
 
 
 cor:=false;
 cor_av:=true;
 
 writeln('pun');
 readln(s.pun);
 
 temp:='';
 Writeln('Vrema otpravlenia');
 while true do
 begin
      readln(temp);
      val(temp,s.tim,code);
      if code = 0 then break else writeln('Necorektno   vrema otpravlenia povtorite vvod');
 end;
 
 temp:='';
 Writeln('Vod # reisa');
 while true do
 begin
      readln(temp);
      val(temp,s.nom,code);
      if code = 0 then break else writeln('Necorektno   vrema # reisa vvod');
 end;
 
   temp:='';
 Writeln('Vod tipa samoleta');
 readln(s.tip);
 
if cor_av then
begin
 writeln;
 writeln('Podtverdite Pravelnost vvoda');
 writeln('|    Punkt    |    Vrema vileta      |    Nomer reisa   |    Tip samoleta   |');
 writeln('      ',s.pun,'      |    ',s.tim:0:0,'      |        ',s.nom:0:0,'           |       ',s.tip,'           |');
 writeln('Y/N');
 readln(a);
 if (a='Y') or (a='y') then cor:=true;
end;
 
 
 if cor and cor_av then
 begin
  assign(f,filename);
  {$I-}                  {otkluchenie vyvoda oshibok}
  Reset(f);
  {$I+}
  seek(f,filesize(f));
  write(f,s);
  clrscr;
 end;
end;{zapolnenie}
 
procedure zagruzka(var f:fstr);
var
 s:baz;
begin
 clrscr;
   seek(f,0);
    writeln('|   Punkt    |   Vrema vileta     |    Nomer reisa   |   Tip samoleta  |');
   while (not EOF(f)) do
   begin
    read(f,s);
   writeln('      ',s.pun,'      |         ',s.tim:2:0,'      |       ',s.nom:2:0,'         |       ',s.tip,'        |');
   end;
end;{load}
 
procedure sohranenie(var f:fstr);
var
 s:baz;
 key:word;
 a:char;
 poz:word;
begin
  clrscr;
  seek(f,0);
  zagruzka(f);
  writeln('vedite nomer reisa dla redaktirovanie:');
  readln(key);
  clrscr;
 
  poz:=0;
  seek(f,0);
  while not EOF(f) do
   begin
    read(f,s);
    inc(poz);
    if s.nom = key then
     begin
      writeln('Redaktirovat dannuu zapis?');
      writeln('|Punkt                 |Vrema vileta|Nomer reisa|Tip samoleta|');
      writeln(s.pun,'|',s.tim,'|',s.nom,'|',s.tip,'|');
      writeln('Y/N');
      readln(a);
      if (a='Y') or (a='y') then
      begin
        writeln('Punkt naznachenia');
        readln(s.pun);
        writeln('Vrema otpravlenia');
        readln(s.tim);
        writeln('Tip samoleta');
        readln(s.tip);
        seek(f,poz-1);
        write(f,s);
      end;
      exit;
     end;
   end;
end;{edit}
 
 
procedure sortirovka(var f:fstr);
var
 s:baz;
 a: array[1..100] of baz;
 n:real;
 i:integer;
 begin
 for i:=1 to 100 do
     if a[i].nom < a[i+1].nom then
        begin
        n:=a[i].nom;
        a[i].nom:=a[i+1].nom;
        a[i+1].nom:=n;
        end;
 
 writeln('|   Punkt    |   Vrema vileta     |    Nomer reisa   |   Tip samoleta  |');
 writeln(s.pun,'|',s.tim,'|',s.nom,'|',s.tip,'|');
 
end;
 
 
procedure Punkt(var f:fstr);
var
 s:baz;              {stroka tovarod}
 key:string;
begin
   clrscr;
   writeln('Vod punkta naznachenia');
   readln(key);
   seek(f,0);
   writeln('|Punkt                 |Vrema vileta|Nomer reisa|Tip samoleta|');
   while not EOF(f) do
    begin
     read(f,s);
     if key = s.pun then
      begin
      writeln(s.pun,'|',s.tim,'|',s.nom,'|',s.tip,'|');
      end;
    end;
 
end;
 
procedure Nomer(var f:fstr);
var
 s:baz;              {stroka tovarod}
 key:real;
begin
   clrscr;
   writeln('Vod # reisa');
   readln(key);
   seek(f,0);
   writeln('|Punkt                 |Vrema vileta|Nomer reisa|Tip samoleta|');
   while not EOF(f) do
    begin
     read(f,s);
     if key = s.nom then
      begin
      writeln(s.pun,'|',s.tim,'|',s.nom,'|',s.tip,'|');
      end;
    end;
 
end;
 
procedure sor(var f:fstr);
var
{peremenue sortirovki}
flag:boolean;
k:real;  {peremenai dla nom}
h:string[20]; {peremenai dla pun }
g:real; {peremenai dla tim}
d:string; {peremenai dla tip}
i:integer; {peremenai schetchik}
 
{/peremenue sorntirovki}
 
s: array [1..100] of baz;
t:file of baz;
 
 
begin
assign (t,'baz.db');
reset(t);
for i:=1 to 100 do
begin
{$I+}
read(t,s[i]);
{$I-}
end;
repeat
 
flag:=true;
for i:=1 to 100 do
if s[i].nom > s[i+1].nom then
begin
k:=s[i].nom;                {peremeshenie znach nom}
s[i].nom:=s[i+1].nom;
s[i+1].nom:=k;               {/peremeshenie znach nom}
 
h:=s[i].pun;                {peremeshenie znach pun}
s[i].pun:=s[i+1].pun;
s[i+1].pun:=h;               {/peremeshenie znach pun}
 
g:=s[i].tim;                {peremeshenie znach tim}
s[i].tim:=s[i+1].tim;
s[i+1].tim:=g;               {/peremeshenie znach tim}
 
d:=s[i].tip;                {peremeshenie znach tip}
s[i].tip:=s[i+1].tip;
s[i+1].tip:=d;               {/peremeshenie znach tip}
 
 
flag:=false                   {}
end;
until flag=true;
 
 
writeln('------------------------------------------------------');
writeln('    nomer    punkt naznachenia  vrema   tip samoleta    ');
writeln('_______________________________________________________');
for i:=1 to 100 do
writeln(s[i].nom,'   ',s[i].pun, '   ', s[i].tim ,'     ',s[i].tip,'   ');
readln;
close(t);
end;
var
   vyxod  : boolean;
   v      : integer;
   f      : fstr;
 
begin
 {proverka suwestvovanij faila}
  assign(f,filename);
  {$I-}                  {otkluchenie vyvoda oshibok}
  Reset(f);
  {$I+}
  if IORESULT<>0 then Rewrite(f);
 
     clrscr;
     vyxod := false;            {flag vyhoda}
 
 
     while (not vyxod) do
      begin
           writeln;
           v := menu;           {rezultat vyzova menu}
           case v of            {vyzov specyalizirovannogo deistvia}
            1: zapolnenie(f);
            2: Sohranenie(f);
            3: Zagruzka(f);
            4: Nomer(f);
            5: punkt(f);
            6: sortirovka(f);
            0: vyxod:=true;
           end;
      end;
    Close(f);
    readln;
 
end.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.06.2010, 17:42
Ответы с готовыми решениями:

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

Решение простейшего уравнения: программа закрывается при повторном вводе данных
Мне сказали задать оператор вывода, но не знаю, как его сделать! Уснул на этой лекции. Суть в том,...

Графическая программа закрывается после запуска
Скажите, пожалуйста.... Есть исходник программы на Turbo Pascal. Открываю его, жму Ctrl+F9 - всё...

2
18 / 15 / 1
Регистрация: 20.04.2010
Сообщений: 318
12.06.2010, 18:32
Чтобы найти ошибку, сократи до минимума программу,
и проверь её работоспособность.

Далее доплняй другие части.

Проверь работает ли она вообще без сортировки.

Есть вроде ошибка :
не указано кол-во элементов в массиве (базе) :
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const  N = 50;    {maksimalnoe kolvo zapisei v baze}
 
type   PData = ^TData; {ukazatel na zapis}
       TData = record  {zapis}
       name  : string[20];    {name}
       adress: string[30];  {adress}
       tel   : extended;   {telefon}
               end;
 
var base : array [1..N] of PData;   {Massiv ukazatelei (indeksov)}
    R: integer;            {R - tekushee kolvo zapisei}
    select: integer;
 
var f: file of TData;  {file}
    P,S,Snext : PData; {ukazatel}
Делай не более 50-ти!
1
0 / 0 / 1
Регистрация: 15.05.2010
Сообщений: 53
12.06.2010, 22:26  [ТС]
Подредактировал программу получилось:
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
program bazAr;
uses crt;
type
 baz = record
 
       pun : string[20];    {punkt naznachenia}
       tim:real;       {vrema otpravlenia}
       nom:real;         {nomer samoleta}
       tip:string;         {tip samoleta}
 end;
 fstr= file of baz;
 
const
   filename = 'baz.db';
 
function menu:integer;
var
 m : integer;
begin
     writeln('1. Zapolnit bazu');
     writeln('2. Sohranenia i izmenenia');
     writeln('3. Zagruzit baz');
     writeln('4. Vivodit baz po nomiru reisa');
     writeln('5. Vivod nomer i  tip samoleta po ');
     writeln('6. Vivod DANUH PO VOZRASTANIU # REISA ');
     writeln('0. Vyhod');
     readln(m);
     menu := m;
end; {procedure menu}
 
procedure zapolnenie(var f:fstr);
var
 s,p:baz;              {stroka}
 cor:boolean;          {korrektnost dannyx}
 cor_av:boolean;       {avtomaticheskaj proverka}
 a:char;
 temp:string;
 code:integer;
begin
 clrscr;
 
 
 cor:=false;
 cor_av:=true;
 
 write('Vedite punkt naznachenia: ');
 readln(s.pun);
 
 temp:='';
 Write('Vrema otpravlenia: ');
 while true do
 begin
      readln(temp);
      val(temp,s.tim,code);
      if code = 0 then break else writeln('Necorektno   vrema otpravlenia povtorite vvod');
 end;
 
 temp:='';
 Write('Vod nomera reisa: ');
 while true do
 begin
      readln(temp);
      val(temp,s.nom,code);
      if code = 0 then break else writeln('Necorektno   vrema # reisa vvod');
 end;
 
   temp:='';
 Write('Vod tipa samoleta: ');
 readln(s.tip);
 
if cor_av then
begin
 writeln;
 writeln('Podtverdite Pravelnost vvoda dannuh');
 writeln('| Punkt: ',s.pun,'|  |Vrema vileta: ',s.tim:0:0,'|  |Nomer reisa: ',s.nom:0:0,'|  |Tip samoleta: ',s.tip,'|');
 writeln('Y/N');
 readln(a);
 if (a='Y') or (a='y') then cor:=true;
end;
 
 
 if cor and cor_av then
 begin
  assign(f,filename);
  {$I-}                  {otkluchenie vyvoda oshibok}
  Reset(f);
  {$I+}
  seek(f,filesize(f));
  write(f,s);
  clrscr;
 end;
end;{/zapolnenie}
 
procedure zagruzka(var f:fstr);
var
 s:baz;
begin
 clrscr;
   seek(f,0);
    writeln('|Punkt       |Vrema vileta        |Nomer reisa     |Tip samoleta    |');
   while (not EOF(f)) do
   begin
    read(f,s);
   writeln('| Punkt: ',s.pun,'|  |Vrema vileta: ',s.tim:0:0,'|  |Nomer reisa: ',s.nom:0:0,'|  |Tip samoleta: ',s.tip,'|');
   end;
end;{/zagruzka}
 
procedure sohranenie(var f:fstr);
var
 s:baz;
 key:word;
 a:char;
 poz:word;
begin
  clrscr;
  seek(f,0);
  zagruzka(f);
  writeln('Vedite nomer reisa dla redaktirovanie ili 0 dla vihoda v glavnoe  menu:');
  readln(key);
  clrscr;
 
  poz:=0;
  seek(f,0);
  while not EOF(f) do
   begin
    read(f,s);
    inc(poz);
    if s.nom = key then
     begin
      writeln('Redaktirovat dannuu zapis?');
      writeln('| Punkt: ',s.pun,'|  |Vrema vileta: ',s.tim:0:0,'|  |Nomer reisa: ',s.nom:0:0,'|  |Tip samoleta: ',s.tip,'|');
      writeln;
      writeln('Y/N');
      readln(a);
      if (a='Y') or (a='y') then
      begin
        writeln('Punkt naznachenia');
        readln(s.pun);
        writeln('Vrema otpravlenia');
        readln(s.tim);
        writeln('Tip samoleta');
        readln(s.tip);
        seek(f,poz-1);
        write(f,s);
      end;
      exit;
     end;
   end;
end;{edit}
 
 
procedure sortirovka(var f:fstr);
const
k=50;
var
 s:baz;
 a: array[1..k] of baz;
 n:real;
 i:integer;
 begin
 for i:=1 to k do
     if a[i].nom < a[i+1].nom then
        begin
        n:=a[i].nom;
        a[i].nom:=a[i+1].nom;
        a[i+1].nom:=n;
        end;
 
writeln('------------------------------------------------------');
writeln('    nomer    punkt naznachenia  vrema   tip samoleta    ');
writeln('_______________________________________________________');
for i:=1 to k do
if a[i].nom<>0 then
writeln(a[i].nom:0:0,'   ',a[i].pun, '   ', a[i].tim:0:0 ,'     ',a[i].tip,'   ');
end;
 
 
procedure Punkt(var f:fstr);
var
 s:baz;              {stroka tovarod}
 key:string;
begin
   clrscr;
   writeln('Vod punkta naznachenia');
   readln(key);
   seek(f,0);
   writeln('|Punkt                 |Vrema vileta|Nomer reisa|Tip samoleta|');
   while not EOF(f) do
    begin
     read(f,s);
     if key = s.pun then
      begin
      writeln(s.pun,'|',s.tim,'|',s.nom,'|',s.tip,'|');
      end;
    end;
 
end;
 
procedure Nomer(var f:fstr);
var
 s:baz;              {stroka tovarod}
 key:real;
begin
   clrscr;
   writeln('Vod # reisa');
   readln(key);
   seek(f,0);
   writeln('|Punkt                 |Vrema vileta|Nomer reisa|Tip samoleta|');
   while not EOF(f) do
    begin
     read(f,s);
     if key = s.nom then
      begin
      writeln(s.pun,'|',s.tim,'|',s.nom,'|',s.tip,'|');
      end;
    end;
 
end;
 
var
   vyxod  : boolean;
   v      : integer;
   f      : fstr;
 
begin
 {proverka suwestvovanij faila}
  assign(f,filename);
  {$I-}                  {otkluchenie vyvoda oshibok}
  Reset(f);
  {$I+}
  if IORESULT<>0 then Rewrite(f);
 
     clrscr;
     vyxod := false;            {flag vyhoda}
 
 
     while (not vyxod) do
      begin
           writeln;
           v := menu;           {rezultat vyzova menu}
           case v of            {vyzov specyalizirovannogo deistvia}
            1: zapolnenie(f);
            2: Sohranenie(f);
            3: Zagruzka(f);
            4: Nomer(f);
            5: punkt(f);
            6: sortirovka(f);
            0: vyxod:=true;
           end;
      end;
    Close(f);
    readln;
 
end.

Но при сортировке получается непонятный вывод раличными символами без понятных данных.
Миниатюры
Программа закрывается при сортировке данных (найти ошибку)  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.06.2010, 22:26
Помогаю со студенческими работами здесь

При использовании Graph программа закрывается
почему в паскале когда используется граф при запуске проге паскаль закрываетса

Программа закрывается после вычисления площади
вот программа написанная в ABC pascal, когда я ее скидываю во фри паскаль что бы скомпилировать...

Окно программы закрывается сразу после вычислений
Здравствуйте, я приступил к изучению паскаля, набрал первую программку вида: var a, b, sum :...

Графическая программа закрывается после запуска
закрывает паскаль при запуске Program air_prog; uses graphABC; var xn,xk,x,mx,my,dx:real; ...

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


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru