Jak że jest to mój pierwszy post na forum to chciałbym się serdecznie przywitać, Cześć!
Piszę program który ma wybierać częstotliwość, po czym ją generować, pobierać odpowiedź i sprawdzać poprawność.
Właśnie jestem w trakcie jego pisania. Postanowiłem go podzielić na 2 (a w zasadzie 3) główne moduły: Freq, Test, no i oczywiście main.
Jako że preferuje zasade od szczegółu do ogółu to postanowiłem najpierw napisać moduł Freq, który zawiera metody losowania częstotliwości oraz jej generacji.
No i mam spore problemy, rozumiem oczywiśćie że przyczyną tego jest moja niewiedza i brak doświadczenia, dlatego piszę ten post.
Używam Code::Blocks'a z minGW, a poniżej wklejam kod z którym mam problemy.
Bardzo bym prosił kogoś uprzejmego, o ile znajdzie chwilę czasu aby zerknął w ten kod i najlepiej w miejsca komentarzy które sygnalizują moją nieporadność,
wpisał na czym polegał problem oraz przykład jego rozwiązania.
Byłbym na prawde bardzo wdzięczny.
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <windows.h>
using namespace std;
class Test
{
public:
int number_attempts; //ilosc prob jak bedzie trzeba wykonac , domyslnie dopoki nie bedzzie dzzialac jak powinno jest 5
int diff_level; //poziom trudnosci (octave/terce) , domyslnie dopoki nie bedzzie dzzialac jak powinno jest octave
Test(int n_r=5, int d_l=0)
{
number_attempts=n_r;
diff_level=d_l;
}
};
class Freq :public Test
{
public:
int *freq; //wskaznik ktory ma wyluskac pierwszy element z tablicy
Freq(int *f=0, int n_r=5, int d_l=0) :Test(n_r=5, d_l=0) //dziedzicze kosntruktor
{
*freq=*f; //nie wiem czy tak mozna
number_attempts=n_r;
diff_level=d_l;
}
void select_freq()
{
double octave[8] = {25, 250, 500, 1000, 2000, 4000, 8000, 16000};
double terce[22] = {125, 160, 200, 250, 315, 400, 500, 630, 800, 1000, 1250, 1600, 2000, 2500, 3150, 4000, 5000, 6300, 8000, 10000, 12500, 16000};
int *liczba_octave = new int[number_attempts];
int *liczba_terce = new int[number_attempts];
if(diff_level==0)
{
for(int i = 0 ; i < number_attempts; i++)
{
int rand_octave =( rand() % 8 ) + 1;
for( int j = 0 ; j <= rand_octave ; j++)
{
liczba_octave[i]=octave[j+1];
}
}
}
else if(diff_level==1)
{
for(int i = 0 ; i < number_attempts; i++)
{
int rand_terce =( rand() % 22 ) + 1;
for( int j = 0 ; j <= rand_terce ; j++)
{
liczba_terce[i]=terce[j+1];
}
}
}
if(diff_level==0)
{
freq=&liczba_octave[0]; //przypisuje adres pierwszego elementu dla wskaznika
}
else if(diff_level==1)
{
freq=&liczba_terce[0]; //przypisuje adres pierwszego elementu dla wskaznika
}
delete [] liczba_octave;
delete [] liczba_terce;
}
void genere_freq()
{
Beep(*freq,3000); //powinno generowac dzwiek o wylosowanej wczesniej czestotliwosci, chcialem wpisac freq ale wtedy sie nie kompiluje
}
};
int main()
{
srand( time( NULL ) );
Freq f1;
f1.select_freq(); //powinno wybierac czestotliwosc do wygenerowana, pierwszy element tablicy
for(int i = 0 ; i <= number_attempts ; i++) //Nie wiem jak moge przekazac zmienna number_attempts, aby petla sie wykonala tyle razy ile powinna.
{
f1[i]; //tutaj chcialbym przesuwac tablice o jedno miejsce w prawo, ale nie wiem jak skoro
//tablica jest typu int a obiekt jest obiektem
cout<<"Czestotliwosc numer: "<<i<<endl;
f1.genere_freq(); //powinno generowac czzestotliwosc
delay(500);
}
system("pause");
return 0;
}