Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Object Pascal: кроссплатформенные технологии > [TP7] Set of char & Write()


Автор: MuForum 15.6.2009, 15:45
Доброе время суток.
Работаю на "Turbo Pascal 7.1".

# Задача: Вывести на экран содержимое множества символов (set of char)
- Не могу сообразить как это сделать.


Код

Program a01;
Uses CRT;
var
    s, q: string;
    a, b, c: set of char;
    i: integer;
begin
    ClrScr;
    s := '1236asdg';
    q := 'asfd vxcvxcvba';
    a := [];
    for i := 1 to length(s) do a := a + [s[i]];
    b := [];
    for i := 1 to length(q) do b := b + [q[i]];
    c := a * b;
    WriteLn('s: ', s);
    WriteLn('q: ', q);
    Write('c: ');
    for i := 1 to sizeof(c) do Write(c[i]); {Проблемы с выводом содержимого множества}
    WriteLn;
    ReadLn;
end.




P.S. -> Пробовал и через строчку делать, но полюбому не получается. Прошу подсказать.

Автор: volvo877 15.6.2009, 16:44
Код
var ch: char;
...
for ch := low(c) to high(c) do
  if ch in c then write(ch:2);

Автор: MuForum 15.6.2009, 17:07
#2, volvo877 - Благодарю за ответ, однако компилятор ругается.
Код

Program a01;
Uses CRT;
var
    s, q: string;
    a, b, c: set of char;
    i: integer;
    ch: char;
begin
    ClrScr;
    s := '1236asdg';
    q := 'asfd vxcvxcvba';
    a := [];
    for i := 1 to length(s) do a := a + [s[i]];
    b := [];
    for i := 1 to length(q) do b := b + [q[i]];
    c := a * b;
    WriteLn('s: ', s);
    WriteLn('q: ', q);
    Write('c: ');
    for ch := low(c) to high(c) do if ch in c then write(ch:2);
    WriteLn;
    ReadLn;
end.


Цитата

Error 29: Ordinal type expected.

- Это выдаёт при попытки вызвать функцию low()

Автор: ФедосеевПавел 15.6.2009, 18:52
Замени low© на low(ch), ну и high(ch) - цикл то с переменной ch

Автор: volvo877 15.6.2009, 21:13
Цитата
однако компилятор ругается.
 smile FPC-шный не ругается... Странно.

Автор: MuForum 15.6.2009, 22:41
# for all - Задача решена, благодарю всех, кто принимал участие.

Код

Program a01;
Uses CRT;
var
    s, q: string;
    a, b, c: set of char;
    i: integer;
    ch: char;
begin
    ClrScr;
    s := '1236asdg';
    q := 'asfd vxcvxcvba';
    a := [];
    for i := 1 to length(s) do a := a + [s[i]];
    b := [];
    for i := 1 to length(q) do b := b + [q[i]];
    c := a * b;
    WriteLn('s: ', s);
    WriteLn('q: ', q);
    Write('a: ');
    for ch := Low(char) to High(char) do if ch in a then write(ch:2);
    WriteLn;
    Write('b: ');
    for ch := Low(char) to High(char) do if ch in b then write(ch:2);
    WriteLn;
    Write('c: ');
    for ch := Low(char) to High(char) do if ch in c then write(ch:2);
    WriteLn;
    ReadLn;
end.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)