GRY-Online.pl --> Archiwum Forum

pomocy z visuala c++

25.05.2004
19:47
[1]

sebeka12 [ Junior ]

pomocy z visuala c++

Jakby co jestem pod [email protected] z gory thx
1. Dana jest uniwersalna klasa bazowa:
namespace M_UCLASS‹
class aBaseClass‹
private:
int arg1;
int arg2;
int siz;
void ** pMem;
int *pStat;
enum ‹ MAX_POS = 5000 ›;
public:
aBaseClass(void) : arg1(0), arg2(0), pMem(0), pStat(0)


aBaseClass(int arg1_, int arg2_, int siz_) :
arg1(arg1_),arg2(arg2_), siz(siz_),pStat(0)

try‹
pMem = (void **)calloc(arg1,sizeof(void *));

catch(std::bad_alloc& ba)‹
cout << ba.what();
exit(101);

for(int i = 0; i < arg1; i ++)‹
try‹
pMem = (void *)calloc(arg2, siz );

catch(std::bad_alloc& ba)‹
cout << ba.what();
exit(102);



aBaseClass(int arg2_, int siz_) : arg1(1), arg2(arg2_),
siz(siz_), pStat(0)

try‹
pMem = (void **)calloc(1,sizeof(void *));

catch(std::bad_alloc& ba)‹
cout << ba.what();
exit(111);

for(int i = 0; i < 1; i ++)‹
try‹
pMem = (void *)calloc(arg2, siz );

catch(std::bad_alloc& ba)‹
cout << ba.what();
exit(112);



void ** get_memPtr() const

return pMem;

int * get_Stat_memPtr() const

return pStat;

int get_arg1() const

return arg1;

int get_arg2() const

return arg2;

int * alloc_Stat(int n)

try‹
pStat = (int *)calloc(n, sizeof(int));

catch(std::bad_alloc& ba)‹
cout << ba.what();
exit(113);

return pStat;

//
virtual ~aBaseClass()

if( pMem) ‹
for(int i = 0; i < arg1; i ++)
free(pMem);
free(pMem);

if(pStat) free(pStat);

›;. \\ end of class
// ...
›// end of namespace
Należy napisać własną klasę Osoba, zawierającą następujące atrybuty: pesel (int), Nazwisko, Im1, Im2, Adr1, Adr2, Adr3 (wszystkie typu znakowego o długości NLEN_ znaków), Uwagi (znakowe o długości UWLEN_ znaków), gdzie NLEN_ i UWLEN_ są stałymi klasy). Nie przydzielać pamięci dynamicznie. Napisać konstruktor Osoba() oraz konstruktor Osoba( /* parametry */ ), który inicjuje wszystkie atrybuty tworzonego obiektu. Napisać funkcje dostarczające wartości pól klasy.
Zdefiniować własną listę osób (zawierającej obiekty typu Osoba), w której korzysta się z wyżej wymienionej klasy bazowej. Początek definicji jest następujący:
class ListP : public aBaseClass‹
int Cnt;
int nPosList;
public:
ListP() /* dalszy ciąg */
ListP(int lp) /* dalszy ciąg – konstruktor klasy bazowej
z dwoma parametrami */
// ...
bool AddToList( const Osoba & P) // wstawienie na listę
na pierwszej wolnej pozycji
PK_K2_C, 17408, 4485, 4, HJR 2
// ...
›;
gdzie Cnt jest licznikiem obiektów na liście, a nPosList jest dopuszczalną liczbą elementów listy, inicjowaną przez parametr lp konstruktora. Konstruktor ListP(int lp) musi określić pamięć dla listy o lp elementach.
Atrybut
int *pStat;
klasy bazowej (aBaseClass) należy wykorzystać do określenia statusu pozycji listy: 0 = wolna, 1 = zajęta.
Przykładowy obiekt:
Osoba Q(12345,"Jakt","Jan","K.","Rak","Pn","60-967");
Wstawiany funkcją AddToList().
2. Zdefiniować, a następnie zainicjować w programie następujące strukturę:
Struktura o nazwie DISPPARAMS_, złożonej z pól:
rgVarg typu wskaźnik VARIANTARG, // parametry
rgDispidNamedArgs typu wskaźnik DISPID, // id parametrów
cArgs typu UINT, // liczba parametrów typu pierwszego
cNamedArgs typu UINT // liczba parametrów typu drugiego
VARIANTARG to typ VARIANT (inaczej nazwany), DISPID jest równoważny long. Obydwa typy są zdefiniowane i należy tylko zastosować właściwy plik nagłówkowy (jaki?).
Należy zainicjować dwa parametry typu VARIANT wartościami liczbowymi 8 i 16. Napisać kod wyprowadzający ich wartości (na przykład na konsolę).
Rozpocząć:
DISPPARAMS_ MyParamsOne;
VARIANTARG ParVals[2];
// kontynuować inicjację
// zainicjować MyParamsOne
wprintf(/* format */,MyParamsOne /* dalszy ciąg napisać */ );
Komentarz. MyParamsOne zawiera dwa parametry typu VARIANT, co określa cArgs. Parametry odpowiadające rgDispidNamedArgs można określić jako nieistniejące.
3. Wyznaczyć znak permutacji liczb od 1 do n, których permutację zawieraj tablica jednowymiarowa o rozmiarze przynajmniej n, a jej elementy są indeksowane od 0 do n-1 (tak jak w języku C, nie chcemy tracić elementu zerowego). Gdy:
int B[ 25 ] = ‹5, 1, 4, 2, 3, 7, 6›;
permutację możemy przedstawić (tabela poniżej):
1 2 3 4 5 6 7 5 1 4 2 3 7 6
w której liczba 5 jest pierwszym elementem permutacji, ale znajduje się w tablicy na pozycji zerowej.
Przykładowo, znak permutacji ma wpływ na wartość wyznacznika macierzy kwadratowej, gdy przestawiamy wiersze macierzy. Zgodnie powyższą tabelą, na pierwszej pozycji jest wiersz piąty, dalej pierwszy, potem czwarty itd. Napisać funkcje, które będą implementacjami algorytmu wyznaczania znaku permutacji, zachowując numerację
PK_K2_C, 17408, 4485, 4, HJR 3
elementów tablicy od zera - w wersji „naiwnej” (jaka jest złożoność?) i o złożoności ()On (czy taka istnieje?).
Znak permutacji jest liczbą albo 1 albo –1. Funkcja wyznaczaniu znaku permutacji powinna mieć strukturę
int SignOfPermutation( /* tablica */, /* rozmiar tablicy */ )

// instrukcje
return /* znak permutacji */ ;

4. Zaprogramować dwa przyciski
PK_K2_C, 17408, 4485, 4, HJR 4
gdzie „+” oznacza zwiększanie wartości stanu s od 0 do 100 z krokiem 5, przy czym osiągnięcie 100 powoduje jego „szarość”. Przycisk „-„ powoduje zmniejszanie wartości do zera również z krokiem 5. Podobnie jak w przypadku poprzedniego przycisku, osiągnięcie wartości 0 powoduje jego „szarość”. Gdy 0 < s < 100, wtedy obydwa przyciski nie są „szare”.
Obowiązują trzy zadania. Zalecane są pierwsze trzy.
+

© 2000-2024 GRY-OnLine S.A.