Консультация № 193739
20.10.2018, 22:27
0.00 руб.
22.10.2018, 13:01
0 7 1
Уважаемые эксперты! Пожалуйста, ответьте на вопрос: как данный код на Паскале будет реализован на С?
[code lang=pascal]Program project1;
var h,m,yH,yM,z:integer;
begin
repeat
write('Enter h:');
readln(h);
until h in[0..11];
repeat
write('Enter m:');
readln(m);
until m in[0..59];
z:=-1;
repeat
inc(z);
yH:=30*h+round(12*m/60);
yM:=round(360*m/60);
if (yH<90)or(yH>270)then yH:=(yH+180)mod 360;
if (yM<90)or(yM>270)then yM:=(yM+180)mod 360;
inc(m);
h:=(h+(m div 60))mod 12;
m:=m mod 60;
until abs(yH-yM)in[87..93];
writeln(h:2,':',m:2,' count:=',z);
end.[/code]

Обсуждение

давно
Академик
20764
1861
21.10.2018, 09:56
общий
Это задача про стрелки на циферблате, которая недавно пробегала?
давно
Советник
400484
472
22.10.2018, 10:33
общий
23.10.2018, 10:51
это ответ
Здравствуйте, Olga!
Код:
#include "stdlib.h"
#include "stdio.h"
int main()
{
int h = 0, m =0, yH = 0, yM = 0, z = -1;
do
{
printf("Enter h: ");
scanf("%d", &h);
}
while (0 >= h && h <= 11);
do
{
printf("Enter m: ");
scanf("%d", &m);
}
while (0 >= m && m <= 59);
do
{
z++;
yH = 30 * h + (int)(12 * m / 60);
yM = (int)(360 * m / 60);
if (yH < 90 || yH >270)
{
yH = (int)(yH + 180) % 360;
}
if (yM < 90 || yM >270)
{
yM = (int)(yM + 180) % 360;
}
m++;
h = (h + (int)(m / 60)) % 12;
m = m % 60;
}
while ((abs(yH - yM)<87) || (abs(yH - yM) > 93));
printf("%d:%d count = %d",h, m, z);
return 0;
}
давно
Советник
400484
472
22.10.2018, 13:24
общий
Цитата: Зенченко Константин Николаевич
1)пропустили 2 строчки

Код (Pascal) :: выделить код
if (yH<90)or(yH>270)then yH:=(yH+180)mod 360;
if (yM<90)or(yM>270)then yM:=(yM+180)mod 360;

Без них программа не правильно считает.


А в код тогда нужно еще добавить:
Код:

if (yH < 90 || yH >270)
{
yH = (int)(yH + 180) % 360;
}
if (yM < 90 || yM >270)
{
yM = (int)(yM + 180) % 360;
}

между
Код:

yM = (int)(360 * m / 60);
// пропущено тут
m++;
давно
Академик
20764
1861
22.10.2018, 13:34
общий
На случай: scanf() функция опасная. Как минимум надо всегда анализировать значение, которое она возвращает
давно
Советник
400484
472
22.10.2018, 13:43
общий
22.10.2018, 13:44
Цитата: Зенченко Константин Николаевич
Условия там были.

Всё, пойду харакири делать
Реально где-то профукал... Каюсь.
давно
Старший Модератор
31795
6196
23.10.2018, 10:53
общий
Адресаты:
Обратите внимание на ответ эксперта solowey, там исправленный вариант кода.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Советник
400484
472
23.10.2018, 11:01
общий
спасибо, что исправили
Форма ответа