Форум программистов, компьютерный форум, киберфорум
Наши страницы
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Петр Смирнов
0 / 0 / 2
Регистрация: 05.12.2014
Сообщений: 24
1

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

23.02.2015, 23:01. Просмотров 1210. Ответов 5
Метки нет (Все метки)

Дано два односвязных списка L1,L2, элементы которых - действительные числа. Описать процедуру, которая формирует список L3, включая к нему по одному разу те элементы, которые входят одновременно в оба списка L1,L2.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2015, 23:01
Ответы с готовыми решениями:

Сформировать список L, включив в него по одному разу элементы, которые входят одновременно в оба списка L1 и L2. Ошибка
Сформировать список L, включив в него по одному разу элементы, которые входят одновременно в оба...

Сформировать третий список, включив в него по одному разу элементы из первого, не входящие во второй
Здравствуйте! Начал разбор темы ссылочных типов данных. Интересно, как всегда, но сразу столкнулся...

Составить программу, которая формирует список L, включив в него по одному разу элементы, которые входят в список L1 но не входят в список L2
Составить программу, которая формирует список L, включив в него по одному разу элементы, которые...

в одномерном массиве найти все элементы, входящие в этот массив по одному разу
в одномерном массиве найти все элементы, входящие в этот массив по одному разу?

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

5
JuriiMW
2904 / 1476 / 1805
Регистрация: 10.12.2014
Сообщений: 5,906
24.02.2015, 06:08 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
type
  tList = ^rList;
  rList = record
    N : Real;
    Next : tList;
  end;
  
function InputList(msg : String) : tList;
var
  First, Last, Cur : tList;
  N : Integer;
  R : Real;
  S : String;
begin
  First := nil;
  N := 0;
  repeat
    Inc(N);
    Write('Введите ', N, ' элемент ', msg, ' списка : '); ReadLn(R);
    New(Cur);
    Cur^.N := R;
    Cur^.Next := nil;
    if First = nil then
      First := Cur
    else
      Last^.Next := Cur;
    Last := Cur;
    
    Write('1 - ещё / 0 - хватит ? '); ReadLn(S);
  until (Length(S) > 0) and (S[1] = '0');
  
  InputList := First;
end;
  
procedure CrossList(L1, L2 : tList; var L3 : tList);
var
  Cur2, Cur3, Last3 : tList;
begin
  L3 := nil;
  while L1 <> nil do
    begin
      Cur3 := L3;
      while (Cur3 <> nil) and (Abs(Cur3^.N - L1^.N) < 1e-15) do
        Cur3 := Cur3^.Next;
      
      if Cur3 = nil then
        begin
          Cur2 := L2;
          while Cur2 <> nil do
            begin
              if Abs(L1^.N - Cur2^.N) < 1e-15 then
                begin
                  New(Cur3);
                  Cur3^.N := L1^.N;
                  Cur3^.Next := nil;
                  if L3 = nil then
                    L3 := Cur3
                  else
                    Last3^.Next := Cur3;
                  Last3 := Cur3;
                end;
                
              Cur2 := Cur2^.Next;
            end; { while Cur2 <> nil do }
            
        end; { if Cur3 = nil then }
      L1 := L1^.Next;
    end; { while L1 <> nil do }
end;
 
procedure OutList(msg : String; L : tList);
begin
  Write(msg, ' (');
  while L <> nil do
    begin
      Write(#32, L^.N:0:5);
      L := L^.Next;
    end;
  WriteLn(')');
end;
 
var
  L1, L2, L3 : tList;
begin
  L1 := InputList('1');
  OutList('1 список:', L1);
  L2 := InputList('2');
  OutList('1 список:', L1);
  OutList('2 список:', L2);
  CrossList(L1, L2, L3);
  OutList('3 список:', L3);
end.
1
Петр Смирнов
0 / 0 / 2
Регистрация: 05.12.2014
Сообщений: 24
10.03.2015, 12:49  [ТС] 3
Программа работает неправильно. Если ввести, например, в первый список числа 1,2,3,а во второй 1,2,то в результате получается в третьем списке только одно число 1,а не 1 и 2,как должно быть
0
Торович
218 / 216 / 217
Регистрация: 03.07.2012
Сообщений: 457
10.03.2015, 14:18 4
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
uses
  crt;
type
  TData = real;
 
  PNode = ^Node;
  Node  = record
  Data  : TData;
  PNext : PNode;
  end;
 
  TList = record
  First, Last : PNode;
  end;
 
procedure InitList(var aL : TList);
begin
  aL.First := nil; aL.Last := nil;
end;
 
procedure AddList(var aL : TList; aData : TData);
begin
  If aL.First = nil then begin
     New(aL.First);
     aL.First^.PNext := nil;
     aL.Last := aL.First;
  end else begin
     New(aL.Last^.PNext);
     aL.Last := aL.Last^.PNext;
  end;
  aL.Last^.Data := aData;
end;
 
procedure PrintList(aL : TList);
begin
  If aL.First = nil then write('Empty List');
  while aL.First <> nil do begin
    write(aL.First^.Data:7:2);
    aL.First := aL.First^.PNext;
  end;
  writeln;
end;
 
function found(aL : TList; Elem : TData) : boolean;
begin
   while aL.First<>nil do begin
      if aL.First^.Data = Elem then begin
          found := true;
          exit;
      end;
      aL.First := aL.First^.PNext;
   end;
   found := false;
end;
 
procedure CrLst(aL1, aL2 : TList; var aL3 : TList);
begin
    while aL1.First<>nil do begin
       If found(aL2,aL1.First^.Data) and not found(aL3,aL1.First^.Data) then
          AddList(aL3,aL1.First^.Data);
       aL1.First := aL1.First^.PNext;
    end;
 
    while aL2.First<>nil do begin
       If found(aL1,aL2.First^.Data) and not found(aL3,aL2.First^.Data) then
          AddList(aL3,aL2.First^.Data);
       aL2.First := aL2.First^.PNext;
    end;
end;
 
var
  L1, L2, L3 : TList;
  N, i : integer;
  Data : TData;
begin
  clrscr;
  InitList(L1);
  write('Number of items in List L1 : '); readln(N);
  randomize;
  for i := 1 to N do begin
    write('Value element : '); readln(Data);
    AddList(L1,Data);
  end;
  writeln('List L1:');
  PrintList(L1);
 
  InitList(L2);
  write('Number of items in List L2 : '); readln(N);
  for i := 1 to N do begin
    write('Value element : '); readln(Data);
    AddList(L2,Data);
  end;
  writeln('List L2:');
  PrintList(L2);
 
  InitList(L3);
  CrLst(L1,L2,L3);
  writeln('List L3:');
  PrintList(L3);
  readln;
end.
Number of items in List L1 : 3
Value element : 1
Value element : 2
Value element : 3
List L1:
1.00 2.00 3.00
Number of items in List L2 : 2
Value element : 1
Value element : 2
List L2:
1.00 2.00
List L3:
1.00 2.00
0
Петр Смирнов
0 / 0 / 2
Регистрация: 05.12.2014
Сообщений: 24
17.03.2015, 00:21  [ТС] 5
Этот код тоже неправильно работает
0
Торович
218 / 216 / 217
Регистрация: 03.07.2012
Сообщений: 457
17.03.2015, 14:35 6
Pascal
1
2
3
4
5
6
7
8
procedure CrLst(aL1, aL2 : TList; var aL3 : TList);
begin
    while aL1.First<>nil do begin
       If found(aL2,aL1.First^.Data) and not found(aL3,aL1.First^.Data) then
          AddList(aL3,aL1.First^.Data);
       aL1.First := aL1.First^.PNext;
    end;
end;
в этой процедуре проверять элементы по второму списку не надо было, но на результат это не влияет.
0
17.03.2015, 14:35
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.03.2015, 14:35

Сформировать список L, включив в него по одному разу элементы, входящие одновременно в L1 и L2
Готовое решение. Буду рад, если будет полезно. #include &lt;vector&gt; //Векторы. #include...

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

Списки. Составить программу которая формирует список L, включив в него по одному разу элементы, которые входят одновременно в оба списа L1 и L2
Составить программу которая формирует список L, включив в него по одному разу элементы, которые...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.