Форум программистов, компьютерный форум, киберфорум
Наши страницы
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Васько
0 / 0 / 0
Регистрация: 15.12.2012
Сообщений: 20
#1

Вывести в алфавитном порядке наименований по судам спасательных средств

04.01.2015, 21:02. Просмотров 386. Ответов 6
Метки нет (Все метки)

Есть код программы, программа работает криво, создание файла происходит не в корне программы и из за этого накрывается вся прога.
Спасайте завтра курсач показывать.!


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
Program kursovay; 
uses Crt,Dos;
type spisok=record
name:string[15];
kolich:integer;
gruz:string[20];
chel:integer;
sudno:string[20];
end;
var      
f:file of spisok;
zn,filename:string;
k:integer;
label 11;
  {-----------------------------------------------------------}
procedure Creatfile;
begin
writeln('Zadaite imya faila, kotoruq budet sozdan');
readln(filename);
assign(f,filename);
rewrite(f);
end;
  {-----------------------------------------------------------}
procedure Addrecord;
var rez:integer; ch:char;
begin
while rez<>0 do
begin
writeln('Zadaite imya faila,v kotoryq budet dobavlyatsya zapis');
readln(filename);
assign(f,filename);
rez:=IOResult;
if rez<>0 then
begin
writeln('Proverte Pravelnist imeni faila!');
writeln('Budet li povtonoe zadanie imeni faila?(Y/N)');
readln(ch);
if (ch='n') or (ch='N') then halt (0);
end;
end;
seek(f,filesize(f));
end;
   {==========================================================}
procedure Inputfile;
var st:spisok;
k:char;
begin
repeat
writeln('Vvedite danie o novom spiske : ');
write('Vvedite naimenovanie sudna:');        readln(st.name);
write('Kolichestvo sudov : ');                readln(st.kolich);
write('Gruzopodem kg.:');              readln(st.gruz);
write('Chelovek na sudne:');                           readln(st.chel);
write('Vid sudna: ');                            readln(st.sudno);
write(f,st);
write('Nado li vvodit danie o novom sudne ? (Y/N)>');readln(k);
writeln;
until(k='n') or (k='N');
close(f);
end;
    {=========================================================}
procedure redzap;
var
st:spisok;
filename,str:string;
name2:string[15];
kolich2:integer;
gruz2:string[20];
chel2:integer;
sudno2:string[20];
x:integer;
begin
writeln('Zadaite imya faila');
readln(filename);
assign(f,filename);
reset(f);
with st do
begin write('Vvedite naimenovanie: ');readln(str);
x:=0;
while not eof(f) do
begin
read(f,st);
if st.name=str then
begin
writeln('Vvedite danie o novom spiske : ');
write('Vvedite naimenovanie sudna:');        readln(st.name);
write('Kolichestvo sudov : ');                readln(st.kolich);
write('Gruzopodem kg.:');              readln(st.gruz);
write('Chelovek na sudne:');                           readln(st.chel);
write('Vid sudna: ');                            readln(st.sudno);
name2:=name;      kolich2:=kolich;
gruz2:=gruz;        chel2:=chel;
sudno2:=sudno;            
seek(f,filepos(f)-1);
write(f,st); x:=1;
end; end;
close(f);
end;
if x=0 then  begin writeln('Zapisi s takim imenem net!');readln end;
end;
  {==============================================================}
procedure Openfile;
var rez:integer;ch:char;
begin
while rez<>0 do
begin
writeln('Zadaite imya faila');
readln(filename);
assign(f,filename);
rez:=IOResult;
if rez<>0 then
begin
writeln('Proverte pravilnost imeni faila!');
writeln('Budet li povtornoe zadanie imeni faila ? (Y/N)');
readln(ch);
if (ch='n') or (ch='N') then halt (0);
end;
end;
end;
     {============================================================}
procedure Outputfile;
var st:spisok;k:char;
begin
writeln('Hotite posmotreti dannie o sudah? (Y/N)');
readln(k);
if (k='y') or (k='Y') then
while not eof(f) do
begin
read(f,st); clrscr;
writeln('Vvedite danie o novom spiske : ');
write('Vvedite naimenovanie sudna:');        readln(st.name);
write('Kolichestvo sudov : ');                readln(st.kolich);
write('Gruzopodem kg.:');              readln(st.gruz);
write('Chelovek na sudne:');                           readln(st.chel);
write('Vid sudna: ');                            readln(st.sudno);
writeln('Dlya prodoljeniya najmite (enter)');
readln;
end;
close(f);
end;
       {========================================================}
procedure Clearfile;
var st:spisok;
studtoout:string[20];
fo:file of spisok;
begin
writeln('Zadaite imya faila iz kotorogo budut udalyatsa elements');
readln(filename);
assign(f,filename);reset(f);
assign(fo,'newfile.dat');rewrite(fo);
writeln('Zadaite naimenovanie sudna, zapis o kotorom udalitsa');
readln(studtoout);
while not eof(f) do
begin
read(f,st);
if st.name<>studtoout then write(fo,st);
end;
close(f);close(fo);
erase(f);
rename(fo,filename);
end;
                           {Osnovnaya chasti programmi}                           
Begin  11:clrscr;
writeln('     MENU:');
writeln('1:Sozdanie faila');
writeln('2:Dobalenie zapisi v fail');
writeln('3:Korrektirovka zapisi');
writeln('4:Prosmotr faila');
writeln('5:Udalenie zapisi iz faila');
writeln('6:Vihod iz programmi');
readln(k);
case k of 1: begin Creatfile; Inputfile end;
2: begin Addrecord; Inputfile end;
3: redzap;
4: begin Openfile; Outputfile end;
5: Clearfile;
6: Halt;
else writeln('Oshibka.Povtorite nomer rejima.')
end;
goto 11;
End.
а вот что требуется сделать вообще: Требуется создать программу ведения файла, компонентами которого являются записи комбинированного типа - RECORD. Программа должна быть структурирована, то есть содержать следующие процедуры: создаlние нового файла, добавление в файл, новой записи, удаление из файла указанной записи, упорядочение (индексация) записей по одному или двум полям, фильтрация, выборка по ключевым словам поля (или части поля), группировка записей файла и отображения указанных записей на экран монитора в соответствии с указаниями, приведенными в заданиях
4. Сформировать список судовых спасательных средств.
Hаименование, Количество, | Грузоподъемность, кг ,Человек , Судно
Программа должна реализовать функции.
•Добавление новой записи, редактирование, удаление записи.
•Вывод информации на экран:
a) в алфавитном порядке наименований по судам спасательных средств г (катера, шлюпки, плоты);
б)по судам список спасательных средств, с грузоподъемностью нс ниже заданной Р, кг или более К человек;
в)по ключевым словам в поле наименование
г) суммарная грузоподъемность спасательных средств и количество человек по судам
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.01.2015, 21:02
Ответы с готовыми решениями:

Сформировать список судовых спасательных средств
14. РАБОТА С ФАЙЛАМИ ЗАПИСЕЙ Требуется создать программу ведения файла,...

Вывести в алфавитном порядке
Дана строка символов А. Вывести в алфавитном порядке слова сострящие из менее...

Вывести слова в алфавитном порядке
Прошу помочь составить программу в которой 4 отдельных слова выводятся в...

Вывести слова в алфавитном порядке
Есть программа выделяющая слова из программы и выводящая их в алфавитном...

Вывести слова в алфавитном порядке
Дана строка, состоящая из русских слов, разделенных пробелами (одним или...

6
TrueTerm
168 / 116 / 45
Регистрация: 25.12.2014
Сообщений: 384
04.01.2015, 21:30 #2
Васько, кроме "создание файла происходит не в корне программы" у проги еще куча поводов не работать.
Попытайтесь, сформулировать, "что именно" должен делать каждый пункт.
Например "при создании файла на диске должен появляться пустой файл с заданным именем".
0
Васько
0 / 0 / 0
Регистрация: 15.12.2012
Сообщений: 20
04.01.2015, 21:35  [ТС] #3
1 создание файла
2 добавление записи в файл
3 корректировка записи
4 просмотр файла
5 удаление записи из файла
это основные пункты
а дальше идут из задания
Вывод информации на экран:
a) в алфавитном порядке наименований по судам спасательных средств г (катера, шлюпки, плоты);
б)по судам список спасательных средств, с грузоподъемностью не ниже заданной Р, кг или более К человек;
в)по ключевым словам в поле наименование
г) суммарная грузоподъемность спасательных средств и количество человек по судам
0
TrueTerm
168 / 116 / 45
Регистрация: 25.12.2014
Сообщений: 384
04.01.2015, 21:37 #4
Кроме того, если позволите, с такой программой очень неудобно работать. Она всё время спрашивает имя файла, в каждую операцию! Лучше бы был пункт "Выбор файла". А вот при создании нового (а это по сути очистка файла, уничтожение даных), лучше спросить новое имя.
0
Васько
0 / 0 / 0
Регистрация: 15.12.2012
Сообщений: 20
04.01.2015, 21:41  [ТС] #5
как бы вы сделали программу с данными требованиями?
просто я слаб по pascal
0
TrueTerm
168 / 116 / 45
Регистрация: 25.12.2014
Сообщений: 384
04.01.2015, 21:47 #6
Васько, Основная проблема с открытием и закрытием файла. Надо чётко определить, что должна длеать каждая операция, тогда станет понятно, когда открывать файл, а когда закрывать. Обычно, в меню есть операция "Открыть\выбрать файл" по которой закрывается старый (если был) и открывается новый.
Создание файла - это очистка (создание пустого файла). Тут желательно проверить, есть ли уже такой файл и спросить, правда ли пользователь хочет стереть из него все данные.
А вот Добавление\корректировка\просмотр\удаление записи происходят уже с выбранным файлом. Иначе, очень неудобно и путаница, когда файл открыть, когда закрыть.
0
Васько
0 / 0 / 0
Регистрация: 15.12.2012
Сообщений: 20
05.01.2015, 02:40  [ТС] #7
ааааааааааааааааа ваще не соображаю за последние 2 дня ничего (

Добавлено через 22 минуты
переделайте мой программный код кто нито прошу курсач завтра сдвать

Добавлено через 4 часа 27 минут
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
program qwerty;
uses
  crt;
type
  geo=record
    name:string[80];
    amount:int64;
    capacity:int64;
    man:int64;
    ship:string[64];
  end;
var
  geo_bd : file of geo;
  my_geo : geo;
  choice : integer;
 
procedure output_rec;
begin
  clrscr;
  writeln('Судовые спасательные средства:');
  writeln('Наименование Количество Грузоподъемность кг. Человек   Судно');
  reset(geo_bd);
  while not eof(geo_bd) do
    begin
      read(geo_bd,my_geo);
      with my_geo do
        begin
          write(name:5,' ');
          write(amount:15,' ');
          write(capacity:10,' ');
          write(man:18,' ');
          write(ship:10,' ');
        end;
      writeln;
    end;
  writeln('Нажмите Enter для перехода в главное меню.');
  readln;
  closefile(geo_bd);
end;
 
procedure append_rec;
begin
  clrscr;
  writeln('Добавление записи в базу данных "Спасательные средства":');
  reset(geo_bd);
  with my_geo do
    begin
      write('Название :');     readln(name);
      write('Количество :');    readln(amount);
      write('Грузоподъемность,кг :'); readln(capacity);
      write('Человек:');           readln(man);
      write('Судно :');             readln(ship);
    end;
  seek(geo_bd,filesize(geo_bd));
  write(geo_bd,my_geo);
  writeln;
  writeln('Нажмите Enter для перехода в главное меню.');
  readln;
  closefile(geo_bd);
end;
 
procedure delete_rec;
var
  n,i : integer;
  s : String;
  t : geo;
begin
  clrscr;
  writeln('Удаление записи из базы данных "Спасательные средства":');
  write('Введите название Судна: '); readln(s);
  i:=0;
  n:=-maxint;
  Reset(geo_bd);
  while not eof (geo_bd) do
    begin
      read(geo_bd,t);
      inc(i);
      if t.ship=s then
        begin
          n:=i;
          break;
        end;
    end;
  if (filesize(geo_bd)<n) or (n<0) then
    begin
      writeln('В файле нет такой записи');
      closefile(geo_bd);
      writeln;
      writeln('Нажмите Enter для перехода в главное меню.');
      readln;
      exit;
    end;
  seek(geo_bd,n-1);
  for i:=n-1 to filesize(geo_bd)-2 do
    begin
      seek(geo_bd,i+1);
      read(geo_bd,t);
      seek(geo_bd,i);
      write(geo_bd,t);
    end;
  seek(geo_bd,filesize(geo_bd)-1);
  truncate(geo_bd);
  closefile(geo_bd);
  output_rec;
  writeln;
  writeln('Нажмите Enter для перехода в главное меню.');
  readln;
 
end;
 
procedure sort_rec;
const
  n=100;
var
  geo_arr : array [1..n] of geo;
  num,j,i : integer;
  t : geo;
begin
  clrscr;
  writeln('Спасательные средства, отсортированные по названию судов:');
  writeln('Наименование Количество Грузоподъемность кг. Человек   Судно');
  i:=0;
  reset(geo_bd);
  while not eof(geo_bd) do
    begin
      read(geo_bd,geo_arr[i+1]);
      inc(i);
    end;
  num:=i;
  for i:=1 to num do
    for j:=i+1 to num do
      if geo_arr[i].ship>geo_arr[j].ship then
        begin
          t := geo_arr[i];
          geo_arr[i]:=geo_arr[j];
          geo_arr[j]:=t;
        end;
  for i:=1 to num do
    begin
      with geo_arr[i] do
        begin
          write(name:5,' ');
          write(amount:15,' ');
          write(capacity:10,' ');
          write(man:18,' ');
          write(ship:10,' ');
        end;
      writeln;
    end;
  writeln('Нажмите Enter для перехода в главное меню.');
  readln;
  closefile(geo_bd);
end;
 
procedure list_rec;
const
  n=100;
var
  geo_arr : array [1..n] of geo;
  num,j,i : integer;
  t : geo;
begin
  clrscr;
  writeln('Спасательные средства, грузоподъемность:');
  writeln('Грузоподъемность кг.   Судно');
  reset(geo_bd);
i:=0;
  reset(geo_bd);
  while not eof(geo_bd) do
    begin
      read(geo_bd,geo_arr[i+1]);
      inc(i);
    end;
  num:=i;
  for i:=1 to num do
    for j:=i+1 to num do
      if geo_arr[i].capacity>geo_arr[j].capacity then
        begin
          t := geo_arr[i];
          geo_arr[i]:=geo_arr[j];
          geo_arr[j]:=t;
        end;
  for i:=1 to num do
    begin
      with geo_arr[i] do
        begin
          write(capacity:10,' ');
          write(ship:17,' ');
        end;
      writeln;
    end;
  writeln('Нажмите Enter для перехода в главное меню.');
  readln;
  closefile(geo_bd);
end;
 
procedure create_bd;
begin
  clrscr;
  writeln('Создание новой базы данных:');
  rewrite(geo_bd);
  with my_geo do
    begin
      write('Название :');             readln(name);
      write('Количество :');                readln(amount);
      write('Грузоподъемность,кг :');  readln(capacity);
      write('Человек:');               readln(man);
      write('Судно :');          readln(ship);
    end;
  write(geo_bd,my_geo);
  closefile(geo_bd);
  writeln('Нажмите Enter для перехода в главное меню.');
  readln;
end;
 
begin
  clrscr;
  assignfile(geo_bd,'geo.dat');
  { main loop }
  while true do
    begin
      clrscr;
      writeln('Выберите соответствующий пункт меню:');
      writeln('1. Вывод данных.');
      writeln('2. Добавление записи.');
      writeln('3. Удаление записи.');
      writeln('4. Сортировка названия Судов по алфавиту.');
      writeln('5. Спасательные средства, грузоподъемность');
      writeln('6. Создание новой базы данных.');
      writeln('0. Выход.');
      readln(choice);
      case choice of
        1 : output_rec;
        2 : append_rec;
        3 : delete_rec;
        4 : sort_rec;
        5 : list_rec;
        6 : create_bd;
        0 : exit;
      end; { of case }
    end;
end.
вот такое детище получилось у меня
0
05.01.2015, 02:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.01.2015, 02:40

Вывести в алфавитном порядке слова в строке
вывести в алфавитном порядке cлова в строке.

Строки. вывести слова в алфавитном порядке
Дана последовательность слов от 1 до 30,в каждом из которых от 1 до 5...

Вывести список сотрудников в алфавитном порядке
Напишите программу,которая создает текстовый фаил и выводит список сотрудников...


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

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

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