program generujący punkty prośba o sprawdzenie funkcji

0

Witam mam problem, i prosiłbym o pomóc chodzi mi o jakieś normalne wytłumaczenie o co chodzi tak po ludzku. Mam do napisania program w dowolnym języku. Niestety zrozumienia treści mnie przerasta, jedyne wnioski z czytania tego któryś raz z kolei są takie ze mam napisać jakiś generator liczb. Z góry dzięki serdeczne za wytłumaczenie oto treść

Program ma za zadanie generować zbiory danych , które będą potrzebne jako materiał badawczy dla zadań rozpoznawania obrazów realizowanych z wykorzystaniem sieci neuronowych.

Zasada działania programu jest następująca:
Po uruchomieniu program pyta o następujące dane:

Ilość klas: n - liczba całkowita ni  [2, 10]
Dla każdej klasy i (i = 1,2,...,n):

  1. Ilość punktów(wzorców) w klasie ni – liczba całkowita ni  [1, 100]
  2. parametry kwadratu, z wnętrza którego będą losowane punkty:
    (ai, bi) – współrzędne środka kwadratu (liczby rzeczywiste)
    di – długość boku kwadratu
    Nazwa pliku wraz ze ścieżką.

Po wczytaniu powyższych danych program powinien dla każdej klasy i (i = 1,2,...,n) losować ni punktów z wnętrza kwadratu opisanego parametrami (ai, bi) i di.
Ponadto program powinien zapisać wylosowane dane w pliku w następującej postaci:

n
x11 x12 kl1
x21 x22 kl2
x31 x32 kl3
...

gdzie: xlk – oznacza k-tą współrzędną (k = 1, 2) wylosowanego punktu l
(l =1,2,...,n1 + n2 + ...+nn), natomiast kll oznacza klasę, do której należy punkt l.

Przykład
Dane wejściowe, podane przez użytkownika:
n = 2; n1=3; n2=2;
(a1,b1) = (1,1); d1 = 1;
(a2,b2) = (-2,-2); d2 = 2;

Załóżmy, że na podstawie powyższych danych program wylosował następujące punkty:
Dla klasy 1:
(0.95, 1.1) (0.6, 1.4) (1.45, 0.8)
Dla klasy 2:
(0.55, 1.3) (0.6, 1.3)

Wylosowane punkty zostaną zapisane w pliku w następującej formie:

2
0.95 1.1 1
0.6 1.4 1
1.45 0.8 1
0.55 1.3 2
0.6 1.3 2

Proszę zauważyć, iż wszystkie wylosowane punkty należą do wnętrza odpowiednich, zadanych wcześniej kwadratów.

0

po pierwsze, to musisz przerobić dużo materiału teoretycznego na temat sieci neutronowych

0

cześć chciałbym odswierzyć temat bo problemu nadal nie rozwiązałem, mógłby ktoś sprawdzić czy dobrze zapisałem w funkcji losującej punkty gdy jeden z boku kwadratu będzie miał np 0.2

class kwadrat
{
private: //tu wiadomo , prywatne skladniki klasy
int punkty;
float kwadrat_X, kwadrat_Y,kwadrat_bok;
float * tab_pktow;

public: // funkcje komunikujace sie ze swiatem zewnetrznym

void zbieraj_dane ()
{
cout<<"Podaj ilosc pktow(wzorcow)";
cin>>punkty;
cout<<"Podaj X dla kwadratu";
cin>>kwadrat_X;
cout<<"Podaj Y dla kwadratu";
cin>>kwadrat_Y;
cout<<"Podaj dlugosc boku kwadratu";
cin>>kwadrat_bok;

//alokujemy sobie w wskazniku adres na pamiec mieszczaca 2x punktow (tak aby miec X i Y punktu w jednej tabicy)

tab_pktow = new float[(2punkty)];
// tab_pktow = new float[(4
punkty)];

}
 

void losuj_wzorce ()
{
//funkcja, zajmuje sie losowaniem punktow w podanej wczesniej przez nas ilosci

  //wyznaczamy progi losowania liczb
  float X1,X2,Y1,Y2;
  X1=kwadrat_X - (kwadrat_bok/2);
  X2=X1+kwadrat_bok;

  Y1=kwadrat_Y - (kwadrat_bok/2);
  Y2=Y1+kwadrat_bok;
  
  //zasieg to koncowa liczba przez jaka mnozymy rand() zeby uzyskac liczbe z ... odp zasiegu 
  float zasiegX,zasiegY;
  zasiegX=(X2-X1)+1;
  zasiegY=(Y2-Y1)+1;

  //losujemy ilosc punktow rowna tej podanej przez uzytkownika
    for (int i=0;i<punkty;i++)
    {

   
     //przypisujemy kol. do tab. rand()/rand_max+1.0 daje nam liczbe z przedzialu <0;1>
     //jak to pomnozymy przez zasieg to mamy liczbe z przedzialu <0;zasieg>
     //jak do calosci dodamy X1 to mamy liczbe z przedzialu <x1;zasieg> czyli to co potrzebujemy :)
     tab_pktow[i+(i-1)]= X1+(zasiegX*rand()/(RAND_MAX + 4.0)); 
     tab_pktow[i*2]= Y1+(zasiegY*rand()/(RAND_MAX + 4.0));     
    }

}

void zapisz_dane (ofstream &zapis,int ktora_klasa)
{
// zapisuje do podanego strumienia plikowego ZAPIS po kolei swoje wylosowane punkty , na koncu dodajac swoj nr klasy
//(nr klasy mozna bylo zrealizowac skladnikiem statycznym klasy, ale nie chcialem gmatwac dodatkowo
for (int i=0;i<punkty;i++)
{ zapis<<tab_pktow[i+(i-1)]<<" "<<tab_pktow[i*2]<<" "<<ktora_klasa<<endl; }
}

//i jej konstruktor domyslny, z lista inicjalizacyjna :)
//liste inicjalizacyjna mielismy wczesniej - to inicjalizowanie obiektow jeszcze przed wykonaniem sie instrukcji konstruktora
kwadrat():punkty(0),kwadrat_X(0),kwadrat_Y(0),kwadrat_bok(0)
{
}

~kwadrat();
};


cały kod jest pod adresem: http://wklej.org/hash/cb9b5c5430/
0

mógłby sie ktoś podzielić spostrzeżeniami i wskazówkami

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