Как преобразовать 24:00 часов в формат 12:00

Мне нужна помощь с заданием псевдокода: преобразовать 2400 часов в формат 12.

Разработайте алгоритм, который будет запрашивать и получать элемент, выраженный в формате 2400 (например, 2305 часов), преобразовывать его в 12-часовой формат (например, 23:05) и отображать контрольное время 9999.

Prompt for hrs, mins
Get hrs, mins                               
DOWHILE(hrs NOT = 99) AND (mins NOT = 99) // If hrs & mins not = to 99 then it will run if not it will stop
    IF (hrs = 00) THEN  // midnight. 0030. It will + 12 and display 12:30am
        format = am
        time = hrs + 12
        Display hrs, ":" , mins, format
        ELSE
        IF (hrs > 12) THEN  // afternoon. 1630. It will – 12 and display 4:30pm
            format = pm
            hrs = hrs – 12
            Display hrs, ":" , mins, format
        ELSE
            IF (hrs < 12) THEN      // from midnight 0100 to 1159. It will display AM
                format = am
                Display hrs, ":" , mins, format
                IF (hrs = 12) THEN      // if format is 1230. It will display 1230PM
                    format = pm
                    Display hrs, ":" , mins, format
                ENDIF
            ENDIF
        ENDIF
    ENDIF

    IF (hrs < 0) OR (hrs > 23) THEN // hrs less than 0 or more than 23 is error. 
        Display ‘Invalid hour input’
        IF (mins < 0) OR (mins >59) THEN    // mins less than 0 or more than 59 is error. 
            Display ‘Invalid mins input’
        ENDIF
    ENDIF

    Prompt for hrs, mins    // you prompt again , we are still in the loop until we hit 9999
    Get hrs, mins
ENDDO           // which stop here because it’s 9999

Я делаю правильно? Пожалуйста посоветуй. Здесь новый ученик! огромное спасибо!


person Ken    schedule 01.09.2011    source источник
comment
Некоторые отступы были бы полезны. В какой части вы не уверены?   -  person D'Arcy Rittich    schedule 01.09.2011
comment
Было бы приятно увидеть, что кто-то редактировал, пока вы делаете это тоже :D Кроме того, этот код не работает в коде сторожевого, как будто я прохожу 12:99, он останавливается, когда должен, только на 99:99   -  person Kheldar    schedule 01.09.2011
comment
Итак, ошибка DOWHILE (час‹›99) ИЛИ (мин‹›99)? Что я должен использовать вместо этого? DOWHILE (час‹›99) И (мин‹›99)?   -  person Ken    schedule 01.09.2011
comment
Да уже лучше. Обновите сообщение, отступ кода с 4 пробелами и отступ внутри IF/WHILE и т. д. с еще одной вкладкой   -  person Kheldar    schedule 01.09.2011
comment
Извините, я не понимаю, что вы имеете в виду.   -  person Ken    schedule 01.09.2011
comment
просто написал ошибку? ЕСЛИ (часы ‹ 0) ИЛИ (часы › 23) я должен использовать И вместо этого я прав?   -  person Ken    schedule 03.09.2011


Ответы (1)


Ну, в зависимости от того, как ваш профессор ожидает, что ваш псевдокод будет выглядеть, то, что у вас есть, должно работать нормально, я думаю. Однако некоторые строки немного избыточны. Вы можете объединить проверку выхода часов и минут в один оператор IF. Затем вы можете установить для своей переменной time значение "am" по умолчанию, что превратит ваш IF - ELSE IF - ELSE в один IF - ELSE. О, и не то, чтобы я был уверен, что это имеет большое значение, но вместо того, чтобы использовать hours = hours + 12 вместо hours = 0, вы, вероятно, могли бы просто сделать hours = 12. Опять же, то, что у вас есть, должно работать очень хорошо, я думаю.

РЕДАКТИРОВАТЬ: Ах... опять же, не уверен, что это имеет значение, но способ, возможно, завершить программу тоже может быть полезен. В противном случае вы, кажется, навсегда застрянете в своей петле.

РЕДАКТИРОВАТЬ 2: Вот что я бы сделал...

done = false

DOWHILE !done
    PROMPT hours, minutes
    GET hours, minutes

    IF hours < 0 OR hours > 23 OR minutes < 0 OR minutes > 60
        DISPLAY "Invalid Time"
    ELSE
        format = "AM"

        IF hours > 12
            format = "PM"
            hours = hours - 12
        ELSE IF hours == 0
            hours = 12
        ELSE IF hours == 12
            format = "PM"

        DISPLAY hours ":" minutes format
        ENDIF
    ENDIF
    PROMPT "Are you done?"
    GET done
ENDLOOP
person Kris Schouw    schedule 01.09.2011
comment
В настоящее время код никогда не будет выполняться в полдень (12:00), поскольку ваш оператор IF для его обработки находится в блоке IF(hours < 12); невозможно, чтобы часы были одновременно меньше и равны 12. В любом случае у вас все еще есть много избыточного кода, который можно упростить, как я упоминал выше. С этим исправлением все должно работать... технически... - person Kris Schouw; 02.09.2011