Jak ożenić dwa programy?

0

Mam dwa dobrze działające programy, z których pierwszy oblicza kombinacje z podaniem ich elementów:

#include "IndexCombination.h"
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
#include <map>
#include <sstream>
#include <mem.h>
#include <conio.h>
using namespace std;
using namespace stdcomb;
bool GetNextComb(std::vector<unsigned int> &vi);
    struct Element
{
   char name[6];
   int numbers[30]; 
   char chain[90];
};
const Element elements[] = {
   {
      "ia11",
      {3,9,17,21,24,31,33,36,42,49,4,8,19,22,28,30,34,39,43,47,2,6,10,13,14,25,29,37,38,46},
      "3,9,17,21,24,31,33,36,42,49,4,8,19,22,28,30,34,39,43,47,2,6,10,13,14,25,29,37,38,46" 
   }, {
      "ia34",
      {1,6,12,15,22,27,31,32,41,42,4,7,14,17,23,30,33,36,45,48,2,9,13,18,21,26,34,39,44,49},
      "1,6,12,15,22,27,31,32,41,42,4,7,14,17,23,30,33,36,45,48,2,9,13,18,21,26,34,39,44,49"
   }, {
      "ia72",
       {3,8,11,18,22,25,36,37,43,46,1,6,16,17,23,28,35,40,41,44,2,5,12,19,24,27,31,34,42,49},
      "3,8,11,18,22,25,36,37,43,46,1,6,16,17,23,28,35,40,41,44,2,5,12,19,24,27,31,34,42,49"
   }, {
      "ia167",
      {3,4,12,15,21,28,32,39,47,48,6,9,16,17,29,30,31,38,41,42,7,8,11,20,26,27,34,35,45,46},
      "3,4,12,15,21,28,32,39,47,48,6,9,16,17,29,30,31,38,41,42,7,8,11,20,26,27,34,35,45,46"
   }, {
      "ia190",
       {3,10,11,14,22,23,32,35,43,44,6,9,16,19,24,29,37,38,45,48,2,5,13,18,25,30,31,40,41,0},
      "3,10,11,14,22,23,32,35,43,44,6,9,16,19,24,29,37,38,45,48,2,5,13,18,25,30,31,40,41,0"
   }, {
      "ia21",
      {2,5,16,19,25,30,34,39,45,48,1,9,12,13,21,24,33,36,44,49,3,8,15,20,23,26,35,40,43,46},
      "2,5,16,19,25,30,34,39,45,48,1,9,12,13,21,24,33,36,44,49,3,8,15,20,23,26,35,40,43,46"
   }, {
      "ia64",
      {6,9,13,20,28,29,33,40,43,48,2,7,16,19,24,27,31,34,44,47,5,8,14,17,21,30,32,37,41,46},
      "6,9,13,20,28,29,33,40,43,48,2,7,16,19,24,27,31,34,44,47,5,8,14,17,21,30,32,37,41,46"
   }, {
      "ia102",
      {4,9,14,19,22,29,35,38,46,47,5,8,13,16,21,26,33,40,41,48,6,7,15,17,28,30,32,39,42,45},
      "4,9,14,19,22,29,35,38,46,47,5,8,13,16,21,26,33,40,41,48,6,7,15,17,28,30,32,39,42,45"
   }, {
      "ia178",
      {6,9,15,20,23,24,37,38,42,45,7,8,16,19,22,25,34,39,43,46,1,2,17,18,26,29,31,40,47,0},
      "6,9,15,20,23,24,37,38,42,45,7,8,16,19,22,25,34,39,43,46,1,2,17,18,26,29,31,40,47,0"
   }, {
      "ia180",
      {1,4,13,18,27,30,33,38,45,46,2,3,12,15,22,23,39,40,44,47,8,9,11,17,24,25,32,37,49,0},
      "1,4,13,18,27,30,33,38,45,46,2,3,12,15,22,23,39,40,44,47,8,9,11,17,24,25,32,37,49,0"
   }
};
 
int main(int argc, char *argv[])
{

   CIdxComb cb;
   cb.SetSizes(10,6);
    
   vector<unsigned int> combination(6);
   combination[0] = 0;
   combination[1] = 1;
   combination[2] = 2;
   combination[3] = 3;
   combination[4] = 4;
   combination[5] = 5;
   int Total = 0;
       do {      
             Total++;
             cout << "Combination number. " << Total  << endl;
             for (unsigned i = 0; i < combination.size(); i++)
                 {
                                        
                 const Element &element = elements[combination[i]];
                 cout << element.name << ": " << element.chain << endl;
                 // tu musi być druga pętla for
                 }
          }
       while(cb.GetNextComb(combination));
     
    cout << endl;
    system("PAUSE");
    return EXIT_SUCCESS;
}

A drugi oblicza ile razy w danej kombinacji wystąpiła jakaś liczba, przy czym wyświetla tylko te, które wystąpiły 6 lub więcej razy:

#include <iostream>
#include <mem.h>
#include <conio.h>
using namespace std;
int main()
{
    int TestArray[] = {
3,10,11,14,22,23,32,35,43,     44,6,9,16,19,24,29,37,38,45,48,  2,5,13,18,25,30,31,40,41,0,
2,5,16,19,25,30,34,39,45,48,   1,9,12,13,21,24,33,36,44,49,     3,8,15,20,23,26,35,40,43,46,
6,9,13,20,28,29,33,40,43,48,   2,7,16,19,24,27,31,34,44,47,     5,8,14,17,21,30,32,37,41,46,
 4,9,14,19,22,29,35,38,46,47,  5,8,13,16,21,26,33,40,41,48,     6,7,15,17,28,30,32,39,42,45,
 6,9,15,20,23,24,37,38,42,45,  7,8,16,19,22,25,34,39,43,46,     1,2,17,18,26,29,31,40,47,0,
 1,4,13,18,27,30,33,38,45,46,  2,3,12,15,22,23,39,40,44,47,     8,9,11,17,24,25,32,37,49,0};
  const int n = sizeof(TestArray) / sizeof(int);//combination.size();
  const int range = 100;
  const int minval = 6;
  int occurences[range];
  memset(occurences,0,range*sizeof(int));//combination.size();
  for (int i=0; i<n; ++i)
    occurences[TestArray[i]]++;
  for (int i=0; i<range; ++i)
    if (occurences[i]>=minval)
      cout << "liczba " << i << " wystapila " << occurences[i] << " razy\n";
  getch();
  return 0;
}

Moje pytanie brzmi: czy można jakoś połączyć te programy w jeden? Chodziłoby o to, aby program liczył te 210 kombinacji gdzieś w tle, a następnie obliczał ilość wystąpień elementów w każdej z nich i podawał tylko te elementy, które występują sześć lub więcej razy. Innymi słowy OUTPUT powinien wyglądać jakoś tak:
Combination number 1

Liczba 3 wystąpiła 6 razy
Liczba 48 wystąpiła 7 razy
Liczba 0 wystąpiła 8 razy

Combination number 2
Liczba 5 wystapiła 6 razy
itd.
Kombinowałem trochę z pętlami, ale mi nie wychodziło.Pozdrawiam wszystkich!

0
  1. kolorawnie kodu + formatowanie kodu
  2. jakby były dobrze napisane to zajęłoby to 2 minuty. Jednak wszystko siedzi w jednej funkcji main, musisz się sam męczyć.
0

Sugerowałem, żebyś poprawił swoje (przynajmniej mam taką nadzieję, że to twoje) programy tak, by fragmenty za coś odpowiedzialne były w osobnych funkcjach. Jak to zrobisz dobrze to połączenie obu programów będzie proste.

0

To już przynajmniej jest jakaś podpowiedź, ale muszę zauważyć że nie dość, że w szkole belfry człowieka męczą, to jeszcze i tutaj. Gdybym już zrobił to dziecko sam, to po co by mi była żona?
A na poważnie:
Pętli do...while według mnie nie można ruszać - ona liczy kombinacje. Trzeba jakoś inteligentnie zadeklarować TestArray, potrzebny będzie na pewno jakiś licznik zmieniający te tablice testowe jedna po drugiej. Fragment zliczający wystąpienia liczb w tablicy testowej tez jest dobry, bez niego ani rusz.
Odważnie więc zapytam. O które literalnie funkcje chodzi?

0

chodzi o to, żebyś ujął w ramy funkcji operacje, które wykonujesz w każdym mainie...
jeśli myślisz o późniejszym wykorzystaniu kodu, to nie pisz wszystkiego w jednym pliku; po to są funkcje, żeby segregować kod na logiczne jednostki wykonawcze typu: tworzTabliceKombinacji(), znajdzCosWTablicy(tablica), etc. poza tym jak chcesz, żeby Ci ktoś pomógł jak nawet nie formatujesz (kolorujesz) kodu ? sam nawet nie zajrzałem, żeby sprawdzić o co tam dokładnie chodzi

0

Rzadko tu zaglądam, więc nawet nie zastanawiałem się jak ten kod sformatować. Może mi ewentualnie podpowiesz, czy jest tu jakiś automatyczny sposób. Takie formatowanie każdego kawałka inną czcionką to żmudna robota.
Według mnie uwaga, że obie funkcje z programu ( tę liczącą kombinacje i tę zliczającą ilość wystąpień elementów) należy jakoś inaczej zdefiniować i zadeklarować, jest jak najbardziej słuszna. Chyba nie ma co silić się na szablon funkcji, ponieważ obie operują na tym samym typie danych. Zastanawiałem się nad wrzuceniem obu przemianowanych funkcji do jednej klasy. To chyba ma jakiś sens, ale być może Twoja podpowiedź jest jeszcze lepsza. Zastanowię się nad tym.
W każdym razie miło było spotkać kogoś normalnego. Pozdrawiam.</cpp></quote>

</ort>
0

Takie formatowanie każdego kawałka inną czcionką to żmudna robota.
No to naprawdę rzadko tu bywasz.

Kto o zdrowych zmysłach formatował by każdy kawałek kodu?
Od tego służy < cpp ></ cpp> (bez spacji).
Wystarczy nakierować na przycisk i wyświetla ci się takie cudo: C++: < cpp >tu wstaw kod C/C++/Java/JS</ cpp > (alt+x), no ale kto by się męczył spoglądając na opis.

1 użytkowników online, w tym zalogowanych: 0, gości: 1