Работы учащихся Решение сложных задач по программированию | Page 6

© Иванов Дмитрий , МБОУ « Лицей № 2 », г . Нижневартовск
Задача № 5
На вход программе подается последовательность символов , заканчивающаяся точкой . Требуется написать программу , которая определяет , есть ли в этой последовательности десятичные цифры , и выводит наибольшее число , которое можно составить из этих цифр . Ведущих нулей в числе быть не должно ( за исключением числа 0 , запись которого содержит ровно одну цифру ). Если цифр нет , программа должна вывести на экран слово « Нет », а если есть – слово « Да » и в следующей строчке искомое число . Например , если исходная последовательность была такая : Day 10 , mice 8 : " Year " 7 is a mistake 91 . то результат должен быть следующий : Да 987110
Решение : program zifri ; var a : array [ 0 .. 9 ] of integer ; s : string ; i , x , ch , k : longint ; er : integer ; begin for i := 0 to 9 do a [ i ]:= 0 ; readln ( s ); i := 1 ; ch := 0 ; while s [ i ]<>'.' do begin Val ( s [ i ], x , er ); if er = 0 then begin writeln ( x ); a [ x ]:= a [ x ]+ 1 ; end ; i := i + 1 ; end ; k := 1 ; for i := 1 to 9 do if a [ i ]> 0 then while a [ i ]<> 0 do begin ch := k * i + ch ; k := k * 10 ; writeln ( k ); a [ i ]:= a [ i ] -1 ; end ; if a [ 0 ]> 0 then while a [ 0 ]<> 0 do begin ch := ch * 10 ; a [ 0 ]:= a [ 0 ] -1 ; end ; writeln ( ch ); end . май , 2015 г .