Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ нужна помощь. Задача на сортировку

Автор: sveta_axi 18.12.2010 1:05

Помогите с задачкой пожалуйста: я ее решала, но нужно отладить, на выходе ответ неполучается.

Задано натуральное число N, в десятичной записи которого не более 6 цифр. Переставить цифры так, чтобы получилось наименьшее из чисел, кот. можно составить из его цифр.

Program zadacha1; 
uses crt;
var i,t, j: byte; p,n:longint; a:array[1..6] of byte;
begin
clrscr;
write('vvedite N');
readln(n); p:=n;
for i:=1 to 6 do begin
a[i]:=p mod 10;
p:= p div 10; end;
for i:=1 to 6 do
for j:=1 to 5 do
if a[j]<a[j+1] then begin
p:=a[j]; a[j]:=a[j+1]; a[j+1]:=a[j]; end; p:=0; t:=1;
for i:=j to 6 do begin
p:=a[i]*t+p;
t:=t*10; end;
writeln('naimenshee chislo coctavlennoe iz cifr chisla', n ,' =', p);
readln;
end.


Тегами не забываем пользоваться...

Автор: volvo 18.12.2010 2:16

У тебя в программе было несколько существенных недочетов.

1) ты неправильно меняла местами значения при сортировке (обрати внимание, как это делала ты, и как сделал я)
2) при "сборке" числа из цифр (это в принципе можно и не делать, достаточно просто напечатать подряд сами цифры, но уж коли ты делаешь - то расскажу, что здесь неправильно), тип "десятки в какой-то степени" не должен быть byte. Это должен быть Longint... Иначе получишь не то, что хочется...
3) естественно, я сделал и то, что сортируются ровно столько цифр, сколько есть в числе, а не все 6. Зачем делать лишнюю работу? smile.gif

В общем, вот подправленный код:

var
i,t, j: byte; p,d,n:longint;
a:array[1..6] of byte;

begin
write('vvedite N '); readln(n);

p:=n;
t := 0;
while p > 0 do begin
inc(t);
a[t]:=p mod 10;
p:= p div 10;
end;

for i:=1 to t do
for j:=1 to t-1 do
if a[j]<a[j+1] then
begin
p:=a[j]; a[j]:=a[j+1]; a[j+1]:=p;
end;

p:=0; d:=1;
for i:=1 to t do
begin
p:=a[i]*d+p;
d:=d*10;
end;
writeln('naimenshee chislo coctavlennoe iz cifr chisla', n ,' =', p);
readln;
end.


Автор: sveta_axi 18.12.2010 2:34

спасибо большое=)