Предмет: Информатика, автор: egor222777

Приветствую помогите с данной задачей.
Условие - Составьте программу которая учитывает все варианты, все цифры в четырехзначном числе,положении возрастания затем в порядке убывания и выводит в качестве результата сумму 3 чисел(Начальное число, число с цифрами по возрастанию, число с цифрами по убыванию).Цифры в числе не должны быть равны, если же они равны,то "WriteLn('Ошибка');"

Данные:
Входные 2576.
Выходные 12756.

Начало я уже написал, главная проблема с условиями.

Program Test;
Var a,a1,a2,a3,a4,b,c:integer;
Begin
ReadLn(a);
a1:=a div 1000;
a2:=a div 100 mod 10;
a3:=a div 10 mod 10;
a4:= a mod 10;
if (a1=a2) or (a2=a3) or (a2=a4) or (a1=a3) or (a1=a4) or (a3=a4) then WriteLn('Ошибка')
else ...

Буду благодарен всем представленным решениям и советам.
Спасибо


Archimedes04: однако эти языки далеки от паскаля
egor222777: Эх, вот в чем проблема новичка( в данном случае меня).Я щас только учусь программированию и знаю только Паскаль и (%2) С#
Archimedes04: Вы либо знаете C# намного больше большинства, либо вы себя переоцениваете) Либо вы имели ввиду 2% от основ?
egor222777: 2% от всего
Archimedes04: В таком случае, вы должны знать его очень хорошо, наверно даже лучше меня
egor222777: Наверное мы не допоняли друг друга. 2% - это то что я знаю в C# , а 98" - это то, что мне предстоит еще выучить.
Archimedes04: Именно так. Но учитывая объемы языка, 2 % - это невероятно много
egor222777: Тогда я знаю 0.2%, тогда боюсь представить, что мне еще предстоит познать
Archimedes04: Я написал программу, но у меня получается 12795 и если сложить 2576 + 2567 + 7652 = 12795, действительно получается именно так
egor222777: Что же, жду ответа, благодарю

Ответы

Автор ответа: Archimedes04
1
Решение на VB.NET:
        Const SIZE As Integer = 4
        Dim a, sum As Integer
        a = Console.ReadLine()
        sum = a
        Dim n(SIZE) As Integer
        For i = 1 To SIZE
            n(i) = a Mod 10
            a \= 10
        Next
        For i = 1 To SIZE
            For j = i + 1 To SIZE
                If n(i) > n(j) Then
                    Dim t As Integer
                    t = n(i)
                    n(i) = n(j)
                    n(j) = t
                ElseIf n(i) = n(j) Then
                    Console.WriteLine("Ошибка")
                    Exit Sub
                End If
            Next
        Next
        For i = 1 To SIZE
            sum += (n(i) + n(SIZE - i + 1)) * 10 ^ (i - 1)
        Next
        Console.WriteLine(sum)
        Console.ReadKey()
Приложения:

Archimedes04: вернее 4 12 и 24
Archimedes04: хорошо
Archimedes04: нял
Archimedes04: понял*
Archimedes04: 4 - Объявляем константу (неизменная переменная) со значением 4 - это длина нашего числа. Вы можете ее не использовать, а везде, где используется SIZE писать 4
Archimedes04: 12 - цикл, в котором мы отбираем в массив каждую цифру
Archimedes04: 24 - при сортировке я заодно проверяю, если числа равны, и, как вы сказали, нужно завершать программу с ошибкой, что я и делаю
Archimedes04: 25-я строчка к слову - это опечатка
Archimedes04: она не нужна, ее стоит удалить
egor222777: Хорошо,благодарю
Похожие вопросы
Предмет: Физика, автор: PyshkaBaBe
Предмет: Математика, автор: Аноним
Предмет: Қазақ тiлi, автор: dinalord93
Предмет: Алгебра, автор: gajnullinaelwira
Предмет: Алгебра, автор: Василиска9