Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Центр помощи > [Pascal] Количество чередований знаков |
Автор: Sven777 2.7.2007, 18:02 | ||
Хочу изучить язык Паскаль по книжке, самостоятельно.И у меня возник вопрос. Не могу решить вот эту задачу: Определить сколько раз последовательность из N произвольных чисел меняет знак. Просто не знаю, что делать с этими произвольными числами ![]() Желательно бы и алгоритм к этой задаче.Весь его писать не надо просто объясните, как решать вопрос с произвольными числами.
|
Автор: sergejzr 2.7.2007, 18:11 |
Для домашних заданий, курсовых, существует "Центр Помощи" Тема перенесена! |
Автор: likehood 2.7.2007, 18:33 |
так в чем проблема то? если нужно получить произвольные числа, можешь просто ввести их с клавиатуры. главное в этой задаче - алгоритм определения чилса смен знакак. |
Автор: Sven777 2.7.2007, 18:44 |
Наверняка есть какой-нибудь генератор произвольных чисел. Или надо просто тупо вводить их? |
Автор: likehood 2.7.2007, 18:52 |
есть и генератор: random(N) - случайное число от 1 до N. (вначале программы нужно вызвать процедуру randomize; для инициализации генератора случайных чисел) но в данном случае (как я понял) это не важно, главное - придумать алгоритм посчета числа смен знаков. |
Автор: Sven777 2.7.2007, 18:58 |
Можешь дать какую-нибудь ссылку про этот randomoze? |
Автор: likehood 2.7.2007, 19:01 |
просто в начале программы один раз вызываешь randomize; для инициализации генератора затем для получения случайного числа (от 1 до N) вызываешь random(N); Добавлено через 46 секунд в принципе, в встроенном хэлпе про него должно быть написано |
Автор: Sven777 2.7.2007, 19:38 |
likehood, Спасибо |
Автор: Kuvaldis 3.7.2007, 00:56 |
Sven777, Тебе нужно сгенерировать случайное число так, чтобы оно могло быть как положительное, так и отрицательное. random(N) генерит случайное число из интервала (1, N) Поэтому используй для заполнения такую формулу: переменная = Random(1, N) - N/2 Тогда значение будет между (-N/2, N/2) |
Автор: greenpc 3.7.2007, 08:41 | ||
Sven777
![]() ф -ция random возвращяет значения 0 <= X < 1 или 0 <= X < 100 для данного примера |
Автор: Sven777 3.7.2007, 19:11 | ||||
Задачу вроде бы решил.Произвольные числа вводяться с клавиатуры. //Произведение двух чисел с разными знаками - отрицательное число// На это и опирался.Немного топорно, конечно, получилось, но ничего задача работает правильно! Как на ваш взгляд все правильно сделал или можно было бы как-нибудь упростить, а то громозко как-то выглядит?
|
Автор: likehood 3.7.2007, 20:05 |
Прежде всего бросаются в глаза строчки 19 и 21, в которых происходит одно и то же действие в разных частях условного оператора. Поскольку увеличить i нужно в любом случае, лучше сделать это после условного оператора. Кстати, в данном случае лучше было использовать цикл for, тогда i увеличивалось бы автоматически. Еще я бы перенёс ввод x1 в начало цикла, тогда в начале программы не нужно было бы вводить x1 и, кроме того, можно было бы убрать условие в 22 строке. Ну и еще не помешает сделать нормальные отступы, чтобы программу было проще читать. |
Автор: Sven777 3.7.2007, 20:16 | ||||
Вот эта идея мне понравилась. Учту эти замечания и попытаюсь переделать программу.
А как надо правильно делать эти отступы??? |
Автор: likehood 3.7.2007, 20:22 | ||
Как то так:
После каждого begin'а делатеся отступ (обычно 4 пробела). |
Автор: Sven777 3.7.2007, 20:41 |
likehood, спасибо, решил как вы посоветовали и получилось намного кратче. |