Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Алгоритмы и теория программирования


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты в разделе

Gluck
Статус: 9-й класс
Рейтинг: 102
∙ повысить рейтинг »
CradleA
Статус: Мастер-Эксперт
Рейтинг: 54
∙ повысить рейтинг »
Лысков Игорь Витальевич
Статус: Мастер-Эксперт
Рейтинг: 42
∙ повысить рейтинг »

Алгоритмы и теория программирования

Номер выпуска:246
Дата выхода:25.01.2022, 23:15
Администратор рассылки:Зенченко Константин Николаевич (Старший модератор)
Подписчиков / экспертов:3 / 16
Вопросов / ответов:3 / 8

Консультация # 189127: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Требуется написать программу для МНР для вычисления функции f(x,y)=x+y (x>0, y>=0, в начальный момент значение x находится в регистре R1, а значение y - в регистре R2; программа должна завершать работу за конечное время и в момент завершения регистр R1 должен содержа...
Консультация # 106516: Доброго времени суток. Прошу помочь в решении следующих задач: 1. Дан массив размера N и число k (0 < k < 5, k < N). Осуществить циклический сдвиг элементов массива вправо на k позиций. 2. Дано вещественное число R и массив размера N. Найти элемент массива, который наиболее близок к данному числу. 3. Дан массив ...
Консультация # 42100: Здравствуйте. Есть интерсная задача: "С клавиатцры вводятся целые числа A и B. Вывести 1, если A делится на B или B делится на А иначе вывести любое другое число. НЕ ИСПОЛЬЗОВАТЬ условные опрераторы и опраторы цикла." Реализовать надо на Pascal . Если числа не равны нулям, то делается это следующим образом: result := ...

Консультация # 189127:

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
Требуется написать программу для МНР для вычисления функции f(x,y)=x+y (x>0, y>=0, в начальный момент значение x находится в регистре R1, а значение y - в регистре R2; программа должна завершать работу за конечное время и в момент завершения регистр R1 должен содержать значение x+y) и вычислить геделев номер программы, созданной в рамках первой части задания.

Дата отправки: 08.04.2016, 13:57
Вопрос задал: gremyatskaya (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Лысков Игорь Витальевич (Мастер-Эксперт):

Здравствуйте, gremyatskaya!
Программа МНР (два варианта)

Код
1) j(0,1,5)	
2) S(2)
3) S(0)
4) j(2,2,1)
5) T(0,1)

Код
1) j(0,2,5)	
2) S(1)
3) S(0)
4) j(2,2,1)

Консультировал: Лысков Игорь Витальевич (Мастер-Эксперт)
Дата отправки: 08.04.2016, 17:59 нет комментария
-----
Дата оценки: 09.04.2016, 00:30

Рейтинг ответа:

НЕ одобряю +1 одобряю!

Консультация # 106516:

Доброго времени суток. Прошу помочь в решении следующих задач:

1. Дан массив размера N и число k (0 < k < 5, k < N). Осуществить циклический сдвиг элементов массива вправо на k позиций.

2. Дано вещественное число R и массив размера N. Найти элемент массива, который наиболее близок к данному числу.

3. Дан массив размера N. Найти номера двух ближайших чисел из этого массива.

В задаче 1 возникает проблема с переполнением массива, т.к использую при сдвиге тот же самый массив того же размера. Возможно ли тут обойтись единственным массивом?

Заранее спасибо за помощь в постижении алгоритмов.

Дата отправки: 23.10.2007, 18:56
Вопрос задал: Coder
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Воробьёв Алексей Викторович:

Здравствуйте, Coder!

1.
Вам потребуется дополнительный массив размера k.
1. Сначала сохраните последние k чисел в этом массиве
2. Сдвиньте оставшиеся n-k чисел вправо. Естественно, что цикл надо гнать с конца массива к началу.
3. Скопируйте k чисел из временного массива в начало.

2.
Буду писать на C:
int diff = abs(a[0] - b);
int best = 0;
for(int i = 1; i < N; ++i)
{
if(diff > abs(a[i] - b))
{
diff = abs(a[i] - b);
best = i;
}
}
//best искомый индекс, a[best] - искомое значение

3.
int diff = abs(a[1] - a[0]);
int best = 0;
for(int i = 1; i < N - 1; ++i)
{
if(diff > abs(a[i + 1] - a[i]))
{
diff = abs(a[i + 1] - a[i]);
best = i;
}
}
// best и best + 1 - искомые номера

Консультировал: Воробьёв Алексей Викторович
Дата отправки: 24.10.2007, 00:23
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 42100:

Здравствуйте.
Есть интерсная задача:
"С клавиатцры вводятся целые числа A и B. Вывести 1, если A делится на B или B делится на А иначе вывести любое другое число. НЕ ИСПОЛЬЗОВАТЬ условные опрераторы и опраторы цикла." Реализовать надо на Pascal .
Если числа не равны нулям, то делается это следующим образом:

result := (a mod b)*(b mod a) +1;

Как написать, если числа могут быть равны нулю?

Дата отправки: 05.05.2006, 06:25
Вопрос задал: Николай Б.
Всего ответов: 6
Страница онлайн-консультации »


Консультирует Jeka911:

Здравствуйте, Николай Б.!

Т.е. если А=0 или В=0, то тоже результат 1?
Тогда можно попробовать.
return (!a) || (!b) || ((a mod b)*(b mod a) +1);

:), странный какой-то язык получился, но Вам нужен паскаль, а я его подзабыл.

Консультировал: Jeka911
Дата отправки: 05.05.2006, 06:49
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Sergijj:

Здравствуйте, Николай Б.!

Так подойдёт?
result := (not(a mod b)) * (not(b mod a)) + 2;

Удачи!

Консультировал: Sergijj
Дата отправки: 05.05.2006, 09:34
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Kazakh:

Здравствуйте, Николай Б.!
Вот решение , основанное на особенности обработки булевых выражений компилятором (Pascal, Delphi) и хитрости булева типа.
В прицепе два решения, так как я не знаю чему будет равняться 0 на 0 smile :-)
Первый вариант - если 0 делится на 0 без остатка :-). Сомнительно, конечно :-).
Второй вариант - если 0 никак не делится на 0 :-). Более разумный вариант.
Как видно, разница всего в одном знаке.
Удачи.

Приложение:

Консультировал: Kazakh
Дата отправки: 05.05.2006, 09:58
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует gp:

Здравствуйте, Николай Б.!
Паскаль я изучал очень давно :-(((, но помню, что там есть возможность отключить сообщение об ошибке ключами {$I-} и {$I+}, точнее, в переменную IOResult или как-то там заносится рез-т операции, если она ошибочна, то 1. Если это у меня не маразм))), то можно написать так

result :=242424;
{$I-}
result := (a mod b)*(b mod a) +1;
{$I+}

Консультировал: gp
Дата отправки: 05.05.2006, 10:27
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Филатов Евгений Геннадьевич:

Здравствуйте, Николай Б.!

Кажется так

(a Mod (b + Sgn(b ) - 1 ) ) * (b Mod (a + Sgn(a ) - 1 ) ) + Sgn(a ) - 1 + Sgn(b )

Работает для неотрицательных чисел a и b.
Если b=0, то в (b + Sgn(b ) - 1 ) = -1 (не нуль!), иначе = b.
0 Mod не_нуль = 0, поэтому после умножения добавлена проверка на нулевое значение аргументов. Если оба аргумента нулевые, ответ -1, если один из них, то 0, иначе в зависимости от кратности аргументов.
Не знаю насчет Pascal, а в Basic функция Sgn() работает так:
Если число Sgn возвращает
Больше нуля 1
Равняется нулю 0
Меньше нуля -1
Если в Pascal возвращаются другие значения, то надо изменить вычитаемую константу.

С уважением.

Консультировал: Филатов Евгений Геннадьевич
Дата отправки: 05.05.2006, 11:28
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует Устинов Сергей Евгеньевич:

Здравствуйте, Николай Б.!
Ну если нельзя использовать и оператора Ord, то могу предложить другой вариант (в приложении).
Кстати насчет делимости 0 на 0. Есть правило: "На ноль делить нельзя", т.е. что бы то мы не делили на ноль - выражение не имеет смысла.
Кстати насчет программы ув. эксперта Kazakh: 0:3=0, т.е. ноль делится на 3 без остатка, что не учитывается в его программе.
Короче, если только одно число равно нулю, то либо А делится на В, либо В делится на А (ноль делится на не ноль).

Приложение:

Консультировал: Устинов Сергей Евгеньевич
Дата отправки: 05.05.2006, 19:47
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное