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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2009, 13:32   #11
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А почему вы не говорите, правильно или нет,
Может быть потому что считаю тебя неглупой )

Процедура действительно на первый взгляд неверная.
Что это за AddQ такой? Где оно описано?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.11.2009, 14:08   #12
diliana
Форумчанин
 
Аватар для diliana
 
Регистрация: 24.05.2009
Сообщений: 119
По умолчанию

Цитата:
Stilet
Может быть потому что считаю тебя неглупой )
очень приятно

Цитата:
Процедура действительно на первый взгляд неверная.
Что это за AddQ такой? Где оно описано?
Она описана ранее, вот полный вариант
Вствьте в Делфи и попробуйте компилировать,
откомпилиться нормально, но будет вылетать при работе с массивом...

Код:
program Project_MQ_4;

Последний раз редактировалось diliana; 13.11.2009 в 00:01. Причина: ошибочный код
diliana вне форума Ответить с цитированием
Старый 12.11.2009, 14:36   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ясно. Все банально.
Запомни и заруби себе... в записнокй книжке - если работаешь с указателями как можно чаще делай проверки на правильность указателя.
В твоем случае виновником был вывод последнего элемента массива в AddMasQ.

Поставь туда банальную проверку на мусор и будет тебе счастье:
Код:
        if  mass[i]<>NIL then
         write( mass[i]^.data);
А так прога работает отлично.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.11.2009, 00:03   #14
diliana
Форумчанин
 
Аватар для diliana
 
Регистрация: 24.05.2009
Сообщений: 119
По умолчанию

Stilet
Serge_Bliznykov
Спасибо вам.
Сейчас исправлю. И выложу, то что получилось

Последний раз редактировалось diliana; 13.11.2009 в 00:25.
diliana вне форума Ответить с цитированием
Старый 13.11.2009, 12:25   #15
diliana
Форумчанин
 
Аватар для diliana
 
Регистрация: 24.05.2009
Сообщений: 119
По умолчанию

С добавлением очереди в массив ясно.
Теперь надо организовать просмотр массива.
Это должно выглядеть так:

Цитата:
очередь 1 -> 1 5 9 6 6
очередь 2 -> 2 2 5 4 4
.............
Я вот написала код для этой процедуры, но где-то ошибка, т.к. при попытке вывести элементы очереди, программа вылетает....
Посмотрите пожалуста.

Код:
{просмотр массива}
Procedure ScanMasQ(var mass: TMassQu);
Вот листинг прог-мы

Код:
program Project_MQ_4a;

Последний раз редактировалось diliana; 14.11.2009 в 04:42. Причина: удален ошибочный код
diliana вне форума Ответить с цитированием
Старый 13.11.2009, 12:51   #16
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
diliana
А зачем ты при просмотре просишь ввести число элементов массива?
Пусть весь массив проходит до последнего неинициализированного элемента

Это раз.
Второе: У тебя почему-то массив когда я ввожу число элементов массива
не наполняется ими. Записывается только в первый элемент и все.

У тя неверно отрабатывает эта функа:
Код:
Function Add_Mass_Last (var mass: TMassQu; LastA:integer): pQueue;
const
  N = 100;
begin
  if lastA = N then WriteLn ('Massiv zapolnen')// если больше_нет_места_для очередей
  else
   begin // иначе выделяем память для новой очереди
    lastA:=lastA+1;
    new(mass[LastA]);// выделить память для новой очереди
    Add_Mass_Last := mass [LastA]; // возвращаем результат функции
  end;
end;
А все потому что ты LastA некоректно изменяешь
Если решила изменять глобальную переменную, передавая ее как параметр, то и указывай ее соответственно:
Код:
Function Add_Mass_Last (var mass: TMassQu; var LastA:integer): pQueue;
I'm learning to live...

Последний раз редактировалось Stilet; 13.11.2009 в 12:57.
Stilet вне форума Ответить с цитированием
Старый 13.11.2009, 13:24   #17
diliana
Форумчанин
 
Аватар для diliana
 
Регистрация: 24.05.2009
Сообщений: 119
По умолчанию

Цитата:
Stilet
У тебя почему-то массив когда я ввожу число элементов массива не наполняется ими. Записывается только в первый элемент и все.
не поняла?
Сначала программа запррашивает число элементов массива - т.е очередей
а потом запрашивает число элементов очереди

У меня вот так программа выглядит.


таким образом я представляю все это так

Последний раз редактировалось diliana; 13.11.2009 в 13:31.
diliana вне форума Ответить с цитированием
Старый 13.11.2009, 13:30   #18
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
diliana
Я пост свой подредактировал
Дописал:

Если решила изменять глобальную переменную, передавая ее как параметр, то и указывай ее соответственно:
Код:
Function Add_Mass_Last (var mass: TMassQu; var LastA:integer): pQueue;
Обрати на это внимание.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.11.2009, 04:53   #19
diliana
Форумчанин
 
Аватар для diliana
 
Регистрация: 24.05.2009
Сообщений: 119
По умолчанию

Stilet спасибо

Цитата:
Если решила изменять глобальную переменную, передавая ее как параметр, то и указывай ее соответственно:
да теперь обратила внимание...
но ведь работать с глобальной переменной, мне крайне не рекомендуют...
Я уже начиталась на форуме, что использование глобальной перем-й очень даже не гуд.
А вообще мне не очень нравиться, то что я сделала, так что буду переделывать ...
diliana вне форума Ответить с цитированием
Старый 14.11.2009, 11:53   #20
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

diliana, анализировать весь вышеприведённый код нет пока времени (да, думаю, что Вы лучше меня справитесь с этим...).
но вот мимо этого утверждения пройти не смог:
Цитата:
Код:
Function Add_Mass_Last (var mass: TMassQu; var LastA:integer): pQueue;
да теперь обратила внимание...
но ведь работать с глобальной переменной, мне крайне не рекомендуют...
Я уже начиталась на форуме, что использование глобальной перем-й очень даже не гуд.
diliana, Вы путаете некоторые важные вещи. Передавать переменную в процедуру как раз таки правильное решение! А вот использовать (а тем паче изменять) переменную в процедуре, которая не описана как входной параметер - это и плохой тон, и повод для написания нестабильного и трудносопровождаемого кода!!
сравните:
Код:
 var AAA, BBB : integer;
 procedure Mult(var A : integer); 
 begin
   A := A * BBB;
   BBB := BBB + 1   
 end;
 ... 
  AAA := 10;
  BBB := 20;
  Mult(AAA);
  WriteLn(AAA:10, BBB:10);
и
Код:
 var AAA, BBB : integer;
 procedure Mult(var A, B : integer); 
 begin
   A := A * B;
   B := B + 1   
 end;
  AAA := 10;
  BBB := 20;
  Mult(AAA,BBB);
  WriteLn(AAA:10, BBB:10);
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перепись значений в массив указателей. Джед Общие вопросы C/C++ 9 28.05.2009 18:12
Массив. Паскаль Fintos Помощь студентам 1 24.04.2009 04:37
массив указателей на методы класса? cout Общие вопросы C/C++ 2 08.05.2008 09:43
Массив указателей на структуры SNAKE89 Общие вопросы C/C++ 4 27.12.2007 10:14