Форум программистов, компьютерный форум, киберфорум
Lazarus
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 28.11.2023
Сообщений: 13

Ошибка в коде программы по нахождению в списке повторяющихся элементов

16.04.2024, 11:23. Показов 2602. Ответов 45

Студворк — интернет-сервис помощи студентам
Помогите найти ошибку программы, которая должна проверить, есть ли в списке L хотя бы один повторяющийся элемент.
Delphi
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
unit unit12;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
 
type
  te = integer;
 
  zveno = record
    elem: te;
    sled: ^zveno;
  end;
 
  spisok = ^zveno;
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
function twoelem(L: spisok): boolean;
var
  p1, p2: spisok;
begin
  p1 := L;
  while p1 <> nil do begin
    p2 := p1^.sled;
    while p2 <> nil do begin
      if p1^.elem = p2^.elem then begin
        Result := true;
        exit;
      end;
      p2 := p2^.sled;
    end;
    p1 := p1^.sled;
  end;
  Result := false;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  L, temp: spisok;
  i: Integer;
begin
  L := nil;
  for i := Memo1.Lines.Count - 1 downto 0 do begin
    New(temp);
    temp^.elem := StrToInt(Memo1.Lines[i]);
    temp^.sled := L;
    L := temp;
  end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
var
  L1:spisok;
begin
  if twoelem(L1) then begin
    Edit1.Text := 'В списке есть повторяющиеся элементы';
  end else begin
    Edit1.Text := 'В списке нет повторяющихся элементов';
  end;
end;
end.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.04.2024, 11:23
Ответы с готовыми решениями:

Ошибка в коде по нахождению гипотенузы
Не могу понять почему результат выдает по нолям? с целыми числами все в норме. lf везде поставил, в чем проблема? #include...

Нужно найти ошибку в коде программы по нахождению площади треугольника
Вот код: #include &quot;StdAfx.h&quot; #include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main() { int...

Удаление повторяющихся элементов в списке
no_duble(L,NDL ), здесь L,NDL списки. Предикат истеннен если: список NDL получен из списка L, заменой всех вхождений каждого...

45
Модератор
 Аватар для D1973
9952 / 6487 / 2461
Регистрация: 21.01.2014
Сообщений: 27,485
Записей в блоге: 3
18.04.2024, 12:11
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Chafirchik Посмотреть сообщение
вроде односвязный список построен правильно
Да нет же! Список - это объект типа TList. Где он у Вас?
0
0 / 0 / 0
Регистрация: 28.11.2023
Сообщений: 13
18.04.2024, 12:19  [ТС]
Понял про что Вы говорите, но такой структуре нас еще не обучили, задание должно выполняться без этого объекта
0
Модератор
 Аватар для D1973
9952 / 6487 / 2461
Регистрация: 21.01.2014
Сообщений: 27,485
Записей в блоге: 3
18.04.2024, 12:44
Цитата Сообщение от Chafirchik Посмотреть сообщение
задание должно выполняться без этого объекта
тогда о каком списке может идти речь? Максимум - о последовательности, представленной массивом объектов Вашего типа spisok

А вообще, как Ваше задание полностью выглядит?
0
0 / 0 / 0
Регистрация: 28.11.2023
Сообщений: 13
18.04.2024, 13:58  [ТС]
type te=…..; {тип элементов списка}
{выбирается по желанию}

spisok= ^zveno;
zveno= record elem: te;
sled: spisok
end;
Описать и проверить процедуру или функцию, которая проверяет, есть ли в списке L хотя бы два одинаковых элемента.
0
French monarch Élisée
 Аватар для Ludwig Valentin
171 / 290 / 26
Регистрация: 11.08.2022
Сообщений: 3,720
19.04.2024, 05:59
Отсортируйте список и задача по нахождению повторов станет тривиальной.
0
Модератор
 Аватар для D1973
9952 / 6487 / 2461
Регистрация: 21.01.2014
Сообщений: 27,485
Записей в блоге: 3
19.04.2024, 06:13
Цитата Сообщение от Chafirchik Посмотреть сообщение
есть ли в списке L хотя бы ...
Chafirchik, вот что такое "список L"? Какого он типа, как задается?
Вообще - не понятно: тип spisok - указатель на тип zveno, а zveno - структура, одно из полей которой является объектом типа spisok... Что-то нелепица какая-то...

Цитата Сообщение от Ludwig Valentin Посмотреть сообщение
Отсортируйте список
Чтобы что-то было возможно отсортировать - надо это что-то сначала создать, а вот с этим-то как раз и проблема. Либо это не полный текст задания, либо какие-то упущения в изучении методички - но в текущем варианте задача не решаема.
0
French monarch Élisée
 Аватар для Ludwig Valentin
171 / 290 / 26
Регистрация: 11.08.2022
Сообщений: 3,720
19.04.2024, 07:47
По-хорошему объекты надо сравнивать как в Java, отдельной функцией объекта

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
  elem te=integer;
  
  pzveno=zveno^;
 
  zveno = object
    elem: te;
    sled: ^zveno;
    function equals(pzv2: pzveno):boolean;
    begin
  end;
  
//....
 
implementation
 
  boolean zveno.equals(pzv2: pzveno):boolean
  begin
   return(te == pzv2^.te);
  end;
А заполнить массив можно рандомными значениями.
Это домашнее задание, не делайте за него.
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
19.04.2024, 08:28
Цитата Сообщение от Chafirchik Посмотреть сообщение
Описать и проверить процедуру или функцию, которая проверяет, есть ли в списке L хотя бы два одинаковых элемента.
Тут не "список", а "цепь". И нет объекта "цепь", в который входили бы все звенья цепи, так как, такой объект называется "список".

А по задаче - 2 цикла, второй вложен в первый. В первом цикле идёт проход по всей цепочке от начала и до конца, а во вложенном идёт проход от следующего за текущим звена и до конца цепочки, и на каждом шаге проверяется содержимое двух звеньев на равенство.
0
French monarch Élisée
 Аватар для Ludwig Valentin
171 / 290 / 26
Регистрация: 11.08.2022
Сообщений: 3,720
19.04.2024, 08:44
Цитата Сообщение от AzAtom Посмотреть сообщение
Тут не "список", а "цепь"
Думаю, что можно назвать и цепью, это - синонимы, но каноническое название - список.
Список можно задать указателем на первый элемент списка.
А чтобы дойти до конца, надо последовательно выбирать элементы по ссылке на следующий пока не встретится пустой указатель.
0
Модератор
 Аватар для D1973
9952 / 6487 / 2461
Регистрация: 21.01.2014
Сообщений: 27,485
Записей в блоге: 3
19.04.2024, 09:15
Цитата Сообщение от AzAtom Посмотреть сообщение
Тут не "список", а "цепь".
Цепь? Честно говоря, я про такое на слышал. Где можно ознакомиться?
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
19.04.2024, 09:24
Цитата Сообщение от D1973 Посмотреть сообщение
Цепь?
Ну вот, выразился по своему. Связный список, конечно.
0
Модератор
 Аватар для D1973
9952 / 6487 / 2461
Регистрация: 21.01.2014
Сообщений: 27,485
Записей в блоге: 3
19.04.2024, 09:37
Цитата Сообщение от AzAtom Посмотреть сообщение
Связный список, конечно.
О! Слышал такое слово
Вот только беда-то в том, что для организации связного списка создается объект типа TList, которого ТС не проходи и не может его использовать

Добавлено через 6 минут
Цитата Сообщение от D1973 Посмотреть сообщение
создается объект типа TList
Стоп! Кажется, нашел... Для создания односвязного списка как раз используется конструкция, весьма похожая на то, что есть у ТС-а

Добавлено через 1 минуту
когда уже методички перепишут? Использовать в XXI веке этакую шляпу!
0
Модератор
4153 / 2362 / 814
Регистрация: 15.11.2015
Сообщений: 9,495
19.04.2024, 09:47
Цитата Сообщение от D1973 Посмотреть сообщение
для организации связного списка создается объект типа TList
Зачем?
0
0 / 0 / 0
Регистрация: 28.11.2023
Сообщений: 13
19.04.2024, 10:32  [ТС]
Всем большое спасибо, программа заработала, в самой задаче неправильно описан тип. Для проверки правильности ввода добавил объект типа Memo2, туда все числа выводятся наоборот.
Delphi
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
unit unit100;
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;
 
type
  te = integer;
  spisok = ^zveno;
  zveno = record
    elem: te;
    sled: ^zveno;
  end;
 
  { TForm1 }
 
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Memo1: TMemo;
    Memo2: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;
 
var
  Form1: TForm1;
  L:spisok;
 
implementation
 
{$R *.lfm}
 
{ TForm1 }
 
function twoelem(L: spisok): boolean;
var
  p1, p2: spisok;
  flag:boolean;
begin
  flag := false;
  p1 := L;
  while p1 <> nil do
  begin
    p2 := p1^.sled;
    while p2 <> nil do
    begin
      if p1^.elem = p2^.elem then
      begin
        flag := true;
      end;
      p2 := p2^.sled;
    end;
    p1 := p1^.sled;
  end;
 twoelem := flag;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  temp: spisok;
  i,n: Integer;
begin
  L := nil;
  n:= Memo1.Lines.Count;
  for i := 1 to n do begin
    New(temp);
    temp^.elem := strtoint(Memo1.Lines[i-1]);
    temp^.sled := L;
    L := temp;
  end;
  temp:=L;
  Memo2.Lines.clear;
  while temp<>nil do
  begin
    Memo2.Lines.Add(inttostr(temp^.elem));
    temp:= temp^.sled;
  end;
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
  if twoelem(L) then
    Edit1.Text := 'В списке есть повторяющиеся элементы'
  else
    Edit1.Text := 'В списке нет повторяющихся элементов';
end;
 
end.
0
пофигист широкого профиля
4770 / 3206 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
20.04.2024, 00:43

Не по теме:

Цитата Сообщение от D1973 Посмотреть сообщение
О! Слышал такое слово
О! Поздравляю что только слышал!


0
French monarch Élisée
 Аватар для Ludwig Valentin
171 / 290 / 26
Регистрация: 11.08.2022
Сообщений: 3,720
20.04.2024, 01:48
Цитата Сообщение от AzAtom Посмотреть сообщение
Связный список, конечно.
Может, вы имели ввиду двунаправленный список, где элемент
включает в себя ссылки на предыдущий и на следующий элементы?
Тогда такой список модно просматривать вперёд и назад, вставлять и удалять элементы.
0
French monarch Élisée
 Аватар для Ludwig Valentin
171 / 290 / 26
Регистрация: 11.08.2022
Сообщений: 3,720
20.04.2024, 01:50
двунаправленный список

next - следующий
previous - предыдущий
Миниатюры
Ошибка в коде программы по нахождению в списке повторяющихся элементов  
0
French monarch Élisée
 Аватар для Ludwig Valentin
171 / 290 / 26
Регистрация: 11.08.2022
Сообщений: 3,720
20.04.2024, 01:54
а вот наш связный список
Миниатюры
Ошибка в коде программы по нахождению в списке повторяющихся элементов  
0
пофигист широкого профиля
4770 / 3206 / 862
Регистрация: 15.07.2013
Сообщений: 18,613
20.04.2024, 03:06
Цитата Сообщение от Ludwig Valentin Посмотреть сообщение
Может, вы имели ввиду двунаправленный список
И такой в том числе. Но двунаправленный это некая избыточность.
0
French monarch Élisée
 Аватар для Ludwig Valentin
171 / 290 / 26
Регистрация: 11.08.2022
Сообщений: 3,720
20.04.2024, 04:16
Цитата Сообщение от northener Посмотреть сообщение
Но двунаправленный это некая избыточность.
В данной задаче да.
Но для двунаправленного поиска он нужен.
На нём можно построить простую базу данных с просмотром вперёд и назад. (NoSQL)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.04.2024, 04:16

Удаление не повторяющихся элементов в списке.
Нужно добавить условие при слиянии 2 списков. Условие такое: удалить не схожие элементы из списка, т.е. L1={1,2,2,3,5,6,6,7,8} Нужно чтоб...

Количество повторяющихся элементов в списке
Программа должна считывать одну строку со стандартного ввода и выводить для каждого уникального слова в этой строке число его повторений...

Нахождение повторяющихся элементов в списке
Всем привет! Сразу оговорюсь, что есть дубликат темы на форуме: https://www.cyberforum.ru/python-beginners/thread1306210.html , но там...

Удаление повторяющихся элементов в списке
Всем привет. Только начали изучать F#, поэтому есть затруднение с написанием программы. Нужно удалить из списка повторяющиеся элементы...

Нахождение повторяющихся элементов в списке?
Нужно ввести список чисел и чтоб программа нашла, и вывела те числа которые повторяются.


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru