Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2010, 19:59   #1
Makino
 
Регистрация: 26.11.2010
Сообщений: 4
По умолчанию Разработка объектов-таблиц

Помогите, пожалуйста. Вот условие задачи:
Каждая строка табл. - сведения о некоторых деталях:
Деталь - Количество - Место хранения - Количество - Место хранения - ...
Создать хеш-таблицу из списков деталей при условии, что каждый тип деталей в одной строке снабжается некоторым ключом. Методы: вставить новый элемент в правильное место таблицы, удалить элемент из таблицы, определить число сравнений для каждого из поисков...


Как добавить данные об одном складе в таблицу? я написала так, но у меня неправильно работает, подскажите, где ошибка!
Код:
Procedure Add_Det (var hd: PDlist);
var
dlp: PDlist; // промежуточный элемент двойного списка.
s: string; // вводимое пользователем название детали.
f: boolean; // сигнал для нас - нашли ли такую детальку.
t: integer; // количество созданных данных о детали.
key: string[N]; // ключ.
Sk: Sklad; // переменная склада.
lp, ls, // промежуточные элементы линейного списка.
PStart: PList; // первый элемент линейного списка.
ch2: char; // для выбора пользователя.
begin
writeln;

  if hd = nil then
    begin
      writeln(Russ('Ошибка! Таблицы еще не существует!'));
      writeln;
      exit;
    end;

writeln(Russ('Добавление данных о детали в процессе...'));
writeln;
  write(Russ('Введите название детали:  '));
  readln(s);
  dlp:= hd; 
  f:= false; 
    while dlp <> nil do
      if (dlp^.name <> s) then 
        dlp:= dlp^.down
      else     
        begin
          f:= true;
          t:= dlp^.td;
          key:= dlp^.key; 
          PStart:= dlp^.right;
            if t = N then 
              begin
                writeln(Russ('Ошибка! Количество данных о складах достигло максимального значения!'));
                writeln;
                exit;
              end;
          // Заполнение данных о складах:
            repeat 
              writeln;
                inc(t); 
                  if t > N then // если это количество стало больше, чем нам надо, то...
                    begin
                      writeln(Russ('Ошибка! Количество данных о складах достигло максимального значения!'));
                      writeln;
                      break; 
                    end;
              write(Russ('Введите номер склада (1..' +  IntToStr(N) + ') :  '));
              readln(Sk.Name);
              
                  if key[Sk.name] = '1' then // если данные об этом складе уже есть, то...
                    begin
                      writeln(Russ('Ошибка! Данные об этом складе уже существуют!'));
                     writeln;
                      break; 
                    end;
           write(Russ('Введите количество деталей на данном складе:  '));
              readln(Sk.Num); 
              key[Sk.Num]:= '1'; 
              // создание линейного списка.
                  lp:= nil; 
                  new(lp); 
                  lp^.Det:= Sk;
                  lp^.next:= nil; 
              if PStart = nil then
                begin
                  PStart:= lp;
                  dlp^.right:= PStart;  
               end
              else      
                begin
                  ls:= PStart;
                    while ls^.next <> nil do
                      ls:= ls^.next; 
                  ls^.next:= lp;
                end;
              writeln;
              write(Russ('Продолжить создание данных? (y/n):  '));
              readln(ch2);
             until (ch2 <> 'y') 
           end;
и как удалить информацию об одной детали? с этим пунктом у меня та же история(

заранее благодарна

Последний раз редактировалось Stilet; 19.12.2010 в 20:22.
Makino вне форума Ответить с цитированием
Старый 19.12.2010, 20:26   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Без тьестирования полного кода ошибку просечь не получится.
Да и потом... мне кажется твой пример черезчур сложным...
Не могу понять зачем этот весь код.. Что он делает?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.12.2010, 21:16   #3
Makino
 
Регистрация: 26.11.2010
Сообщений: 4
По умолчанию

вроде должен добавит данные об одном складе. по-моему у меня ошибка в цикле repeat ... until (ch2 <> 'y'), после нажатия 'n' он опять выдает "ведите номер склада [1..10]", тоже самое что при нажатии 'y'
Makino вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Cформировать из 30 таблиц 1 500 000 000 таблиц, за 2 часа. kola672 Фриланс 12 02.11.2010 20:43
Сформировать из 30 таблиц 15 000 таблиц, за 15 минут. kola672 Фриланс 31 19.10.2010 01:22
Анимация объектов ? HWork Gamedev - cоздание игр: Unity, OpenGL, DirectX 5 11.03.2010 22:22
Присваивание объектов Stalevar Общие вопросы Delphi 0 17.02.2009 19:06
Много объектов. Манжосов Денис :) Общие вопросы Delphi 5 04.09.2008 22:34