Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

SPO5

.pdf
Скачиваний:
10
Добавлен:
16.05.2015
Размер:
9.17 Mб
Скачать

41

( 0 A? ( ( ! , 2 / ( 01 9 7% 8 A1! 0 D (, 9 % 9 ( % K %, %D

/ ( « », 6 9 % % 0-

345 + 55

A? ( ( ! .

1% 9 1! %" 400. @ (, " 1 D/% 0 !0 «», 1 / 0" ( %" −380.

m% 8 ( _tmain 7% 8 ( GetItem, 0 (A? ( 2 / - /%A? % /% 8 % 0 (/ 9 , i - 1 10.1.

,2 2 H 10.1. m 7 6

Calc.cpp.

double Calculator(char *s);

// • #

double GetItem(void);

// # ># P

double Summation(void);

//

c + -

double Multiplication(void);

//

c * /

//’ > ! … P >.

//— • # ! # P « » # •.

char *gp_Str;

int _tmain(int argc, _TCHAR* argv[])

{

char szString[255] = "5*4-(345+55)"; double fResult;

fResult = Calculator(szString);

cout<< szString << " " << fResult << endl;

system("pause"); return 0;

}

/////////////////////////////////////////////////////////////////

//

// % # o.

// s – > , ! … P #

//#= … > # # # .

//‚ ># P > - double.

//

double Calculator(char *pString)

{

gp_Str = pString;

42

return Summation();

}

/////////////////////////////////////////////////////////////////

//

//c =# "(", ")" > ,

//! # # # ! # # # double.

//‚= # .

double GetItem(void)

{

double fResult;

// c

 

 

if(*gp_Str == '(')

 

 

{

 

// P > >

gp_Str++;

 

fResult = Summation();

// # = #=> #

gp_Str++;

// #

// P > ! P

// y #

if(*gp_Str == ')')

// P > >

gp_Str++;

 

return fResult;

// # ># P

}

 

 

//y , # # #= …

//! … ! … . ‚= > #

//# double.

//Œ strtod P #

//# #g #, = … = -

//#, # # P !# .

//‚ ! … > #,

//= # =#. " ƒ # =

//P > # >

double D = strtod(gp_Str, &gp_Str); return D;

}

m% 8 ( D ( (0" () / 10.2.

,2 2 H 10.2. m 7 6 Calc.cpp.

/////////////////////////////////////////////////////////////////

//

//‚= #= … P > • =?.

//‚ ># P > #=.

//

double Summation(void)

{

43

char cOperation;

double fResult = Multiplication(); // # •

//— > !# # + –

//! ? , # ! •

//#

while(*gp_Str == '+' || * gp_Str == '-')

{

//x !# • > # >

//! P >

cOperation = *gp_Str++; // # •

double product = Multiplication();

// ‚= … #= if(cOperation == '+')

fResult += product;

else

fResult -= product;

}

return fResult;

}

D/ ( 7% 8 ( (D (, % D ( 1 / 9) - ! 9 1% 9 1 ? 0 7% 8 6, A? 6

! 9K 6 (/%A? 6 % 9 ). F -

, 7% 8 ( D ( (5 10.2) 010 7% 8 A % D- ( (, A " /9, / D 010 9 9 7% 8 A 1- / ( 9. ; 1! A! 6 7% 8 6 1 / (

" / 2 , ( 1 06 A . + , 7% 8 ( 0" ( 1 / ( D ! ! 9

0 «*» «/». z D 6 ( 6-! / % 6 -

, «+» «–», / D 9 1!

% 9 %" 06 1% 9 .

4.3.2 ? 24

 

 

 

 

 

 

1

1

F 9 %- 9 % (, 0-

(A?%A D % D "

 

 

 

 

 

44

 

 

 

 

F 9

%- 9 % (,

0-

 

 

 

 

2

2

(A?%A

" / 6 ( /

 

 

 

9 0 ! " 0 0 D

 

 

 

 

F 9

%- 9 % (,

0-

 

3

3

(A?%A " 0 " 2 / 6 (

 

1 / 9 / 9 0 -

 

 

 

 

 

 

! " 0 0 D

 

 

 

 

 

 

 

 

 

 

F 9 %- 9 % (, (

4

5

" 2 / 6 6 D -

 

 

! 9 " 7% 8 (.

4.4. + ?7 2 > ?

2 / 0 ( ! 0 !2 / 1 ! 9, ! 9

/ 9 %, ( 0 ( D, 0" , %- D, /, 1 / 9 / " 0 D (, 1 A" 0 !. / 0 D ( %? ( ( / -

6 , 6 % % 9 ! 0 0

!% (8. ./ 9 " 0 6 !. .

/ D / D 9 / " " , 0

/ D %/ A 7 ( " .

4.5. " J 2 1

1. m % / /% 9 1 / (.

2.( " ( " 9.

3.5 7 6 cpp h.

4.; 1% 9 0 ( 0, / i 02 6.

45

4.6. ? 7 ?

1.; D ! 0 K 6 0- 1

.

2.• 0 7% 8 6 1 " % D 2 1 "-

?

3. ." 91% 0 K 6 7% 8 % - D 2 1 ".

4.D 1 " 8 +=.

5.D 1 " D/ K 6 0.

46

5., .5. $7 2 7 6-

32 " Windows.

5.1.( > ?

= 9A ! 0 ( ( ( 1%" 8 C Windows. 1- / 8 - i 06 K % 1/ ( " 02

D 6. F . 5.1 1 / 9 D (

Create Process, 1 % A? / / " 2 8 - Calculator.

b)

a) c)

. 5.1. " #, % : a) – ) #; b) – , ) # (Calculator); c) – ) , ) # (Calculator)

5.2. 21 1

47

C 6 " 6 02 8 02 ( ( ( 2 1 / " 9 (multitasking). 1 / " 02 8 02

2 / 8 % 0 ( 9 ( 1%

9 D 6. ( // D % 9 1 / ", 8-

( / D // D 9 / / ! 0, D/% - 0 !%/ / ( 9 ( ( ! 0 8 / % %- 0 9A . k / / ! 0 ( 1 -

8 . .8 (Process) – i i 1 ( 0 1 %D 6

 

. 8 0

( 9 / ( 0 ( ( !%/%

4

0 /%A? 6 ! -

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

!). ; /

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8 D/% / % ( ! A?-

2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

(8 ) 1 -

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

. 5.2. ( – -

 

 

 

 

 

 

 

 

 

 

 

 

(

55 % /) 8 0

 

 

 

 

 

1 0. * 91% 0 -

. 5.2. -

% 0 ( ( 9, /, /-0 /, -

B #

8 () % 9 0, , "

 

 

 

 

 

 

 

 

D/06 8 6 ! -

%. E K

" D ( D

%D 9 D / 2. ?9A, 6 /-

9 / 9 02 2 1 % -

! 9K 7 6 / 1 0 02 . k

" 9 A!0 / 6 ( 91 (, 9 0

D 91 9.

1/ 8 0 ( ( - ?9A 7% 8 CreateProcess. 1% 9 01 i 6 7% 8 %? ( ( 1 % ( /% ( 1 / -

%A? 7 6 . m% 8 ( CreateProcess 1 ? TRUE

% 2 FALSE %" .

BOOL CreateProcess(

LPCTSTR lpApplicationName,

LPTSTR lpCommandLine,

LPSECURITY_ATTRIBUTES lpProcessAttributes,

LPSECURITY_ATTRIBUTES lpThreadAttributes,

48

BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCTSTR lpCurrentDirectory,

LPSTARTUPINFO lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation

);

> 26 5.1

. 0 7% 8 CreateProcess

"

,

 

 

 

lpApplicationName

( ( /% (

 

 

lpCommandLine

% 1 9

/ %A %

 

 

lpProcessAttributes

% 1 9

% % %, / D ?%A

!%-

 

0 1 ? 0 8

 

 

lpThreadAttributes

% 1 9

% % %, / D ?%A

!%-

 

0 1 ? 0

 

 

bInheritHandles

7 / ( 02 !w

 

dwCreationFlags

7 1/ ( 8

 

 

lpEnvironment

% 1

9

06 ! 7 % 8

 

lpCurrentDirectory

% 1

9

( %? 6

 

 

lpStartupInfo

% 1

9

% % % STARTUPINFO

 

lpProcessInformation

% 1

9

 

% % %

 

PROCESS_INFORMATION

 

 

% % STARTUPINFO 91% ( 7% 8 6 CreateProcess, " !0 / 9 K 6 / / ( -

8 .

% % PROCESS_INFORMATION 1 ( ( 7% 8 6 CreateProcess 7 8 6 / 1/ 8

" .

5.1. / 0, ( D 1 - % 9 1 9 %A %, ( 6 % 10 (

/ 6 .

,2 2 H 5.1. m 6 DemoProcess.cpp

#include "stdafx.h"

49

#include <windows.h> #include <iostream> #include <locale>

using namespace std;

void _tmain( int argc, TCHAR *argv[] )

{

setlocale(LC_CTYPE, "Russian_Russia.1251");

STARTUPINFO si;

PROCESS_INFORMATION pi;

// x =

ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) );

if( argc != 2 )

{

cout << "f >, > ! \n"; system("pause");

return;

}

//! • .

if( !CreateProcess( NULL,

// ! >

argv[1],

// !

NULL,

// = > P = !

NULL,

// = > P = !

FALSE,

// # # • ! # FALSE

0,

// • # >!

NULL,

// > ! … !

NULL,

// > P

&si,

// > STARTUPINFO

&pi)

// > PROCESS_INFORMATION

)

 

 

{

 

 

cout << "cg CreateProcess (" << GetLastError() << ").\n";

system("pause");

}

//c… ! > # g ! • • ! •. WaitForSingleObject( pi.hProcess, INFINITE );

//x =# .

CloseHandle( pi.hProcess ); CloseHandle( pi.hThread ); system("pause");

}

50

z 1 % / " 8 1 K % K,

D A ! % / 2 , 1 %- ? 06 8 1 K A ! %. ( i 010

7% 8 A WaitForSingleObject, / ( 6 / 7 1 %- ? 8 . . 7% 8 WaitForSingleObject:

DWORD WaitForSingleObject(

HANDLE hObject,

// / 7 !w

DWORD dwTimeout);

// ( D / ( % / 2

m% 8 ( / : hObject / 7

!w , 1 K ! 0 D / ( 7% 8 6 WaitForSingleObject dwTimeout 9 ( D / (. z -

% dwTimeout 9 1 " INFINITE, D / !%- / ! " /.

m% 8 ( WaitForSingleObject !? ? % 1 / ", " 0 / 9 8 , 01 K i % 7% 8 A,

!2 / 9 / 2 , / " (( 1 / "

8 1 K A ! %.

+ 9, 0 " !%/ 91 9 ( HANDLE i /-

1, / 1 " 06 / ( ( 1 " 02 !w. z / 9 % 8 % D, 1 K A ! % / " 6 8 , 7% 8 ( WaitForSingleObject %D-

. i %" / 9 6 8 D 1% 1 0 9 /-

7 0 / " 8 6 1 / " / " 8-, 91%( 7% 8 A

BOOL CloseHandle(

HANDLE hObject // / !w

);

1 , (handle, 9) - ", 1 / -! % (!

(, 7 6, %, K 7, . .) ! . 91% (

!0" ! " 1 06 7 6 (API), " 0 1 " ( /-

0 1 i 7 6. F , / ! ( D 1 " 9 -

(" 6 ! 8 / ! (; 9 % 91 9 API ! /-

, % 1 , / 1 ? ( ! ( D 1 ( 9 ( iD ( ! " 1 /.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]