Jedna tablica?-no problem. Więcej tablic?-bryndza.

0

Witam serdecznie,
jestem absolutnym amatorem w programowaniu, więc proszę nie odsyłać mnie na praktyki do MacDonaldsa, ponieważ pracę już mam. Tyle tytułem żartu, a teraz na poważnie. Gdy parę miesięcy temu biedziłem się nad jakimś zagadnieniem, ktoś uprzejmy podrzucił mi programik wyliczający ilość wystąpień elementów w tablicy testowej i wszystko byłoby fajnie, gdyby tych tablic nie zrobiło mi się więcej. Wklejanie za każdym razem innych danych do TestArray znudziło mi się i ambitnie napisałem coś takiego:

#include <string>
#include <cstdlib>
#include <iostream>
#include <mem.h>
#include <conio.h>
#include <algorithm>


using namespace std;

struct Combination_number
{
  char name[24];
  int numbers[180];
      
};
const Combination_number elements[] = {
 {
"Combination number. 1",
 {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,
 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,
 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,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,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}
 
},
{
"Combination number. 2",

 {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,
 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,
 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,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,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,
 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}
},
{
"Combination number. 3",

 {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,
 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,
 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,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,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,
 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}
},
{
"Combination number. 4",
 {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,
 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,
 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,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,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,
 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}
}
};
int main(int argc, char *argv[])

{
    
    

 int j;
 for(j = 0; j<4; j++)
 do
 {
       
  const int n = sizeof(Combination_number) / sizeof(int);
  const int range = 180;
  const int minval = 6;

  int occurences[range];
  memset(occurences,0,range*sizeof(int));
  for (int i=0; i<n; ++i)
  occurences [Combination_number[i]]++;//tu kompilator nie może przełknąć

  for (int i=0; i<range; ++i)
    if (occurences[i]>=minval)
    
      cout<<"liczba- " << i << " wystapila " << occurences[i] << " razy\n"<< endl;
      }
      while(j++ < 4);
      system("PAUSE");
      return EXIT_SUCCESS;
  
}

Na oko wszystko powinno działać jak należy, ale gdzie tam?! Co było dobre dla jednej tablicy, nie wystarcza już na strukturę, a może gdzieś jakiś drobiażdżek przeoczyłem? Będę wdzięczny za podpowiedź,
Pozdrawiam

0

na prawdę bardzo ambitne....

0

...bardzo proszę bez złośliwości, jestem amatorem i każdy wysiłek na tym polu to dla mnie wyzwanie...

0

Po pierwsze, masz utworzone za mało tablic... A po drugie ja zrobiłbym to inaczej.... Wyrzuć tą strukture w cholere... Wrzuć wszystko do tablic i wyliczaj w pętli for(najlepiej w funkcji)...

0

Masz rację. Funkcja w strukturze to nowe kłopoty, zwłaszcza jeśli tablic jest więcej pojawiają się problemy. Przebudowałem ten program tak:

#include <cstdlib>
#include <iostream>
#include <iostream>
#include <mem.h>
#include <conio.h>

using namespace std;

int main(int argc, char *argv[])
{

    int TestArray1[]= 
{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,
 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,
 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,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,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,
 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};

 int TestArray2[]=
 {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,
 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,
 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,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,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};
int TestArray3[]=

 {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,
 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,
 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,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,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,
 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};
int TestArray4[]= 
{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,
 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,
 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,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,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,
 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};
 int TestArray5[]= 
 {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,
 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,
 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,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,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,
 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};
int j;
for(j = 0; j<4; j++)
 do
 {
  const int n = sizeof(TestArray) / sizeof(int);
  const int range = 100;
  const int minval = 6;

  int occurences[range];
  memset(occurences,0,range*sizeof(int));
  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";

 }
      while(j++ < 4);
      system("PAUSE");
    return EXIT_SUCCESS;

}

...ale dalej to samo.Raczej nie chodzi o ilość tablic, tym razem nie rozpoznaje TestArray. Jak miałaby wyglądać ta funkcja ?

0

Zamieniłem int j; na int TestArray; w całym kodzie i dalej zatrzymuje sie w tym samym miejscu

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