Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 13.12.2010, 11:11   #1 (permalink)
IvaIlga
Member
 
Регистрация: 11.11.2010
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Post Посчитать количество различных цифр в записи. Паскаль, программа почти написана.

Здравствуйте! Обращаюсь за помощью не в написании программы (на Паскале), а в проверке на наличие ошибок и в доработке. Условие задания такое: "Посчитать количество различных цифр в десятичной записи и напечатать в возрастающем порядке все цифры,не входящие в в нее. То есть цифры должны быть от 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[i]='1' then k1:=k1+1;
if Number[i]='2' then k2:=k2+1;
if Number[i]='3' then k3:=k3+1;
if Number[i]='4' then k4:=k4+1;
if Number[i]='5' then k5:=k5+1;
if Number[i]='6' then k6:=k6+1;
if Number[i]='7' then k7:=k7+1;
if Number[i]='8' then k8:=k8+1;
if Number[i]='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[i]) then write(m[e],' ');
e:=e+1;
readln;
end;
end.
IvaIlga вне форума   Ответить с цитированием

Старый 13.12.2010, 11:11
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Посмотрите данные темки и узнайте больше

Паскаль. Сумма цифр числа
Посчитать количество букв k в последнем слове строки.

Старый 13.12.2010, 11:22   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Я, конечно, подумаю, как правильно решить задачку (она не очень простая), но одно укажу сразу. Вот Вы пишете:
Цитата:
if not(m[e] in Number[i]) then write(m[e],' ');
Но ведь Number[i] - это элемент строковой переменной Number, т.е. просто символ (тип Char), а Вы обращаетесь с ним, как с множеством! Нет, тут сразу много ошибок.
Vladimir_S вне форума   Ответить с цитированием
Старый 13.12.2010, 12:11   #3 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Вообще-то я бы на свой вкус решал задачку так:
Код:
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 проверяются на предмет вхождения в полученный массив; если цифры в массиве нет, она выводится на экран.
Vladimir_S вне форума   Ответить с цитированием
Старый 13.12.2010, 15:26   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Я тут еще подумал - можно и без преобразования в числовой массив, т.е. работать со строками и символами. Тогда получится еще короче:
Код:
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.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 11:05.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.