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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.01.2015, 13:04   #1
radio228
Новичок
Джуниор
 
Регистрация: 06.01.2015
Сообщений: 3
По умолчанию Проверка на повтор в массиве

Здравствуйте форумчане. Передо мной стояла задача расчета выражения
X(i)=(A*X(i-1)+B)mod m. Где, для примера, m=10,A=7,B=7,X0=7. Необходимо было написать программу, которая бы генерировала числа, в нашем случае получатся (7-6-9-0), и проводила подсчет не повторяющихся элементов. В нашем случае это 4 элемента. Вот мои соображения, но подсчет никак не получился, в итоге программа просто считает все элементы и никак не останавливается:
Код:
void __fastcall TForm1::Button4Click(TObject *Sender)
{
int Y;int a=7;int b=7;
int p=0;
int m=10;
int *ptr= NULL;
ptr= new  int[m];
ptr[0]=7;
for(int i=1;i<m;i++)
{
 Y=(a*ptr[i-1]+b)%m;
 for(int j=0;j<=i-1;j++)
 {
  if(Y==ptr[i-1]) {break;}
  else (ptr[i]=Y);
 }
 p=p+1;
 }
 Edit1->Text=RoundTo(p,-3);
 for(int i=0;i<p;i++)
{
 Memo1->Text = Memo1->Text + IntToStr(ptr[i]) + '\t';
}
}
Конечно, задача была и массив выводить в итоге размером в 4 элемента, но я до этого не додумался.Буду очень благодарен за помощь )))

Последний раз редактировалось Stilet; 06.01.2015 в 13:47.
radio228 вне форума Ответить с цитированием
Старый 06.01.2015, 13:49   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
X(i)=(A*X(i-1)+B)mod m
А можно текст задачи как он есть в методе?
А то я не пойму, тут ряд, относительно предидущего элемента или рекурсия, где Х - функция.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.01.2015, 15:50   #3
radio228
Новичок
Джуниор
 
Регистрация: 06.01.2015
Сообщений: 3
По умолчанию

Здесь происходит расчет следующего элемента за счет предыдущего. Т.е у нас есть начальное значение, к примеру 7, и мы рассчитываем следующие за ним значение Y=(a*ptr[i-1]+b)%m=(7*7+7)mod 10=6.
Где a=7;b=7;ptr[0]=7;
radio228 вне форума Ответить с цитированием
Старый 06.01.2015, 15:53   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Все равно не особо проясняет, но стелепатирую:
Код:
void __fastcall TForm1::Button4Click(TObject *Sender)
{
int Y;int a=7;int b=7;
int p=0;
int m=10;
int *ptr= NULL;
ptr= new  int[m];
ptr[0]=7;
for(int i=1;i<m;i++)
{
 ptr[i]=(a*ptr[i-1]+b)%m;
 Memo1->Text = Memo1->Text + IntToStr(ptr[i]) + '\t';
}
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.01.2015, 16:03   #5
radio228
Новичок
Джуниор
 
Регистрация: 06.01.2015
Сообщений: 3
По умолчанию

Ну, это понятно, но основная проблема была в том, что мне надо было посчитать количество не повторяющихся элементов. Т.е если у меня генерируются числа 7 6 9 0 7 6 9 0 7 , то мне надо посчитать, что период данной комбинации равен 4.
radio228 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проверка есть ли у введенном с клавиатуры массиве повторяющиеся значения С++ (визуальный режим) программирование Помощь студентам 1 24.01.2014 03:38
Повтор madmaniac Общие вопросы C/C++ 2 21.02.2011 20:45
Простая программа. Проверка на повтор записи и автоподставление. Zalim Фриланс 6 14.02.2011 15:58
Найти повтор элементов в массиве A_Orlov Помощь студентам 2 21.06.2010 09:36
Проверка на наличие в массиве istoe Microsoft Office Excel 8 26.08.2009 11:55