Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 1
Регистрация: 14.05.2012
Сообщений: 55

Работа с типизированым файлом: процедура для поиска кафедры

05.09.2016, 01:44. Показов 1181. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, помогите пожалуйста на основе имеющегося кода написать процедуру, для поиска кафедры, на которой читается больше всего предметов

Код ввода данных:

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
program PCK;
 
uses
  crt;
type
TSubject =record  
 Name:string[20]; {Название предмета}
 CountH:byte; {Количество часов}
 Lector:string[20]; {Преподаватель}
 Cafedra:string[20]; {Кафедра}
 CountE:byte; {Методические пособия – количество в электронном виде}
 CountB:byte; {Методические пособия – количество на бумажном носителе}
 end;
 
var
  Subjs: array[1..25] of TSubject;
  Subj: TSubject;
  f: file of TSubject;
  myCase: byte;
  n: integer;
  
{-- Процедура ввода данных --}
procedure pEnter;
var
  i: integer;
begin
clrscr;
  assign(f, 'subject.dat');
  rewrite(f);
  repeat
  write('Сколько предметов подрят вы хотите ввести? от 1 до 10: ');
  readln(n);
  until n in [1..10];
  for i := 1 to n do
  begin
   writeln('Введите', ' ', i, ' ', 'предметов');
   with Subj do 
   begin   
    write('|Введите название предмета................|- '); readln(Name);
    write('|Введите количество часов.................|- '); readln(CountH);
    write('|Введите преподавателя....................|- '); readln(Lector);
    write('|Введите название кафедры.................|- '); readln(Cafedra);
    write('|Количество методических пособий в электронном виде........|- '); readln(CountE);
    write('|Количество методических пособий на бумажном носителе......|- '); readln(CountB);
    writeln;
    write(f, Subj); 
  end;
 end;
 close(f);
end;
 
{-- Процедура чтения данных --}
procedure pRead;
var
  i: integer;
begin
  clrscr;
  assign(f, 'subject.dat');
  reset(f);
  i := 1;
  while not (eof(f)) do 
  begin
    read(f, Subjs[i]);
       writeln(i,Subjs[i].Name:15,' ',Subjs[i].CountH,' ',Subjs[i].Lector:15,' ',Subjs[i].Cafedra:15,'  ',Subjs[i].CountE,' ',Subjs[i].CountB,' ');
    i := i + 1; 
  end;
  close(f);
  n := i - 1;
  writeln(' ');
  writeln('Нажмите Enter для взврата в меню');
  readln;
  clrScr;
end;
 
begin
repeat
  Writeln('------ Меню ------');
  Writeln('1 : Ввод новых данных');
  Writeln('2 : Чтение данных');
  writeln('3 : Выход');
  readln(myCase);
    case myCase of
      1: pEnter;
      2: pRead;
      3:begin
      writeln('Нажмите Enter для выхода');
      Readln;
      exit;
      end
      else 
        begin
        writeln('Нажмите Enter и повторите ваш ввод');
        Readln; end;
        end
        until (myCase=3);
end.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.09.2016, 01:44
Ответы с готовыми решениями:

Написать процедуру поиска/распечатки записи по номеру кафедры
Представить данные о кафедрах института в виде массива записей со структурой: Кафедра Номер кафедры ЗавКафедрой ФИО Номер...

Процедура поиска файлов забивает целевой массив одним и тем же файлом
Здравствуйте. У меня есть код, который должен искать файлы определенного типа: Prey : array of String; procedure...

Процедура для поиска максимальной даты
Всем привет. Никак не могу понять в чем ошибка. У меня есть БД на Mysql и я пишу процедуру что бы находило макс дату. Вот моя основная...

8
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
05.09.2016, 06:03
Лучший ответ Сообщение было отмечено imfrozen как решение

Решение

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
program PCK;
 
uses
  crt;
  
const
  maxRecords = 100;
  
type
  TSubject =record  
    Name    : string[20]; {Название предмета}
    CountH  : byte; {Количество часов}
    Lector  : string[20]; {Преподаватель}
    Cafedra : string[20]; {Кафедра}
    CountE  : byte; {Методические пособия – количество в электронном виде}
    CountB  : byte; {Методические пособия – количество на бумажном носителе}
  end;
 
{-- Процедура ввода данных --}
procedure pEnter;
var
  i, n : integer;
  f : file of TSubject;
  Subj  : TSubject;
begin
  clrscr;
  assign(f, 'subject.dat');
  rewrite(f);
  repeat
    write('Сколько предметов подрят вы хотите ввести? от 1 до ', maxRecords, ': ');
    readln(n);
  until n in [1..maxRecords];
  for i := 1 to n do
    with Subj do 
      begin
        writeln('Введите', ' ', i, ' ', 'предметов');
        write('|Введите название предмета................|- '); readln(Name);
        write('|Введите количество часов.................|- '); readln(CountH);
        write('|Введите преподавателя....................|- '); readln(Lector);
        write('|Введите название кафедры.................|- '); readln(Cafedra);
        write('|Количество методических пособий в электронном виде........|- '); readln(CountE);
        write('|Количество методических пособий на бумажном носителе......|- '); readln(CountB);
        writeln;
        write(f, Subj); 
      end;
  close(f);
end;
 
{-- Процедура чтения данных --}
procedure pRead;
var
  n : Integer;
  Subjs : array[1..maxRecords] of TSubject;
  
  {***** Процедура поиска кафедры с наибольшим количеством предметов *****}
  procedure findCafedrs;
  
  type
    tCafedrs = record
      Cafedra : string[20]; { Кафедра              }
      Name    : string;     { Названия предметов   }
      Names   : byte;       { Количество предметов }
    end;
    
  var
    count, i, c : Integer;
    Cafedrs : array [1..maxRecords] of tCafedrs;
    tmp : tCafedrs;
    Flag : Boolean;
    
  begin
    count := 0;
    for i := 1 to n do
      begin
        Flag := False;
        for c := 1 to count do
          if Cafedrs[c].Cafedra = Subjs[i].Cafedra then
            if Pos(#0 + Subjs[i].Name + #1, Cafedrs[c].Name) = 0 then
              begin
                Flag := True;
                Cafedrs[c].Name := Cafedrs[c].Name + (#0 + Subjs[i].Name + #1);
                Inc(Cafedrs[c].Names);
              end;
            
        if Not Flag then
          begin
            Inc(count);
            Cafedrs[c].Cafedra := Subjs[i].Cafedra;
            Cafedrs[c].Names   := 1;
          end;
      end;
      
    repeat
      Flag := True;
      for i := 1 to count - 1 do
        begin
          { Сортировка по количеству предметов }
          if Cafedrs[i].Names < Cafedrs[i+1].Names then
            begin
              Flag := False;
              tmp := Cafedrs[i]; Cafedrs[i] := Cafedrs[i+1]; Cafedrs[i+1] := tmp;
            end
          { Сортировка по названию кафелдры }
          else if (Cafedrs[i].Names < Cafedrs[i+1].Names) and (Cafedrs[i].Cafedra > Cafedrs[i+1].Cafedra) then
            begin
              Flag := False;
              tmp := Cafedrs[i]; Cafedrs[i] := Cafedrs[i+1]; Cafedrs[i+1] := tmp;
            end;
        end;
     until Flag;
     
     { нет ни одной кафедры }
     if count = 0 then
       WriteLn('Нет сведений ни об одной кафедре!')
 
     { всего одна кафедра }
     else if count = 1 then
       WriteLn('Имеются сведения всего об одной кафедре. На ней ведётся предметов ', Cafedrs[1].Names)
 
     { несколько кафедр, но у всех одинаковое количество предметов }
     else if Cafedrs[1].Names = Cafedrs[count].Names then
       WriteLn('На всех ', count, ' кафедрах одинаковое количество предметов. Предметов ', Cafedrs[1].Names)
       
     { максимальное количество предметов у более чем одной кафедры }
     else if Cafedrs[1].Names = Cafedrs[2].Names then
       begin
         WriteLn('Максимальное количество предметов на следующих кафедрах:');
         i := 1;
         repeat
           WriteLn('    ', Cafedrs[i].Cafedra);
           Inc(i);
         until Cafedrs[1].Names <> Cafedrs[i].Names;
         WriteLn('На каждой из них предметов ', Cafedrs[1].Names);
       end
       
     { только одна кафедра }
     else
       WriteLn('Максимальное количество предметов на кафедре ', Cafedrs[1].Cafedra, '. В количестве ', Cafedrs[1].Names);
  end;
  {***********************************************************************}
  
var
  i : integer;
  f : file of TSubject;
begin
  clrscr;
  assign(f, 'subject.dat');
  reset(f);
  i := 0;
  while not (eof(f)) do 
    begin
      i := i + 1; 
      read(f, Subjs[i]);
      writeln(i,Subjs[i].Name:15,' ',Subjs[i].CountH,' ',Subjs[i].Lector:15,' ',Subjs[i].Cafedra:15,'  ',Subjs[i].CountE,' ',Subjs[i].CountB);
    end;
  close(f);
  writeln;
  n := i;
  
  findCafedrs; { Поиск кафедры с наибольшим количеством предметов }
  
  writeln('Нажмите Enter для взврата в меню');
  readln;
  clrScr;
end;
 
var
  myCase : byte;
begin
  repeat
    Writeln('------ Меню ------');
    Writeln('1 : Ввод новых данных');
    Writeln('2 : Чтение данных');
    writeln('3 : Выход');
    readln(myCase);
    case myCase of
      1: pEnter;
      2: pRead;
      3: begin
           writeln('Нажмите Enter для выхода');
           Readln;
           exit;
         end
    else 
      begin
        writeln('Нажмите Enter и повторите ваш ввод');
        Readln;
      end;
    end; { case }
  until False; { ибо при myCase=3 сюда никогда не попадём! }
end.
1
0 / 0 / 1
Регистрация: 14.05.2012
Сообщений: 55
05.09.2016, 08:03  [ТС]
Спасибо большое,работает, вот еще вопрос появился:
Нужно найти преподавателя с максимальным количеством электронных пособий и преподавателя с минимальным количеством бумажных пособий.
Максимальное получилось найти а минимальное не получается.

Максимальное нахожу так:
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
procedure pZapros1;
var LecMax:string;
    max:word;
    i: integer;
begin
  assign(f,'subject.dat');
  reset(f);
  clrscr;
  max:=0;
  LecMax:='';
  for i:=1 to filesize(f) do
  begin
    read(f,Subj);
    if (Subj.CountE>max) then
      begin
        max:=Subj.CountE; LecMax:=Subj.Lector;
      end;
  end;
  writeln('Преподаватель, написавший больше всех методических пособий в электронном виде:');
  writeln(' ');
  writeln('|',LecMax:11,'|'    ,max:17,    '|                                   ');
  close(f);
  writeln('                                                        ');
  writeln('Нажмите ENTER для выхода ');
  readln;
end;
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
05.09.2016, 08:14
Цитата Сообщение от imfrozen Посмотреть сообщение
Максимальное нахожу так:
А если один преподаватель будет вести два предмета, то ваша процедура сделает неверные выводы!

Посмотрите как я сделал накопление информации по кафедрам в процедуре findCafedrs и попробуйте повторить для преподавателей.

P.S. Если бы был указан определённый IDE, то можно было бы немного оптимизировать действия программы.
P.S.S. А если был указан уровень выполнения задания (массивы, динамические списки, классы или объекты), то можно было бы ещё и оптимизировать методы решения ;–)
1
0 / 0 / 1
Регистрация: 14.05.2012
Сообщений: 55
05.09.2016, 12:10  [ТС]
Разве количество предметов преподавателя как-то влияет на максимальное число методических работ?
Вот для интереса проверил, вроде работает, поправьте, если неправ:

PS. IDE PascalABC.NET
Миниатюры
Работа с типизированым файлом: процедура для поиска кафедры   Работа с типизированым файлом: процедура для поиска кафедры  
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
05.09.2016, 12:16
Ну сами посмотрите: на втором скриншоте prepod1 задан во всех трёх случаях, значит на первом скриншоте должно быть число 32!

С IDE разобрались.
Теперь осталось разобраться с уровнем.
1
0 / 0 / 1
Регистрация: 14.05.2012
Сообщений: 55
05.09.2016, 12:25  [ТС]
Да, понял, спасибо.
По поводу уровня, как вы уже смогли заметить, всё печально, так что даже не знаю, возможно массивы.
Попытался вникнуть в вашу процедуру по кафедрам, понял что это для меня суперсложно.
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
06.09.2016, 07:37
Лучший ответ Сообщение было отмечено imfrozen как решение

Решение

Как то вот так под PABC.NET:

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
uses
  crt;
  
const
  maxRecords = 100;
  fName = 'subject.dat';
  
type
  TSubject =record  
    Name    : string[20]; {Название предмета}
    CountH  : byte; {Количество часов}
    Lector  : string[20]; {Преподаватель}
    Cafedra : string[20]; {Кафедра}
    CountE  : byte; {Методические пособия – количество в электронном виде}
    CountB  : byte; {Методические пособия – количество на бумажном носителе}
  end;
 
var
  Size : Integer; // Количество записей в массиве
  aSub : array [1..maxRecords] of TSubject; // Массив записей
 
/// Чтение всего файла в массив ------------------------------------------------
procedure ReadFileToArray;
begin
  Size := 0;
  if Not System.IO.File.Exists(fName) then
    Exit; // Файла нет. Всем привет!
    
  var f : File of TSubject;
  Reset(f, fName);
  while Not EOF(f) do
    begin
      Size += 1;
      Read(f, aSub[Size]);
    end;
  Close(f);
end; // ReadFileToArray - Чтение всего файла в массив
 
/// Добавление записей ---------------------------------------------------------
procedure pAdd;
begin
  ClrScr;
  var Sub : TSubject;
  with Sub do
    begin
      Name    := ReadLnString ('         Название предмета:');
      CountH  := ReadLnInteger('          Количество часов:');
      Lector  := ReadLnString ('Фамилия И.О. преподавателя:');
      Cafedra := ReadLnString ('          Название кафедры:');
      WriteLn                 ('Количество пособий');
      CountE  := ReadLnInteger('        в электронном виде:');
      CountB  := ReadLnInteger('      на бумажном носителе:');
    end;
    
  // Добавление в файл
  var f : File of TSubject;
  if Not System.IO.File.Exists(fName) then
    // Cоздание нового файла
    Rewrite(f, fName)
  else
    // Переходим в конец существующего файла
    begin
      Reset(f, fName);
      Seek(f, Size);
    end;
  Write(f, Sub);
  Close(f);
  
  // Добавление в массив
  Size += 1;
  aSub[Size] := Sub;
end; // pAdd - Добавление записей
 
/// Просмотр записей -----------------------------------------------------------
procedure pSee;
begin
  ClrScr;
  WriteLn('-'*79);
  WriteLn(' № | Название предмета|Часов|  Преподаватель   |     Кафедра      | Пособий Э/Б');
  WriteLn('-'*79);
  for var n := 1 to Size do
    with aSub[n] do
      WriteLnFormat('{0,3}|{1,-18}| {2,3} |{3,-18}|{4,-18}|  {5,3} / {6,-3}',
        n, Name, CountH, Lector, Cafedra, CountE, CountB);
  WriteLn('-'*79);
  ReadLnString('Нажмите Enter для возврата в меню...');
end; // pSee - Просмотр записей
 
/// Поиск кафедры с наибольшим количеством предметов ---------------------------
procedure findCafedrs;
  
type
  tCafedrs = record
    Cafedra : string[20]; { Кафедра              }
    Name    : string;     { Названия предметов   }
    Names   : byte;       { Количество предметов }
  end;
    
var
  Cafedrs : array [1..maxRecords] of tCafedrs;
    
begin
  ClrScr;
  var count := 0;
  var Flag : Boolean;
  for var i := 1 to Size do
    begin
      Flag := False;
      for var c := 1 to count do
        if Cafedrs[c].Cafedra = aSub[i].Cafedra then
          if Pos(#0 + aSub[i].Name + #1, Cafedrs[c].Name) = 0 then
            begin
              Flag := True;
              Cafedrs[c].Name := Cafedrs[c].Name + (#0 + aSub[i].Name + #1);
              Inc(Cafedrs[c].Names);
            end;
            
      if Not Flag then
        begin
          Inc(count);
          Cafedrs[count].Cafedra := aSub[i].Cafedra;
          Cafedrs[count].Names   := 1;
        end;
    end;
      
  repeat
    Flag := True;
    for var i := 1 to count - 1 do
      begin
        { Сортировка по количеству предметов }
        if Cafedrs[i].Names < Cafedrs[i+1].Names then
          begin
            Flag := False;
            var tmp := Cafedrs[i]; Cafedrs[i] := Cafedrs[i+1]; Cafedrs[i+1] := tmp;
          end
        { Сортировка по названию кафелдры }
        else if (Cafedrs[i].Names < Cafedrs[i+1].Names) and (Cafedrs[i].Cafedra > Cafedrs[i+1].Cafedra) then
          begin
            Flag := False;
            var tmp := Cafedrs[i]; Cafedrs[i] := Cafedrs[i+1]; Cafedrs[i+1] := tmp;
          end;
      end;
   until Flag;
   
   { нет ни одной кафедры }
   if count = 0 then
     WriteLn('Нет сведений ни об одной кафедре!')
 
   { всего одна кафедра }
   else if count = 1 then
     WriteLn('Имеются сведения всего об одной кафедре. На ней ведётся предметов ', Cafedrs[1].Names)
 
   { несколько кафедр, но у всех одинаковое количество предметов }
   else if Cafedrs[1].Names = Cafedrs[count].Names then
     WriteLn('На всех ', count, ' кафедрах одинаковое количество предметов. Предметов ', Cafedrs[1].Names)
     
   { максимальное количество предметов у более чем одной кафедры }
   else if Cafedrs[1].Names = Cafedrs[2].Names then
     begin
       WriteLn('Максимальное количество предметов на следующих кафедрах:');
       var i := 1;
       repeat
         WriteLn('    ', Cafedrs[i].Cafedra);
         Inc(i);
       until Cafedrs[1].Names <> Cafedrs[i].Names;
       WriteLn('На каждой из них предметов ', Cafedrs[1].Names);
     end
     
   { только одна кафедра }
   else
     WriteLn('Максимальное количество предметов на кафедре ', Cafedrs[1].Cafedra, '. В количестве ', Cafedrs[1].Names);
 
  ReadLnString('Нажмите Enter для возврата в меню...');
end; // findCafedrs - Поиск кафедры с наибольшим количеством предметов
 
procedure findMaxE;
begin
  ClrScr;
  
  var List := New Dictionary<string,integer>; // Список преподавателей и количество пособий
  for var i := 1 to Size do
    List[aSub[i].Lector] := List.Get(String(aSub[i].Lector)) + aSub[i].CountE;
  
  if List.Count = 0 then
    WriteLn('Нет сведений о преподавателях!' + NewLine)
  else
    begin
      Write('Преподаватель с наибольшим количеством электронных пособий:');
      var i := 0;
      foreach var Val in List do
        if Val.Value = List.Values.Max then
          begin
            i += 1; Write(i > 1 ? ', ': String(' '), Val.Key);
          end;
      WriteLn('                                            Их у него/у них ', List.Values.Max);
    end;
 
  ReadLnString('Нажмите Enter для возврата в меню...');
end;
  
procedure findMinB;
begin
  ClrScr;
  
  var List := New Dictionary<string,integer>; // Список преподавателей и количество пособий
  for var i := 1 to Size do
    List[aSub[i].Lector] := List.Get(String(aSub[i].Lector)) + aSub[i].CountB;
  
  if List.Count = 0 then
    WriteLn('Нет сведений о преподавателях!' + NewLine)
  else
    begin
      Write('Преподаватель с наименьшим количеством бумажных пособий:');
      var i := 0;
      foreach var Val in List do
        if Val.Value = List.Values.Min then
          begin
            i += 1; Write(i > 1 ? ', ': String(' '), Val.Key);
          end;
      WriteLn('                                            Их у него/у них ', List.Values.Min);
    end;
 
  ReadLnString('Нажмите Enter для возврата в меню...');
end;
 
begin
  ReadFileToArray;
  repeat
    try
      ClrScr;
      WriteLn('В базе данных имеется записей ' + Size + NewLine*5);
      Writeln('-'*18 + ' Меню ' + '-'*18);
      Writeln('     1 : Добавление данных' );
      Writeln('     2 : Просмотр данных'   );
      Writeln('     3 : Поиск кафедры с наибольшим количеством предметов');
      Writeln('     4 : Поиск преподавателя с наибольшим количеством электронных пособий');
      Writeln('     5 : Поиск преподавателя с наименьшим количеством бумажных пособий');
      WriteLn('     0 : Выход'             );
      case ReadLnString('-'*42+NewLine+'    Введите номер желаемого действия:')[1] of
        '1': pAdd; // Добавление
        '2': pSee; // Просмотр
        '3': findCafedrs; // Поиск кафедры с наибольшим количеством предметов
        '4': findMaxE; // Поиск преподавателя с наибольшим количеством электронных пособий
        '5': findMinB; // Поиск преподавателя с наименьшим количеством бумажных пособий
        '0': Exit; // Выход
      end; // case
    except
    end;
  until False;
end.
Добавлено через 5 минут
Может быть не совсем верно…
Ибо не совсем ясны исходные данные:
Чтобы точно знать сколько „уникальных“ пособий у преподавателя, нужно знать какие-то их идентифицирующие характеристики!

Поэтому сделал простое суммирование ;–)
1
0 / 0 / 1
Регистрация: 14.05.2012
Сообщений: 55
06.09.2016, 15:47  [ТС]
Да, никаких характеристик и нет, просто количество.
Спасибо вам большое, все работает как надо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.09.2016, 15:47
Помогаю со студенческими работами здесь

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

Не срабатывает процедура поиска пользователя в БД для его авторизации
Здравствуйте, вот такая проблема: В этой процедуре по нажатию кнопки происходит считывание с таблицы логина и пароля и как бы вход, но...

GUI Работа с текстовым файлом, лог файлом не мешая системе
Хочу написать прогу которая будет по таймеру искать в тхт - лог файле сообщение об ошибке. Например Error: 100 Qt C++ gui изучаю недавно...

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

Работа с файлом. Таблица частотности для символов
Доброго времени, задача такая, открыть файл считать повторяющиеся символы ( посчитать количество ) и потом отсортировать ( пример : символ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
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
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru