Pascal. Периметр многоугольника, строки, графика

Mook
Сообщения: 3
Зарегистрирован: 23 май 2008, 16:06

Пожалуйста помогите решить задачу.

Условие: Дано натуральное число n, 1 < n < 30000. Напишите программу, которая изменит порядок цифр числа так, чтобы получить минимально возможное число.

Примечание: В записи числа n цифра 0 отсутствует.

Ввод: число n вводится с клавиатуры.

Вывод: на экран в строку через пробел выводится исходное и преобразованное число.

Пожалуйста помогите, а то мне придётся летом перездавать информатику, а мне этого очень не хочется. Помогите плиз...
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Перевести число в строку (стандартная функция). Разбить на цифры (один цикл). Цифры упихать в массив (в том же цикле). Упорядочить массив по возрастанию (раздел "Алгоритмы"). Вывести весь в одну строку.
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Mook
Сообщения: 3
Зарегистрирован: 23 май 2008, 16:06

Хыиуду,
а ты можешь написать саму задачу, а то я совсем туплю и ничерта не понимаю... буду тебе за это очень признателен...
BHy4ok
Сообщения: 237
Зарегистрирован: 01 май 2007, 09:03
Откуда: г.Находка
Контактная информация:

2 Mook: на чем задача ?
[syntax='Delphi']
var
S:String;
i,j,k,n:integer;
begin
//Первый пунк можно опустить, если изначально дать числу строковый тип, я думаю препод к этому не придерется, важен результат.
// Загоняешь каждый символ в массив - получаются числа
for i:=1 to length(s) do ....
a:=....
//Сортируешь
// for i := n - 1 downto 1 do
for j := 0 to i-1 do
if a[j] > a[j+1] then
begin
t := a[j];
a[j] := a[j+1];
a[j+1] := t;
end;
// Дальше загоняешь все в строку и выводишь на экран.
for k:=1 to i-1 do
begin
S:=S+' '+IntTostr(a[k]); // Если Delphi
end;
// S - это и есть твое исходное число.
[/syntax]
Вот как то так примерно.
< L3X. (ICQ: 8721378, Mail - l3x@list.ru)
Mook
Сообщения: 3
Зарегистрирован: 23 май 2008, 16:06

BHy4ok, Тебе конечно большое спасибо, но нужно именно в паскале... Спасибо что отозвался и решил помочь...
BHy4ok
Сообщения: 237
Зарегистрирован: 01 май 2007, 09:03
Откуда: г.Находка
Контактная информация:

Mook писал(а):BHy4ok, Тебе конечно большое спасибо, но нужно именно в паскале... Спасибо что отозвался и решил помочь...

ам... вообще-то этот код будет работать и в паскале, это основные функции которые тебе нужны. Я лишь отметил ту строку которая не будет работать в паскале, остальное все идентично, там все банально.
< L3X. (ICQ: 8721378, Mail - l3x@list.ru)
BHy4ok
Сообщения: 237
Зарегистрирован: 01 май 2007, 09:03
Откуда: г.Находка
Контактная информация:

Вот держи/
Я так понял тебе еще надо было сделать проверку, содержится ли "0" и входит ли число в указанный интервал.
Проверишь т.к. в паскале не компилировал.
[syntax='Pascal']
uses crt;
type
ch1 =set of char;
var
S,S1:String;
a:array[0..100] of integer;
i,j,t,buf,er,k:integer;
ch:ch1;
label 1;
begin
ch:=['0'..'0'];
1:
write('vvedite chislo: ');
readln(S);
for I := 0 to length(s) do
begin
if s in ch then
begin
writeln('v chisle ne mojet bit "0"!');
writeln;
goto 1;
end;
end;
val(S,K,er);
if (k < 1) or (k > 30000) then
begin
writeln('1 < n < 30000');
writeln;
goto 1;
end;
for i:=0 to length(s) do
begin
val(S,a,er);
end;
for i:=0 to length(s) do
begin
buf:=a;
j:=i-1;
while (j>=0) and (a[j]>buf) do
begin
a[j+1]:=a[j];
j:=j-1;
end;
a[j+1]:=buf;
end;
writeln;
writeln('ishodnoe chislo: ',S);
write('minimalnoe chislo: ');
for i:=1 to i-1 do
begin
write(a);
end;
readln;
end.
[/syntax]
< L3X. (ICQ: 8721378, Mail - l3x@list.ru)
Ответить