0 / 0 / 0
Регистрация: 26.10.2015
Сообщений: 10
1

Как переделать очередь основанную на массиве в циклическую очередь

08.06.2016, 16:51. Показов 751. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как переделать очередь основанную на массиве в циклическую очередь?
Тут кое-какие попытки. Беда с выводом так же присутствует)
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
uses
  crt;
 
const
  n = 3;
 
type
  
  que = array [1..n] of integer;
 
var
  First, Free: integer;
  x1:integer;
  dis,cod:byte;
  mas:que;
i:integer;
procedure InIt(var Fi, Fr: integer);
begin
  Fi := 1;
  Fr := 1;
end;
 
function Empty(Fi, Fr: integer): boolean;
begin
  if Fi = Fr then Empty := true
  else
    Empty := false;
  
end;
 
procedure Insert(var q: que; var Fi, Fr: integer; var code: byte; x: integer);
begin
  if (Fi=Fr)and (Fi=0) then
  InIt(Fi,fr);
  
  
    if ((Fi=Fr) and (Fi<>1)) or ((Fi=1) and (Fr=n+1)) then 
    begin
    writeln('Очередь полна');
    exit;
  end;
  Q[Fr]:=x;
  Fr := Fr + 1;
  code := 0;
  Inc(dis);
  if fr=n+1 then
  Fr:=1;
  
  
end;
 
procedure remove(var q: que; var Fi, Fr: integer; var code: byte; var x: integer);
begin
  if empty(Fi, Fr)
  then
  begin
    code := 2;
    exit;
  end
  else
  begin
    x := Q[fi];
    fi := fi + 1;
    dec(dis);
    if Fi=n then
    Fi:=1;
  end;
end;
 
procedure Display;
begin
  if dis = 0 then
    writeln('Очередь пуста')
  else
if Free=1 and 
end;
 
begin
  while true do 
  begin
    ClrScr;
    
    writeLn('Программа для работы с очередью');
    writeLn('1 - Добавить элемент в очередь');
    writeLn('2 - Удалить элемент из очереди');
    writeLn('3 - Проверка очереди на наличие элементов');
    writeLn('4 - Вывод очереди');
    writeLn('.....');
    Display;
    gotoxy(7, 6);
    readLn(i);
    gotoxy(1, 9);
    case i of 
      1:
        begin
          Writeln('Введите число');
          Readln(x1);
          Insert(mas,First,Free,cod,x1);
        end;
      2:
        begin
        if dis=0 then
  InIt(First,free);
          remove(mas,First,Free,cod,x1);
         
        end;
      3:
        begin
        if dis = 0 then begin writeln('Очередь пуста');Sleep(3000)
        end
        else
        begin
          WritelnFormat('В очереди {0} элементов',dis);
          Sleep(3000);
          end;
        end;
      4:
        begin
          ClrScr;
          display;
          writeln;
          
          Sleep(3000);
          
        end;
    end;
  end;
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.06.2016, 16:51
Ответы с готовыми решениями:

Организуйте циклическую очередь для хранения строк
Помогите, пожалуйста. Организуйте циклическую очередь для хранения строк. Для очереди...

Организуйте циклическую очередь для хранения строк
Организуйте циклическую очередь для хранения строк. Для очереди используйте массив указателей на...

Реализовать. Циклическую очередь. Удалить указанный элемент и все предшествующие
Прошу очень сильно Реализовать Циклическую очередь. Удалить указанный элемент и все предшествующие....

Сформировать односвязную очередь из элементов, которые входят в очередь Q1, но не входят в очередь Q2
Составить программу обработки динамической структуры данных: сформировать односвязную очередь Q из...

1
5077 / 2649 / 2349
Регистрация: 10.12.2014
Сообщений: 10,024
09.06.2016, 07:38 2
Как то так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
procedure Wait;
begin
  ReadLnString(NewLine + 'Для продолжения нажмите Enter...');
end;
 
function InputNumber(var N : Integer) : Boolean;
begin
  var strN := ReadLnString('Введите числовое значение:');
  try
    N := StrToInt(strN);
    Result := True;
  except
    WriteLn('Введённое значение не является целым числом!');
    Result := False;
  end;
end;
 
type
  tElements = class
    N : Integer;
    X : tElements;
    
    constructor (N : Integer; X : tElements);
    begin
      Self.N := N;
      Self.X := X;
    end;
  end;
  
type
  tSpis = class
    E : tElements;
    Count : Integer;
    
    constructor;
    begin
      Count := 0;
    end;
    
    procedure See;
    begin
      WriteLn(NewLine, '~'*25, NewLine, 'Просмотр элементов в очереди');
      if Count = 0 then
        WriteLn('Очередь пуста!')
      else
        begin
          var Cur := E;
          Write('В очереди: ');
          repeat
            Print(Cur.N);
            Cur := Cur.X;
          until Cur = E;
          WriteLn;
        end;
      Wait;
    end;
    
    procedure Add;
    begin
      WriteLn(NewLine, '~'*25, NewLine, 'Добавление элемента в очередь');
      var N := 0;
      if InputNumber(N) then
        begin
          if Count = 0 then
            begin
              E := New tElements(N, nil);
              E.X := E;
            end
          else
            begin
              var L := E;
              while L.X <> E do
                L := L.X;
              L.X := New tElements(N, E);
            end;
          Count += 1;
          WriteLn('В очередь добавлено значение ' + N + '.  Текущий размер очереди ' + Count + '.');
        end;
      Wait;
    end;
    
    procedure Del;
    begin
      WriteLn(NewLine, '~'*25, NewLine, 'Удаление элемента из очереди');
      if Count = 0 then
        WriteLn('Очередь пуста!')
      else
        begin
          var N := 0;
          if InputNumber(N) then
            begin
              var Cur := E;
              repeat
                if Cur.N <> N then
                  Cur := Cur.X;
              until (Cur = E) or (Cur.N = N);
              if Cur.N = N then
                begin
                  Count -= 1;
                  if Count > 0 then
                    begin
                      var Pred := E;
                      while Pred.X <> Cur do
                        Pred := Pred.X;
                      Pred.X := Cur.X;
                      if Cur = E then
                        E := Pred.X;
                    end;
                  WriteLn('Из очереди удалено значение ' + N + '.  Текущий размер очереди ' + Count + '.');
                end
              else
                WriteLn('Значение ' + N + ' не найдено в очереди!');
            end;
        end;
      Wait;
    end;
    
    procedure Find;
    begin
      WriteLn('Поиск наличия элементов');
      if Count = 0 then
        WriteLn('Очередь пуста!')
      else
        begin
          var N := 0;
          if InputNumber(N) then
            begin
              var countN := 0;
              var Cur := E;
              repeat
                if Cur.N = N then countN += 1;
                Cur := Cur.X;
              until Cur = E;
              if countN = 0 then
                WriteLn('Не найдено ни одного значения ' + N + '.')
              else
                WriteLn('Найдено значение ' + N + '.  Количество совпадений ' + countN + '.');
            end;
        end;
      Wait;
    end;
  end;
  
 
begin
  var Sp := New tSpis;
  var answer : String;
  repeat
    WriteLn(NewLine*5, '~'*25, NewLine*2, 'Меню операций с очередью:');
    WriteLn('  1 - Вывод очереди'                 );
    WriteLn('  2 - Добавить элемент'              );
    WriteLn('  3 - Удалить элемент'               );
    WriteLn('  4 - Проверить на наличие элементов');
    WriteLn('  0 - Выход'                         );
    answer := ReadLnString(NewLine + '-'*25 + NewLine + 'Введите номер действия:');
    
    if answer.Length > 0 then
      case answer[1] of
        '1' : Sp.See;
        '2' : Sp.Add;
        '3' : Sp.Del;
        '4' : Sp.Find;
      end;
  until (answer.Length > 0) and (answer[1] = '0');
  WriteLn(NewLine*5);
end.
0
09.06.2016, 07:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.06.2016, 07:38
Помогаю со студенческими работами здесь

Очередь (сделать очередь, чтобы добавляло, удаляло, читало. Не STL.)
Помогите пожалуйста написать очередь. Есть Температура double и ее тип int ну и нужно сделать...

Сформировать очередь по файлу целых чисел. Промоделировать очередь в супермаркете
Сформировать очередь по файлу целых чисел. Промоделировать очередь в супермаркете. В каждый момент...

Возможно ли смоделировать очередь, где условие входа в очередь задаётся логическим выражением?
Доброго всем дня! Моделирую Lean/Kanban, есть такое требование: пользователь должен иметь...

Дана очередь с вещественными числами, упорядоченными по убыванию. Добавить в очередь среднее арифметическое элементов
Дана очередь с вещественными числами, упорядоченными по убыванию. Добавить в очередь среднее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru