Паскаль. Множества. Задачи.

программирование обучение Наука pascal Множества

Надо составить программу для подсчета различных значащих цифр в десятичной записи числа.
Т.е., как я понял, надо, чтобы при строке fdsfds7fds876fds76f мне выдавало 3, т.к. из цифр только 6, 7 и 8, и они не должны повторяться. Накатал программу, но в ней ошибок - целая куча.
---
Мои мысли основываются на том, чтобы искать в множестве А символы из строки, а потом проверять, есть ли изначально пустом множестве В, в которое я буду закидывать цифры, эта цифра, и если её там нет, то я добавляю в В и отмечаю её в переменной N, иначе, при другой ситуации, - пропускаю. А в конце уже вывожу.
Тему только недавно прошли. Кажется, что простая, но вот Паскаль с моим мнением соглашаться не хочет и выплевывает тучу ошибок. Буду рад, если вы мне тыкните на них и объясните множества лучше.
---
program gfh;
var a,b:set of '0'..'9';
d,n,i;integer;
st:string;
begin
writeln('Введите строку');
readln(st);
d:=length(st);
n:=0;
a:=[0..9];
b:=[];
for i:=1 to d do
if st[i] in a then
if not(st[i] in b) then
begin
n:=n+1;
b:=st[i]+b;
end;
writeln(n);
end.
----


Примечание:
Именно множества. Мы проходим множества =((

Примечание:
Честно, не проверял ваш код. Вчера исправил блок-схему и программу =))

Примечание:
У меня Паскаль выдает ошибку. Программа запускается, но после ввода текста он кидает обратно в код и дает ошибку с долларом. В принципе, можете голову не ломать над этим=)

Примечание:
Программы рабочие. Либо я строку длинную вводил в Паскаль(10 символов), либо из-за uses, который я убрал
Ответы:
Ввести массив из 10 элементов типа boolean и заполнить его значением false.
Если в строке встречается цифра i, то если mas[i] = false, то меняем это значение на true, если же этот элемент равен true, то ничего не делаем.
В конце программы нужно будет пройтись по массиву и посчитать сколько раз встретилось true.
Мое предложение - сделать как-то так:
uses crt;
var i, k: integer;
   str: string;
   mas: array[0..9] of boolean;
begin
readln(str);
for i := 0 to 9 do mas[i] := false;
for i := 1 to length(str) do
if(mas[ord(str[i])-ord('0')]=false) then mas[ord(str[i])-ord('0')] := true;
k := 0;
for i := 0 to 9 do
if(mas[i]=true) then inc(k);
writeln(k);
readln;
end.
Тогда вводим множество, потом когда встретилась какая-то цифра, то если она принадлежит множеству, в счетчик прибавляем единицу и исключаем эту цифру из множества.


11 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.