Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/19: Рейтинг темы: голосов - 19, средняя оценка - 4.79
2 / 2 / 0
Регистрация: 03.11.2008
Сообщений: 63
1

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

07.05.2009, 19:04. Показов 3707. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Разработать алгоритм и программу решения задачи, в которой сформировать кольцевой односвязный список.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.05.2009, 19:04
Ответы с готовыми решениями:

Разработать алгоритм и программу решения задачи
Дана квадратная вещественная матрица размерности n. Найти количество нулевых элементов, стоящих...

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

Разработать рекурсивный алгоритм и программу решения задачи
Разработать рекурсивный алгоритм и программу решения задачи, в которой вычислить: f(n)=1/(n+1)!....

Разработать алгоритм и программу для решения задачи
Дан файл f, компоненты которого являются действительными числами. Найти: а) сумму компонент...

7
2 / 2 / 0
Регистрация: 03.11.2008
Сообщений: 63
11.05.2009, 19:53  [ТС] 2
товарисчи плиз завтро сдавать (((((((
0
2 / 2 / 0
Регистрация: 03.11.2008
Сообщений: 63
13.05.2009, 00:04  [ТС] 3
как же переделать в кольцевой ? вод код для линейного:
Код
uses crt;
type
TList = ^List;
List = record
znach : integer;
Next: TList;
end;
procedure CreateList(var L: TList);
begin
L := nil;
end;
procedure DeleteList(var L: TList);
var
L1, L2: TList;
begin
if L = nil then exit;
if L^.Next = L
then begin
Dispose(L);
exit;
end;
L2 := L;
L := L^.Next;
while L <> L2 do
begin
L1 := L;
L := L^.Next;
Dispose(L1);
end;
Dispose(L2);
end;
procedure AddToList(var L: TList; S : integer);
var
L1, L2: TList;
begin
L1 := L;
if L1 = nil
then begin
new(L1);
L1^.Znach := S;
L := L1;
L^.Next := L;
exit;
end;
while L1^.Next <> L do
L1 := L1^.Next;

new(L2);
L2^.Znach := S;
L2^.Next := L;
L1^.Next := L2;
end;
procedure OutList(L: TList);
var
L1: TList;
begin
if L = nil then exit;
Writeln(L^.Znach);
L1 := L^.Next;
while L1 <> L do
begin
Writeln(L1^.Znach);
L1 := L1^.Next;
end;
end;
var
ListExample: TList;
i: integer;
begin
clrscr;
CreateList(ListExample);

writeln('Введите числа!0 - конец ввода');
read(i);
while i<>0 do
begin
AddToList(ListExample,i);
read(i);
end;

writeln;
OutList(ListExample);
readln;
readln;
end.
0
3067 / 727 / 69
Регистрация: 24.09.2008
Сообщений: 1,531
13.05.2009, 00:21 4
Кольцевой односвязный список красивая вещь это список в котором последний элемент ссылается на первый. По логике вещей, нам всего лишь нужно всегда хранить адрес первого элемента и при добавлении следующего элемента делать связь типа
элемент^.указатель:=указатель_на_первый_элемент
Вот и вся Ваша сложность...
А что именно нужно реализовать? Построение и вывод на экран ?
0
2 / 2 / 0
Регистрация: 03.11.2008
Сообщений: 63
13.05.2009, 02:07  [ТС] 5
Да, именно построение и вывод на экран.А код программы не можете глянуть? чтото у меня не выходит её подкорректировать))
0
5 / 5 / 0
Регистрация: 13.05.2009
Сообщений: 11
13.05.2009, 02:25 6
вот пример кольца


Код
Type PElement = ^TElement;
     TElement = Record
      Data : Longint;
      Next : PElement;
     End;

Procedure Add(X : Longint; Var R : PElement); {добавление элемента в кольцо, эквивалентно вставки элемента между двумя}
Var P : PElement;
Begin
 P:=New(PElement);
 P^.Data:=X;
 P^.Next:=R^.Next;
 R^.Next:=P;
End;

{Пример реализации}
Var R, P : PElement;
    I : Longint;

Begin
 R:=New(PElement); R^.Data:=0; R^.Next:=R;
 For I:=1 To 4 Do
  Add(I, R);
 I:=0;
 {два раза выведем список}
 While (I < 3) Do
  Begin
   If R^.Data = 0 Then Inc(I) Else Writeln(R^.Data);
   R:=R^.Next;
  End;
 {уничнтожение списка связано с маленьким фокусом: преобразуем колько в линейный список}
 P:=R; {"разорвем" список на одном из элементов}
 R:=R^.Next;
 P^.Next:=Nil;
 {уничтожим как обычный список}
 While R <> Nil Do
  Begin
   P:=R;
   R:=R^.Next;
   Dispose(P);
  End;
End.
1
3067 / 727 / 69
Регистрация: 24.09.2008
Сообщений: 1,531
13.05.2009, 02:38 7
Вот моё видение решения данной задачи...
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
Program xa;
uses
  crt;
type
  TList = ^List;
  List = record
     data : integer;
     Next: TList;
  end;
var
  l,LBegin,LEnd:Tlist;
  n:integer;
  ch:char;
 
Procedure AddElem(var l:Tlist);
var
  tmp:Tlist;
begin
  Writeln('Vvedite zna4enie elemeHta cnicka');
  readln(n);
  if l=nil then
  begin
    new(l);
    l^.next:=nil;
    LBegin:=l;
    LEnd:=l;
    l^.data:=n
  end
  else
  begin
    new(tmp);
    l^.next:=tmp;
    l:=tmp;
    l^.next:=lBegin;
    l^.data:=n;
    LEnd:=tmp;
  end;
end;
 
Procedure DelList(var l:Tlist);
var
  tmp:Tlist;
begin
  while l<>LEnd do
  begin
    tmp:=l^.next;
    dispose(l);
    l:=tmp
  end;
  dispose(l)
end;
 
Procedure ViewList(l:Tlist);
begin
  if l=nil then
    Writeln('Cnisok nyst')
  else
  begin
    while l<>LEnd do
    begin
      Write(l^.data, ' ');
      l:=l^.next
    end;
    Write(L^.data, ' ');
  end;
  readkey
end;
 
begin
  l:=nil;
  repeat
    clrscr;
    writeln('Press:');
    writeln('D - dobavit element');
    Writeln('F - vivod nocledoBateLbnocti');
    Writeln('Vse Dpygie simvoLbl - BblXOD');
    Writeln;
    ch:=readkey;
    Case ch of
    'd','D':begin
              AddElem(l);
            end;
    'f','F':begin
              ViewList(LBegin);
            end;
    else
      ch:=#27;
    end;
  until ch=#27;
  DelList(LBegin);
end.
1
0 / 0 / 2
Регистрация: 10.10.2011
Сообщений: 16
28.10.2011, 11:23 8
Мое решение такое... с комментариями...
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
uses
  SysUtils;
 
type //структура ячейки
 pe=^el; //указатель на элемент списка
 el = record  // ЛОС - элемент списка
 inf: integer;     // информационное поле
 next: pe;     // указатель на следующий элемент
 end;
 
 Var //Глобальные переменные для использования в процедурах
 sag: pe; //указатель начала
 q: pe;   //текущий ук. в процедуре вывода
 s: pe;   //текущий ук. в процедуре создания КОС
 N: integer; // число ячеек
 
 //руссификатор
 function rus(s:string):string;
 var i: integer;
 begin
 for i:=1 to Length(s) do
 case s[i] of
  'А'..'п': s[i]:=chr(ord(s[i])-64);
  'р'..'я': s[i]:=chr(ord(s[i])-16);
  end;//case
  rus:=s;
   end;// конец руссификатора
   
 procedure input (var q:pe); //процедура ввода эл-ов в КОС
 var i:integer;
 begin
   For i:= 1 to N do
    begin
     New(q); //выделить память для новой ячейки
     q.inf := i; //заполняем инф.часть
     s.next := q; //связываем два эл-та цепочкой
     s:=q; //переход нашего указателя s на созданную ячейку q
    end;
  q.next := sag.next; //Даем последней ячейке адрес на заглавный элемент.
  //итак, сформирован Кольцевой Односвязный список
 end;
 
 
 procedure output(var q:pe);  //процедура вывода КОС на экран
 begin
  q:=sag.next; //ставим указатель на начало
  if (N = 0) then writeln(rus('КОС пуст... печалька'))
    else begin
     writeln('------------------');
     WriteLn(rus('Вывод КОС на экран: '));
     while (q.next <> sag.next) do begin //условие прохода по КОС
       write(q.inf,' ');
       q:=q.next;
       end;
     //вывод последнего элемента, т.к. в цикле while это пропускается
     if (q.next = sag.next) then begin
     write(q.inf, ' ');
     end;
      writeln;
      writeln(rus('Всего кол-во ячеек: '),N);
     end;
  end;
 
 
 BEGIN // начало основной программы
 new(sag); //создаем указатель начала
 s := sag; //ставим указатель s на него... эт нужно для п. input(q)
 
 write(rus('Введите количество ячеекв КОС: '));
 readln(N);
 
 input(q);  // п. ввода эл-ов в КОС
 output(q); // п. вывода КОС на экран
 
 readln;
 END.
0
28.10.2011, 11:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.10.2011, 11:23
Помогаю со студенческими работами здесь

Разработать алгоритм и программу решения задачи с использованием библиотечного модуля
найти среднее арифметическое элементов квадратной матрицы размером 3x3, состоящей из элементов...

Разработать алгоритм методом пошаговой детализации и программу решения задачи
Разработать алгоритм методом пошаговой детализации и программу решения задачи, в которой найти...

Разработать алгоритм и программу решения задачи с использованием модуля пользователя
Разработать алгоритм и программу решения задачи с использованием модуля пользователя, в которой...

Разработать алгоритм и программу решения задачи с использованием библиотечного модуля
Разработать алгоритм и программу решения задачи с использованием библиотечного модуля пользователя,...


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

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