• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Посчитать количество различных цифр в записи. Паскаль, программа почти написана.

  • Автор темы Автор темы IvaIlga
  • Дата начала Дата начала

IvaIlga

Новые
Регистрация
11 Ноя 2010
Сообщения
11
Реакции
0
Баллы
0
Посчитать количество различных цифр в записи. Паскаль, программа почти написана.

Здравствуйте! Обращаюсь за помощью не в написании программы (на Паскале), а в проверке на наличие ошибок и в доработке. Условие задания такое: "Посчитать количество различных цифр в десятичной записи и напечатать в возрастающем порядке все цифры,не входящие в в нее. То есть цифры должны быть от 1 до 9." Как я предполагаю,программа должна рабоатть так:
"допустим пользователь ввел 28116
То что видим на экране:
"1"=2, "2"=1,"3"=0, и т.д.
Проверка: какие цифры отсутствуют во множестве [123456789]
Результат: 34579 (в порядке возрастания)"

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

program PodchetNumber;
var Number:string[5];
m:string[9];
i,e,k1,k2,k3,k4,k5,k6,k7,k8,k9:integer;
begin
writeln('Vvedite luboe celoe chislo, v kotoroe vhodyat chifru ot 1 do 9 dlinnou ne bolee 5 ');
readln(Number);
k1:=0;
k2:=0;
k3:=0;
k4:=0;
k5:=0;
k6:=0;
k7:=0;
k8:=0;
k9:=0;
for i:=1 to Length(Number) do
begin
if Number='1' then k1:=k1+1;
if Number='2' then k2:=k2+1;
if Number='3' then k3:=k3+1;
if Number='4' then k4:=k4+1;
if Number='5' then k5:=k5+1;
if Number='6' then k6:=k6+1;
if Number='7' then k7:=k7+1;
if Number='8' then k8:=k8+1;
if Number='9' then k9:=k9+1;
end;
writeln('1=', k1, ' 2=', k2, ' 3=', k3, ' 4=', k4, ' 5=', k5,' 6=', k6, ' 7=',k7,' 8=', k8, ' 9=',k9);
m:='123456789';
for i:=1 to Length(Number) do
begin
for e:=1 to 9 do
if not(m[e] in Number) then write(m[e],' ');
e:=e+1;
readln;
end;
end.
 
Я, конечно, подумаю, как правильно решить задачку (она не очень простая), но одно укажу сразу. Вот Вы пишете:
if not(m[e] in Number) then write(m[e],' ');

Но ведь Number - это элемент строковой переменной Number, т.е. просто символ (тип Char), а Вы обращаетесь с ним, как с множеством! Нет, тут сразу много ошибок.
 
Вообще-то я бы на свой вкус решал задачку так:
Код:
program PodchetNumber;
var
 Number,S:string;
 Num:ARRAY[1..10] of Byte;
 i,j,Code:Integer;
 b:Boolean;

BEGIN
 writeln('Vvedite luboe celoe chislo dlinnou ne bolee 5 ');
 readln(Number);
 For i:=1 to Length(Number) do
  begin
   S:=Number[i];
   VAL(S,Num[i],Code);
  end;
 Writeln('Otsutstvujut cyfri:');
 For i:=0 to 9 do
  begin
   b:=true;
   for j:=1 to Length(Number) do
    if Num[j]=i then b:=false;
   if b then write(i);
  end;
 Readln;
END.
Здесь:
1. Вводится число в виде строковой переменной.
2. Цифры числа преобразуются в массив.
3. Последовательно цифры от 0 до 9 проверяются на предмет вхождения в полученный массив; если цифры в массиве нет, она выводится на экран.
 
Я тут еще подумал - можно и без преобразования в числовой массив, т.е. работать со строками и символами. Тогда получится еще короче:
Код:
program PodchetNumber;
const
 m='0123456789';
var
 Number:string;
 i,j:Integer;
 b:Boolean;

BEGIN
 writeln('Vvedite luboe celoe chislo dlinnou ne bolee 5 ');
 readln(Number);
 Writeln('Otsutstvujut cyfri:');
 For i:=1 to 10 do
  begin
   b:=true;
   for j:=1 to Length(Number) do
    if m[i]=Number[j] then b:=false;
   if b then write(m[i]);
  end;
 Readln;
END.
 
Назад
Сверху