Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 10.05.2009, 16:08
fleur fleur вне форума
Прохожий
 
Регистрация: 10.05.2009
Сообщения: 2
Репутация: 10
По умолчанию Записи-помогите, пожалуйста!

В условии дан раздел 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  
Старый 10.05.2009, 16:34
Аватар для PhoeniX
PhoeniX PhoeniX вне форума
Always hardcore!
 
Регистрация: 04.03.2009
Адрес: СПб
Сообщения: 3,239
Версия Delphi: GCC/FPC/FASM
Репутация: 62149
По умолчанию

Теги где?
Действительно...Проверил в BD7.
В конце РеадЛН не срабатывает... И слип не помогает...
__________________
Оставайтесь хорошими людьми...
VK id2634397, ds [at] phoenix [dot] dj
Ответить с цитированием
  #3  
Старый 10.05.2009, 16:46
Аватар для Rokuell
Rokuell Rokuell вне форума
Активный
 
Регистрация: 27.12.2006
Адрес: Псков
Сообщения: 274
Версия Delphi: Delphi 7
Репутация: 497
По умолчанию

Дело не в этом. В процессе выполнения кода вылезает ошибка - Выход за границы массива. Зайди в свойства компилятора и поставь проверку
( Project -> Options -> Compiler -> Range Checking )
после чего отлаживай код.
__________________
Велик и могуч наш Object Pascal !
ICQ: 357-591-887
Ответить с цитированием
  #4  
Старый 10.05.2009, 20:07
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

У вас изначально 5 факультетов и 7 групп в каждом, т.е. массив [1..5,1..7]
а обращаетесь вы наоборот:
Код:
 if prepod[n].spisok_grupp[gr,k]
вот и ошибка выхода за диапазон.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 10.05.2009, 23:39
fleur fleur вне форума
Прохожий
 
Регистрация: 10.05.2009
Сообщения: 2
Репутация: 10
По умолчанию

Страдалецъ, спасибо большое! вроде до этого делала наоборот, но не получалось(( Видимо, что-то где-то перепутала.. теперь все работает спасибо еще раз))
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:16.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025