Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Посчитать количество различных цифр в записи. Паскаль, программа почти написана. (http://www.tehnari.ru/f41/t43268/)

IvaIlga 13.12.2010 11:11

Посчитать количество различных цифр в записи. Паскаль, программа почти написана.
 
Здравствуйте! Обращаюсь за помощью не в написании программы (на Паскале), а в проверке на наличие ошибок и в доработке. Условие задания такое: "Посчитать количество различных цифр в десятичной записи и напечатать в возрастающем порядке все цифры,не входящие в в нее. То есть цифры должны быть от 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.

Vladimir_S 13.12.2010 11:22

Я, конечно, подумаю, как правильно решить задачку (она не очень простая), но одно укажу сразу. Вот Вы пишете:
Цитата:

if not(m[e] in Number[i]) then write(m[e],' ');
Но ведь Number[i] - это элемент строковой переменной Number, т.е. просто символ (тип Char), а Вы обращаетесь с ним, как с множеством! Нет, тут сразу много ошибок.

Vladimir_S 13.12.2010 12:11

Вообще-то я бы на свой вкус решал задачку так:
Код:

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

Я тут еще подумал - можно и без преобразования в числовой массив, т.е. работать со строками и символами. Тогда получится еще короче:
Код:

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.



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

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.