SO, Materiały, III semestr, Systemy operacyjne- materiały, egzamin, egzamin SO, egzamin SO


1) Czy liczba jest dziesiętna

{CString liczbas;

int liczbad;

CEdit1.GetWindowText(liczbas);

if(sscanf(liczbas,"%d",&liczbad))

CEdit2.SetWindowText("Jest to liczba dziesiętna.");

else

CEdit2.SetWindowText("Nie jest to liczba dziesiętna.");}

2)Należało napisać kod przycisku który odczyta liczbe z pola (m_hex) zapisaną szesnastkowo i zamieni na dziesiętna a wynik wypisze w innym polu."

{CString liczbas, wynik;

int liczbad;

m_hex.GetWindowText(liczbas);

if(sscanf(liczbas,"%x",&liczbad)) {

wynik.AppendFormat("%d",liczbad);

m_dec.SetWindowText(wynik); }

else

MessageBox("Nie jest to liczba szesnastkowa.","Błąd",16);}

I jeszcze zadanie odwrotne (z dziesiętnego na szesnastkowy [bo takie było ponoć w tamtym roku, więc w tym też pewnie da]).

{CString liczbas,wynik;

int liczbad;

m_dec.GetWindowText(liczbas);

if(sscanf(liczbas,"%d",&liczbad)){

wynik.AppendFormat("%x",liczbad);

m_hex.SetWindowText(wynik);}

else

MessageBox("Nie jest to liczba dziesiętna.","Błąd",16);}

3)Napisać akcję przycisku, aby pobrać z kontrolki Edit liczbę, podnieść ją do kwadratu i zapisać w drugim edicie

CString tmp;

float liczba;

m_edit.GetWindowText(tmp);

sscanf((char*)tmp,"%f",&liczba);

liczba=liczba*liczba;

tmp.Format("%f",liczba);

m_edit_jakis_inny.SetWindowText(tmp);

4)Program - sprawdzić ile wiadomości jest w skrzynce, jeżeli więcej niż 0 to sprawdza pierwszą i ją wyświetla.

HANDLE hSkrzynka; - to juz bylo globalnie

DWORD IleWiad;

if((GetMailSlotInfo(hSkrzynka,2048,2048,&IleWiad,0) && IleWiad > 0){

CFile Odczyt(hSkrzynka);

char wiadomosc[2048];

Odczyt.Read(wiadomosc,2048);

/*

i tu nei wiem czy AppendFormatem jeszcze nie trzeba bylo przekonwertowac wiadomosci na stringa. Jeżeli da sie wyświetlac w editboxie char, to nei trzeba, a jezeli sie nie da, to trzeba jeszcze dopisac:

CString wiadomosc2;

wiadomosc2.AppendFormat(wiadomosc);

m_lista.SetWindowsMessage(wiadomosc);}

5)Dwa procesy A i B podczas pracy używają wspolnego zasobu sprzętowego. Dopisz w odpowiednich miejsach właściwy kod tak, aby wykluczyć wspólny dostęp do tego urządzenia. Każdy proces może korzystać nieokreśloną ilość razy z urządzenia, działanie programu przerywa zmienna 'bRepeat' ustawiona przez hipotetyczny kod. (3p)

int bRepeat;

CMutex m;

void ProcesA(){

m.Lock();

do{

//Tutaj proces A korzysta z urządzenia

//idecyduje o powtórzeniu operacji....

}while (bRepeat);

m.Unlock();}

int bRepeat;

---------------------

void ProcesB(){

m.Lock();

do{//Tutaj proces B korzysta z urządzenia

//idecyduje o powtórzeniu operacji....

}while (bRepeat);

m.Unlock();

CMutex używamy do procesów,

CCriticalSection do wątków.

6)???

CString odpowiedz, wiadomosc("zaliczam");

long rozm_odp;

if(CallNamedPipe("\\\\a14\\pipe\\sprawdzian", wiadomosc, 1024, odpowiedz, 1024, &rozm_odp, 0) != 0)

{MessageBox("Transakcja powiodla sie", MB_OK);}

else{MessageBox("Transakcja nie powiodla sie", MB_OK);}

7)Napisać kod rozdzielający tekst na linie do ComboBox'a (tak aby \n oznaczało żeby wykorzystać metodę AddString

for(int i=0; i<tmp.GetLength();i++)

{if((tmp[i]='\n')||(tmp[i]='\0'))

{m_lista.AddString(wyraz);wyraz="";}

else wyraz=wyraz+tmp[i];}

8)Pierwiastek (1.234e+3 included oczywiście trzeba include<math.h> troche chujowe bo wyrażenie typu 1234.e+3sjfbhsdfjbsdfjbsdjhsdb przejdzie):

CString liczbad,wynik;

long float liczba;

okno1.GetWindowText(liczbad);

sscanf(liczbad,"%lf",&liczba);

liczba=sqrt(liczba);

wynik.Format("%lf",liczba);

okno2.SetWindowText(wynik);

9)Funkcja strock rozdziela łańcuch. Warto zaznaczyć ze powyższy kod nie umieści na liście pierwszego elementu.

void COkno::OnBnClickedOdswiez() {

char buffer[1024]="";

char* zapis;

char chWiad[]="aaa\nbbb\nccc";

char chOdp[8192];

unsigned long RozmOdp;

CallNamedPipe("\\\\st-14\\pipe\\sysopnp", chWiad, sizeof(chWiad), chOdp, sizeof(chOdp), &RozmOdp);

strtok(chWiad,"\n");

zapis=strtok(NULL,"\n");

kombo.AddString(chWiad);

while(zapis!=NULL)

{ kombo.AddString(zapis);

zapis=strtok(NULL,"\n");}}

10) dał prototyp funkcji CreateMailslot i trzeba było napisać przykład użycia na komputerze lokalnym ze skrzynką o nazwie sprawdzian

CreateMailslot(\\\\.\\mailslot\\sprawdzian,1024,0,NULL);



Wyszukiwarka