Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.10.2009, 14:30   #1
Александр Елис
Пользователь
 
Регистрация: 18.08.2009
Сообщений: 70
По умолчанию Задачка на массивы. Попутные вопросы(С)

Уважаемые программисты, есть задачка:
Код:
Упорядочить массив по следующему критерию: в отсортированном массиве модуль разности i-того и (i-1)-го элементов должен возрастать

Массивы для примера
A[10] = {12, 0, 5, 7, 6, -11, -2, -30, 8, 7};
Собственно говоря, я не могу придумать сам алгоритм действий. Кроме того, возник вопрос: как в предусматривать некорректный ввод(в scanf())?
Код:
while(!cin)
{
cout << "bla-bla-bla;"
cin.clear();
cin >> ....
}
Аналог этой конструкции или улучшенная ее версия на языке С, я имею ввиду.
И последний вопрос - как лучше всего заполнить массив псевдослучайными неповторяющимися числами? Прошу объяснить принцип работы функции rand() и srand(), какие аргументы лучше в них использовать? Заранее спасибо!

Последний раз редактировалось Александр Елис; 30.10.2009 в 16:17.
Александр Елис вне форума Ответить с цитированием
Старый 30.10.2009, 15:44   #2
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

а ответ для того массива должен быть примерно какой

Последний раз редактировалось NiCola999; 30.10.2009 в 16:07.
NiCola999 вне форума Ответить с цитированием
Старый 30.10.2009, 16:12   #3
Александр Елис
Пользователь
 
Регистрация: 18.08.2009
Сообщений: 70
По умолчанию

Мой алгоритм неверен... Нужна идея =)

Последний раз редактировалось Александр Елис; 30.10.2009 в 16:16.
Александр Елис вне форума Ответить с цитированием
Старый 30.10.2009, 16:30   #4
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Задача очень интересная. Я бы сделал тупым перебором возможных перестановок, пока не получится ответ. Если окажется очень медленно - нужно думать об улучшении алгоритма.

rand() даёт случайное число. Но так как у него вполне определённый алгоритм, то это случайное число оказывается одним и тем же. :) Точнее, последовательность случайных чисел при многократном вызове функции оказывается одной и той же. Каждый раз эта функция вычисляет следующее случайное число на основе предыдущего. Поэтому перед первым вызовом функции требуется "пинок под зад" в виде функции srand, которая устанавливает основание для поиска следущих случайных чисел. Как правило, это - время на часах, когда запустили программу. Выглядит так:
Код:
#include <time.h>
...
	srand (time(NULL));
	n = rand();
rand выдаёт случайное число от 0 до 32767. Если нужно от 0 до N, то
n = rand%N;
Работает вполне корректно, если N в разы меньше 32767.
ds.Dante вне форума Ответить с цитированием
Старый 30.10.2009, 16:33   #5
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Напомнило одну шутку:

ds.Dante вне форума Ответить с цитированием
Старый 30.10.2009, 16:39   #6
Александр Елис
Пользователь
 
Регистрация: 18.08.2009
Сообщений: 70
По умолчанию

Посидев над задачей полтора часа, я ощутил, что думается вообще плохо... Кто-нибудь выручите куском кода...

Последний раз редактировалось Александр Елис; 30.10.2009 в 16:43.
Александр Елис вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задачка на Массивы) Fanny123 Помощь студентам 7 02.04.2009 01:36
задачка на массивы Dimanduc Помощь студентам 1 31.03.2009 20:49
Задачка на массивы в delphi 7 fredd Помощь студентам 4 27.11.2008 13:22
Задачка на массивы DJ Kost Помощь студентам 6 14.11.2008 16:18