3 / 3 / 7
Регистрация: 03.11.2010
Сообщений: 33
1

создание таблиц в Delphi 7 на языке Object Pascal

22.05.2011, 13:36. Показов 3633. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создать объект таблицу.
Таблица должна обеспечить обработку данных следующего формата:
(ключ) (Краткая характеристика информации) (указатель на источник ин-формации (книга, газета, журнал и т.п.)
Источники информации представляют из себя списки, количество которых определяется количеством разных типов источников. Создать таблицу, сохранить ее в файле.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2011, 13:36
Ответы с готовыми решениями:

Разработать программу на языке Object Pascal в среде Delphi
Разработать программу, ведущую учет результатов сдачи экзаменов студентами одной группы за один...

Массивы в языке Object Pascal
Помогоите, пожалуйста, решить задачу в Delhi: Дан вектор A(2n). Получить количество нечетных среди...

Строки в языке Object Pascal
Помогите, пожалуйста, решить задачу в Delphi: Поиск самого длинного слова в строке и вывод этого...

Не могу найти ошибку (Appmethod на языке Object Pascal)
Всем доброе утром, я пытаюсь сделать практическую работу для андроида, но как известно для андроида...

1
3 / 3 / 7
Регистрация: 03.11.2010
Сообщений: 33
02.06.2011, 22:14  [ТС] 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
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
program project1;
 
{$mode objfpc}{$H+}
 
uses
  Classes, SysUtils
  {62,5*8*5*4 = 10000 you can add units after this };
 
type
  ptr_istoch = ^istochnic;      // структура запись для построения
   istochnic = record           // списков источников
   id:integer;                                                                // уникальный номер для раздела
     nazv_ist:string[255];      
        next:ptr_istoch;
   end;
 
 Plist_branches = ^SP_branches;  // Структура таблица
  SP_branches = record
    id:integer;
    key:string;         // ключ
    character:string[255];  // краткая характеристика информации
    next:Plist_branches;
 current_branche:ptr_istoch;
  end;
 
     TableObj = object
 
     // объявление глобальных переменных
     list_begin:Plist_branches;                   // перемещение по таблице
       list_branches:Plist_branches;              // вход в таблицу
         list_rec:ptr_istoch;
          temp_branch:Plist_branches;
           temp_rec:ptr_istoch;
        //   i:integer;
  t_obchay: ptr_istoch;                  //  для передачи указателя в таблицу
  t_book: ptr_istoch;                    // для построения списка данных (книги)
  t_newspaper: ptr_istoch;               // -||- газеты
  t_journal: ptr_istoch;                 // -||- журналы
   a_glob:integer;
   k_razdelov:integer;
   procedure create_table();   // cоздание таблицы
 
// procedure save();           // процедура сохранения таблицы в файле
 
  constructor init();
  procedure create_list_book(dan:istochnic);      // процедура создания списка источников книг
  procedure create_list_newspaper(dan:istochnic); // процедура создания списка источников газет
  procedure create_list_journal(dan:istochnic);   // процедура создания списка источников журналов
  procedure outlist;
  procedure sort_table();      // процедура сортировки таблицы по полю ключ
 
   procedure vibor_inf(); // выбор информмации и выбор к этой информации всех известных источников
                             // (т.е. вывод 2-го и третьего столбца по условию выборки)
 
   procedure ist();         //  процедура определения и ввода информации в источники
   procedure show_table();   // процедура просмотра всей таблицы
   procedure add_branche();
   procedure show_branche();   // процедура вывода только разделов
   //   destructor done;
     end;
    // объявление глобальных переменных
  var
    obj:TableObj;
     file_table:file of SP_branches; // файловая переменная для сохранения таблицы в файле
   //  file_rec:file of SP_rec;
 
  procedure TableObj.ist();   // процедура создания списков источников
    var
     dan: istochnic;
     a: integer;
      begin
     // Внимание списков много !!!!!!
      writeln('Chtobi_vvesti_istochnik_nazmite_sootvetstvuychuy_cifry');
      writeln('BOOK - 1');
      writeln('NEWSPAPER - 2');
      writeln('JOURNAL - 3');
        readln(a);
        case a of
           1: begin writeln('Vvedite nazvanie istochnika_KNIGI');
              readln(dan.nazv_ist);
              create_list_book(dan); // передача аргумента процедуре для создания списка книг
              end;
           2: begin writeln('Vvedite nazvanie istochnika_NEWSPAPERS');
              readln(dan.nazv_ist);
              create_list_newspaper(dan); // -//- для создания списка газет
              end;
           3: begin writeln('Vvedite nazvanie istochnika_JOURNAL');
              readln(dan.nazv_ist);
              create_list_journal(dan); // -//- для создания списка журналов
              end;
           end;
     if (a<1)or (a>3) then
      begin
       writeln('Vvedinnaya vami cifra must be 1-3');
           ist();                                       // рекурсивное обращение
             end;
   end; // конец процедуре создания источников
 
  procedure TableObj.create_list_book(dan: istochnic);// процедура формирования списка (типа очередь) для книг
  var
 v_book: ptr_istoch;     // возможно переменную нужно сделать глобальной
    link_book: ptr_istoch;
     begin
       new(v_book);
        v_book^:=dan;
 if t_book=nil then // если конец списка
   begin
      new(t_book);
      t_book:=v_book;
   end
 else
   begin
      link_book:=t_book;        // ссылка на конец списка
    while link_book^.next<>nil do
       link_book:=link_book^.next;
         link_book^.next:=v_book;
     end;
       v_book^.next:=nil;
   t_obchay:=v_book;            // глобальной общей, присвоить адрес текущего введенного
   end; // конец процедуры создания списка источников книг
    procedure TableObj.sort_table();  // прцедура сортировки таблицы по полю key
      var
      i,j:integer;
      buf: Plist_branches;
      temp: Plist_branches;
      temp1: Plist_branches;
  begin
  k_razdelov:=0;
      temp1:=list_begin;
        while temp1<>nil do
        begin
          inc(k_razdelov);
          temp1:=temp1^.next;
        end;
       for j:=1 to k_razdelov-1 do
           begin
             temp:=list_begin;
             for i:=1 to k_razdelov-j do
               begin
       //    writeln(temp^.key);
       //     writeln(temp^.next^.key);
                  if (temp^.key) > (temp^.next^.key) then
                    begin
                     new(buf);
 //   writeln(temp^.key);
 //   writeln(temp^.next^.key);
                     buf^.key:=temp^.key;
                     buf^.id:=temp^.id;
                     buf^.character:=temp^.character;
                   //  buf^.current_branche:=temp^.current_branche;
                              temp^.key:=temp^.next^.key;
                              temp^.id:=temp^.next^.id;
                              temp^.character:=temp^.next^.character;
                          //    temp^.current_branche:=temp^.next^.current_branche;
                     temp^.next^.key:=buf^.key;
                     temp^.next^.id:=buf^.id;
                     temp^.next^.character:=buf^.character;
 
                   //  temp^.next^.current_branche:=buf^.current_branche;
                       dispose(buf);
                    end;
                      /// перемещение по списку
                    temp:=temp^.next;
       end;
   end;
   writeln('');
 show_table();
    end;        // конец процедуры сортировки
  procedure TableObj.vibor_inf();
     var
    ss:string;                     // переменная для условия отбора
        begin
            writeln('Vvedite nazvanie inform kotoraya neobchodima');
             readln(ss);
         list_branches:= list_begin;
   while list_branches <> nil do
        begin
      if ss = list_branches^.character
         then
          begin
          write('| ',list_branches^.key, ' ');
          write('| ',list_branches^.character, ' ');
  temp_rec := list_branches^.current_branche;
    while temp_rec <> nil do
    begin
      if list_branches^.id = temp_rec^.id then
        begin
       write('| ', temp_rec^.nazv_ist);
        end;
      temp_rec := temp_rec^.next;
    end;
  end;
    list_branches:= list_branches^.next;
      end;
      writeln('');
  end;
       // Показать всю таблицу
    procedure TableObj.show_table();
        begin
             list_branches:= list_begin;
   while list_branches <> nil do
        begin
          write('| ',list_branches^.key, ' ');
          write('| ',list_branches^.character, ' ');
     temp_rec:=list_begin^.current_branche;
    while temp_rec <> nil do
    begin
      if list_branches^.id = temp_rec^.id then
       begin
      write('| ', temp_rec^.nazv_ist);
       end;
      temp_rec := temp_rec^.next;
    end;
    writeln('');
    list_branches:= list_branches^.next;
  //   inc(k_razdelov);
  end;
 end;   // конец процедуры просмотра таблицы
 
  // Процедура вывода только разделов
  procedure Tableobj.show_branche();
  begin
      writeln('');
        list_branches:=list_begin;
        while list_branches<>nil do
        begin
         write('| ',list_branches^.key,' ');
         write('| ',list_branches^.character,' ');
        list_branches:=list_branches^.next;
      writeln('');
        end;
  end;
    procedure TableObj.add_branche();          // процедура добавления разделов
    var temp:Plist_branches;
        h,n: char;
        link:ptr_istoch;
     begin
       n:='y';
        new(temp);                           // буферная ячейка для добавления разделов
        temp^.next := nil;
        temp^.current_branche := nil;
         temp^.id:=a_glob;
        write('Vvedite key:');
        readln(temp^.key);
        write('Vvedite characteristiky:');
        readln(temp^.character);
     writeln('VIberite istochnick');
     while n='y' do
       begin
      ist;  // обращение к процедуре выбора источников
  // присвоение указателю на источник адреса, где хранится имя источника  при
  // при добавлении превого элемента
      if temp^.current_branche = nil then
         begin
           //new();
    temp^.current_branche:=t_obchay;
    temp^.current_branche^.id:=a_glob;
    temp^.id:=a_glob;
      end
       else
         begin
           link:=temp^.current_branche;
              while link^.next<>nil do
                  link:=link^.next;
                     link^.next:=t_obchay;
                     link^.next^.id:=a_glob;
         end;
        t_obchay^.next:=nil;
   //   writeln('peredav ist   ',list_branches^.ptr_ist^.nazv_ist);
      writeln('Dly etogo razdela est eche istochniki y/n');
        readln(n);
     end;
    if not eof(file_table) then
       Seek(file_table,FileSize(file_table));
       write(file_table,temp^);
 
  list_branches := list_begin;                     //    к началу разделов
  while list_branches^.next <> nil do            // быстрый переход в конец разделов
    list_branches := list_branches^.next;
  list_branches^.next := temp;
    writeln('Chotite vstavit razdel y/n');
      readln(h);
    if h='y' then
      begin
      inc(a_glob);
      add_branche();                               // рекурсивное заполнение таблицы
      end;
 
end;    // конец процедуры добавления разделов
  procedure TableObj.create_list_newspaper(dan: istochnic); // для газет
    var
 v_newspaper: ptr_istoch;     // возможно переменную нужно сделать глобальной
    link_newspaper: ptr_istoch;
     begin
       new(v_newspaper);
        v_newspaper^:=dan;
 if t_newspaper=nil then // если конец списка
   begin
      new(t_newspaper);
      t_newspaper:=v_newspaper;
   end
 else
   begin
      link_newspaper:=t_newspaper;        // ссылка на конец списка
    while link_newspaper^.next<>nil do
       link_newspaper:=link_newspaper^.next;
         link_newspaper^.next:=v_newspaper;
     end;
       v_newspaper^.next:=nil;
    new(t_obchay);
       t_obchay:=v_newspaper;             // глобальной общей присвоить адрес текущего введенного
   end; // конец процедуры создания списка источников газет
 
  procedure TableObj.create_list_journal(dan: istochnic); // для журналов
           var
 v_journal: ptr_istoch;     // возможно переменную нужно сделать глобальной
    link_journal: ptr_istoch;
     begin
       new(v_journal);
        v_journal^:=dan;
 if t_journal=nil then // если конец списка
   begin
      new(t_journal);
      t_journal:=v_journal;
   end
 else
   begin
      link_journal:=t_journal;        // ссылка на конец списка
    while link_journal^.next<>nil do
       link_journal:=link_journal^.next;
         link_journal^.next:=v_journal;
     end;
       v_journal^.next:=nil;
    new(t_obchay);
       t_obchay:=v_journal;             // глобальной общей присвоить адрес текущего введенного
   end; // конец процедуры создания списка источников журналов
 
    procedure TableOBj.outlist;    //  процедура вывода на экран
    var
    v: ptr_istoch;
      begin
       v:=t_journal;     // перемещение в начало списка
   while v<>nil do
      begin
    writeln(v^.nazv_ist);
       v:= v^.next;
        end;
        end;           // конец процедуры вывода
 
   procedure TableObj.create_table();   //создание таблицы и одновременно сохранение в файл
    var link:ptr_istoch;
     n:char;
     begin
     n:='y';
   //Если файл не пустой
  if not eof(file_table) then
  begin
    new(list_begin);
    list_branches := list_begin;
    list_branches^.next := nil;
    list_branches^.current_branche := nil
  end
  else
  begin
    //Если файл пустой
    new(list_branches);
    list_begin := list_branches;
    list_branches^.next := nil;
    list_branches^.current_branche := nil;
//      writeln('branches file id empty... insert data.');
        list_branches^.id:=a_glob;
         write('vvedite_Key:');
          readln(list_branches^.key);
             write('Vvedite charakteristiky:');
               readln(list_branches^.character);
    writeln('VIberite istochnick');
        while n='y' do
       begin
      ist;  // обращение к процедуре выбора источников
 
  // присвоение указателю на источник адреса, где хранится имя источника  при
  // при добавлении превого элемента
      if list_branches^.current_branche = nil then
         begin
    list_branches^.current_branche:=t_obchay;
       list_branches^.current_branche^.id:=a_glob;   // для первого раздела
       list_branches^.id:=a_glob;
      end
       else
         begin
           link:=list_branches^.current_branche;
              while link^.next<>nil do
                  link:=link^.next;
                     link^.next:=t_obchay;
                     link^.next^.id:=a_glob;
         end;
        t_obchay^.next:=nil;
      writeln('Dly etogo razdela est eche istochniki y/n');
        readln(n);
     end;
  end;
  write(file_table, list_branches^);
   inc(a_glob);
    add_branche();
   end; // конец процедуры создания и сохранения таблицы
 constructor TableObj.init();
    begin
     t_book:= nil;
     t_newspaper:= nil;
     t_journal:= nil;
     a_glob:=1;
  assignfile(file_table, 'file_table.f');
    if (FileExists('file_table.f')) then
    begin
      reset (file_table);
      writeln('file_table - reset');  // файл открыт для записи
    end
    else
    begin
      rewrite(file_table);
      writeln('file_table - rewrite');  // файл создан и открыт для записи
    end;
 
    writeln('file create and ready...');
    //заполняем таблицу
  //  create_table();
     end;   // конец конструктора
 
   procedure Menu();
     var
    hh: integer;
   begin
        writeln('Dly vibora deystviy vvedite:');
        writeln('Crete table  -  1 ');
        writeln('Sort tablici - 2 ');
        writeln('Show only branches - 3 ');
        writeln('Vibor_information - 4 ');
        writeln('Show_table - 5 ');
        writeln('Exit - 6');
        readln(hh);
    case hh of
     1:obj.create_table();
     2:obj.sort_table();
     3:obj.show_branche();
     4:obj.vibor_inf();
     5:obj.show_table();
     6:exit;
    end;
    Menu();
 end;
 
 
 //   тело программы
  begin
      obj.init();  // обращение к конструктору
 
    Menu();
    close(file_table);
    readln;
 
end.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.06.2011, 22:14
Помогаю со студенческими работами здесь

Разработать класс и указать методы на языке Object Pascal
Разработать класс и указать методы на языке Object Pascal Класс прямая Члены класса Координаты...

Разработать класс и указанные методы на языке Object Pascal
Вариант 19 Класс Обыкновенная дробь Члены класса Числитель и знаменатель Методы Конструктор,...

Проверить программно код на языке Object Pascal на синтаксические ошибки
Никто не подскажет, как проверить программно код на языке Object Pascal на синтаксические ошибки?

Составьте программу на языке программирования Object Pascal для вычисления значений функции
F(x)= x – sin x на отрезке с шагом h. Результат представить в виде таблицы, первый столбец которой...

Удалить из файла с исходным текстом программы на языке Object Pascal все комментарии
Удалить из файла с исходным текстом программы на языке Object Pascal все комментарии. Сохранил...

Object Pascal (Delphi)
1. Нужно написать программу на языке Object Pascal (Delphi), чтобы она переводила метры в футы и...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru