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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2018, 19:49   #1
Shamlxrd
Новичок
Джуниор
 
Регистрация: 23.05.2018
Сообщений: 2
По умолчанию Генерация массива в диапазоне

Помогите сделать генерацию одномерного массива из M случайных целых чисел в диапазоне от Q до P
Вот код:
c++
Код:
//---------------------------------------------------------------------------
 
#include <vcl.h>
 
#pragma hdrstop
 
#include "Unit1.h"
 
#include <math.h>
#include <algorithm>
#include <iterator>
#include <vector>
#include <iostream>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
 
using namespace std;
 
typedef  vector<int> set;
 
//Check on simple
bool is_simple(int n){
        for (int i = 2; i<=sqrt((float)n); i++) {
        if (n % i == 0) {
                        return false;
                }
    }
    return true;
}
 
 
//Calculate power
int card(int* set, int sz){
 int nat = 0;
 int simpl = 0;
 for(int i=0;i<sz;i++){
    if (is_simple(set[i])){
         simpl+=set[i];
    }else{
        nat+=set[i];
    }
 }
 return nat - simpl;
}
 
//Check on intersect
bool is_intersect(int* a, int sza, int* b, int szb){
 for(int i=  0;i < sza;i++){
  for(int j=  0;j < szb;j++){
        if ( a[i] == b[j]) return true;
  }
 }
 return false;
}
 
//Sort by
void selection_sort(int* array, int size) {
    int sw;
    for (int idx_i = 0; idx_i < size - 1; idx_i++) {
        size_t min_idx = idx_i;
        for (size_t idx_j = idx_i + 1; idx_j < size; idx_j++) {
            if (array[idx_j] < array[min_idx]) {
                min_idx = idx_j;
            }
        }
        if (min_idx != idx_i) {
            sw = array[idx_i];
            array[idx_i] = array[min_idx];
            array[min_idx] = sw;
        }
    }
}
 
 
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
        try{
           if ( StrToInt(Edit1->Text) > 0 ){
                   ListBox1->Items->Add(Edit1->Text);
           }
        }catch(Exception *ex){
          ShowMessage(ex->Message);
        }
        Calculate();
}
//---------------------------------------------------------------------------
  #include <sstream>
 
using namespace std;
 
TForm1::Calculate()
{
  int setall_sz;
  int* setall =  GetSet(ListBox1, setall_sz);
  int setall_cardio = card(setall, setall_sz );
  TVarRec vr[] = {setall_cardio};
  Label2->Caption =  Format("Разность сумм простых и не простых чисел: %d ", vr ,1);
  Label3->Caption = "Разделение не удалось";
 
  //Clear all
  ListBox2->Items->Clear();
  ListBox3->Items->Clear();
  ListBox4->Items->Clear();
 
  if ( setall_sz % 2 != 0 ){
      Label3->Caption = "Для разделения множеств исходное должно быть четным";
      return 0;
  }
  int half = setall_sz/2;
  int* a= new int[ half ];
  int* b= new int[ half];
  int* ra= new int[ half ];
  int* rb= new int[ half ];
  int m_cardio_a, m_cardio_b;
 
  memset(ra,0,half*sizeof(int));
  memset(rb,0,half*sizeof(int));
 
  int  minimum = 10000;
  set v;
  for (int i=0; i!=setall_sz; ++i) v.push_back(setall[i]);
  while (next_permutation(v.begin(), v.end() ) )
  {
      if ( v.size() == half*2){
        for(int i = 0 ; i < half ; i++){
                a[i] = v[i];
                b[i] = v[i+half];
        }
        int cardio_a = card(a, half );
        int cardio_b = card(b, half );
        if ( minimum > abs( cardio_a - cardio_b) && !is_intersect(a,half,b,half)){
          minimum = abs( cardio_a - cardio_b);
          m_cardio_a = cardio_a;
          m_cardio_b = cardio_b;
          memcpy(ra,a,half*sizeof(int));
          memcpy(rb,b,half*sizeof(int));
        }
        TVarRec vr[] = {cardio_a,cardio_b};
        ListBox4->Items->Add( Format("A:%d B: %d", vr,2  ));
        }
 
  }
  if ( minimum !=  10000 ){
           selection_sort(ra,half);
           selection_sort(rb,half);           
           SetSet(ListBox2,ra,half);
           SetSet(ListBox3,rb,half);
           TVarRec vr1[] = {m_cardio_a};
           Label4->Caption =  Format("Card A:%d ", vr1,1  );
           TVarRec vr2[] = {m_cardio_b};
           Label5->Caption =  Format("Card B:%d ", vr2,1  );
           TVarRec vrm[] = {minimum};
           Label6->Caption =  Format("Минимум сумм:%d ", vrm,1  );
           Label3->Caption = "Разделение успешно";
  }
  delete a;
  delete b;
  delete ra;
  delete rb;
 
  delete setall;
}
 
int* TForm1::GetSet(TListBox* lst, int& sz)
{
  sz = lst->Items->Count;
  int* set = new int[ sz ];
  for (int i = 0 ; i < sz ; i++){
        set[i] = StrToInt(Trim(lst->Items->Strings[i]));
  }
  return set;
}
 
TForm1::SetSet(TListBox* lst, int* set, int sz)
{
  lst->Items->Clear();
  for (int i = 0 ; i < sz ; i++){
        lst->Items->Add(IntToStr(set[i]));
  }
}
Shamlxrd вне форума Ответить с цитированием
Старый 25.05.2018, 01:10   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

От просмотра кода закровоточили глаза.
Чо эта срань делает-то, блть?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось min@y™; 25.05.2018 в 01:17.
min@y™ вне форума Ответить с цитированием
Старый 11.06.2018, 16:08   #3
2Lui
Пользователь
 
Аватар для 2Lui
 
Регистрация: 14.03.2017
Сообщений: 68
По умолчанию

Бро называй переменные,функции по человечески ты же пишешь код для людей а не для компьютера, а если кто то захочет твой код подправить, прочитать а там все переменные типа a,b,c,az,as,d,_asd,dsda.

А по теме есть форума генерации чисел в диапазоне :
minValue+rand()%(maxValue-minValue+1);
2Lui вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C++]Генерация случайных чисел типа double во всем диапазоне Peek-a-boo Помощь студентам 0 25.03.2011 13:29
Сумма и произведение элементов массива, удовлетворяющих условию (генерация float массива) felodese Помощь студентам 1 11.11.2010 20:52
Генерация массива ZORRO2005 Microsoft Office Excel 2 23.05.2010 23:47
вычислить количество элементов массива, лежащих в диапазоне от А до В Gigatrest Паскаль, Turbo Pascal, PascalABC.NET 16 26.01.2009 14:05