
SPO5
.pdf41
( 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 /.