IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Очередь, в статической памяти
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 152
Пол: Женский

Репутация: -  0  +


Здравствуйте! Не могли бы вы сказать как можно изменить строчку
newtail:=(Q.tail mod MaxN) + 1; в программе очереди с помощью массива? Пожалуйста, подскажите. В faqe у вас только очередь в дин памяти. Мне нужно, чтобы очередь заполнялась полностью, а не оставляла одно звено. Программа по работе с очередями-добавление и удаление. Сама программа:
Код

program ochered_mas;
const
 MaxN=100;
  type
   Telem=integer;
   Telements=array[1..MaxN]of Telem;
   TQueue=record
    Elements:Telements;
    Head:integer;
    Tail:integer
   end;
    procedure InitQueue(var Q:TQueue);
     begin
      Q.Head:=1;
      Q.tail:=1;
     end;
    procedure PushQ(var Q:Tqueue;E:Telem;var c:boolean);
    var
     newtail:integer;
      begin
       newtail:=(Q.tail mod MaxN) + 1;
      with Q do
       if newtail<>head then
        begin
         tail:=newtail;
         elements[tail]:=E;
         c:=true;
        end
       else
        c:=false;
      end;
    procedure popQ(var Q:tQueue;E:Telem;var c:boolean);
     begin
      if (Q.head<>Q.tail) then
       begin
        with Q do
         begin
          E:=Elements[head];
          head:=(Head mod MaxN)+1;
         end;
       end;
     end;
  var
   Q:Tqueue;
   number:integer;
   E:telem;
   c:boolean;
  begin
     InitQueue(Q);
      repeat
       writeln('1:Push');
       writeln('2:Pop');
       writeln('3:Exit');
       writeln('Vvedite luboy nomer.');
       readln(number);
        case number of
      1:
       begin
        writeln('Vvedite chislo dlya dobavleniya.');
        readln(E);
        pushQ(Q,E,c);
       end;
      2:
       begin
        writeln('Vvedite chislo dlya izvlecheniya.');
        readln(E);
        PopQ(Q,E,c);
        writeln('izvlechonnoye chislo= ',E);
       end;
      end;
     if (Q.head=Q.tail) then
      writeln('Ochered pusta');
    until number=3
  end.


--------------------
Ты спрашиваешь, как я переношу длинные бессонные ночи?Как свеча: как только настает утро, я гасну, тем самым, имея возможность заново загореться.

Нима
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






setare, я бы переписал процедуры PushQ и PopQ вот так:
procedure PushQ(var Q: Tqueue;E: Telem;var c: boolean);
var
newtail:integer;
begin
newtail := (Q.tail mod MaxN) + 1;
with Q do begin
if newtail<>head then begin
elements[tail]:=E; c:=true
end
else c:=false
end;
q.tail:=newtail
end;

procedure popQ(var Q: tQueue;var E: Telem;var c:boolean);
begin
if (Q.head<>Q.tail) then begin
with Q do begin
E:=Elements[head];
head:=(Head mod MaxN)+1;
c := (head <> tail)
end;
end
else c := false;
end;

Так она полностью работоспособна...

Кстати, обрати внимание на то, что в процедуре PopQ перед E:Telem стоит Var, иначе как же ты собираешься возвращать значение из процедуры? blink.gif

Цитата
как можно изменить строчку
А вот эту строчку как раз менять не нужно. Зачем тебе лишний If в программе?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 152
Пол: Женский

Репутация: -  0  +


Мне лишний иф как раз не нужен. Он нужен преподу. Спасиб за обьяснения! Следовательно изменить нельзя?


--------------------
Ты спрашиваешь, как я переношу длинные бессонные ночи?Как свеча: как только настает утро, я гасну, тем самым, имея возможность заново загореться.

Нима
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Ну почему же нельзя?
head:=(Head mod MaxN)+1;

полностью аналогично
if head < maxN then
head := head + 1
else head := 1;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Бывалый
***

Группа: Пользователи
Сообщений: 152
Пол: Женский

Репутация: -  0  +


Спасибо! Вы мне очень помогли! И извините за беспокойство! Кстати, возвращаясь к спискам. Они все-таки не работают. Ни ваш модуль ни то, что я написала. sad.gif


--------------------
Ты спрашиваешь, как я переношу длинные бессонные ночи?Как свеча: как только настает утро, я гасну, тем самым, имея возможность заново загореться.

Нима
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Я не принимаю вот таких голословных утверждений. Если они "не работают", то они не будут в FAQ-е. А если Вы нашли ошибку, то предоставьте полный код, который не выдает правильный результат, потому что я могу написать десяток ссылок на те посты, где ВСЕ эти программы отработали и никаких проблем НЕ возникло.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Faux Viagra Inde
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 5.05.2024 16:06
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name