PapiruS Опубликовано 17 февраля, 2009 Жалоба Поделиться Опубликовано 17 февраля, 2009 нужно написать алгоритм решения задачи:даны целые числа h,m(где h-положение часовой стрелки,а m-минутной стрелки), найти наименьшее время в минутах, когда минутная стрелка совпадет с часовой. Ссылка на комментарий
JSTQ Опубликовано 17 февраля, 2009 Жалоба Поделиться Опубликовано 17 февраля, 2009 Проведи 12 часов записывая положения стрелок на циферблате часов в нужный момент)) Ну или сам какнить на бумажке просчитай.Затем посчитай значения в массивчег по формуле arr = h * 60 + mИтак у тебя будет массив из количеств минут, когда часовая и минутная стрелка совпадают.Затем вводиш значения в программу, опять же считаешь asd = h * 60 + m, и находишь по циклу ближайшее большее значение из массива к полученному количеству минут, считаешь разницу... Ссылка на комментарий
X-tender Опубликовано 18 февраля, 2009 Жалоба Поделиться Опубликовано 18 февраля, 2009 Проведи 12 часов записывая положения стрелок на циферблате часов в нужный момент)) Ну или сам какнить на бумажке просчитай.Затем посчитай значения в массивчег по формуле arr = h * 60 + mжесткое решение PapiruSчтобы определить во сколько стрелки пересекаются можно посчитать сравнивая положения стрелок(1-й способ), либо использовать миниформулу, исходящую из того, что время пересечения стрелок сдвигается ежечасно на одно и то же кол-во минут, т.к. за 11 часов стрелки пересекутся 12 раз(правда в формуле у меня небольшая погрешность в связи с делением на 11, поэтому ошибочно показывает 60 минут вместо 59):use POSIX;use strict;print "Sposob 1:\n";my $m=0; my $h=0; my $hm=0; my $i=0;for (my $t=0;$t<60*12;$t++){$m=$t%60;if (($t>0) && ($m==0)) {$h++;}#if (($t>0) && ($t%12==0)) {$hm++;}$hm = floor($h*5+$m/12.0);if ($hm==$m) { $i++; my $tt = floor($h*60/11); printf ("%2d: %02d:%02d\n",$i,$h,$hm); }}print "\n\nSposob 2:\n";for (my $i=0;$i<12;$i++){ printf ("%2d: %02d:%02d\n",$i+1,$i,floor($i*60/11));}Но следует учитывать, что здесь решения для дискретности положения часовой и минутной стрелки в деление равное 1 минуте, кроме последнего решения - в нем 60-я минута появляется как раз в связи с абсолютной точностью, вместо дискретной.зы. Надеюсь разобрать перловый код не сложно? Добавлено спустя 25 минут 55 секунд:А вот собственно само решение(параметры прямо в консоли вводишь - типа "clock.pl 2 0" - рассчитать для 2:00), постарался расписать подлиннее, чтобы понятнее было:use POSIX;use strict;if ($#ARGV>0){ $h=$ARGV[0]; $m=$ARGV[1]; $hm=floor($h*60/11)%60; printf "Result for %1d:%02d - ",$h,$m; if ($hm>=$m){printf "%02d minut",$hm-$m} else {printf "%02d minut",$hm+60-$m}} Ссылка на комментарий
PapiruS Опубликовано 18 февраля, 2009 Автор Жалоба Поделиться Опубликовано 18 февраля, 2009 X-tenderвообще то мне надо было блок схему просто написать не мог бы ты её упростить?чтоб влезло все в один блок и там не должно быть всяких циклов и условий. Ссылка на комментарий
X-tender Опубликовано 18 февраля, 2009 Жалоба Поделиться Опубликовано 18 февраля, 2009 PapiruS, куда уж еще то упростить? решение и так состоит из трех строчек:$hm=floor($h*60/11)%60;if ($hm>=$m) {printf "%02d minut",$hm-$m}else {printf "%02d minut",$hm+60-$m}Если непонятно на перле то попробую вот так:h-текущий час, m - текущая минута, hm - положение минутной стрелки в следю пересечение.result - искомое кол-во минут до пересеченияhm = округлить_в_меньшую_сторону( h*60/11 ) mod 60;if (hm>=m) result=hm-melse result=hm+60-m; Ссылка на комментарий
PapiruS Опубликовано 20 февраля, 2009 Автор Жалоба Поделиться Опубликовано 20 февраля, 2009 hm = ( h* 60/11 ) mod 60;объясни плиз это что высчитывает?время от начала отсчета до часовой стрелки в минутах? Ссылка на комментарий
X-tender Опубликовано 20 февраля, 2009 Жалоба Поделиться Опубликовано 20 февраля, 2009 PapiruS угу, до положения часовой стрелки в момент пересеченияа вообще тут небольшой косячек в елсе - надо там к часу прибавить 1 и снова рассчитать hm b result Ссылка на комментарий
PapiruS Опубликовано 22 февраля, 2009 Автор Жалоба Поделиться Опубликовано 22 февраля, 2009 hm = ( h* 60/11 ) mod 60; X-tenderобьясни плз как эта формула работает. а то препод придрался обьяснить надо и не принимает.и почему имено на 11 делим? Ссылка на комментарий
X-tender Опубликовано 22 февраля, 2009 Жалоба Поделиться Опубликовано 22 февраля, 2009 PapiruS, дело в том что за 12 часов стрелки пересекаются 11 раз.А вообще составь уравнение положения часовой стрелки(в минутных делениях) от времени(бери лучше время в минутах) и минутной от времени и оттуда придешь к этой формуле.то есть: DeltaH(t) и DeltaM(t), где t- время в минутах (то есть h*60+m, где h-час,m-минута)для минут то проще простого: DeltaM= t mod 60Теперь составь для DeltaH и реши систему уравнений Ссылка на комментарий
PapiruS Опубликовано 25 февраля, 2009 Автор Жалоба Поделиться Опубликовано 25 февраля, 2009 че та я не могу догнатЬ может составишь для deltaH? Ссылка на комментарий
X-tender Опубликовано 25 февраля, 2009 Жалоба Поделиться Опубликовано 25 февраля, 2009 DeltaH= ((t div 60) mod 12)*5 + ((t mod 60)/60)*5 Ссылка на комментарий
k-v-p Опубликовано 3 марта, 2009 Жалоба Поделиться Опубликовано 3 марта, 2009 Задача: Определить минимальное количество минут, через которое стрелки часов пересекутся.Исходные данные: (h, m), где h=0..11; m=0..59Решение:if ((h * 60 / 11) >= m) RESULT = (h * 60 / 11) - melse RESULT = ((h+1) * 60 / 11) - m + 60; Ссылка на комментарий
PapiruS Опубликовано 11 марта, 2009 Автор Жалоба Поделиться Опубликовано 11 марта, 2009 h * 60 / 11) >= m считает расстояние от начала до часовой стрелки в минутных делениях?((h+1) * 60 / 11) - m + 60; а это можно обьяснить поподробнее плз, и почему именно так Ссылка на комментарий
X-tender Опубликовано 11 марта, 2009 Жалоба Поделиться Опубликовано 11 марта, 2009 PapiruS, у него та же самая формула, что и я тебе давал.(h * 60 / 11) - да, это положение часовой и минутной стрелок в момент пересечения. ЧТобы формула работала и при 11((h+1) * 60 / 11) - m + 60;Это если минутная стрелка в этом часу уже перевалила за часовую стрелку, то рассчитывается для следующего часа Ссылка на комментарий
42 Опубликовано 21 мая, 2009 Жалоба Поделиться Опубликовано 21 мая, 2009 Сорри за беспокойство. Просто попросили решить задачи а я на информатике второй год в CS гоняю... Сами задачи элементарные, даже смешные. Но все уже из черепа вылетело.Дан массив чисел. Найти наибольшее.Найти сумму элементов числового массиваВычислить количество элементов числового массива, кратных 2.Дан числовой массив и 2 числа A и B. Вывести на экран монитора все числа, большие A но меньшие B.Дан числовой массив. Вычислить сумму элементов, имеющих четное значение индекса.Задан одномерный массив. Подсчитать количество элементов массива, больших заданного числа k.Определить самую высокую температуру и самый теплый день в мае.Не надо смеятся, но действительно забыл как это все на паскале пишется... Позор на мою седую голову... *20*добавлено спустя ночь*А! Перечитал самоучитель по Паскалю! Все выполнил кроме последней. Я ее не догоняю. Эт видимо массив из 31 и найти наиб и его номер что ли? Ссылка на комментарий
PapiruS Опубликовано 22 мая, 2009 Автор Жалоба Поделиться Опубликовано 22 мая, 2009 42условия полностью последней задачи запиши.А то чего то вроде нехватает Ссылка на комментарий
TolkienDRR Опубликовано 23 мая, 2009 Жалоба Поделиться Опубликовано 23 мая, 2009 42как данные представлены не понятно. но смотря на остальные задачки, то скорее всегомассив из 31 числа.решаешь как первую задачу + выводишь порядковый номер элемента в массиве (номер дня). Ссылка на комментарий
42 Опубликовано 23 мая, 2009 Жалоба Поделиться Опубликовано 23 мая, 2009 TolkienDRRТак и Сделал. СПС. Ссылка на комментарий
Рекомендуемые сообщения
Пожалуйста, войдите, чтобы комментировать
Вы сможете оставить комментарий после входа в
Войти