Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2014, 23:47   #1
Настя М
Пользователь
 
Регистрация: 03.12.2013
Сообщений: 22
По умолчанию

Построить линейный список из нескольких динамических переменных, содержащих вводимые символы. Вывести элементы списка, которые входят в него по одному разу.Мне нужен только пример для сравнения элементов списка( на случай, если ввести одинаковые элементы). Паскаль.Пожалуйста.


Нужен пример сравнения элементов списка.
Код:
program lab11;
uses crt;
type
  pt = ^k;
  k = record
    d: char;
    p: pt;
  end;
var
  ph, pk, px, pc: Pt;
  c, kl: char;
  n: integer;
  pr: boolean;
  p: pt;

procedure FormSp(var ph, pk: Pt; var c: char);
begin
  New(ph);
  ph^.p := nil;
  ph^.d := c;
  pk := ph;
end;

procedure AddSp(var pk: Pt; var c: char);
var
  px: Pt;
begin
  New(px);
  px^.p := nil;
  pk^.p := px;
  pk := px;
  pk^.d := c
end;

procedure Search(var kl: char; var ph, pc, px: Pt; var pr: boolean);
begin
  pc := ph;
  while (pc <> nil) and (kl <> pc^.d) do
  begin
    px := pc;
    pc := pc^.p
  end;
  if (pc = nil) and (kl <> pc^.d) then
    pr := false
  else
    pr := true;
end;

procedure InsSp(var kl, c: char);
var pm: Pt;
begin
  Search(kl, ph, pc, px, pr);
  New(pm);
  pm^.d := c;
  pm^.p := pc^.p;
  pc^.p := pm
end;

procedure DelSp(var kl: char; var ph: Pt);
var
  pc, px: Pt;
begin
  Search(kl, ph, pc, px, pr);
  px^.p := pc^.p
end;

begin
  clrscr;

  n := 1;
  WriteLn('Input', n: 3);
  ReadLn(c);
  FormSp(ph, pk, c);
  repeat
    n := n + 1;
    writeln('Inpat', n: 3);
    readln(c);
    addSp(pk, c);
  until c = '.';
  n := 1;
  px := ph;
  repeat
    writeln(n: 3, ' ': 3, px^.d);
    px := px^.p;
    n := n + 1;
  until px = nil;
  writeln('Input kl+');
  readln(kl);
  writeln('Input');
  readln(c);
  InsSp(kl, c);
  writeln('Input kl-');
  readln(kl);
  DelSp(kl, ph);
  n := 1;
  repeat
    writeln(n: 3, ' ': 5, px^.d);
    px := px^.p;
    n := n + 1;
  until px = nil

end.
_________
закрыл тег CODE
Модератор

Последний раз редактировалось Serge_Bliznykov; 14.01.2014 в 09:27.
Настя М вне форума Ответить с цитированием
Старый 14.01.2014, 20:24   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Есть разные способы. Например, можно сначала отсортировать, а потом за один прогон вывести уникальные символы.
Или в лоб с вложеным перебором, что-то вроде этого
Код:
  px111 := ph;
  repeat
    IsUnikum := true;
    px222 := ph;
    repeat
       if (px111^.d = px222^.d) and (px111 <> px222) then begin
         IsUnikum := false;
         break
       end;
       px222 := px222^.p;
    until px222 = nil;
    if IsUnikum then writeln('Уникальный элемент '+px111^.d);
    px111 := px111^.p;
  until px111 = nil;
eoln вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
линейный список vlad32651 Паскаль, Turbo Pascal, PascalABC.NET 2 11.12.2013 13:25
ЛИНЕЙНЫЙ СПИСОК kalosha-stepa Паскаль, Turbo Pascal, PascalABC.NET 2 25.10.2012 21:57
линейный список Nelson1992 Помощь студентам 1 26.11.2011 01:40
Организация списков с пом. динамических переменных Лилея Помощь студентам 1 21.05.2011 20:40
Линейный список doter Общие вопросы C/C++ 1 20.02.2011 21:36