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);