Witam!
Przerabiam ostatnie ćwiczenie z działu o tablicach z Symfonii C++, chyba najdłuższe w całej książce i prosiłbym was, żebyście rzucili okiem na mój kod i powiedzieli co można w nim zmienić. Chciałbym po prostu dowiedzieć się co robię np. w nim nie tak, a co dobrze. Jest to trochę długi program więc lepiej, żeby nie zostały mi złe nawyki na przyszłość. Podkreślam, że to ćwiczenie jest pod koniec działu o tablicach więc - nie można posłużyć się tu wskaźnikami, klasami i innymi bardziej zaawansowanymi rzeczami. Oto jego treść ( niepełna, bo potem jeszcze jest pewien fragment, ale to już sobie z nim raczej sam poradzę ):
W tekście wyróżniłem ważne fragmenty. A teraz kod programu:
#include
using namespace std;
void pomiar(int tabl[]);
int main()
{
int tablica[16] = { 0, 800, 584, 4, 228, 76, 2, 182, 131, 981, 89, 442,
661, 902, 19, 567 };
cout << "Poszczegolne kombinacje wystapili nastapujaca ilosc razy: \n";
pomiar(tablica);
cout << "\n\n\n\n\n\n---------------------------------------------------------------\n";
system("pause");
}
void pomiar(int tabl[])
{
char frs[] = { "+ FRS +" }; //nazwy naszych 4 kanałów
char ger[] = { "+ GER +" };
char hec[] = { "+ HEC +" };
char dgf[] = { "+ DGF +" };
char kombinacja[50]; //Nasza ostateczna kombinacja -
//to właśnie w niej znajdą się kombinacje KANAŁÓW.
//Jest to najważniejsza rzecz w tym programie :-)
int tab4[2][2][2][2]; //jest to tablica specjalnie dla NAZW kanałów
void dolaczanie_kanalow(char cel[], char zrodlo[]);
int i = 0;
for(int a = 0 ; a < 2 ; a++) //a - 1-sza warstwa tab4
{
for(int b = 0 ; b < 2 ; b++) //b - 2-ga warstwa tab4
{
for(int c = 0 ; c < 2 ; c++) //c - 3-cia warstwa tab4
{
for(int d = 0 ; d < 2 ; d++) //d - 4-ta warstwa tab4
{
// ********************************************************
tab4[a][b][c][d] = i; // nasza tablica - łatwo zapamiętać elementy
if(tabl[i]) // - są to kolejne litery alfabetu zdefiniowane wcześniej
// - przypisujemy do niej wartośc aby można było dalej
{ // porównać je jakby - jest to poniżej, te 4 if'y
if(tab4[a][b][c][d] == tab4[a][b][c][1])
{
dolaczanie_kanalow(kombinacja, frs);
}
if(tab4[a][b][c][d] == tab4[a][b][1][d])
{
dolaczanie_kanalow(kombinacja, ger);
}
if(tab4[a][b][c][d] == tab4[a][1][c][d])
{
dolaczanie_kanalow(kombinacja, hec);
}
if(tab4[a][b][c][d] == tab4[1][b][c][d])
{
dolaczanie_kanalow(kombinacja, dgf);
}
cout << "------> " << tabl[i] << "\n";
}
else
cout << "\n";
i++;
// ********************************************************
}
}
}
}
}
void dolaczanie_kanalow(char cel[], char zrodlo[])
{
for(int i = 0 ; ; i++)
{
cel[i] = zrodlo[i];
if(cel[i] == 0) break;
}
cout << cel;
}
Moim zdaniem jest on przejrzysty - nie da się chyba napisać krótszego.
Byłbym bardzo, ale to bardzo wdzięczny jeżeli ktoś powiedział mi co robię źle, ew. a co dobrze
Czekam na opinie
PS. 1 uwaga odnośnie programu - tablicę jednowymiarową już uzupełniłem przykładowymi liczbami, mówiącymi ile razy wystąpiła dana kombinacja. To tak wspominam, jakby ktoś nie wiedział o co tam chodziło ^.^