Давалась задача: Иван уже давно занимается карате и мечтает попасть на Олимпийские игры. И тут он узнаёт, что в программу Олимпийских
игр в Токио впервые включено карате. Иван задумался - а как же нужно проводить тренировки спортсменам, живущим в разных
часовых поясах, чтобы «подстроить» биоритмы под токийское время?
Напишите программу, которая запрашивает у пользователя время начала соревнований в Токио и номер часового пояса, в котором
проживает спортсмен.
Время соревнований – число t от 1 часа до 12 часов (в стране «восходящего солнца» все соревнования начинаются до полудня :) и
часовой пояс – число N от -11 до +12. Часовой пояс Японии принято считать +9.
В результате программа должна вывести одно число Х - начало тренировки спортсмена по своему местному времени,
соответствующему времени начала соревнований в Токио.
Входные данные.
Во входных данных в первой строке вводят два целых числа, разделенные одним пробелом: t (1<= t <=12) и N (-11<= N <= +12).
Выходные данные.
В выходных данных вывести одно целое число X (1<= X <=24) – начало тренировки по местному времени.
Я - новичок в программировании, поэтому не обессудьте. Написала такую программу:
var
t, N: integer;
X, c: real;
begin
writeln ('Введите Ваше местное время и через пробел Ваш часовой пояс');
readln (t, N);
while (t>=1)and(t<=12) do
while (N>=1)and(N<=12) do
c:= (t -(9 - N));
if c > 0 then X:=(c)
else
if c < 0 then X:= 24 - abs(c);
writeln (X)
end.
Программа запускается, но решения не даёт. Скажите пожалуйста, в чём проблема?
Другие языки программирования и технологии
Подскажите пожалуйста, какая ошибка в программе на Pascal ABC.NET?
Программа зацикливается тут
while (t>=1) and (t<=12) do
while (N>=1)and(N<=12) do
и бесконечно выполняется c:= (t -(9 - N));
Зачем вообще эти 2 цикла нужны?
А если вам нужна проверка корректности ввода, то лучше это сделать так:
var
t, N: integer;
X, c: real;
begin
repeat
writeln ('Введите Ваше местное время и через пробел Ваш часовой пояс');
readln (t, N);
until (t>=1) and (t<=12) and (t>=1) and (t<=12);
c:= (t -(9 - N));
if c > 0 then X:=(c)
else
if c < 0 then X:= 24 - abs(c);
writeln (X)
end.
while (t>=1) and (t<=12) do
while (N>=1)and(N<=12) do
и бесконечно выполняется c:= (t -(9 - N));
Зачем вообще эти 2 цикла нужны?
А если вам нужна проверка корректности ввода, то лучше это сделать так:
var
t, N: integer;
X, c: real;
begin
repeat
writeln ('Введите Ваше местное время и через пробел Ваш часовой пояс');
readln (t, N);
until (t>=1) and (t<=12) and (t>=1) and (t<=12);
c:= (t -(9 - N));
if c > 0 then X:=(c)
else
if c < 0 then X:= 24 - abs(c);
writeln (X)
end.
Евгений Коваленко
Спасибо за разъяснение! Я просто хотела как-то уместить два значения, т. е. 1<=t<=12 1<=N<=12 так, чтобы они непременно выполнялись. Вот и попробовала "выкрутиться" с помощью while.
Евгений Коваленко
Спасибо! Программа действительно заработала!
Задача решается одним элементарным выражением БЕЗ циклов и БЕЗ условий:
readln(t, N);
writeln((t - 1 - 9 + N + 24) mod 24 + 1);
И НИКАКИХ real в задаче быть не может.
t - 1 - приводим время к диапазону 0..23
t - 1 - 9 - время относительно нулевого часового пояса
t - 1 - 9 + N - время в часовом поясе спортсмена
t - 1 - 9 + N + 24 - добавляем сутки: чтобы время всегда было >= 0
(t - 1 - 9 + N + 24) mod 24 - время внутри суток в диапазоне 0..23
(t - 1 - 9 + N + 24) mod 24 + 1 - искомое время
Упрощая получаем:
(t + N + 14) mod 24 + 1
readln(t, N);
writeln((t - 1 - 9 + N + 24) mod 24 + 1);
И НИКАКИХ real в задаче быть не может.
t - 1 - приводим время к диапазону 0..23
t - 1 - 9 - время относительно нулевого часового пояса
t - 1 - 9 + N - время в часовом поясе спортсмена
t - 1 - 9 + N + 24 - добавляем сутки: чтобы время всегда было >= 0
(t - 1 - 9 + N + 24) mod 24 - время внутри суток в диапазоне 0..23
(t - 1 - 9 + N + 24) mod 24 + 1 - искомое время
Упрощая получаем:
(t + N + 14) mod 24 + 1
Евгений Коваленко
Попробовала Ваш вариант! Сработало! Спасибо Вам большое!
Похожие вопросы
- Нужно создать программу в Pascal ABC.NET
- Помогите написать программу в Pascal abc net
- Проблема с программой в Pascal ABC,Встречено ';',а ожидалось ':'. Если менять, то вылетает ещё ошибка с if
- При введении программы на Pascal ABC выдается ошибка "нельзя вводить данные типа "массив", массивы вводятся поэлементно
- Программа в pascal abc
- Напишите пожалуйста 2 программы в pascal ABC, программы в описании
- Задайте массив из файла в Pascal.ABC.net
- Какую функцию выполняют команды real и integer (var a,b,c:integer;) на Pascal ABC Net? И чем они отличаются?
- Посоветуйте книги по Паскалю Хочу изучить литературу по Паскалю. Посоветуйте именно по Pascal ABC.net.
- Как в Pascal ABC net можно переключать цвета у нарисованного круга? типо светофор