![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны | 
![]()  | 
	
	
| 
		 | 
	Опции темы | Поиск в этой теме | Опции просмотра | 
| 
	 | 
| 
		 
			 
			#1  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 В условии дан раздел type. это список преподавателей (ФИО, специальность, номера групп, в которых они ведут). Надо написать логическую функцию, которая определяет, есть ли преподаватели, ведущие занятия только в одной группе. если есть, вывести их ФИО. 
		
	
		
		
		
		
		
	
		
		
	
	
	Я вот написала, но после ввода информации о преподавателях программа закрывается. Помогите, пожалуйста! Код: 
	program Prepodavatel;
{$APPTYPE CONSOLE}
uses
  SysUtils;
const
  kol_prepod=2;
type
  Tgruppa=1..7;
  Tgruppy_kursa=array[Tgruppa] of boolean;
  Tgruppy_fak=array[1..5] of Tgruppy_kursa;
  Tprepod=record
            fio:string;
            spec:(matematika,mehanika); 
            spisok_grupp:Tgruppy_fak
          end;
  Tvse_prepod=array[1..kol_prepod] of Tprepod;
var
  prepod:Tvse_prepod;
  i:byte;
  nomer,danet:0..1;
  gruppa:Tgruppa;
  kurs:1..5;
  t,b:boolean;
//----------------------------------------------------------------------
function proverka(n:integer):boolean;
  var sk:byte;
      gr:Tgruppa;
      k:1..5;
  begin
    sk:=0;
    for gr:=1 to 7 do
      for k:=1 to 5 do
        if prepod[n].spisok_grupp[gr,k]=true then sk:=sk+1;
    if sk=1 then result:=true
      else result:=false
  end;
//---------------------------------------------------------------------
begin
  //ввод данных о преподавателях
  for i:=1 to kol_prepod do
    begin
      writeln('vveite informaciyu o ',i,' prepodavatele:');
      write('FIO: ');
      readln(prepod[i].fio);
      write('nomer specialnosti (matematica-0, mehanika-1): ');
      readln(nomer);
      if nomer=0 then prepod[i].spec:=matematika
        else prepod[i].spec:=mehanika;
      for gruppa:=1 to 7 do
        for kurs:=1 to 5 do
          prepod[i].spisok_grupp[gruppa,kurs]:=false;
      b:=true;
      while b<>false do
        begin
          write('vvedite gruppu: ');
          readln(gruppa);
          write('vvedite kurs: ');
          readln(kurs);
          prepod[i].spisok_grupp[gruppa,kurs]:=true;
          write('dobavit eshe gruppu? da-vvedite 1, net-0: ');
          readln(danet);
          if danet=1 then b:=true
            else b:=false
        end;
      writeln
    end;
  t:=false;
  for i:=1 to kol_prepod do
    if proverka(i)=true then
      begin
        writeln(prepod[i].fio);
        t:=true
      end;
  readln;
  if t=false then writeln('takih prepodavateley net');
  readln
end.lmikle: Пользуемся тегами!!!  | 
| 
		 
			 
			#2  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Теги где? 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	Действительно...Проверил в BD7. В конце РеадЛН не срабатывает... И слип не помогает...  | 
| 
		 
			 
			#3  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 Дело не в этом. В процессе выполнения кода вылезает ошибка - Выход за границы массива. Зайди в свойства компилятора и поставь проверку 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	( Project -> Options -> Compiler -> Range Checking ) после чего отлаживай код.  | 
| 
		 
			 
			#4  
			
			
			
			
		 
		
		
	 | 
||||
		
		
  | 
||||
| 
	
	
		
			
			 У вас изначально 5 факультетов и 7 групп в каждом, т.е. массив [1..5,1..7] 
		
	
		
		
		
		
			
		
		
		
		
	
		
		
	
	
	а обращаетесь вы наоборот: Код: 
	if prepod[n].spisok_grupp[gr,k]  | 
| 
		 
			 
			#5  
			
			
			
			
		 
		
		
	 | 
|||
		
		
  | 
|||
| 
	
	
		
			
			 Страдалецъ, спасибо большое! вроде до этого делала наоборот, но не получалось(( Видимо, что-то где-то перепутала.. теперь все работает 
		
	
		
		
		
		
		
	
		
		
	
	
	   спасибо еще раз)) |