Académique Documents
Professionnel Documents
Culture Documents
ا و دة
ا ـد ـــ ت
6
ر ا دس؟ ھ ا د ت ا ط ت
8
6
ن ا وظ; نStack ء ن ا وظ; نStack ر
10 9
1. class Employee {
2. public int salary;
1. class EmployeeStack 3. public String name;
2. { 4. public Employee()
3. Employee Top = null; 5. {
4. int length =0; 6. salary = 300;
5. // ; تا ھ 'فا 7. name = "no name";
6. } 8. }
9. public Employee(int salary, String name)
10. {
11. this.salary = salary;
12. this.name = name;
13. }
14.اE ود }ر& ق ا ;ــر. أ/ا دة ا إ داد ت ق را ب ا
م:: ر:: ر:: ر )آ:: @ر ا:: ت: رض ا:: : رف::
1. public void Peek() .Peek ـ (7 & 'إ
2. { TOP ـر4ؤ 7 رإ4 ر و ھذا ا
3. if (Top == null)
4. Console.WriteLine("The Stack is Empty!!");
5. else 7
Top
6. Console.WriteLine("The Employee Data:\n"+ Top.name
7. "Name: "+Top.name+"\nSalary: "+Top.salary);
8. }
1 Top.salary
…
6
ا دس تا ;ذا د ت تا ا
StackCreate ء ا دس4 ا Push 6&ا(' & او ا د ا د تھ ت اھم ا
ء4تا (' & اPop ق5ا ذف او ا(ط و
top ھو ا ط ء7 وم )ا ;و& ت( & ن ا "لا &
, او3ا دس و& ص ا دس اذا ن & ر
;ر ,ا( دا ا
Push: & '(ا
Void AStack::stackCreate(AStack& Q)
, ر ا ا دس اذا م ن & 'ا وم ھذه ا
{ Q.top= -1;
دم وا ط ق اB ا ر ط د ر و و ھذا ا
}
Void push(AStack& Q, int element);
Null اtop م( ط,ل )ا وا ا "لا &و
Pop : ا ذف
Void PtrStack::StackCreate()
3ر ن ا دس اذا م ن & ر ذف وم ھذه ا
{ top=NULL;
Void pop(AStack& Q, int& element);
}
دام ا د ت ' رر -د%ا • push gets passed a reference to an object and creates
تا ھ ك او و ت new node to hold it, putting this node on top of the Stack
(Postfix) ( و ظ مinfix) ا و ط6 ھ ك ا ظم ار ' ا Remainder of Stack then follows the new node
prefix -ظم new node’s _nextNode gets reference to former top of Stack
ABC *+
*ABC +
ABC*+
ر ا د د Postfix ا ت دس ا Prefix را ا ر ا د د Postfix ا ت دس ا Prefix را ا
(A+B)*C A*B+C
( A+B)*C A *B+C
A ( +B)*C
A * B+C
A (+ B)*C
AB * +C
AB (+ )*C
*AB + C
AB+ *C
AB*C +
AB+ * C
AB*C+
AB+C *
*AB+C
ر ا د د Postfix ا ت دس ا Prefix را ا
A*(B*C+D)+E
ر ار ' ما A *(B*C+D)+E
6ا طوات ا ر ار ' ما A * (B*C+D)+E
A (* B*C+D)+E
ن نا را ا ا رض ا ر ا ر '
AB (* *C+D)+E
ار زن ت ط ق ھذه ا اذا د&ت ر ز @ دي ا AB *(* C+D)+E
ن ر ز 4رة ا ABC *(* +D)+E
ت %ا ن ور ز ا ا دل ھذ ن ا *ABC *(+ D)+E
ABC*D *(+ )+E
تا ا ر د رار ا اذا م
ABC*D+ * +E
*ABC*D+ + E
ABC*D+*E
ABC*D+*E+
! ذا دس ا را" ا را $ث ا را!$ ا ر ا&ول ا
ا و%دة ا #
ا د ء ا ذا
د ء ا ذا ؟ دم ا فو
ز ن ز ( ا 'روب ان د ء ا ذا #ر ن ا %ت ط)ب )%ا دام ا
ط)ب %ب ا 'روب ا د ء ذا وھ 1 ھ ك% 'روب ا ر/م #ل ) ا د ء ا ذا
د %ا ط ن د ,ا دا ا د ء ذا ,ل رة %ث ان 'روب ا ! ر = 1و 'روب أي ر/م ا ر ن ! ر
وي ! %ل 'رب ذ ك ا ر/م ' ,روب ا ر/م ا ذي 3ل 2
ا %ا !) وا%د
)int fact(int num
{
)if(num == 0
;return 1
else
;)return num * fact(num – 1
}
4 و,
1! = 1
0,1,1,2,3,5,8,13,21,…. N! = N * (N-1)!
5 6 !ل% ن وي/دا اول ر ا, م/ل ر
، 0=(0)ف,( ف )ن+ (1+( = ف )ن2+ ن ف)ن3 ن ا/ا ر 5! 120
1=(1)ف 5 * 4! 24
long fibonacci(long n){
int fib; 4 * 3! 6
if (n <= 1) Base case
3 * 2! 2
return 1;
else 2 * 1!
return fibonacci(n-1) + fibonacci(n-2);
1
}
Recursive case
fibonacci(1) fibonacci(1)
Execution Trace (composition) Execution Trace (composition)
fibonacci(3) fibonacci(3)
+ +
fibonacci(1)->1 fibonacci(1)->1
N=1
N=2 N=2 N=2
Towers of Hanoi: Three Disk
Tower of Hanoi ا راج ھ وي
Solution
Towers of Hanoi Problem with Three Disks
ت ا م ا ء ا ذر ا ط ق ل ا #ر ا ذي & وي 8ا > ض >ن !>6ل > #ر ا ر ط نا و ھ)
)+ا ل . رة ن ا ذر &در رف ـ Edges
ا ؤ ر ا ر ط ن ا ھل وا ن /ط ق :ا م & edge +
ا م ر ن ا &واف /ط ق و ا ا
&در :ا ء +ط ق :ا م ا ورleaf )/ أ ا #ر ا ذي
terminal nodeا #ر ا ). nodeاو
ا ا ر ا ذي دأ ن #ر و ) #ر ورق +
;#ن.
ق ا رة -:ھو ار : 5او :و ) ا ر دد ن ا #ر
و وة )+ا #4ن ا رة.
internal
nodes
leaf nodes
Binary Trees ر ا لا ا
ر ا و ود ؤ ري ر ط ر ا زا لا Animal
root interio Level
ل ا ري #ر ا Aي #ر ن r node 1
parent
Bird Reptile Mammal Level
2
edge
child
>>#ر ن > ا>> Aر >>ن ھ>>) > رة > ر >> > +ل >>#ر إ > #ر ن >ن أ& #/د رن #ر ا وا&د أن د
ا Aء ,ر طـ أن ون /ا ن ا Aن أ;>#ر >ن > /اAب, ا رة ـ Binary Tree ا Aء,
و أن ون /ا ن ا Aر أ ر ن /اAب.
ت ت Lراء ر ن أ8+ل ا و ذ ك O+ن Nھذه ا
ا &ث ر +ـ .
B
A D
C
إ داد /أ & .ود ر +ق ا 5ــرNا ا دة ا ت ق را ب ا إ داد /أ & .ود ر +ق ا 5ــرNا ا دة ا ت ق را ب ا
؟Binary Search Tree )ھ
33
5
10 10
2 45
5 30 5 45
30
2 25 45 2 25 30
10
..........ا ء ھ م واL را
25
Binary Not a binary
search trees search tree
اNــر5 ق ا+ & ود ر. أ/إ داد ا دة ا ت ق را ب ا
ا
35
ٔ
ا&%اف ا دة ا
م ا وارز ت تو ر با
. ت وا ت و ما .1 1289
. ت وا ت ق ا ! .2
,ا% +ام * ارز . /Dijkstraد .3ﺳ ا و دة ا رة
1زو 1 1 2ا . 0 ا34 ت وا ت ا
,ا% +ام * ارز . / Floyedد .4ﺳ Graphs & Networks
1زو 1 1 2ا . 0 ا34 د ري درس ا رر /أ.
ت )(Graphs اوﻻ:ا
ٔ
ا . :7ا ﺤ +ب 7ن ا ـ ت ﺳ ت ا
< 1ا ; ا . =
& و & :ا; > Dت ﻪ ا ; ا .
4ا= د< :7ا ! ا :G
ٔ
; ا .و 1ا 0 1 = ر> ﺣ ! Iا ; ا > .ع 1ا> اع
ٔ ت ا
ان ABا ﻰ ?
ٓ
و< ﻰ اي ﺣـ ل ﻰ ا*
Mﻻ Lا ا ,4ا K.ا7 7نا ٔ ٔ
ت & Lك < 4Nا ة وا ء :7ا
Lوا ,4ا 4Nت 1ا ا ,4وا ! ٔ
ﺣ% ت :7ا D Yاﻻﺣ ن A 7
:7ا = ـ(Vertices) O [ !
)(Edges وا ق ا ا0 1 N! 7ان ! < .ا ؤوس :7ا Mا %ن
ٔ
و 1ان ! ا ﺤ اف T :7اﻻﺣ ن < ﻰ A ا ﺤ اف 1ان ! ا ] ا ا0
ٔ ^_& 1ا %ن
ا 4اس 7 G/ا ﻰ ا ط ا ﺳ =
: اوﻻ
: ا ﺤـ !ـ ل:
: ار ا. ا7 3 ] ا ﺳM ! ا1 ار. ا7 3 ام% + : ا ! ا
V1 V2 V3 V4 V5 V6 V7
V1 0 1 0 0 0 0 0 v1 v2
V2 0 0 0 0 1 0 0
V3 1 0 0 0 0 1 0
V4 0 0 1 0 1 0 0 v3 v4 v5
V5 0 0 0 0 0 0 1
V6 0 0 0 0 0 0 0 v6 v7
V7 0 0 0 0 0 1 0
ﺣﺳ ب ا ﺤ اف ا %ا* وا ر2
4 ;1ـ
:7ا % + Mام 7 3ا .ار >Nﺣ mان 7 3ا .ار ﺤ ي دا`
< ﻰا 01 3و1
ﺤﺳ ب <%د ا ﺤ اف ا %ا* :
د ر O4ا %; n 3 >ﺳ و _ا ا ﺳ D
]< ا 7 3ا ّ
7 3 :7ا .ار و>ﺤﺳ%< Dد ات ار
ا 7 3 :7 1 O4ا .ار
!ـ ل :
ﺣ ا ! ل: :: ; :&و
:l > ح اA
ٔ for(i=0;i<n;i++){ cout<<"The indegree
ار. ا7 3 اوﻻ ءl > = م &_ا ا.1 of the node "<<i<<" is”
<<indegree(adj,i,n)<<endl;
% buildadjm ا% ل داة اN* 1
*ا% ﺣ = ا ار ﺤﺳـ ب ا ﺤ اف ا:7 *% c ذ cout<<"The outdegree of the
M ا:7 ة%=< 2وا ر node“<<i<<"is”
<<outdegree(adj,i,n)<< endl;
...........وال% ل داة اN* 1 }
.: < ﻰ ا اoutdegreeوindegree }
.3ا %ا outdegreeﺤﺳ%< Dد
.2ا %ا indegreeﺤﺳ%< Dد ات
ات oر ا 0 ; :7 1 O4
oر ا < ; :7 1 O4د 7 3 :7
7 3 1ا .ار +kل رO4
ا .ار % +kام ر O4ا =%ة ا ـ :
ا =%ة ا + :ﺤﺳ%< Dد ا ﺤ اف.
O +ﺣﺳ ب ا ﺤ اف ا %ا* وا _ي
! د ا .7 3
: >g
ت ا
); ﺣ 1 => 1 3 7او ا;ـ! ( NETWORKS
و ﺣ 1 7ﺣ ا7ﻪ %< 4د 2 ن Diagram :+% & M < ﻰ ا> فا
! < . % => 1ا Aو>= > N3 Fت 7
1ا =Nods %
وزن cا ﺤ 7
%د 1ا ﺤ اف Edges 3
:N! 7 [ ق ا .د ا 34ا ات
ٓ ٔ
. /د ا ] اﻻ +ع 0ل ,4 1ا ﻰ ا*
SHORTEST PATH
M :7ا ق
> < ﻰ ا .د ا 34ا ات ^_& 1ا ا,4 ان ا .د ا 34ا ات :7ا Mا :
N* 1ل 7ﺤ , 2 qا ق ا Bد ا ﻰ ا ,4ا ب :7 1 4 ; 1ا Mﺤ I < %ﻰ و 2د
%ا => 1اﻻ> Nق ن .ع اوزان ا ﺤ اف & اﻻ4
و> ـ ا ﻰ ا 2ا = 3دة
ٔ
: اﻻو ﻰ7 3 ا
: :& ت و7 3 , ﺤ ج &_^ ا ارز ا ﻰ ار
ار. ا 7 3
(Adjacency Matrix Cost) (Adjacency Matrix Cost) ار. ا 7 3
( Distance Matrix) ا ل7 3
: ا ا:7 (Path Matrix) 1 ا7 3
ـ اA s (Include Matrix) 0 ا7 3
7 3 ام% + ] ا ﺳ ! ا1
:: ; ار. ا
A B C D
A
B
0
0
A TO B
0
A TO C
B TO C
A TO D
B TO D
A B
C 0 0 0 C TO D
D 0 0 D TO C 0
:: ; C++ K 7 3 ا1< نN< اﻻO و :: ; C++ K 7 3 ا1< نN< اﻻO و
int PATH[N]; int DISTANCE[N][N];
: اا7 3 ا
ٔ 0 ا7 3
j 4 ا = ط1 ل ايA ﺣ: 7
(Include Matrix)
Included ا ات34 ا1 G
=ﻪ ّ ﻪ7 3 :&و
True ﺳ وي
0 >= اﻻc ذ:7 ، ا0 ﺤ ي< ﻰا
] 1 ﻪs&_^ ا ﺤ K ا ات34 ا1 G (قN >)اﻻ
:: ; C++ K 7 3 ا1< نN< اﻻO و قN >اﻻ => 1 ءا% ا ارز
bool INCLUDE[N];
ﺣ ا ! ل:
ٔ 7 lن ا %ا ﻪ Initialize
< % %ء ا >
%ا * ارز د .ﺳ ا = اءة 7 3 O 4
ا .ار ،و c 1 Oا = :7 Oا 7 cost 7 3ﻰ < ﻰ ﺤ اﻻ 0ر ا %< 1< .م
+ا !ل و 2د ﺣ اف 1ا = ط :7ا Mا ﻰ ا;
ﺳ وي ] cost [2,3ا = 410و&_ا : ﻪ C++ K :7و ا ﻰ 4ﻪ 0ﺤ ﺤ
ان وزن ا ﺤ 7ﻪ ا 1 3 :ا = 1 MAXINTو& ﺳ وي &_^ ا = ﻪ
2و 410 & 3 . 32767
:اوﻻ
:: ; DISTANCE 7 3 ﺤ تا
اء2< ء اﻻ% + اO c ذ%
ا = ﻪ > ﺳ:&ا و% >= ا1 1 ا = ﻪ% initialize
ٔ
0 ﺳ ويDISTANCE [ 1 ] اي ت7 3 `ا% اﻻO = د ا%وا _ي ﺤ
ا% >= ا1 2 ا = ﻪ% Included وPath وDistance
ٔ : ;
800 ﺳ ويDISTANCE [ 2 ] اي
ا= ﻪ 1 2 3 4 5 ا= ﻪ 1 2 3 4 5
Distanc Distanc
200 1000 1410 400 0 200 1000 1821 400 0
e e
Path 5 1 2 5 0 Path 5 1 4 5 0
Include true true false true true Include true false false true true
ا Gﺢ:
ا ^ا ﻪ
1ا 0لاﻰا = ﻪ3
0لاﻰ :ا = ﻪ 1ان ا = ﻪ ا O :ا% +ا ;
ا = ﻪ :& 2ا = ﻪ 1
&_ا ا 2985 إ 1ا = ﻪ A 1ةو
800 او < ] [ 1ا = ﻪ 2و &_ا ا
1ا = ﻪ 1او < ] [ 1ا = ﻪ 4
و :ا = ﻪ falseان ا = ﻪ _*B O 2
1اﻻ< ر ﺤ % %ا 34ا ات
و ا 0ل ^_& :7ا ﺤ ﻪ
&310 :
ﺣ ﻰ &_^ ا ﺤsﻪ
ﺤ ت PATH [ 4 ] = 1 ; 3ﺢ 800 1 و ان 310اK0
ٔ
ل ا ﻰ ا = ﻪ ] [ 1< 3ا = ﻪ 4 اي ان ا 0 _ A cل ا = ﻪ 1 G 4ا 34ا ات
ٔ و< ﻪ 3ﺢ 4
لاﻰ4 و ان PATH [ 4] = 1اي ان ا 0
< ] [ 1ا = ﻪ => ) 1ا %ا ( ]DISTANCE [ 3
ﺳ وي
ﻪ3 و ا>ﻪ و Oا* ر ا = 0 4ل ا ﻰ ا = ) ( 1731 = 1421+310
و c 1 G 1ا N %ت
^ ^_& :7ا و& ا 1 4ا ل ا ﺳ ]
ﻪ ] 4 1 PATH [3ا ﻰ 2 4 K % 1 1ا ﻰ Og 4ا ﻰ 3
ٔ
ا ات34 ن ا7 ا% >= ا:& 1 و ان
ا= ﻪ 1 2 3 4 5 3 اﻰ2 اﻰ1 &
Distance 0 800 1210 310 200 [ـ ل &_ا ا7 و
Path 0 1 2 1 1 DISTANCE 7 3 م ا% >ﺳ
Include true true true true true
(1210) ا = ﻪDISTANCE [ 3 ] 7
[ ل ا:&و
Gﺢا ! ل
: >g ا .ار 7 3 M >= م O+ا
>= م ﺤﺳ ب ا 34ا ات 1ا = ﻪ 1و ا = ﻪ 3
2985
اﻻﺣ ﻻت :
800 410
=1210 410+800 3 2 1 1 2 3
=2985 3 1 1421
=3233 1421+612+800 3 4 2 1 612
=1731 1421+310 3 4 1 310
200
=2021 1421+400+200 3 4 5 1
=1622 410+612+400+200 3 2 4 5 1
4 5
=1332 410+612+310 3 2 4 1 400
Gﺢا ! ل
= ا! > : ا
و %ﺣﺳ ب اوزان , 2اﻻﺣ ﻻت
* ارز Floyd % 7
1ا = 1و ا = ? 3ﺢ ان ا
* %ارز < N % % 7ﻰ * ارز Dijkstraﺣ I 1ا = 1اﻰا = 2اﻰا = 3
= م &_^ ا ارز < ﻰ ﺣﺳ ب 7 3ا 34ا ات 1 ٔ
& ا 34ا ات = ر> :4 l` > ,ا ات
:7 1ا Mا : >= 1
= 1 و& L > :ا :7 .ﺣ ا ! ل
1210 = 410 + 800 = 3 2 1
ﺤ ج &_^ ا ارز ا ﻰ Ngث 7 3ت و&: : ٔ
O 4 ,ا د اﻻول 2 N* 1ل = ر>
ار )(Adjacency Matrix Cost ا. 7 3 7ا ﺳ 7و = ر> 3 وا 3اﻻو :
AOﺣ . = + = ,ا = Oاﻻ* ى < .ع ا = Oا AB
د :7ا 7 3 وا L > :7ا 3
(Path Matrix) 1 7 3ا
اذا ; ن ا .ع ا 1 4ا = ا < AB
ا ﺤ ي &_^ ا < 7 3ﻰ ا = Oا %د ﻪ
ٔ د L > :7ا 3وا > Kا = = ا .ع ا =
34ا ات 1 => 1 وا
;ـ ءة &_^ ا ارز & )O(n3
Iو Jو ر ا ﻰ ذ cب ]PATH [I][J
ٔ
و> 1 %.ا ارز و ﻻ* 1 qا %ور^ ا %ا* ﻪ
ا>ﻪ %ا %ور^ > Kﺤ < 3ﻰ: P 7 3
: d Oا % :7 7 3ا ا ارز ;
) ]P[I][J] = MINIMUM(P[I][K]+P[K][J],P[I][J
P1 7 3 ` ا. ا ٔ
>و>= ر :ا = > *_ ا
sﺣN C+B=10+23=33 is > 10
= و = ر> ∞ > ك ا2 % > : اO = ى ا% اﺣf> ; اذا :& ; ; > اذن = ا1 4 اL ع. دام ا
:& ; A B C D E
A ∞ 23 10 ∞ 18
D+B= ∞+23 B 23 46 10 48 ∞
ز. اذن ﻻ C 10 10 ∞ 19 7
D ∞ 48 19 ∞ 20
E 18 ∞ 7 20 ∞
P2 ا 7 3 .
ٔ
ات اﻻن > *_ ا ار ا :و> _ ا و& _ا = ,ا = Oا ﻰ ان > = 1 :ر>
; :7ا ات ا ﺳ = , 2ا = . Oع ا د اﻻول وا 3اﻻول ن ا .
A B C D E ٓ
; ﻻ:
∞ A ∞ 23 10 18
B 23 46 10 48 41 A B C D E
A ∞ 23 10 ∞ 18
C 10 10 20 19 7
B 23 46 10 48 41
∞ D ∞ 48 19 20
C 10 10 20 19 7
E 18 41 7 20 36
D ∞ 48 19 ∞ 20
E 18 41 7 20 36
A B C D E A B C D E
A 20 20 10 29 17 A 20 20 10 29 17
B 20 20 10 29 17 B 20 20 10 29 17
C 10 10 14 19 7 C 10 10 14 19 7
D 29 29 19 38 20 D 29 29 19 38 20
E 17 17 7 20 14 E 17 17 7 20 14
ا 7 3ا `
ا!
127
www.stqou.com
ﺑﺴﻢ اﷲ اﻟﺮﺣﻤﻦ اﻟﺮﺣﯿﻢ
اﺳﻢ اﻟﺪارس........................... : اﺳﻢ اﻟﻤﻘﺮر :ﺗﺮﻛﯿﺐ اﻟﺒﯿﺎﻧﺎت وﺗﺼﻤﯿﻢ اﻟﺨﻮارزﻣﯿﺎت
رﻗﻢ اﻟﺪارس........................... : رﻗﻢ اﻟﻤﻘﺮر١٢٨٩ :
ﺗﺎرﯾﺦ اﻻﻣﺘﺤﺎن٢٠٠٧/7 /11 : ﻣﺪة اﻻﻣﺘﺤﺎن :ﺳﺎﻋﺘﺎن
ﻋﺪد اﻷﺳﺌﻠﺔ٧ :
ﺟﺎﻣﻌﺔ اﻟﻘﺪس اﻟﻤﻔﺘﻮﺣﺔ
اﻹﺟﺎﺑﺔ اﻟﻨﻤﻮذﺟﯿﺔ ﻟﻼﻣﺘﺤﺎن اﻟﻨﮭﺎﺋﻲ
--ﻧﻈﺮي -- ﻟﻠﻔﺼﻞ اﻟﺜﺎﻧﻲ ""١٠٦٢
٢٠٠٧ / ٢٠٠٦
m
ﻋﻼﻣﺔ(
.١ﻣﺜﻞ اﻟﻌﺪد اﻟﺤﻘﯿﻘﻲ (٢٥٫٤)١٠ﻓﯿﺰﯾﺎﺋﯿﺎ ﺑﺎﺳﺘﺨﺪام اﻟﻨﻘﻄﺔ اﻟﻌﺎﺋﻤﺔ؟ ) ٤ﻋﻼﻣﺎت(
co
٠ ٠ ١٠١ ١١٠٠١٠١١
.٢أرﺳﻢ ﻃﺮﯾﻘﺔ ﺗﺨﺰﯾﻦ اﻟﺘﻌﺒﯿﺮ اﻟﺮﯾﺎﺿﻲ ) (a^2+3*c/b+d*hﻓﻲ ذاﻛﺮة ﺣﺎﺳﻮب وذﻟﻚ ﺑﺎﺳﺘﺨﺪام اﻟﺘﻤﺜﯿﻞ اﻟﻤﻨﻄﻘﻲ؟ ) ٤ﻋﻼﻣﺎت(
u.
o
tq
.s
w
.٣ﻗﻢ ﺑﻌﻤﻠﯿﺔ ﺗﺤﻮﯾﻞ ﻟﻠﺘﻌﺒﯿﺮ اﻟﺮﯾﺎﺿﻲ )) (A+B*(C*G^F-H/Kﻣﻦ اﻟﻨﻈﺎم اﻟﻮﺳﻄﻲ ) (infixإﻟﻰ اﻟﻨﻈﺎم اﻟﺘﺒﻌﻲ ) ٤) (postfixﻋﻼﻣﺎت(
w
ABCGF^*HK/-*+
)١٥ اﻟﺴﺆال اﻟﺜﺎﻟﺚ:
w
ﻋﻼﻣﺔ(
.١ھﻨﺎك ﻋﺪة ﻓﻮاﺋﺪ ﻧﺠﻨﯿﮭﺎ ﻣﻦ اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺘﺮاﻛﯿﺐ اﻟﺒﯿﺎﻧﯿﺔ ،أذﻛﺮھﺎ؟ ) ٨ﻋﻼﻣﺎت(
-ﯾﺴﺘﻄﯿﻊ اﻟﻤﺒﺮﻣﺞ أن ﯾﺮﻛﺰ ﺟﮭﺪه وﺗﻔﻜﯿﺮه ﻋﻠﻰ اﻟﻤﺴﺄﻟﺔ اﻟﺘﻲ ﯾﺤﺎول ﻛﺘﺎﺑﺔ ﺑﺮﻧﺎﻣﺞ ﻟﮭﺎ دون اﻟﺤﺎﺟﺔ إﻟﻰ اﻟﺘﻔﻜﯿﺮ ﻓﻲ ﺗﻔﺎﺻﯿﻞ
ﺗﺮﻛﯿﺒﺔ اﻟﺒﯿﺎﻧﺎت.
-ﻓﻲ ﺣﺎﻟﺔ ﺗﻐﯿﺮ ﻃﺮﯾﻘﺔ ﺗﻤﺜﯿﻞ وﺗﻨﻔﯿﺬ ﺗﺮﻛﯿﺒﺔ ﺑﯿﺎﻧﺎت ﻣﻌﯿﻨﺔ ﻓﺈن اﻟﺒﺮاﻣﺞ اﻟﺘﻄﺒﯿﻘﯿﺔ اﻟﻜﺒﺮى اﻟﺘﻲ ﺗﺴﺘﺨﺪم ﺗﺮﻛﯿﺒﺔ اﻟﺒﯿﺎﻧﺎت ھﺬه ﻟﻦ
ﺗﺘﺄﺛﺮ وﻻ ﺗﺤﺘﺎج إﻟﻰ ﻋﻤﻞ ﺗﻌﺪﯾﻞ ﻋﻠﯿﮭﺎ.
-اﻻﺳﺘﺨﺪام اﻟﻤﺘﻜﺮر ﻟﻠﺒﺮاﻣﺞ ﺑﺪون اﻟﺤﺎﺟﺔ إﻟﻰ ﻛﺘﺎﺑﺘﮭﺎ ﻣﺮة أﺧﺮى.
-ﺗﺴﮭﯿﻞ ﻋﻤﻞ ﻓﺮق اﻟﺘﺼﻤﯿﻢ واﻟﺒﺮﻣﺠﺔ .
.٢ﺗﺘﺒﻊ اﻟﺨﻮارزﻣﯿﺔ اﻟﺘﺎﻟﯿﺔ وﺑﯿﻦ ﺗﺄﺛﯿﺮھﺎ ﻋﻠﻰ ﻣﺤﺘﻮﯾﺎت اﻟﻤﺼﻔﻮﻓﺔ ] .a[3ﺿﻊ اﻟﻨﺘﺎﺋﺞ ﻓﻲ اﻟﺠﺪول اﻟﻤﺮﻓﻖ ٧) :ﻋﻼﻣﺎت(
Name, ID, Major ﻟﺘﻌﺮﯾﻒ ﻗﺎﺋﻤﺔ ﻣﺘﺼﻠﺔ ﻣﺰدوﺟﺔ ﯾﺤﺘﻮي ﻋﻠﻰ اﻟﻤﺘﻐﯿﺮاتDoubleList ﺑﺎﺳﻢClass أﻛﺘﺐ.١
( ﻋﻼﻣﺎت٥) .DeleteNode وInsertNode اﻟﻌﻤﻠﯿﺘﯿﻦClass وأﯾﻀﺎ ﻣﻌﺮف ﻋﻠﻰ،واﻟﻤﺆﺷﺮات
Class DoubleList{
Private:
char Name;
int ID;
char Major;
DoubleList *next;
DoubleList *prev;
Public:
m
DoubleList * DeleteNode(DoubleList *list);
DoubleList * InsertNode(DoubleList *list, char, int, char);
};
co
( ﻋﻼﻣﺎت٥) . واﻟﺘﻲ ﺗﻘﻮم ﺑﺤﺬف آﺧﺮ ﻋﻨﺼﺮ ﻣﻦ اﻟﻘﺎﺋﻤﺔ اﻟﻤﺰدوﺟﺔDeleteNode أﻛﺘﺐ اﻟﻌﻤﻠﯿﺔ.٢
delete(c);
}
.s
DoubleList *c = list;
node->Name = name;
node->ID = id;
w
node->Major = major;
node->next = NULL;
node->prev = NULL;
2
www.stqou.com
.١أﻛﺘﺐ ﺑﺮﻧﺎﻣﺠﺎ ﻓﺮﻋﯿﺎ ﺑﺎﺳﺘﺨﺪام ﻓﻜﺮة اﻟﻤﻜﺪﺳﺎت ) (Stacksﻟﻔﺤﺺ ﻓﯿﻤﺎ إذا ﻛﺎن اﻟﻤﻜﺪس ﻓﺎرغ StackEmptyأم ﻻ ﻓﻲ ﺣﺎﻟﺔ
اﻟﺘﻤﺜﯿﻞ اﻟﺘﺘﺎﺑﻌﻲ ٥) .ﻋﻼﻣﺎت(
{)bool AStack:: stackEmpty(AStack Q
)if(Q.top == ٠
;return true
;else return false
}
.٢أﻛﺘﺐ ﺑﺮﻧﺎﻣﺠﺎ ﻓﺮﻋﯿﺎ ﺑﺎﺳﺘﺨﺪام ﻓﻜﺮة اﻻﺳﺘﺪﻋﺎء اﻟﺬاﺗﻲ ﻟﻄﺒﺎﻋﺔ ﻣﺤﺘﻮﯾﺎت اﻟﻤﺼﻔﻮﻓﺔ ] numbers[10ﺑﺸﻜﻞ ﻋﻜﺴﻲ ٨) .ﻋﻼﻣﺎت(
m
{)void rec(int numbers[], int size
{)if(size != 0
;" "<<]cout<< numbers[size-1
co
;)rec(numbers, size-1
}
} u.
************اﻷﺳﺌﻠﺔ اﻻﺧﺘﯿﺎرﯾﺔ ) اﺟﺐ ﻋﻦ اﺣﺪ اﻟﺴﺆاﻟﯿﻦ اﻟﺘﺎﻟﯿﯿﻦ(************
o
)١٥ اﻟﺴﺆال اﻟﺴﺎدس:
ﻋﻼﻣﺔ(
tq
public:
;)bool compare(array s, array t
;)void Max(array s
w
private:
;]int a[4
;}
w
3
www.stqou.com
else{
cout<<"They are equal";
return 0;
}
}
}
m
while( low <= high )
{
co
middle = ( low + high ) / 2;
: إذا أﻋﻄﯿﺖ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻷﺣﺮف وﺗﺮﻏﺐ ﻓﻲ إدﺧﺎﻟﮭﺎ ﻓﻲ ھﯿﻜﻞ ﺷﺠﺮي ﺛﻨﺎﺋﻲ وﻓﻖ اﻟﺘﺮﺗﯿﺐ اﻟﺘﺎﻟﻲ وﻣﻦ اﻟﯿﺴﺎر إﻟﻰ اﻟﯿﻤﯿﻦ.٢
w
أرﺳﻢ ھﺬا اﻟﮭﯿﻜﻞ اﻟﺸﺠﺮي ﺑﺤﯿﺚ ﯾﻌﻄﯿﻚ اﺳﺘﻌﺮاض اﻟﻌﻨﺎﺻﺮ وﻓﻖ اﻟﺴﯿﺎق اﻟﻮﺳﻄﻲ ﻣﺮﺗﺒﺔ ﺗﺮﺗﯿﺒﺎ. J,R,D,G,T,E,M,H,A,F
( ﻋﻼﻣﺎت٥) .ﺗﺼﺎﻋﺪﯾﺎ
w
w
4
www.stqou.com
اﻧﺘﮭﺖ اﻹﺟﺎﺑﺔ
m
co
o u.
tq
.s
w
w
w
5
www.stqou.com
ﻧﻤـﻮذج ﻟﻘﯿـﺎس ﺷﻤـﻮﻟﯿـﺔ اﻟﻤـﺎدة واﻻھـﺪاف اﻟﺘﻌﻠﯿﻤﯿـﺔ
اﺳﻢ اﻟﻤﺸﺮف :ﻋﻼء اﻟﺪﯾﻦ إﺳﻤﺎﻋﯿﻞ ﻋﺒﺪ اﻟﺮؤوف ﺟﺒﺮ ﯾﺮﺟﻰ ﺗﻌﺒﺌﺔ ھﺬا اﻟﻨﻤﻮذج ﻋﻨﺪ إﻋﺪادﻛﻢ ﻻﺳﺌﻠﺔ اﻻﻣﺘﺤﺎن وﻣﻦ ﺛﻢ إﻋﺎدﺗﮫ اﻟﻰ داﺋﺮة اﻟﻘﺒﻮل واﻟﺘﺴﺠﯿﻞ واﻻﻣﺘﺤﺎﻧﺎت
اﺳﻢ اﻟﻤﺎده :ﺗﺮﻛﯿﺐ اﻟﺒﯿﺎﻧﺎت وﺗﺼﻤﯿﻢ اﻟﺨﻮارزﻣﯿﺎت رﻗﻢ اﻟﻤﺎدة١٢٨٩ : ارﻗﺎم اﻟﻮﺣﺪات اﻟﻤﻄﻠﻮﺑﺔ ﻣﻦ اﻟﻜﺘﺎب اﻟﻤﻘﺮر١١-١ :
اﻟﻤﻨﻄﻘﺔ /اﻟﻤﺮﻛﺰ :ﻗﻠﻘﯿﻠﯿﺔ
m
اﻷھـﺪاف اﻟﺘﻌﻠﯿﻤﯿـﺔ
co
ﺗﺤﻠﯿﻞ وﺗﺮﻛﯿﺐ اﺳﺘﯿﻌﺎب وﺗﻄﺒﯿﻖ ﺗﺬﻛﺮ
اﻟﻌﻼﻣﺔ اﻟﻮﺣﺪة اﻟﺘﻲ ورد رﻗﻢ اﻟﻔﺮع رﻗﻢ اﻟﺴﺆال اﻟﻌﻼﻣﺔ اﻟﻮﺣﺪة اﻟﺘﻲ ورد رﻗﻢ اﻟﻔﺮع رﻗﻢ اﻟﺴﺆال اﻟﻌﻼﻣﺔ اﻟﻮﺣﺪةاﻟﺘﻲ ورد رﻗﻢ اﻟﻔﺮع رﻗﻢ اﻟﺴﺆال
u.
ﻣﻨﮭﺎ اﻟﺴﺆال ﻣﻨﮭﺎ اﻟﺴﺆال ﻣﻨﮭﺎ اﻟﺴﺆال
2 4 4 1 2 1 6 1 2 3 ١ 1
2 4 5 1 2 7 9 1 2 2 2 1
o
2 6 8 1 4 1 1 2 2 4 3 1
2 9 11 1 7 2 2 3 2 5 7 1
tq
2 10 12 1 15 4 1,2,3 4 2 9 10 1
4 1 2 2 5 7 1 5 2 11 13 1
4
5
7
9
3
2
2
7 .s 8
15
10
8
3
11
2
1,2,3
1
5
6
7
2
2
8
11
10
3
14
15
1
1
1
3
w
w
w
4
اﺳﻢ اﻟﺪارس........................... : www.stqou.com
ﺑﺴﻢ اﷲ اﻟﺮﺣﻤﻦ اﻟﺮﺣﯿﻢ اﺳﻢ اﻟﻤﻘﺮر :ﺗﺮﻛﯿﺐ اﻟﺒﯿﺎﻧﺎت وﺗﺼﻤﯿﻢ اﻟﺨﻮارزﻣﯿﺎت
رﻗﻢ اﻟﺪارس........................... : رﻗﻢ اﻟﻤﻘﺮر١٢٨٩ :
ﺗﺎرﯾﺦ اﻻﻣﺘﺤﺎن٢٠٠٧/........ /........ : ﻣﺪة اﻻﻣﺘﺤﺎن :ﺳﺎﻋﺘﺎن
ﺟﺎﻣﻌﺔ اﻟﻘﺪس اﻟﻤﻔﺘﻮﺣﺔ
ﻋﺪد اﻷﺳﺌﻠﺔ٧ :
--ﻧﻈﺮي -- اﻻﻣﺘﺤﺎن اﻟﻨﮭﺎﺋﻲ ﻟﻠﻔﺼﻞ اﻟﺜﺎﻧﻲ ""١٠٦٢
٢٠٠٧/٢٠٠٦
ﻧﻤﻮذج اﻟﻮﺣﺪات
.١ﻋﺒﻰء ﻛﺎﻓﺔ اﻟﻤﻌﻠﻮﻣﺎت اﻟﻤﻄﻠﻮﺑﺔ ﻋﻨﻚ ﻓﻲ دﻓﺘﺮ اﻻﺟﺎﺑﺔ وﻋﻠﻰ ورﻗﺔ اﻻﺳﺌﻠﺔ. ﻋﺰﯾﺰي اﻟﺪارس:
.٢ﺿﻊ رﻗﻢ اﻟﺴﺆال ورﻣﻮز اﻻﺟﺎﺑﺔ اﻟﺼﺤﯿﺤﺔ ﻟﻼﺳﺌﻠﺔ اﻟﻤﻮﺿﻮﻋﯿﺔ )ان وﺟﺪت( ﻋﻠﻰ اﻟﺠﺪول اﻟﻤﺨﺼﺺ ﻓﻲ دﻓﺘﺮ اﻻﺟﺎﺑﺔ
.٣ﺿﻊ رﻗﻢ اﻟﺴﺆال ﻟﻼﺳﺌﻠﺔ اﻟﻤﻘﺎﻟﯿﺔ واﺟﺐ ﻋﻠﻰ دﻓﺘﺮ اﻻﺟﺎﺑﺔ.
m
ﻧﺤﺘﺎج ﻣﺆﺷﺮ ) (Pointerواﺣﺪ ﻓﻘﻂ ﻟﺤﺬف ﻋﻨﺼﺮ ﻓﻲ ﻗﺎﺋﻤﺔ ﻣﺘﺼﻠﺔ ﻣﻨﻔﺮدة .وﺣﺪة ٤ .٥
.٦ﺑﺎﺳﺘﺨﺪام اﻟﻤﻜﻤﻞ اﻟﺜﻨﺎﺋﻲ ﯾﻤﻜﻦ ﺗﻤﺜﯿﻞ اﻟﺮﻗﻢ (٤٠)١٠ﻓﻲ ذاﻛﺮة ﺣﺎﺳﻮب ﻃﻮل ﻛﻠﻤﺘﮭﺎ ١ﺑﺎﯾﺖ ﻛﻤﺎ ﯾﻠﻲ (١١٠١١٠٠٠)٢وﺣﺪة ١
.٧ﺗﺘﻤﯿﺰ اﻟﻤﺼﻔﻮﻓﺎت اﻟﺮﻣﺰﯾﺔ ذات اﻟﻄﻮل اﻟﺜﺎﺑﺖ ﺑﺴﮭﻮﻟﺔ اﺳﺘﺨﺪاﻣﮭﺎ ﻓﻲ ﺗﻤﺜﯿﻞ اﻟﺴﻼﺳﻞ اﻟﺮﻣﺰﯾﺔ وﺗﻨﻔﯿﺬ اﻟﻌﻤﻠﯿﺎت .وﺣﺪة ٥
co
.٨ﺗﺴﺘﺨﺪم ﻓﻜﺮة اﻟﻄﻮاﺑﯿﺮ ) (Queuesﻓﻲ إدارة وﺗﻨﻈﯿﻢ أﻋﻤﺎل ﻃﺎﺑﻌﺔ ﻣﻮﺻﻮﻟﺔ ﻋﻠﻰ ﺷﺒﻜﺔ ﺣﻮاﺳﯿﺐ .وﺣﺪة ٦
.٩إذا ﻛﺎن ھﻨﺎك ٥ﻋﻤﻠﯿﺎت إﺿﺎﻓﺔ و ٤ﻋﻤﻠﯿﺎت ﺣﺬف ﻓﺈن اﻟﻤﻜﺪس ﯾﺼﻞ ﻓﻲ ھﺬه اﻟﺤﺎﻟﺔ إﻟﻰ وﺿﻊ ﯾﺼﺒﺢ ﻣﻌﮫ ﺧﺎﻟﯿﺎ ﻣﻦ اﻟﻘﯿﻢ .وﺣﺪة ٧
.١٠ﯾﺤﺘﻮي اﻟﮭﯿﻜﻞ اﻟﺸﺠﺮي اﻟﺜﻨﺎﺋﻲ ﻋﻠﻰ ﻋﻨﺼﺮ ﺟﺬري وﺷﺠﯿﺮﺗﯿﻦ أو أﻛﺜﺮ ﻣﻨﻔﺼﻼت ﻋﻦ ﺑﻌﺾ .وﺣﺪة ٩
.١١ﻟﺘﻤﺜﯿﻞ ﺑﯿﺎﻧﺎت ﻛﺒﯿﺮة اﻟﺤﺠﻢ ﯾﻔﻀﻞ اﺳ ﺘﺨﺪام اﻟﻘ ﻮاﺋﻢ اﻟﻤﺘ ﺼﻠﺔ اﻟﺪاﺋﺮﯾ ﺔ ﺑ ﺪﻻ ﻣ ﻦ اﻟﺘﻤﺜﯿ ﻞ اﻟ ﺸﺠﺮي اﻟﺜﻨ ﺎﺋﻲ وذﻟ ﻚ ﻟ ﺴﺮﻋﺔ ﻋﻤﻠﯿ ﺔ
u. اﻟﺒﺤﺚ ﻓﻲ ھﺬا اﻟﻨﻮع ﻣﻦ اﻟﺘﻤﺜﯿﻞ .وﺣﺪة ٩
.١٢ﻣﻦ ﻣﯿﺰات اﻟﻤﺨﻄﻄﺎت اﻟﺸﺒﻜﯿﺔ أﻧﮭﺎ ﺗﺤﺘﻮي ﻋﻠﻰ دوران .وﺣﺪة ١٠
.١٣ﯾﻘﺼﺪ ﺑﺎﻟﻔﺮز ﻋﻤﻠﯿﺔ إﯾﺠﺎد ﻣﻮﻗﻊ ﻋﻨﺼﺮ ﻣﻌﯿﻦ ﺿﻤﻦ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻟﻘﯿﻢ .وﺣﺪة ١١
o
.١٤ﯾﻌﺘﻤﺪ ﻣﺒﺪأ اﻟﺒﺤﺚ اﻟﺜﻨﺎﺋﻲ ﻋﻠﻰ ﻋﻨﺎﺻﺮ ﻣﺮﺗﺒﺔ ﺗﺼﺎﻋﺪﯾﺎ أو ﺗﻨﺎزﻟﯿﺎ .وﺣﺪة ١١
.١٥ﻧﺘﯿﺠﺔ ﻟﺘﻨﻔﯿﺬ ﻋﻤﻠﯿﺔ اﻟﻔﺮز اﻟﻤﻘﯿﺪ ﻋﻠﻰ اﻟﮭﯿﻜﻞ اﻟﺸﺠﺮي اﻟﺜﻨﺎﺋﻲ ﻓﺈﻧﮫ ﯾﺘﻢ ﻃﺒﺎﻋﺔ اﻟﻌﻨﺎﺻﺮ ﻣﺮﺗﺒﺔ ﺗﺮﺗﯿﺒﺎ ﺗﻨﺎزﻟﯿﺎ .وﺣﺪة ١٠
tq
.١ﻣﺜﻞ اﻟﻌﺪد اﻟﺤﻘﯿﻘﻲ (٢٥٫٤)١٠ﻓﯿﺰﯾﺎﺋﯿﺎ ﺑﺎﺳﺘﺨﺪام اﻟﻨﻘﻄﺔ اﻟﻌﺎﺋﻤﺔ؟ ) ٤ﻋﻼﻣﺎت( وﺣﺪة ١
w
.٢أرﺳﻢ ﻃﺮﯾﻘﺔ ﺗﺨﺰﯾﻦ اﻟﺘﻌﺒﯿﺮ اﻟﺮﯾﺎﺿﻲ ) (a^2+3*c/b+d*hﻓﻲ ذاﻛﺮة ﺣﺎﺳﻮب وذﻟﻚ ﺑﺎﺳﺘﺨﺪام اﻟﺘﻤﺜﯿﻞ اﻟﻤﻨﻄﻘﻲ؟ ) ٤ﻋﻼﻣﺎت(
وﺣﺪة ١
.٣ﻗﻢ ﺑﻌﻤﻠﯿﺔ ﺗﺤﻮﯾﻞ ﻟﻠﺘﻌﺒﯿﺮ اﻟﺮﯾﺎﺿﻲ )) (A+B*(C*G^F-H/Kﻣﻦ اﻟﻨﻈﺎم اﻟﻮﺳﻄﻲ ) (infixإﻟﻰ اﻟﻨﻈﺎم اﻟﺘﺒﻌﻲ )(postfix
w
ﻋﻼﻣﺔ(
.١ھﻨﺎك ﻋﺪة ﻓﻮاﺋﺪ ﻧﺠﻨﯿﮭﺎ ﻣﻦ اﻟﺘﻌﺎﻣﻞ ﻣﻊ اﻟﺘﺮاﻛﯿﺐ اﻟﺒﯿﺎﻧﯿﺔ ،أذﻛﺮھﺎ؟ ) ٨ﻋﻼﻣﺎت( وﺣﺪة٣
.٢ﺗﺘﺒﻊ اﻟﺨﻮارزﻣﯿﺔ اﻟﺘﺎﻟﯿﺔ وﺑﯿﻦ ﺗﺄﺛﯿﺮھﺎ ﻋﻠﻰ ﻣﺤﺘﻮﯾﺎت اﻟﻤﺼﻔﻮﻓﺔ ] .a[3ﺿﻊ اﻟﻨﺘﺎﺋﺞ ﻓﻲ اﻟﺠﺪول اﻟﻤﺮﻓﻖ ٧) :ﻋﻼﻣﺎت( وﺣﺪة ٢
;}int a[3]={3,1,4
{)for(i=0;i<2;i++
{)for(j=2;j>0;j--
{)]if(a[j-1]<a[j
;]temp=a[j-1
;]a[j-1]=a[j
;a[j]=temp
}
"<<cout<<i<<" "<<j "<<]"<<a[j-1 "<<]"<<a[j ;"
;]for(k=0;k<3;k++) cout<<a[k
}
}
]i j a[j-1 ]a[j a
1
. www.stqou.com
. . . .
. . . . .
.١أﻛﺘﺐ Classﺑﺎﺳﻢ DoubleListﻟﺘﻌﺮﯾﻒ ﻗﺎﺋﻤﺔ ﻣﺘﺼﻠﺔ ﻣﺰدوﺟﺔ ﯾﺤﺘﻮي ﻋﻠﻰ اﻟﻤﺘﻐﯿﺮات Name, ID, Major
واﻟﻤﺆﺷﺮات ،وأﯾﻀﺎ ﻣﻌﺮف ﻋﻠﻰ Classاﻟﻌﻤﻠﯿﺘﯿﻦ InsertNodeو ٥) .DeleteNodeﻋﻼﻣﺎت( وﺣﺪة ٤
.٢أﻛﺘﺐ اﻟﻌﻤﻠﯿﺔ DeleteNodeواﻟﺘﻲ ﺗﻘﻮم ﺑﺤﺬف آﺧﺮ ﻋﻨﺼﺮ ﻣﻦ اﻟﻘﺎﺋﻤﺔ اﻟﻤﺰدوﺟﺔ ٥) .ﻋﻼﻣﺎت( وﺣﺪة ٤
.٣أﻛﺘﺐ اﻟﻌﻤﻠﯿﺔ InsertNodeﺗﻘﻮم ﺑﺎﻹﺿﺎﻓﺔ ﻋﻠﻰ ﺑﺪاﯾﺔ اﻟﻘﺎﺋﻤﺔ اﻟﻤﺰدوﺟﺔ ٥) .ﻋﻼﻣﺎت( وﺣﺪة ٤
.١أﻛﺘﺐ ﺑﺮﻧﺎﻣﺠﺎ ﻓﺮﻋﯿﺎ ﺑﺎﺳﺘﺨﺪام ﻓﻜﺮة اﻟﻤﻜﺪﺳﺎت ) (Stacksﻟﻔﺤﺺ ﻓﯿﻤﺎ إذا ﻛﺎن اﻟﻤﻜﺪس ﻓﺎرغ StackEmptyأم ﻻ ﻓﻲ ﺣﺎﻟﺔ
اﻟﺘﻤﺜﯿﻞ اﻟﺘﺘﺎﺑﻌﻲ ٥) .ﻋﻼﻣﺎت( وﺣﺪة ٧
m
.٢أﻛﺘﺐ ﺑﺮﻧﺎﻣﺠﺎ ﻓﺮﻋﯿﺎ ﺑﺎﺳﺘﺨﺪام ﻓﻜﺮة اﻻﺳﺘﺪﻋﺎء اﻟﺬاﺗﻲ ﻟﻄﺒﺎﻋﺔ ﻣﺤﺘﻮﯾﺎت اﻟﻤﺼﻔﻮﻓﺔ ] numbers[10ﺑﺸﻜﻞ ﻋﻜﺴﻲ 8) .ﻋﻼﻣﺎت(
وﺣﺪة ٨
co
************اﻷﺳﺌﻠﺔ اﻻﺧﺘﯿﺎرﯾﺔ ) اﺟﺐ ﻋﻦ اﺣﺪ اﻟﺴﺆاﻟﯿﻦ اﻟﺘﺎﻟﯿﯿﻦ(************
u.
)١٥ اﻟﺴﺆال اﻟﺴﺎدس:
ﻋﻼﻣﺔ(
o
-١ﻋﺮف classﺑﺎﺳﻢ arrayﯾﺤﺘﻮي ﻋﻠﻰ ﻋﻤﻠﯿﺘﯿﻦ compareو maxواﻟﻤﺘﻐﯿﺮ ﻋﺒﺎرة ﻋﻦ ] ٥) .int a[4ﻋﻼﻣﺎت( وﺣﺪة ٣
tq
-٢أﻛﺘﺐ اﻟﻌﻤﻠﯿﺔ maxﺣﯿﺚ ﺗﻘﻮم ﺑﻄﺒﺎﻋﺔ أﻛﺒﺮ رﻗﻢ ﻓﻲ اﻟﻤﺼﻔﻮﻓﺔ ] ٥) .a[4ﻋﻼﻣﺎت( وﺣﺪة ٣
-٣إذا ﺗﻢ ﺗﻮرﯾﺚ اﻷﺑﻨﺎء Aو Bﺧﺼﺎﺋﺺ ،array classأﻛﺘﺐ اﻗﺘﺮان ﺑﺎﺳ ﻢ compareﯾﻘ ﻮم ﺑﻤﻘﺎرﻧ ﺔ ﻣﺤﺘﻮﯾ ﺎت اﻟﻤ ﺼﻔﻮﻓﺘﯿﻦ ﻟﻜ ﻞ
ﻣﻦ Aو Bﺑﺤﯿﺚ ﯾﻄﺒﻊ رﺳﺎﻟﺔ ﺗﻘﻮل ﺑﻤﺴﺎواة أو ﻋﺪم ﻣﺴﺎواة ﻣﺤﺘﻮﯾﺎت اﻟﻤﺼﻔﻮﻓﺘﯿﻦ ٥) .ﻋﻼﻣﺎت( وﺣﺪة ٣
.s
.١أﻛﺘﺐ ﺧﻮارزﻣﯿﺔ اﻟﺒﺤﺚ اﻟﺜﻨﺎﺋﻲ )(Binary Search Algorithm؟ ) ١٠ﻋﻼﻣﺎت( وﺣﺪة ١١
w
.٢إذا أﻋﻄﯿﺖ ﻣﺠﻤﻮﻋﺔ ﻣﻦ اﻷﺣﺮف وﺗﺮﻏﺐ ﻓﻲ إدﺧﺎﻟﮭﺎ ﻓﻲ ھﯿﻜﻞ ﺷﺠﺮي ﺛﻨﺎﺋﻲ وﻓﻖ اﻟﺘﺮﺗﯿﺐ اﻟﺘﺎﻟﻲ وﻣﻦ اﻟﯿﺴﺎر إﻟﻰ اﻟﯿﻤﯿﻦ:
. J,R,D,G,T,E,M,H,A,Fأرﺳﻢ ھﺬا اﻟﮭﯿﻜﻞ اﻟﺸﺠﺮي ﺑﺤﯿﺚ ﯾﻌﻄﯿﻚ اﺳﺘﻌﺮاض اﻟﻌﻨﺎﺻﺮ وﻓﻖ اﻟﺴﯿﺎق اﻟﻮﺳﻄﻲ ﻣﺮﺗﺒﺔ ﺗﺮﺗﯿﺒﺎ
ﺗﺼﺎﻋﺪﯾﺎ ٥) .ﻋﻼﻣﺎت( وﺣﺪة ٩
w
2
www.stqou.com
اﻧﺘﮭﺖ اﻷﺳﺌﻠﺔ
ﻣﻊ ﺗﻤﻨﯿﺎﺗﻲ ﻟﻜﻢ ﺑﺎﻟﺘﻮﻓﯿﻖ
m
co
o u.
tq
.s
w
w
w
3
لتحديد العنوان المطلق للعنصر ضمن مصفوفة متعددة
العبعاد:
وفق التمثيل الفقي -
وفق التمثيل الطولي -
(i1-L1) ..………+
فعليه فان المصفوفة (a[3,4,3هي )a(1..3,1..4,1..3
على أساس ]a[L1..H1,L2..H2,L3..H3, …..Ln..Hn
L1=1 H1 = 3 L2= 1, H2 = 4 , L3= 1, H3=3
n= 3
)a[2,2,3 والعنصر i1= 2 , i2=2,i3= 3
فان:
)A[2,2,3) = 1001 + 1*[(3-1)*(4-1+1)(3-1+1) + (2-1
])((3-1+1) +(2-1
)Q 6ﻡت( ب .ﺏ/ءا "? ا 3Z
2اMcي ا ،0أآ fا -اض 3Zﻡ ی":0
+
*
-
x
- / u
3
او: .
) Q 5ﻡت( أ .ﻡ !+"Z !@+اMار.
) Q 5ﻡت( ب .ﻡ !@+ا اات ﺏ ام ﺥارزﻡ
! @"ی .Floyed Algorithm
2
C PROGRAM FOR INSERTION
#include<stdio.h>
#include<conio.h>
void insert(int);
int delet(int);
void display(void);
int queue[3];
int rear=-1;
int front=-1;
void main()
{
int n=3;
char op;
clrscr();
do
{
printf("\nOptions");
printf("\nPress i for insertion");
printf("\nPress d for deletion");
printf("\nPress p for display");
printf("\nPress e for exit");
op=getche();
switch(op)
{
case 'i':insert(n);break;
case 'd':delet(n);break;
case 'p':display(); break;
default:printf("\nWrong operator");
}
}
while(op!='e');
getch();
}
void insert(int n)
{
int item;
if((front==0&&rear==n)||(front==rear+1))
{ printf("\nQueue over flow");
return;
}
if(front==-1)
{
front=0;
rear=0;
}
else if(rear==n)
rear=0;
else
rear=rear+1;
return;
}
void display(void)
{
int i;
printf("\nDisplaying Queue\n");
for(i=0;i<3;i++)
printf("\n%d",queue[i]);
}
بسم هللا الرحمن
الرحيم
البرمجة بلغة C++وتراكيب
البيانات
د .عميد غازي
البرمجة بلغة C++وتراكيب
البيانات
د .عميد غازي
الفصل األول :
مقدمة إلى ..
لغة c++
د .عميد غازي .
أنواع لغات
البرمجة لغة اآللة :
هي اللغة الوحيدة التي يستطيع الحاسب أن يفهمها مباشرة تتألف
من األصفار و الواحدات .
اللغات البسيطة(لغة المج ّمع-الترميز) :
هي لغة تستخدم مصطلحات قريبة من اللغة اإلنكليزية ،و يتم تحويل البرامج من لغة
المجمع Assembler . ّ المجمع إلى لغة اآللة بواسطة مترجم يسمى
لغات البرمجة العالية المستوى :
هي اللغات التي ظهرت مع ظهور المترجمات( : Compilerيقوم بترجمة لغة المستوى
العالي إلى لغة اآللة) ،وأهم هذه اللغات :سي و سي بلص بلص , C++, Cبيسك
, Basicباسكال , pascalفورتران , fortranكوبول , Gobolولغة جافا . Java
لغات البرمجة المرئية :
هي أحدث اللغات البرمجية التي تعتمد على اللغات الشيئية الموجهة ( Object Oriented
) Languagesوالكائنات الجاهزة وأهم هذه اللغات :فيجوال سي بلص بلص Visual c++
,فيجوال بيسك , Visual Basicفيجوال فوكس برو , Visual Fox Proدلفي . Delphi
البرمجة بلغة (
) C ++
لغة C++هي :
لغة مشتقة من لغة ، cاألختالف الرئيسي هو باضافة الصفوف.
classesوبالتالي يمكن تقسيم عملية تعلم لغة الـ .C++
إلى قسمين /
يعتمد األول منها على تعلم األسلوب المهيكلل والمنهجلي لعمليلة تصلميم
البرامج .
فللي حللين يسللمن التللاني بتعللليم كيفيللة اسللتخدام الصللفوف الملحقللة بهللذه
اللغة واستخدام التوابع الموجودة ضمن المكتبة المعيارية . ANSI
البرمجة بلغة ( مزايا لغة C++هي :
++معينة) C.
هذه الدوال وزيع ت ،تم الحجم : SIZEتحتوي على مجموعة ضخمة من الدوال جعلت منها لغة كبيرة نسبيا ً
على مجموعة من المكتبات المتخصصة ،كل مكتبة لها اسم معين وتحتوي على دوال
( ) SIN , COS , TAN……. مثال -:المكتبة الرياضية MATHتحتوي على كافة الدوال الرياضية
اإلعالن الحر عن المتغيرات : FREE VARIABLE DECLARATIONأصبن من الممكن في
لغة C++اإلعالن الحر عن المتغيرات في أي موقع من البرنامج مما يتيح ربط المتغير بالوظيفة التي من
أجلها تم اإلعالن عنه مما يزيد من سهولة ومتابعة وفهم البرنامج.
اإلعالن عن التوابت : CONSTANTS DECLARATIONيتم استخدام الكلمة المحجوزة CONSTلإلعالن
عن الثوابت وفيها يتم تحديد نوع الثابت وحجز ذاكرة تتناسب ونوع الثابت.
الدوال الخطية : INLINE FUNCTIONوهي ميزه تتعلق بالدوال ذات الحجم البسيط ،حيث يتم إدخال
سطور الدالة ضمن البرنامج الرئيسي أثناء زمن الترجمة حتى يتسنى تنفيذ البرنامج بشكل أسرع .
مالحظة //الدوال ذات الحجم الكبير والدوال التي تحمل حلقات تكرارية ال يتم اعتمادها على أنها خطية.
التعليقات : COMMENTSوهي عبارة عن جمل إيضاحية وليس لها أي تأثير على تنفيذ البرنامج وتستخدم
لتسهيل إعادة قراءة البرنامج أو تعديله من طرف المبرمج ويبدأ التعليق بالرمزين(*) /وينتهي
بالرمزين() */سوا ًء كان التعليق لسطر واحد أو لعدة أسطر بينما الرمزين()//يستخدمان للتعليق لسطر واحد.
/* THIS IS A COMMENT STATEMENT متال :
*/
كيفية كتابة برنامج بلغة ( C ++
)
كل الكتابات التي تلي هذه اإلشارة ) ( //تسمى تعليق ال يتم تنفيذه :
//FirstProgram
>#include <iostream.h
) ( main
}
هنا يتم تعريف البيانات ومن ثم يتم كتابة البرنامج
; return 0
}
البرمجة بلغة (
) C ++
TURBO C++لبساطتها وسهولة تطبيق البرامج عليها. وسنستخدم بيئة
وللدخول إلى بيئة التربو للبحث عن الملف التنفيذي TURBO C++حيث
نجده
في المجلد TCWIN45 :وسيظهر لنا الشكل التالي :
البرمجة بلغة (
) C ++
المتغيرات الثوابت
variables constants
عامة محلية
global local
عادة عند تعريف المتغير يجب أن نحدد هل هو متغير عام بمعنى أنه يمكن استخدامه في
جميع األجزاء (على مستوى البرنامج) أم هو متغير محلي بمعنى أنه يستخدم داخل الجزء
الخاص به فقط.
نميز بين المتغيرات العامة والمحلية من خالل وضع عملية التعريف داخل البرنامج
المتغيرات التي يتم تعريفها قبل بداية البرنامج (الدالة ) mainتمثل متغيرات عامة.
المتغيرات التي يتم تعريفها داخل الدالة mainأو داخل أي برنامج فرعي UDFsتعتبر
متغيرات محلية تستخدم فقط داخل الجزء المعرفة فيه.
البرمجة بلغة (
) C ++
المتحوالت (المتغيرات) VARIABLES
تعريف المتغيرات :المتغيرات هي أسماء تحجز مواقع في الذاكرة
لحفظ البيانات داخلها.
15 x3
;"cout<<"hello مثال:
;cout <<var_name لطباعة قيمة متغير على الشاشة
مثال:
;int x=7
;cout <<"x="<<x
البرمجة بلغة (
): C ++
Basic Input / Output Functions أوامر اإلخراج واإلدخال األساسية
أمر اإلدخال : cin
''<< '' يستخدم لقراءة البيانات عن طريق لوحة المفاتيح مع المؤثر
الصيغة العامة لألمر : cin
;cin>>var_name
;cin>>v1>>v2>………….>>vn
لقراءة حرف من لوحة المفاتيح أمثله:
;char a
;cin>>a
لقراءة قيمة صحيحة
; int age
;cin>>age
لقراءة قيمة صحيحة وقيمة حقيقية
;int x
;float y
;cin>>x>>y
البرمجة بلغة (
) C ++
العمليات(المؤترات)
الحسابية :
طريقة التعبير حسب لغة c++ الرمز الحسابي اسم العملية
x1 + x2 + الجمع
x1 –x2 - الطرح
x1 * x2 * الضرب
x1 / x2 / القسمة
x1 % x2 % باقي القسمة الصحيحة
مالحظللة :ومللن الجللدير بالللذكر أن لغللة C++تفللرب بللين الحللروف األبجديللة الصللغيرة
SYSTEM , SYSTEM, SYSTEMتعاملل كأسلماء والكبيرة ؛ فمتالً األسلماء :
مختلفة عن بعضها البعض
البرمجة بلغة (
) C ++
برنامج جمع عددين صحيحين
># include < iostream.h
) ( main
{
; int x1 , x2, x3 تعريف المتحوالت //
;" =cout <<“x1 تعليمة الطباعة //
; cin >> x1 تعليمة قراءة متحول //
;"= cout << " x2
; cin >> x2
*/المتحول الجديد x3إجراء عملية الجمع واإلسناد إلى *x3 = x1 + x2 ; /
; ”cout << “x3=" <<x3<<“\n تعليمة الطباعة المتعددة //
} ; return 0
m=(a+b+c+d)/4 abcd
m
4
d
m=a+b+c+d/4 m abc
4
w
m=a*b+w/x-y m ab y
x
bc a
m=a+(b+c)/8+5*d-(a/b) ma 5d
8 b
( البرمجة بلغة
) C ++
: ما هو مخرج البرنامج التالي:مثال
# include < iostream.h >
int main()
{
int p,q,r,x ;
p=2; q=6;
r=p + q / p;
x=( p + q ) / p;
cout<<"r = "<<r<<"\n x = "<<x<<"\n";
return 0; }
البرمجة بلغة (
) C ++
التعبير القيمة
I–J<I+J FALSE
I–3==J+5 TRUE
J<I>I+J TRUE
البرمجة بلغة (
) C ++
عمليات اإلسناد والمقارنة:
الشكل الموافق
معنى الكتابة مثال الشكل الجبري
حسب ++c
xتساويy x == y == =
xال تساويy x != y =! ≠
xأصغر منy x<y > >
xأكبر منy x >y < <
xأكبر أو يساوي y x <= y => ≥
xأصغر أو يساوي y x >= y =< ≤
البرمجة بلغة (
لربط) C
أكثر المؤترات المنطقية :وهي تستخدم++
من تعبير منطقي بسيط مع بعضها البعض و هي
:
االسم بالعربي الرموز األدوات
X Y X && Y X || Y !X
True True True True False
True False False True False
((5==5)&&(3>6)) - .1
True || False
True
F && F || F || F && F .3
F && F || F || F && F
F || F || F
F || F
F
البرمجة بلغة ( C ++
) المؤثر الشرطي (? ) CONDITIONAL OPERATOR
) شروط( if
;تعليمات 1
else
; تعليمات 2
البرمجة بلغة (
) C ++
بنى التحكم : CONTROL STRUCTURES
متال:1
إذا كان عالمة الطالب أكبر أو يساوي القيمة 60درجة
if ( x > = 60 )
cout << " passed " ;
else
cout << "failed" ;
البرمجة بلغة (
) C ++
بنى التحكم : CONTROL STRUCTURES
متال:2
أكتب برنامجا ً يقرأ عددا ً صحيحا ً تم يحدد و يطبع فيما
إذا كان هذا العدد زوجيا ً أم فرديا ً
( البرمجة بلغة
) C ++
: 2 حل المتال
# include < iostream.h>
main ()
{
int a ;
cout <<“ a ="; cin>>a;
if ( a % 2 == 0)
cout << " زوجيnot odd" ;
else
cout << “ فرديodd" ;
return 0 ; }
البرمجة بلغة (
) C ++
بنى التحكم : CONTROL STRUCTURES
البنى الشرطية : .1
متال:1
ادخل عالمة اإلمتحان من 100فيتم طباعة الحرف
المقابل لهذه العالمة :
( البرمجة بلغة
) C ++
: 1 حل المتال
if ( (grad >= 90)&&(grad)<=100)
cout << "A" ;
else if ( (grad >= 80)&&(grad)<90)
cout << "B" ;
else if ( (grad >= 70)&&(grad)<80)
cout << "C" ;
else if ( (grad >= 60)&&(grad)<70)
cout << "D" ;
else if ( (grad >= 0)&&(grad)<60)
cout << "H" ;
else
cout << "error" ;
البرمجة بلغة (
) C ++
بنى التحكم : CONTROL STRUCTURES
مالحظة :
عادة تضع تعليمة واحدة في جسم البنية االختيارية IF
ولكن إذا أردنا وضع عدة تعليمات يجب أن نقوم بوضعها
داخل قوسين كبيرين ( { } ) .نسمى مجموعة التعليمات
المحتواه ضمن زوج من األقواس الكبيرة بالتعليمية المركبة
COMPOUND STATEMENT .
( البرمجة بلغة
) C ++
: متال
if ( (grad >= 90)&&(grad)<=100)
if (grad > = 60 )
cout << " passed" ;
else
{
cout << " failed " ;
cout << " you must take this course again" ;
}
عندها يقوم البرنامج بتنفيذ60 أصغر منgrad في هذه الحالة إذا كانت قيمة
: ويطبع ما يليelse التعليمتين الموجودتين في الجزء
failed
you must take this course again
البرمجة بلغة (
) C ++
بنى التحكم : CONTROL STRUCTURES
مجموعة من األمتلة
متال:1
أكتب برنامج يأخذ كدخل عددين صحيحين من لوحة
المفاتين ويفحص فيما إذا كان التاني قاسم لألول .
( البرمجة بلغة
) C ++
: 1 حل المتال
# include<iostream.h>
main ( )
{
int a , b ;
cout<<"enter a=";cin>>a;
cout<<"enter b=;cin>>b;
if ( (b! = 0) && (a % b = = 0) )
cout << a << " is divisible by " <<b ;
else
cout <<a<<" is not divisible by " << b ;
return 0 ;
}
البرمجة بلغة (
) C ++
بنى التحكم : CONTROL STRUCTURES
متال: 2
أكتب برنامج يأخذ كدخل تالث أعداد صحيحة تم يطبع
أصغر هذه األعداد .
( البرمجة بلغة
) C ++ : 2 حل المتال
# include < iostream.h>
main ()
{
int a , b, c ;
cout << " a= "; cin >> a;
cout << "b= "; cin >> b;
cout << " c= "; cin >> c;
if (( b > a)&&(c > a) )
cout << " min is" << a ;
else if (( a > b)&&(c > b))
cout << " min is " << b ;
else
cout << " min is " << c ;
return 0; }
البرمجة بلغة (
) C ++
تمارين :
تمرين :1وإيجاد قيمة y= (x-2)/x : y
تمرين :2وإيجاد قيمة y=x/(x-3 ) : y
تمرين :3حل المعادلة من الدرجة األولى a X + b = 0 :
مناقشا جميع الحاالت الممكنة لــ 0a,b
تمرين :4حل معادلة من الدرجة التانية:
aX2 +bX+c=0
البرمجة بلغة (
) C ++
بنى التحكم : CONTROL STRUCTURES
متال: 1
أكتب أكتب برنامج لطباعة األعداد من 1-10بشكل عمود
واحد .
( البرمجة بلغة
) C ++
: 1 حل المتال
# include < iostream.h>
main ()
{
int i=1 ;
while ( i <=10)
{
cout << i << "\n" ;
i = i +1 ;
}
return 0 ;
}
البرمجة بلغة (
) C ++
بنى التحكم : CONTROL STRUCTURES
متال: 2
يفرض لدينا عالمات مذاكرة قام بها طالب صف مؤلف من
عشرة طالب والمطلوب حساب معدل عالمات طالب الصف
في هذه المذاكرة .
( البرمجة بلغة
) C ++
: 2 حل المتال
# include < iostream.h>
main ()
{
float mark , sum ;
int i = 1;
sum = 0;
while ( i < = 10 )
{
cout<<"enter the mark="; cin>>mark;
sum = sum + mark ;
i = i +1 ;
}
cout<<"average is : "<<sum/10 ;
return 0 ;
}
البرمجة بلغة (
) C ++
بنى التحكم : CONTROL STRUCTURES
مالحظات :
إن عدم وضع تعليمة أو فعل جسم البنية WHILEيسبب عدم تحقق الشرط .1
المرافق لها وينتج عن ذلك عدم إنتهاء التكرار .
تسبب كتابة الكلمة WHILEمع حرف كبير في البداية خطأ وذك على اعتبار أن .2
لغة C++حساسة لحالة الحروف تحتوي كافة الكلمات المفتاحية الخاصة بلغة
++Cمثل .. ،IF , WHILEوغيرها على شكل حروف صغيرة .
إن أي متحول ال يعطي قيمة ابتدائية يمكن أن يكون له قيمة ما ال يعرف عنها شيء .3
مخزنة مسبقا ً في موضع الذاكرة المخصص لهذا المتحول ،وبالتالي إن عدم إعطاء
متحول حساب مجموع مثل SUMأو عداد مثل Iسوف يؤدي إلى الحصول على
نتائج قد تكون خاطئة .
البرمجة بلغة (
) C ++
بنى التحكم : CONTROL STRUCTURES
متال : 1
نفس المتال السابق ـ أكتب برنامج لطباعة األعداد من 1-10بشكل
عمود واحد ولكن باستخدام DO / WHILE :
( البرمجة بلغة
) C ++
: 1 حل المتال
# include <iostream.h>
main()
{
int i =1;
do {
cout <<i<<"\n";
i=i+1;
} while ( i <=10);
return 0;
}
البرمجة بلغة (
) C ++
بنى التحكم : CONTROL STRUCTURES
متال : 1
أكتب برنامج لحساب مجموع جميع األعداد الصحيحة
من 2إلى . 100
( البرمجة بلغة
) C ++
: 1 حل المتال
# include < iostream.h>
man ( )
{
int sum = 0 ;
for ( int i = 2 ; i < = 100 ; i = i +1)
sum = sum + i ;
cout << " sum is " << sum ;
return 0 ;
}
البرمجة بلغة (
) C ++
بنى التحكم : CONTROL STRUCTURES
متال : 2
أكتب برنامج يلخص نتائج امتحان ملادة ملا لعشلرة طلالب
وذلك بعد أن أعطيت قائمة بأسماء الطلالب ومقابلل كلل
اسم تم وضلع القيملة 1إذا كلان الطاللب نلاجن والقيملة
0إذا كان الطالب راسب في االمتحان .
( البرمجة بلغة
) C ++
: 2 حل المتال
# include < iostream.h>
main ( ) {
int r , p, f ;
p=0;f=0;
for ( int i = 1 ; i < = 10 ; i ++ )
{
cout << " enter result : "; cin >> r ;
if ( r = = 1 )
p = p+1 ;
else
f=f+ 1 ;
}
cout << " passed : " <<p <<"\n" ;
cout << " failed : ' << f << "\n" ;
return 0 ; }
البرمجة بلغة (
) C ++
عمليات اإلسناد :
يتوفر في لغة ++Cعدداً في من عمليات اإلسناد
المختصرة التي هي تعبير على عملية اإلسناد
نفسها ،فعلى سبيل المثال يمكن اختصار التعليمية
التالية :
;c=c+3
لتصبح بالشكل التالي:
;c+=3
حيث نسمي العملية =+بعملية اإلسناد والجمع
addition assignment operator
وبين الجدول التالي عمليات اإلسناد الحسابية مع أمثلة
وشروح لها .
البرمجة بلغة (
) C ++
عمليات اإلسناد :
زيادة قيمة aبواحد ثم استخدام القيمة عملية الزيادة بواحد أمامية ++ a ++
الجديدة
زيادة قيمة aبواحد بعد استخدام القيمة a++ عملية الزيادة بواحد خلفية ++
القديمة
إنقاص قيمة bبواحد ثم استخدام القيمة --b عملية إنقاص بواحد أمامية --
الجديدة
إنقاص قيمة bبواحد بعد استخدام القيمة b-- عملية إنقاص بواحد خلفية --
القديمة
( البرمجة بلغة
) C ++
: مثال توضيحي
# include < iostream.h>
main () {
int c ;
c = 3;
cout << c << "\n" ;
cout << c ++ <<"\n" ;
cout << c << " \n" ;
cout << “***************” << " \n" ;
c = 3;
cout << c << "\n" ;
cout <<++ c <<"\n" ;
cout << c << " \n" ;
return 0; }
البرمجة بلغة (
) C ++
وتكون نتائج هذا البرنامج هي :
3
3
4
***************
3
4
4
البرمجة بلغة (
) C ++
بنى التحكم : CONTROL STRUCTURES
.2البنى التكرارية :
oج – البنية االختيار المتعدد : switchولها الشكل العام التالي :
) شروط( switch
{
; تعليمة : 1تابتcase 1
; تعليمة : 2تابتcase 2
; تعليمة : 3تابتcase 3
.
.
; تعليمة : nتابت case n
; تعليمة default : 0
}
البرمجة بلغة (
) C ++
بنى التحكم : CONTROL STRUCTURES
متال : 1
أكتللب برنللامج إلعطللاء اسللم اليللوم مللن أيللام األسللبوع عنللد
إعطاء رقمه .
( البرمجة بلغة
)# include
C ++< iostream.h>
: 1 حل المتال
main () {
int c ;
cout << "enter number : " ;
cin >> c ;
switch (c ) {
case 1 : { cout << " saturday " ; break ; }
case 2 : { cout << " sunday " ; break ; }
case 3 : { cout << " monday " ; break ; }
case 4 : { cout << " tuesday " ; break ; }
case 5 : { cout << " wednesday " ; break ; }
case 6 : { cout << " thursday " ; break ; }
case 7 : { cout << " friday " ; break ; }
default : { cout << " that number is out of range " ; }
}
return 0 ; }
البرمجة بلغة (
) C ++
بنى التحكم : CONTROL STRUCTURES
متال : 2
أكتللب برنللامج يقلللوم بقللراءة عللددين وملللن تللم يعطللي نلللاج
جمعها وطرحهما وضربهما مستخدما ً لعرض ذلك شاشلة
خيارات .
( البرمجة بلغة
) C ++
: 2 حل المتال
# include < iostream.h>
main ( )
{
int n , x, y ;
cout << "1: ; " جمع العددين cout <<"\n";
cout << "2 : ; " طرح العددينcout <<"\n";
cout <<3: ; "ضرب العددين cout <<"\n";
cout << "******************" ; cout <<"\n";
cout << " ; " أدخل العدد األولcin >>x; cout <<"\n";
cout << " ; " أدخل العدد الثانيcin >> y ; cout <<"\n";
cout << " ; " أدخل رقم الخيارcin >> n ; cout << "\n";
while ( n!=0) تا بع المثال
( البرمجة بلغة
) C ++
: 2 حل المتال
{
switch ( n )
{
case 1:
{ cout << x+y ; break ; }
case 2:
{ cout << x-y ; break ; }
case 3 :
( cout << x*y; break; }
default :
{ cout << " ; "الرجاء إدخال أحد أرقام الخيارات المتاحة
cin>>n;}
}
}
return 0; }
البرمجة بلغة (
) C ++
بنى التحكم : CONTROL STRUCTURES
متال : 3
أكتب برنامج لقراءة تالث أعداد A, B, Cتم التحقق
هل تصلن هذه األضالع ألن تكون أضالع متلث أم ال
،وبمعنى آخر هل يمكن أن نجد متلث أطوال أضالعه
هي A, B, C .
البرمجة بلغة (
) C ++
حل المتال : 3
># include < iostream.h
># include < math.h
الملف الرأسي الحاوي على جميع التوابع الرياضية وتم//
)// int abs (int استخدامه من أجل التابع
) ( main
{
; int a , b, c
; cout << " a : " ; cin >> a
; cout << " b : " ; cin >> b
; cout << " c : " ; cin >> c
تا بع المثال
)( n!=0
( البرمجة بلغة
) C ++
: 3 حل المتال
متال : 4
أكتب برنامج لحساب ! N
( البرمجة بلغة
) C ++
: 4 حل المتال
# include < iostream.h>
main ( ) {
Int n ;
double fact = 1 ;
cout << " enter value n: " ; cin >> n;
if ( n = = 0 )
cout << " n! = 1;
else
{
for ( int i = 1 ; i < = n ; i ++) // i++ هي نفسi=i+1
fact=fact * i ;
cout << " n ! = " << fact ;
}
return 0 ; }
البرمجة بلغة (
) C ++
بنى التحكم : CONTROL STRUCTURES
متال : 6
(برنامج يقوم بقراءة عدد ما Xومن تم يحدد هل هذا العدد أولي أم ال )
ال يوجد في لغة الـ C++نمط بولياني لذلك ننشئ نمط من خالل النمط
التعدادي ENUM.
لحل هذه المسألة يلزمنا متحول اختبار Fمن نوع BOOLEANففي
البداية نسند القيمة FALSEإلى هذا المتحول أي نفرض أن العدد ليس
أولي ،ومن ثم نبحث هل هناك عدد يقسم Xوفي حال وجوده نسند لـ F
القيمة TRUE .وفي النهاية نختبر قيمة المتحول Fوأعتمادا ً عليه نحدد
( البرمجة بلغة
) C ++
: 6 حل المتال
# include < iosteam.h >
enum boolean {true, false }; // التصريح عن نمط تعدادي
main ( ) {
boolean f = false ;
int x ;
cout <<' enter number: " ; cin >> x ;
for ( int i = 2 ; i <x ; i ++)
if ( x % i = = 0 )
f = true ;
if ( f = = false )
cout << " the x number is primary " ;
else
cout << " the x numbe is not primary " ;
return 0 ; }
البرمجة بلغة (
) C ++
بنى التحكم : CONTROL STRUCTURES
متال : 7
أكتب برنامج لحساب الحدود العشرة األولى لهذه السلسة :
1 1 1 1
z 1 .....................................
1 2 3 4
( البرمجة بلغة
) C ++
: 7 حل المتال
تا بع المثال
البرمجة بلغة (
) C ++
حل المتال : 7
; )z+= pow(i , -1 تابع الرفع لقوة ويوجد في الملف // math
else
; ) z-=pow (i , -1
; cout << " z = " << z
; return 0
}
البرمجة بلغة (
) C ++
بنى التحكم : CONTROL STRUCTURES
متال : 8
برنامج أكتب برنامج إليجاد القاسم المشترك األعظم لعددين وذلك
باستخدام طريقة إقليدس التي تتلخص كما يلي :أقوم بطرح العدد
األصللغر مللن العللدد األكبللر وأجعللل حاصللل الطللرح مكللان األكبللر حتللى
تصبن
القيمتين متساويتين فتكون قيمة التساوي هذه هي القاسم المشترك
20 15
األعظم GCD .
5 15 مثال :العددين 15و 20
5 10
5 5
( البرمجة بلغة
) C ++
: 8 حل المتال
#include < iostream.h>
main ( ) {
int x , y ;
cout << "enter x : " ; cin >> x ;
cout << " enter y : " ; cin >> y;
while ( x! = y )
{
if ( x > y )
x-=y;
else
y-=x;
}
cout << " the gcd is " << x ;
return 0 ; }
البرمجة بلغة (
) C ++
بنى التحكم : CONTROL STRUCTURES
متال : 9
أكتب برنلامج لقلراءة Nعلدد تلم حسلاب مجملوع هلذه األعلداد ومتوسلطها
وأكبر وأصغر عدد فيها :
مالحظة :دائما ً لحساب أكبر أو أصغر عدد من بين مجموعلة أعلداد ،نفلرض
أن العلدد األول هللو الكبيلر تللم نختبلر بللاقي األعلداد وكلمللا ظهلر عللدد أكب لر
جديد نجعله هلو العلدد األكبلر ،وهكلذا حتلى تنتهلي مجموعلة األعلداد ) .
بالنسبة للعدد األكبر )
( البرمجة بلغة
) C ++
: 9 حل المتال
# include < iostream.h>
main ( ) {
int n , x , sum , max , min ;
cout << " enter n : " ; cin >> n;
cout << " enter the first number : " ; cin >> x ;
sum = x ; min = x ; max = x ;
for ( int i = 2 ; i < = n ; i ++)
{
cout << " enter number : " ; cin >> x ;
sum = sum+x ;
if ( x > max ) max = x ;
if ( x < min ) min = x ;
تا بع المثال
}
( البرمجة بلغة
) C ++
: 9 حل المتال
}
cout << " sum is " << sum << "\n" ;
cout << " avg is " << ( float ) sum /n << "\n" ;
cout << " max is " << max << " \n" ;
cout << " min is " << min << "\n" ;
return 0 ; }
البرمجة بلغة (
) C ++
بنى التحكم : CONTROL STRUCTURES
متال : 10
أكتب برنامج لقراءة عدد ما والتحقق فيما إذا كان عدم تام أم ال .
الحل :
نقول عن عدد ما أنه عدد تام إذا كان مجموع قواسم هذا العدد (ما عدا
العدد نفسه ) يساوي العدد نفسه .
متال :العدد 6هو عدد تام ألن مجموع قواسم العدد 6تساوي
= )(06
)( 1+2+3=6
( البرمجة بلغة
) C ++
: 10 حل المتال
# include <iostream.h>
main ( ) {
int x ;
int sum = 0 ;
cin>> x ;
for ( int i = 1 ; i < x ; i ++)
if ( x % i = = 0 )
sum + = i ;
if ( sum = = x )
cout << " perfect " ;
else
cout << " not perfect " ;
return 0 ; }
البرمجة بلغة (
) C ++
بنى التحكم : CONTROL STRUCTURES
متال : 11
أكتب برنامج إليجاد جميع األعداد التامة ضمن مجال ][N..1
( البرمجة بلغة
) C ++
: 11 حل المتال
# include < iostream.h>
main ( ) {
int n , sum = 0 ;
cin>>n ;
for ( int i = 1 ; i <=n ; i ++ )
{
for ( int j = 1 ; j < i ; j++)
if ( i % j = = 0 )
sum + = j ;
if ( sum = = i )
cout << " " <<i << endl;
sum = 0 ;
}
return 0; }
البرمجة بلغة (
) C ++
بنى التحكم : CONTROL STRUCTURES
متال : 12
أكتب برنامج إليجاد المضاعف المشترك األصغر لعددين :
( البرمجة بلغة
) C ++
: 12 حل المتال
# include < iostream.h>
main ( )
{
int x , y ;
cout << " x = " ; cin >> x;
cout << " y = " ; cin >> y ;
if ( x > = y)
{
for ( int j = x ; j < x ; j++)
if ( j % x = = 0 ) && ( j % y = = 0 )
{ cout <<j ; break ; }
}
تا بع المثال
( البرمجة بلغة
) C ++
: 12 حل المتال
else
{
for ( int j = y ; j < x *y; j++)
if (( j% x = = 0) && ( j % y = = 0 ))
{ cout << " " << j ; break ; }
}
return 0 ;
}
البرمجة بلغة (
) C ++
بنى التحكم : CONTROL STRUCTURES
متال : 13
أكتب أكتب برنامج لقراءة عددين والتحقق فيما إذا كانا عددين
صديقين أم ال .
الحل :نقول عن عددين أنهما صديقين إذا كان مجموع قواسم العدد األول (
ما عدا العدد نفسه ) يساوي العدد التاني والعكس بالعكس .
( البرمجة بلغة
) C ++
# include<iostream.h>
: 13 حل المتال
main ( ) {
int x , y , i ;
int sum 1 = 0 , sum 2=0
cout <<"x="; cin>>x;
cout <<" y=" ; cin >> y;
for ( i = 1 ; i < x ; i ++ )
if ( x % i = = 0 )
sum 1 + = i ;
for ( i = 1 ; i < y ; i ++)
if ( y % i = = 0 )
sum 2 + = i ;
if ( sum 1 = = y && sum 2 = = x )
cout <<x<<" friend " <<y;
else
cout << x << " not friend " << y;
reterun 0 ; }
البرمجة بلغة (
) C ++ المصفوفات
المصفوفة هي عبارة عن مجموعة من خانات الذاكرة المتتالية
التي لها نفس االسم ونفس النمط.
والشكل التالي يمثل مصفوفة من اإلعداد الصححيحة التحي أسحمها A
وهي تتضمن أربعة عناصر .
اسم المصفوفة ) لجميع العناصر نفس االسم ( A
A[0] =5
A[1] =13
A[2] =-15
A[3]= 78
Delete
Add
والطابور له عدة تطبيقات أغلبها له عالقة بأولوية المعالجة.
والدوال الرئيسية للطابور هي :
Addإلدخال عنصر في الطابور في نهاية الطابور
Deleteإلخراج عنصر من الطابور من بداية الطابور
والبعض يفضل إستخدام دوال فرعية أخرى مثل:
IsEmptyوتستخدم للكشف على الطابور هل هو خالي أم ال.
وللطابور مؤشرين أحدهما لمقدمة الطابور ويسمى Frontويستخدم
الغراض الحذف واألخر للمؤخرة ويسمى Rearويستخدم الغراض
االضافة.
تمثيل الطابور
Class Qptr
{Public :
Int value;
Qptr* next;
};
Class MyQueue
{ public :
int size;
Qptr* FRONT;
Qptr* REAR;
…….
};
العمليات على الطوابير
انشاء الطابور
وتستخدم هذه الدالة لتهيئة الطابور لالستخدام ألول مرة
)Void QueueCreate(MyQueue& Q
مع االخذ بعين االعتبار قضية تمثيل الطابور من خالل مصفوفة او قائمة
فحص فيما اذا كان الطابور ممتلئا ”مصفوفات“
وهي دالة بولينية ترجع القيمة trueاذا كان ممتلئ او falseعكس ذلك
)Bool QueueFull(MyQueue Q
التحقق فيما اذ كان الطابور فارغا
ويكون في حالة ان FRONT=0وREAR=0
عندما تتساوي عمليتي االضافة والحذف فان الطابور يصل الي مرحلى
يكون فيه خاليا
تابع..
قد ال يكون تمثيل الطوابير كقائمة متصلة مجديا وخاصة انه يضطرنا
الى االزاحة او اعادة تنظيم القائمة والطابور الدائري يحل هذه
المشكلة
االضافة في الطوابير الدائرية
4
2
D
3 Z
A Q
حذف رمزين من الطابور
الفرع 2
شكرا إلنتباهكم والى اللقاء
بالتوفيق في االمتحان النصفي
جامعة القدس المفتوحة
منطقة الخليل التعليمية
تركيب البيانات وتصميم الخوارزميات
1289
الوحدة الرابعة
القوائم
;p->num = data
نسند العدد المدخل ( ) dataللعضو . numالحظ أننا استخدمنا المعامل السهم ( )>-بدال من ( ) .ألننا نتعامل •
مع مؤشر للتركيب وليس متغير أو كائن من التركيب .
;• p->next = new node
• وبعد ذلك ,أنشأنا تركيب جديد في الذاكرة ) (new nodeو أسندنا عنوانه في
الذاكرة إلى المؤشر next .اآلن أصبح
لدينا عنصر مرتبط مع األخر بواسطة المؤشر next .
اآلن نريد أن ننتقإللى العنصر الجديد لكي يتم إضافة مدخالته ,نقوم بعملية التحرك
هكذا:
;• p = p->next
• هنا يتحرك مؤشر التركيب إلى العنصر التالي وذلك بإسناد عنوان العنصر الجديد
للمؤشر pالذي تم تخزينه في المؤشر . nextالحظ أن العنصر الجديد فارغ أي ال
لم يدخله له أي بيانات أو عنوان عنصر آخر .اآلن المؤشر pواقف في آخر
عنصر تم إنشاءه (العنصر الفارغ
{ •
;p->next = NULL
;break
}
• هنا نسند للمؤشر nextالتابع للعنصر األخير (الفارغ) قيمة NULLأي انه اآلن ال
يحتوي على أي عنوان وهذا للداللة على أن هذا العنصر آخر عنصر في القائمة .
سوف ترى فيما بعد أهميه هذه الخطوة .ومن ثم نخرج من for loopو الدالة .
• void main()
{
cout<<"Welcome you in Linked List lesson";
cout<<"\nPart 1: Single linked list:";
// defined pointer for structer my_list
// that value is the address of first node
node *mynodes = new node;
// create nodes in mynodes list
cout<<"\nCreate nodes in list";
createlist(mynodes);
getchr();
}
عرض عناصر القائمة
• اآلن سوف نقوم بعرض عناصر القائمة ,وهي أن نقوم
المرور على كل عنصر و طباعته بياناته .تتم العملية كالتالي :
أوال :نتحقق من العنصر هل هو آخر عنصر في القائمة أما
ال.
ثانيا :إذا كان العنصر ليس العنصر األخير نعرض البيانات
ونتحرك إلى العنصر الذي بعده.
ثالثا :إذا كان العنصر هو العنصر األخير نتوقف .
• // Display all List
void display(node *p)
{
while(p->next != NULL)
{
cout<<p->num<<endl;
p = p->next;
}
}
•
بحث عن عنصر في القائمة:
• في هذه العملية نقوم في البحث عن عنصر من عناصر القائمة و تمم العملية كالتالي
:
أوال :نتحقق من العنصر هل هو آخر عنصر في القائمة أما ال.
ثانيا :إذا كان العنصر ليس العنصر األخير نتحقق من بيانات العنصر و بيانات
البحث
ثالثا :إذا كان بيانات العنصر مطابقة للبيانات البحث ,نتوقف
رابع :إذا كان بيانات العنصر غير مطابقة للبيانات البحث ,نتحرك للعنصر التالي.
خامسا :إذا كان العنصر هو العنصر األخير نتوقف
• // search for node
node *search(node *p)
{
int n;
cout<<"Enter number to search for it: ";
cin>>n;
while(p->next !=NULL )
{
if(n == p->num)
{
return p;
}
else
{
p = p->next;
}
}
return NULL;
}
وتعيد عنوان في الذاكرةmy_list هذه الدالة من النوع مؤشر للتركيب •
إلى دالة الرئيسية للبرنامج
• // Search for node in list
node *searchnode; // to take the address from result of search function.
C++كود
;• node *locadd, *newnode, *temp
• هنا عرفنا ثالث مؤشرات للتركيب my_list ,المؤشر locaddسوف يحتوي
على عنوان الموقع ,و newnodeو tempستخدم فيما بعد.
;" • cout<<"\nEnter location:
;cin>>loc
;locadd = NULL
• اآلن ندخل في تكرار للمرور على جميع العناصر ,نتحقق من الموقع المدخل هل
هو موجود أما ال ,إذا كان الموقع صحيح نسند عنوان الموقع إلى المؤشر
locaddومن ثم نخرج من التكرار ,إذا لم يتحقق الشرط نتحرك للعنصر التالي.
)• if(locadd == NULL
{
;"cout<<"\nCannot find the location
}
هذه الجملة الشرطية تحقق في إذا تم إيجاد الموقع في القائمة أما ال ,إذا لم يتم إيجاده سوف تكون قيمة •
locadd
كما هي قبل دخوله التكرار وهي NULLونعرض للمستخدم بأن الموقع المدخل غير صحيح.
• else
{
;" cout<<"\nEnter new number:
;cin>>n
;newnode = new node
;newnode->num = n
;temp = locadd->next
;locadd->next = newnode
;newnode->next = temp
}
إذا كان الموقع صحيحا سوف نشئ عنصر جديد ووضع بياناته كما هو الوضع في األسطر األربع أولى .وبعد •
ذلك نقوم
بعملية أبدالية في العناوين:
1 -نقوم بإسناد قيمة المؤشر nextللموقع للمؤشر tempللحفاظ عليه مؤقتا.
2 -بعد ذلك نسند للمؤشر nextللموقع بعنوان العنصر الجديد .
3 -وبعد ذلك نسند للمؤشر nextللعنصر الجديد قيمة المؤشر tempوالتي هي عنوان العنصر الذي كان
التالي بعد الموقع ليكون العنصر التالي بعد العنصر الجديد
•
;• s = p
• هنا أسندنا للمؤشر sقيمة المؤشر pوالتي هي اآلن عنوان أول عنصر في
القائمة.
اآلن بعد قراءة القيمة المراد حذفها من القائمة و الدخول إلى تكرار المرور
على جميع العناصر
)if(p->num == n
• هذه الجملة الشرطية للتحقق هل القيمة المدخلة هي قيمة العنصر الحالي.
•
)if(p == s
{
;return p->next
}
•
إذا كان العنصر الحالي هو المراد حذفه ,هذه الجملة الشرطية تتحقق هل هذا العنصر هو
العنصر األول من القائمة أم ال
(تذكر أننا وضعنا عنوان العنصر األول للمؤشر sقبل قليل) .إذا كان صحيحا ,نعيد
عنوان العنصر الثاني للمؤشر القائمة المستدعي للدالة.
• else
{
;temp->next = p->next
;delete p
;return s
}
إذا كان العنصر ليس هو العنصر األول ,سوف نسند للمؤشر nextالتابع للعنصر السابق •
الذي يحمل عنوانه المؤشر
( tempسترى كيف تم اسندنا للمؤشر tempعنوان العنصر السابق للعنصر الحالي بعد
قليل) .بعد ذلك نحذف العنصر
الحالي بواسطة الكلمة المحجوزة deleteالتي تحذفه من الذاكر ه .وأخيرا نعيد عنوان
العنصر األول للمؤشر القائمة
المحدثة (أي بعد تم عملية الحذف).
;• temp = p
;p = p->next
• إذا لم يكن العنصر الحالي هو العنصر الذي نريد حذفه ,نسند للمؤشر temp
عنوان العنصر الحالي ليكون في الدورة
القادمة من التكرار العنصر السابق (كما رأيت سابقا) .وبعد ذلك نتحرك إلى
العنصر التالي.
وهذا المؤشر الجديد يعطي للـ double linked listمزيدا من المرونة عند التعامل مع مجموعة من البيانات •
المرتبطة فيما بينهما .لقد كانت single linke listتتحرك فقط نحو أمام ,ولكن هنا يمكننا التحرك إلى أمام
و إلى الخلف إيضا.
كما أن المؤشر nextيدل على آخر عنصر اذا كان قيمته NULL,فكذلك هنا previousاذا كانت قيمته
NULLفأنه يدل على أن العنصر هو أول عنصر في القائمة.
العمليات على القوائم الثنائية
• بناء القوائم الثنائية
• القائمة تبدأ خالية ويستدل على خلوها من خالل قيمة المؤشرات
الخارجية ثم نبدا باضافة العناصر اليها
• ;Nextnode->info = element
• ;Nextnode->forw=null
• ;Nextnode->backw=null
• ;*list=*nextnode
• ;*last=*nextnode
• كما تالحظ فان عملية البناء هي عملية اضافة الى اخر القائمة
ويمكن ان تتم عملية االضافة الى البداية
العمليات على القوائم الثنائية.....تابع
استعراض القوائم الثنائية •
– لوجود مؤشرين احداهما يشير الى العنصر السابق واآلخر الى العنصر الالحق فاننا بامكاننا استعراض
القائمة باتجاهين من االمام الى الخلف او العكس
اضافة عناصر جديدة الى القائمة •
– اضافة بين عنصرين
– اضافة الى بداية القائمة
– اضافة الى نهاية القائمة
حذف عناصر من القائمة الثنائية •
– حذف من البداية
– حذف من الوسط
– حذف من النهاية
• السلسلة الدائرية Circular Linked Lists
• وهي السلسلة التي يكون مؤشر أخر خلية يشير الى
بدايتها(.كما هو موضح بالرسم).
Head
آ ات :ی ا
,ا
#ق واﺱ
Bا
0 9ا
ی (
:2ﺕﺝ ( ا
(?ر ا
(0
(#ت آ ( یاه( ا
( Gا
(,
ﺕ Lﺱ K Bذاآة ا
Iﺱب
ه)ا ا(ع & $%ه:
.١ا
! Bا
)ي :ی ول اﺱ Qا
#وا
ی Pا
ﺕم 0 0ﺕآ Bا
ت وﺕ (0Iآ(ءة ا
اآ( Bا
( (
Wا
$ا
ﺕ 0 Iا
Sاآة وا
8ا
Sي ی TUV $ﺕ Sا
9ارزت ا
+9ﺏ
.٢ا
! Bا
:(#ی (ول اﺱ( Qا
(0وا
!( ی!(د ا
(U:ا
) ( ﺏ( ا
(+ا
0
(0 9اآ( Bا
( وای!(د
ا
$ا
ﺱ
+0ل ا
,ه XSا
+
* ا
$ا
ی 0 Iا
Eﺵ Kا
Sاآة أ Uا
$ا
ﺕ 0 Iا
.
ا
Eﺵ ،@P :Kأو ?.@P d
ا
.١ :ان .e0#أو .٢ان .$
2ا 8ی C2 Gو LAا )K:ا :99.اGا 8ا A 8GFس ا LAا )K: 99.اا !: N Oدا9 Mر
ا+ارزت:
.١ﺱ ا
Iﺱب ).($ U:
.٢آ ا
ت )C U:دی(.
.٣ا أ2ى
U:ﺏ
V
:Sا
! ا
9رة ،وا
،Gو
ار 2ﺕ.T
8.ا+ارز :دراﺱ ا
9ارز وا
ف
,0ى آ W Yو bUا
Sا
:زم وذاآة ا
Iﺱب ا
:ز
ﺕ 0Iا
9ارز ی:D S2ث ت او ﺱریهت:
.١ا
Iا :best case _Kه ا
Iا
ﺕ Iج ا
,ﺕ Sا
Uد ا
#9ات
.٢ا
Iاﺱأ :worst caseه ا
Iا
ﺕ Iج Kا
9ارز ا
,ﺕ Sاآ
د ا
#9ات
.٣ا
Iا
ﺱ :average case ,#ه ا
Iا
ﺕ B0#ﺕ
Sد
ل ا
#9ات
9ی; :)K:ا
8ا
Lﺏ ،bا
8ا
،#9ا
8ا
v0ری ،ا
8ا
د ا
Iود ،ا
8اZﺱ.
2 $ب اKز ا 29Kوا M9ان آ ﺱف ﺕ!ي Qا
د ا
رت ﺏ yVا
) ا
Iاﺏ
اK? 0
Y
,آ bﺕ
ﺏ اد K
2ﺕ ): @# $ان ا
9ارز ﺕ او ﺵ Tﺕ ا :+وﺕ K Sﺕ w0ا
Iد ا Uا
رت
اة ا55
ااآ اFیی :ه ﺕاآ Bا
ت ا
ﺕ @# $اﺱ
9ا :2ل 0ت ,0 Kﺵ دوال ,0ه XSا
اآB
دون ا
Iﺝ ا
,ﺕ +ﺕ Lه XSا
اآB
0ا Mا Q 8Gااآ اFیی )ﺏ"Gل $2اKﺹ 8ااﺥ (.
.١ا
آ ,0 8ا
p$ذاﺕ دون اVل ﺏ
v +ا
_وری
..
p$ 0ا
Gأآ Lإ ﺝ و0K
وا
Gأ Uﺕ
ا وأی 0
$ﺏ وا
وا
ی.
K .٢ﺕ Vﺕ Lوﺕ Sا
آ ا
ﺕ Vا
ا Gا
#ا
ى )Zن ا
0ت ،Kواﺱ
ء .(T$
.٣اﺱ
9ام ا
ر
0ا Gدون ا
Iﺝ إ
,آ ﺏ ة أ2ى )ا? 2ر ا
bUوزیدة ا
Lﺏ(.
.٤ﺕK $ق ا
? وا
!
) .ة ،ا ،Kی
$ﺏ_ ﺏ_ 0L ..وSة ﺏ#ی وا
ة(.
Gی Wآ ات ه:ك ﺙYﺙ 2ا:8
.١أن #و +0
+ا
آ ا
ت.
.٢أن #وU:0
+ت ﺏ.
.٣أن #و0 0
+ت ا
Bvﺏ Sه ,0ا
آ ا
.
اIت ا ی 4Iﺏ Cاﺏر وA &GFدرا . 2آة اا QAا :GKﺥ:ZM
.١ی ﺕ8وی
ا
#ﺏر
ا
ء Kﺏء Xﺏ
ﺱ 0ا
ﺱ
:ﺵرة ا
T
,وا
,ی 0 $
Tت ا KPوا
SIف
.٢ی $وى
د ات ا
SIف @
د ا
ا
_ Kا
,ا
#ﺏر Kن ا
#ﺏر ی? ا
,و @Pی?
2 T xا
.٣ان ا
ا
ة ا
ی x $ﺏ
+ل ا
و
! Kا
#ﺏر ه ا
او
,و
ی ا
(+ل ا
( ,ا
(+ا(2ى
ﺏ
اﺱ ﺝع Uا
? اول و
! T
.٤ان ! ا
#ﺏر w
S
Vی? dﺏ
ی
.٥ا
+ل ا
,ا
K +ا
#ﺏر ین ﺵة
w
SﺕV $ق و Uآا و
Iود ﺏ
ا
#ﺏر وی T
ﺥ ZMا?!ت:
.١ی $ﺏ
ی وا
Iآ ﺏ
8یدة وا
?ن
.٢ا ا
+ل ا
ﺵ
I Tود ﺏ? وا
وه Uا
س
.٣اذا ﺕ$وت 0ت ا KPوا
SIف Kن ا
س ی? ا
,و @Pی?
2 TK xا
T C .٤ﺕ80 $م وﺝد اآE Lﺵ وا
:ﺵرة ا
TOP T
,
اة ا:5
ا!2ء ا)ا :ی ان ﺕ ا
ا
,0اﺱ
ء ذاﺕ ﺏ
د
Iد ا
ات Wی ﺏ
ه ایIد ﺕ Gا
ا
ا"ای ا $ا^وري 0ه 8.ا Iﺏ!2ء ا)ا:
.١ﺕ
Kاﺱس او اآ Lی 0 B0#اﺱ
ءا ذاﺕ
K .٢آ ة ی K ,
$ا
Gا
اﺱ
ءا ذاﺕ ی
,0 ,
$اﺏ o$ا
Iا0+
اة ا!G
اCآ 8اFHی :ﺕآ Bه
! ت ا
ت ﺏ WIین $( ,(0ى (Kا
( ! $(0$وا(
ة ﺕ(
,ا
!(Sر root
ا ﺏ ا
! ت ! eLKا2ى ذات $ى ا ,0وﺕﺕ oﺏ TﺏاﺱE #ﺵات ا
ﺏo
: [Y
-ا
آ ا
!ی ﺕ ا
اآ Bا
#2 Vوﺕ L
$ا
ت @ ﺏ_ ﺏ ه
-ی ن ا
ا
!ي Node +وی Iي آ( (? ,(0ﺝ( W( Y8ی( Iي ا
!(8ء اول ( ( ! ,(0ا
(ت
ا
ﺕ? dآ او اآ Lا ا
!8ء ا
Lی Iي ,0ﺏ yا
0ت ا
ﺕ
Iد U:ا
+ﺏ_
-ﺕ
ا
آ ا
!ی ااع اآ Lو وUة وی اﺱ
9ا ! Kت
ی
ة
-ی ﺕﺕ Bا
K +ا
ا
!ي ا
$ر ا
,ا
ﺏ WIﺕن ا
,(0 +ی($ر ا
!(Sر دا ( Yا( ( U W( ( (U
ا
+ا
ﺝدة ,0ا
-ی ا
ا
!ي ﺏ
ﺵ!ي ا 2اذا آن
Qا
آ
, Bآ bا
ت ا
ﺝدة Kا
+ة
`! -ت 85اCآ 8اFHی ﺏ!+ام ا0Kت ه
م اﺱ :Vل ا
Sاآة ,0ا
ﺝ Tا LوآK w
Sن (
ا K(Pا
(+او
( KSاذ ( (
vی B(0#ازا( ا
( (Lا
$( ,(0 ()KI 0
(+یت ه( XSا
(+و ,(0ا
(U:ا
!
ی(
ة ﺏ( ا
@(( (+
ﺏ_ ا
y
:82ا
آ ا
!ی ﺕ +2ا
##9ت
Lﺏ yا
U:ت ا
ﺏ ا
ت
ج :ﺕ ز ا
##9ت ﺏ 0ا
د ا
و 0 Pر( (@ ا
آ( ا
(!ی ( ( Wا
( ان یEﺵ( أي (? ,(0أي (?
ا U: w
S
K 2اب واﺏ vﺝدة Kا
##9ت
ا+ت :ع ا
اآ Bا
ﺏ WIی ن ا
! o#9ا
ط او ا
ؤوس و! ا
Iاف
ااع ا+ت:
.١ا
v o#9ا
! :Tﺏ WIین ذو Cی eﺏﺕ!ه
.٢ا
o#9ا
! :Tاﺕ! Xوا
Cق ﺕ Lا
##9ت:
.١ﺕ 0Lﺏﺱ
9ام Eﺵات ا
ﺏ " oا
ا Yا
? W :" 0یﺕ oا
? @
د
I vود ا
+ا2ى
.٢ﺕ (0Lﺏﺱ((
9ام ((? Kا
!((ار :اذا آ((ن (
د ا
((+ا
ﺝ((دة ((Kا
(K n o((#9ن ((? Kا
!((ار ه(( ((? Kذات
ﺏ
ی وآ ﺏ
ی Iي
,0د nا
ا@U
K? : [Yا
!ار ﺕ Iي دا ,0 Yا
?ی ٠و ١و
Sا ا
B$ی K? 0 e0#ﺏ
او ?YD K
ا : ?Hه K
o#9ا
U TKدی ﺝ ﺕ Lوزن ﺕ w0ا
KI
2ت اKز وا e.ان H:ء ﺥارز f MYﺙ 2اﺥره $ 2FاGا 8ه:
.١ا
bUا
Sي ی Iﺝ Tا
Gﺏ ﺏ Gی Sا
9ارز ﺏ V0ﺏ!
.٢ا
ة ا
ی UV $ﺕ Sا
G
$ .٣ا
Sاآة ا
ی Iﺝ ﺕ Sا
9ارز
2 .٤اص ا
ت
Lده و
Cق ا
ز:
.١ا
ز ا
ا :02ی
9 $م اذا ا اﺱ ب ﺝ @ ﺱ!:ت ا
K d0ذاآة ا
Iﺱب ا
ا 02ا
$ی Wی
$ی(ن
د ا
:!$ت ی اﺱ ﺏ K Tذاآة ا
Iﺱب Kا
T$ bU
.٢ا
ز ا
9رﺝ
K :وﺝد
د آ ﺝ
ا ا
(:!$ت (Kا
d(0ا
(اد (Kز Xی( اﺱ( ﺏﺱ( oYا
8(9ی ا
(
$ة
و TUCا
ز ﺏ
G
ااع اKز ااﺥ:
.١ا
ز ا
! .٢ Y8ا
ز ا
$ی@ .٣ا
ز ا
" اFHة ا M:5ا9ة ﺏ+اص ا " "ات ":
.١ی! Bان ﺕن ا
!ة YDآ 0أي ان
د ا
K +ا
$ى Iی$وي I^٢ﺏﺱ Lء ا $ 2ى
.٢ی! Bان ﺕن ا
ا
K 89آ @Uا @Uا
!ة ا
YLا
0ا V+ا
ا
(K 89ا
@(Uا
(Sي ی(
اه
Sا ا
$ @Uوی
2 %ة 7ق e.اCKس $2 W+ﺏ 0 C^Gآ 4[: KاCKرس و:C:
.١ا
WIا
س ا
ﺏ .٢ا
ﺱ ﺏﺱ
9ام ا
آ ا
!ی ا
.٣ YLا
ﺱ ﺏﺱ
9ام ا
آ ا
!ی ع B
: [Y
ﺕ Cی ا
ﺱ ﺏﺱ
9ام ا
آ ا
!ی ا
YLا _Kا
#ق ا
K
9 $ا
ﺱ
ﺕ @$ذاآة ا
Iﺱ(ب ا
$(Y
0ا
YLﺏ T0و
ی Sر ذ
K wن ا
ءة ﺕ )ا
bﺕزی@ ا
+