Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
14 / 14 / 1
Регистрация: 09.01.2012
Сообщений: 258

Очередь на динамическом списке. Поместить гласные и согласные буквы в разные очереди. Исправить код.

16.02.2012, 17:17. Показов 1716. Ответов 10

Студворк — интернет-сервис помощи студентам
Здравствуйте всем. У меня не получается доделать задачу, помогите пожалуйста.
Вот само задание:
Последовательность символов, ограниченную точкой, занести в две очереди, содержащие гласные и согласные буквы русского алфавита. Вывести элементы очереди гласных и согласных букв. Сделать используя динамический список.
Вот мой код: (в нем есть ошибки, но мне кажется, он работает не так как нужно. Подправьте если сможете в нем). Заранее спасибо.

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
uses crt;
type
    PSpisok=^Spisok;
    Spisok=record
    inf:char;
    link:PSpisok;
    ref:PSpisok;
    end;
var glas,soglas,sim,sn:string;
    i:integer;
    px,py:PSpisok;
    a:^char;
    gl:='уеыаоэяиюУЕЫАОЭЯИЮ';
    sogl:='йцкнгшщзхфвпрлджчсмтбЙЦКНГШЩЗХФВПРЛДЖЧСМТБ';
begin
    gotoxy(10,230);
    writeln('Введите символы, ограниченные точкой. Конец ввода +');
    py:=nil;
    read(a^);
    while a^<>'+' do
    begin
    px:=py;
    new(py);
    py^.inf:=a^;
    py^.ref:=px;
    read(a^);
    end;
    while py<>'+' do
    begin
    sn:='';
    sim:='';
    for i:=1 to length (a^) do
        begin
        if a^,sogl<>0 then sn:=sn+a^;
        if a^,gl<>0 then sim:=sim+a^;
        end;
    end;
    end;
clrscr;
writeln('Была введена следующая строка');
writeln(a^);
writeln('Согласные');
writeln(sn);
writeln('Гласные');
writeln(sim);
readln;
end.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.02.2012, 17:17
Ответы с готовыми решениями:

Очереди: одна должна содержать гласные буквы, другая - согласные буквы; чтение из файла
помогите написать программу. я понимаю как ее сделать, но не могу реализовать:( В файле записано несколько предложений, которые могут...

Дано слово, заменить в нем гласные буквы на согласные, следующие за ним в алфавите, а согласные на гласные
Дано слово, заменить в нем гласные буквы на согласные, следующие за ним в алфавите, а согласные на гласные.

Очередь на односвязанном динамическом списке.
Задание следующее: Дан текстовой файл, состоящий из строк. Изменить содержимое файла, удалив в каждой строке все лишние символы – кроме...

10
 Аватар для BumerangSP
4311 / 1423 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
16.02.2012, 19:43
Jin200611, Вы пробовали компилировать свой код? У меня не вышло.
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
uses crt;
type plist=^tlist;
tlist=record
    zn: string;
    prev:pList;
end;
 
procedure Push(var last:plist;a:string);
var p:plist;
begin
  new(p);
  p^.zn:=a;
  p^.prev:=nil;
  if (last=nil) then
     last:=p
  else
  begin
    p^.prev:=last;
    last:=p;
  end;
end;
 
procedure Push1(var last1 :plist;a:string);
var p:plist;
begin
  new(p);
  p^.zn:=a;
  p^.prev:=nil;
  if (last1=nil) then
     last1:=p
  else
  begin
    p^.prev:=last1;
    last1:=p;
  end;
end;
 
function Pop(var last:pList;var a:string):boolean;
var
 p:pList;
begin
  if (last=nil) then
  begin
    writeln(' ');
    pop:=false;
  end
  else
  begin
    p:=last;
    last:=last^.prev;
    a:=p^.zn;
    dispose(p);
    pop:=true;
  end;
end;
 
function Pop1(var last1:pList;var a:string):boolean;
var
 p:pList;
begin
  if (last1=nil) then
  begin
    writeln(' ');
    pop1:=false;
  end
  else
  begin
    p:=last1;
    last1:=last1^.prev;
    a:=p^.zn;
    dispose(p);
    pop1:=true;
  end;
end;
 
var  last,last1:plist;
     w,w1,s: string;
 
begin
 clrscr;
 last:=nil;
 last1:=nil;
 s:='уеыаоэяиюУЕЫАОЭЯИЮ';
 push(last, s);
 s:='йцкнгшщзхфвпрлджчсмтбЙЦКНГШЩЗХФВПРЛДЖЧСМТБ';
  push1(last1, s);
 writeln('Введите символы, признак конца ввода - символ "."');
 while s<>'.' do
  begin
   read(s);
   push(last, s);
   push1(last1, s);
  end;
  clrscr;
 writeln('Элементы первой очереди:');
 while (pop(last,s)=true) do
  writeln(s);
 writeln;
 writeln('Элементы второй очереди:');
 while (pop1(last1,s)=true) do
  writeln(s);
end.
2
14 / 14 / 1
Регистрация: 09.01.2012
Сообщений: 258
16.02.2012, 20:09  [ТС]
Спасибо BumerangSP, но правда выдает ошибку 203 переполнение динамически распределяемой области памяти. Извини за наглость поможешь ее исправить, я только еще изучаю динамические структуры. И еще раз Спасибо.
0
 Аватар для BumerangSP
4311 / 1423 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
16.02.2012, 20:50
Как я понял, программа зацикливается на цикле while, в следствии чего происходит переполнение памяти. (Это по средствам отладки в турбо паскале) Мой совет: оставьте этот досовский паскаль и переходите уже на ABC.
1
14 / 14 / 1
Регистрация: 09.01.2012
Сообщений: 258
16.02.2012, 22:35  [ТС]
Спасибо. Вы проверяли на АБС?
0
 Аватар для BumerangSP
4311 / 1423 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
16.02.2012, 22:59
Да, я делал на Абс.
0
14 / 14 / 1
Регистрация: 09.01.2012
Сообщений: 258
17.02.2012, 01:57  [ТС]
А у меня ничего не выдает, пишет просто программа выполняется.
0
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
17.02.2012, 10:34
Ребята, подключусь к вашему обсуждению.
Код на PascalABC можно вводить и выполнять в он-лайн редакторе вот на этой странице:
PascalABC.NET Web Development Environment.
На главной странице этого сайта есть много полезных материалов по PascalABC. Кроме этого, с главной страницы можно скачать дистрибутив вместе с пакетом MS .NET Framework.
---
Что касается обсуждаемой задачи, предложу решение для Borland/Turbo Pascal:
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
program Project1;
 
type
  //Указатель на элемент очереди.
  TPElem = ^TElem;
  //Элемент очереди.
  TElem = record
    Data : Char;
    PNext : TPElem;
  end;
  //Очередь.
  TQueue = record
    PFirst, PLast : TPElem;
  end;
 
//Добавление элемента в конец очереди.
procedure QueuePush(var aQueue : TQueue; var aPElem : TPElem);
begin
  if aPElem = nil then Exit;
 
  aPElem^.PNext := nil;
  if aQueue.PFirst = nil then
    aQueue.PFirst := aPElem
  else
    aQueue.PLast^.PNext := aPElem
  ;
  aQueue.PLast := aPElem;
end;
 
//Изъятие элемента из начала очереди.
function QueuePop(var aQueue : TQueue; var aPElem : TPElem) : Boolean;
begin
  QueuePop := False;
  if aQueue.PFirst = nil then Exit;
 
  aPElem := aQueue.PFirst;
  aQueue.PFirst := aPElem^.PNext;
  if aQueue.PFirst = nil then aQueue.PLast := nil;
  QueuePop := True;
end;
 
//Удаление очереди из памяти (очистка очереди).
procedure QueueFree(var aQueue : TQueue);
var
  PDel : TPElem;
begin
  while QueuePop(aQueue, PDel) do Dispose(PDel);
end;
 
//Распечатка очереди.
procedure QueuePrint(var aQueue : TQueue);
var
  Q : TQueue;
  PElem : TPElem;
  i : Integer;
begin
  if aQueue.PFirst = nil then begin
    Writeln('Очередь пуста.');
    Exit;
  end;
  //Начальная инициализация вспомогательной очереди.
  Q.PFirst := nil;
  Q.PLast := nil;
  //Переливаем элементы из исходной очереди во вспомогательную и при этом
  //выполняем распечатку.
  i := 0;
  while QueuePop(aQueue, PElem) do begin
    //Добавление элемента во вспомогательную очередь.
    QueuePush(Q, PElem);
    //Распечатка.
    Inc(i);
    if i > 1 then Write(', ');
    Write(PElem^.Data);
  end;
  Writeln;
  //Возвращаем элементы в исходную очередь.
  //При этом, вспомогательная очередь очищается.
  while QueuePop(Q, PElem) do QueuePush(aQueue, PElem);
end;
 
const
  //Множество гласных букв.
  Da = [
    'А', 'Е', 'Ё', 'И', 'О', 'У', 'Ы', 'Э', 'Ю', 'Я',
    'а', 'е', 'ё', 'и', 'о', 'у', 'ы', 'э', 'ю', 'я'
  ];
  //Множество согласных букв.
  Db = [
    'Б', 'В', 'Г', 'Д', 'Ж', 'З', 'Й', 'К', 'Л', 'М',
    'Н', 'П', 'Р', 'С', 'Т', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ',
    'б', 'в', 'г', 'д', 'ж', 'з', 'й', 'к', 'л', 'м',
    'н', 'п', 'р', 'с', 'т', 'ф', 'х', 'ц', 'ч', 'ш', 'щ'
  ];
var
  Qa, Qb : TQueue;
  PElem : TPElem;
  i : Integer;
  S : String;
begin
  //Начальная инициализация очередей.
  Qa.PFirst := nil;
  Qa.PLast := nil;
  Qb.PFirst := nil;
  Qb.PLast := nil;
 
  repeat
    Writeln('Задайте строку:');
    Readln(S);
    //Добавляем гласные и согласные буквы в разные очереди.
    Randomize;
    for i := 1 to Length(S) do begin
      if S[i] in Da then begin
        New(PElem);
        PElem^.Data := S[i];
        QueuePush(Qa, PElem);
      end else if S[i] in Db then begin
        New(PElem);
        PElem^.Data := S[i];
        QueuePush(Qb, PElem);
      end;
    end;
 
    //Распечатки.
    Writeln('Составлены очереди:');
    Writeln('Очередь гласных букв:');
    QueuePrint(Qa);
    Writeln('Очередь согласных букв:');
    QueuePrint(Qb);
 
    //Удаляем очереди из памяти.
    QueueFree(Qa);
    QueueFree(Qb);
    Writeln('Работа завершена. Очереди удалены из памяти.');
 
    Writeln('Повторить - Enter. Выход - любой символ + Enter.');
    Readln(S);
  until S <> '';
end.
1
 Аватар для BumerangSP
4311 / 1423 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
17.02.2012, 15:24
Mawrat,

Не по теме:

я код писал в pascale abc, без .net. Как мне кажется, abc.net - это уже не совсем паскаль, там много удобств сделали, которые турбо вряд ли скомпилирует:)

0
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
17.02.2012, 15:30
в PascalABC .NET - там для обратной совместимости применяется эмуляция для процедур New(), Dispose() и т. д. Но вообще да - на некоторых кодах выполнение зависает.
0
14 / 14 / 1
Регистрация: 09.01.2012
Сообщений: 258
17.02.2012, 17:17  [ТС]
Всем огромное спасибо. Выручили мужики, больше недели долбался, никак не мог освоить динамические списки. Сейчас буду разбираться на примерах.
Спасибо:
BumerangSP
Mawrat
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.02.2012, 17:17
Помогаю со студенческими работами здесь

Гласные и согласные буквы
Помогите, пожалуйста. Буквы «a», «o», «u», «i» и «e» являются гласными. Остальные буквы — согласные. В слове (тип string) первая...

Проверка на гласные и согласные буквы
Если встречается согласная буква, то пропускать одну позицию в строке, если встречается гласная - то две. В итоге должно получится слово...

Сгруппировать гласные и согласные буквы
Сгруппировать в массиве символы. Сначала идут гласные а потом согласные буквы английского алфавита.Символы задаются случайно в коде...

Вывести отдельно согласные и гласные буквы
Нужно дописать код, чтобы он выводил все согласные и гласные буквы, передаваемые ему. Уже есть основная часть работы: #include...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru