មេរៀនទី៤: Control Structure

មេរៀនទី៤: Control Structure

I. If …statement :

 Syntax 1 :

 if (Logic Expression ) statermen1 ;

 if (កន្សោមលក្ខខណ្ឌÐ )

Statement1;
Syntax 2 :
if ( Logic Expression ) statement 1 ; else statement 2 ;

 if (កន្សោមលក្ខខណ្ឌ)

Statement1;
else

Statement2;

ចំពោះ Syntax1: បើ Expression មានតំលៃ True (=1) នោះ Statement 1 ត្រូវបានអនុវត្ដ, ផ្ទុយមកវិញ (Expression មានតំលៃ False (= 0 ) នោះ Statement 2 ត្រូវបានអនុវត្ដ ។ ចំពោះ syntax 2 : បើ Expression =1 នោះ Statement 1 ត្រូវបានអនុវត្ដ បើ Expression

= 0 នោះ statement If … នឹងត្រូវបញ្ចប់ ។ ចំពោះ Expression ត្រូវតែសរសេរក្នុងវង់ក្រចក () ។
ចំពោះ single statement នោះត្រូវបញ្ចប់ដោយសញ្ញា (់ប ។
C C++ពិនិត្យ ឧទាហរណ៍ខាងក្រោម ៖គណនាតំលៃ Max, Min នៃពីរចំនួន Read from Keyboard :

Ex:
#include <stdio.h>

#include <conio.h>

main ( )

{

int n1, n2, min, max;

clrscr ( ) ; /* clear screen output */

printf (“Enter the first Value = ”); scanf (“%d”, &n1);

printf (“Enter the Second Value = ”); scanf (“%d”, &n2);

if (n1 <n2)

{

min = n1 ;

max = n2 ;

}

else

{

min =n2 ;

max= n1 ;

}

printf (“maximum = %d”, max);

printf (“minimum = %d”, min);

getch(); return(0);

}

យើងអាចជំនួស statement if … else …្បខាងលើដោយ statement

min = (n1 < n2) ? n1 : n2 ;

max = (n1 > n2) ? n1 : n2 ;

ឬយើងអាចសរសេរ ៖ (n1 < n2 ) ? (min = n1, max = n2 ) : (min = n2, max =n1 );

Ex 2: កំណត ់តំលៃ n តើសេ μីសូន្យឬអត ់ ? បើ n =0 នោះត្រូវសរសេរមកលើ screen ថា ៖ តំលៃ n

= 0 ផ្ទុយមកវិញ n< >0 .

#include <stdio.h>

#include <conio.h>

main ( )

{

int n;

printf (“ Enter n =”); scanf (“%d”, &n);

if ( n !=0 )

printf (“ Value n < > 0 “);

else

printf (“ Value n = 0 “ );

getch ( ); return (0) ;

}

បណ្ដាឧទាហរណ៍នៃប្រភេទ Expression logic ក្នុង Statement If :

if ( count < =100)…

if ( sqrt ( a + b + c )> 0.005 )…

បើ ch1 ឈរពីមុខ ទ ក្នុងតារាង Code ASCII )

if ( latter != ‘x’)…

if (( count <= 100) && (ch != ‘x’))…

if ( ! (copy >=100.0) && (status == ‘s’))…

Ex4:
#include <stdio.h>
#include <conio.h>
main ( )
{
float a, b;

 clrscr ( )
printf (“Enter a, b = ”); scanf (“ %f %f”, &a, &b );

if (b != 0 )

printf (“Result = %f ”, a/b);

else

printf (“Error ! Division by Zero” ) ;

gatch ( ); return 0 ; }

យើងអាចជំនួស Logic Expression if (b! = 0) ដោយ if (b) .

Ex5: សរសេរកមμវិធីដោះស្រាយឬសនៃសមីការ ax² + bx +c =0 (a,b,c.: Read from

keyboard ):

#include <stdio.h>

#include <conio.h>

#include <math.h>

main ( )

{ float a, b, c ;

float x1 , x2, delta;

clrscr ( ) ;

printf (“a =”); scanf (“ %f”, &a);

printf (“b =”); scanf (“ %f”, &b);

printf (“c =”); scanf (“ %f”, &c);

delta =(b * b) – (4 *a * c );

printf (“ delta = %f ”, delta );

if (delta ==0)

{ printf (“ Only One Root ” );

printf (“x = %f ”, -b/(2 *a));

}

if (delta >0 )

{ printf (Two Root ”);

x1 = (-b + sqrt (delta )) / (2 * a);

x2 = (-b – sqrt (delta )) / (2 * a);

printf (“ x1 = %f ”, x1 );

printf (“ x2 = %f ”, x2 );

}

if (delta < 0)

printf (“ No root”);

getch ( );

return (0);

}

ដោះស្រាយវិសមីការ ax + b>0; (a,b :Read from keyboard )

#include <stdio.h>

 #include <conio.h>

#include <math.h>

main ( ) { float a, b, x ; clrscr ( );

printf (“ Enter a,b =”); scanf (“%f %f”,&a, &b);

if ( a = 0)

if ( b > 0)

printf (“Infinitive ”);

else

printf (“No Root ”);

if ( a > 0 )

printf (“x > %f ”, ( -b/a));

if ( a< 0 )

printf (“x < %f ”, ( -b/a));

getch ( );

return (0);

}

 II. switch ( ) Statement :

ពាក្យគន្លឹះ switch ប្រើសំរាប់កំណត់តំលៃកន្សោមចំនួនគត់
ចាប់ផ្ដើមការងារ (Statement) ដែលមានទំរង់ដូចខាងក្រោម ៖

 switch (កន្សោមចំនួនគត់)

{

case n 1 :

បណ្ដា Statements;

case n 2 :

បណ្ដា Statements;

………

case n k :

បណ្ដា Statements;

[default :

បណ្ដា Statements;]

}

ដែល i ≤ 1 ≤ k) នៅទីនេះអាចជាចំនួនគត់ អាចជាចំនួនថេរប្រភេទ charឬអាចជាកន្សោមថេរណាមួយ។ ចំពោះកំណាត់កម μវិធីសរសេរ នៅក្នុងចន្លោះ “ និង ” វិញហៅថាជាតួខ្លួនរបស់ switch ដូច្នេះពេល ដែលយើងនិយាយថា ចាកចេញពី switchឬចាកចេញពីតួខ្លួនរបស់ switch នោះមានន័យថាកម μវិធីនឹងលោតទៅអនុវត្ដ Statement

ដែលស្ថិតនៅក្រោយបន្ទាប់ពី សញ្ញា ” 9ដែលសញ្ញា ” នេះជាសញ្ញា បញ្ចប់ switch). ចំពោះ default វិញគឺជាផ្នែកមួយ របស់ switch តែមិនចាំបាច់ដាច់ខាតត្រូវតែមានវា នោះទេ។

 ដំណើរការរបស់ពាក្យគន្លឹះ switchដំណើរការរបស់ switchសញ្ញា រង្វង់ក្រចកជាប់ពាក្យគន្លឹះ swicth នោះ។គឺពឹងផ្អែកទៅលើតំលៃ របស់ កន្សោម ដែលស្ថិតនៅក្នុងពេលដែលតំលៃនៃកន្សោមនោះសេ μី n នោះកុំព្យូទ រនឹងលោតទៅអនុវត្ដបណ្ដា Statement

iដែលស្ថ តនៅជាប់ខាងក្រោយសញ្ញា ( : ) របស់ត ៃ ំ ល n នោះបន្ដទៅខាងក្រោម។ពេលដែលតំលៃកន្សោមខុសពី n នោះកុំព្យូទ័រនិងធ្វើការដូចខាងក្រោម ៖

a. បើមាន default នោះវានឹងលោតទៅអនុវត្ដ Statement ចាប់ពី ក្រោយសញ្ញា ( : )

របស់ default.

b. បើគ μាន default ទេនោះកុំព្យូទ័រនឹងចាកចេញពី switch.

 ចាកចេញពីពាក្យគន្លឹះ switch

ម៉ាស៊ីននឹងចាកចេញពី switch នៅពេលជួបពាក្យគន្លឹះ break ឬជួបសញ្ញាបិទ ឃ្នាបរបស់ switch } 9សញ្ញាបិទបញ្ចប់ switch ចុងក្រោយបង្អស់ ប។ យើងក៏អាចប្រើ ពាក្យគន្លឹះ goto

នៅក្នុងខ្លួនរបស់ switch ដើម្បីលោតទៅរក Statement ណាមួយនៅ ខាងក្រៅតួ switch. ពេលដែល switch ត្រូវបានគេប្រើនៅក្នុង អនុគមន៍ណាមួយនោះ យើងអាចប្រើពាក្យគន្លឹះ return នៅក្នុងតួខ នរបស់ switch ដើម្បីចាកចេញពីអនុគមន៍នោះ។


ចំណាំ ៖ពេលដំណើរការជួប switch នោះកុំព្យូទ័រនឹងកំណត់តំលៃ កន្សោមក្នុងសញ្ញារង្វង់ ក្រចករបស់ switch រួចស្វែងរកតំលៃដែល កំណត់បាននោះក្នុងតួខ្លួន switch. បើរកពុំ ឃើញទេ វានឹងចាក ចេញពីតួ switch តែបើវារកឃើញនោះវានឹងចាប់ ផ្ដើមអនុវត្ដការងារ ចាប់ពីសញ្ញា ( : ) នៃ n i ឧបមាថាតំលៃរបស់កន្សោមគឺ n i 
នោះតាមលំដាប់ពីឆ្វេងទៅ ស្ដាំ ជួបបណ្ដាពាក្យគន្លឹះ return, goto, break ឬក៏ជួប សញ្ញាបិទឃ្នាបបញ្ចប់ switch ទើបកុំព្យូទ័រចាកចេញពីតួ switch ហើយលោតទៅតាម កន្លែងដែលបណ្ដា Keyword ខាងលើបានកំណត់អោយទៅអនុវត្ដបន្ដ។ ចូរសរសេរពីរកម μវិធីខាងក្រោម ហើយពិនិត្យមើលភាពខុសគ្នារវាង Statement ទាំងពីរ ៖

 កមμធី
Prog4_3.C :

#include <stdio.h>
#include <conio.h>

 void main()

{ int n;

clrscr();

printf(“Input n = “);

scanf(“%d”, &n); /*បញ្ចូលតំលៃអោយអថេរ n */

switch(n)

{ case 1 : printf(“year in BBU”);

break;

case 2 : printf(“year in BBU”);

break;

case 3 : printf(“year in BBU”);

break;

case 4 : printf(“year in BBU”);

break;

default : printf(“inputed %d”,n);

}

getch();

}

 កមμវិធី Prog4_4.C :

 #include <stdio.h>

#include <conio.h>

void main()

{ int n;

 clrscr();

printf(“Input n = “);

scanf(“%d”,&n);

switch(n)

{ case 1 : printf(“year in BBU”);

break;

case 2 : printf(“year in BBU”);

case 3 : printf(“year in BBU”);

case 4 : printf(“year in BBU”);

default : printf(“inputed %d”,n);

}

getch();

}

ចូរព្យាយាមដំណើរការទាំងពីរកម μវិធ ខាងលើនេះ ជាមួយនឹងការបញ្ច លតំលៃអោយ អថេរ n ផ្សេងៗគ្នា។

 Ex3:

#include <stdio.h>

#include <conio.h>

main ( )

{ int n;

clrscr ( );

printf (“ Enter n = ”); scanf (“ %d”, &n );

switch (n);

{

case 0 : printf (“ number 0” ); Break;

case 1 : printf (“ number 1” ); Break;

case 2 : printf (“ number 2” ); Break;

}

printf (“ Good by ”);

getch ( );

return (0)

}

 តំលៃមួយទៅអោយ n . ហើយ statement switch និង ពិនិត្យមើលតំលៃរបស់ តើសមមូលនិងករណីណា,

+ បើ n = 0 នោះវា នឹងអនុវត្ដ Statement ដែលនៅពីក្រោយ Keyword Case 0…

+ បើ n = 1 នោះវា និងអនុវត្ដ Statement ដែលនៅពីក្រោយ Keyword Case 1…

_ Statement break មាននាទីសំរាប់ចេញក្រៅ statement switch ( ) ហើយ ទៅអនុវត្ដន៏ នូវបណ្ដាstatement ដែលនៅបន្ដបន្ទាប់ពី statement switch . ដើម្បីយល់ច្បាស់នូវ Statement break, ចូរពិនិត្យ

ឧទាហរណ៍ខាងក្រោម ។

 Ex4:
#include <stdio.h>

#include <conio.h>

main ( )

{ int n ; clrscr ();

printf (“ Enter n = ”);

scanf (“ %d”, &n );

switch (n)

{ case 0 : printf (“ number Zero”); break;

case 1 : printf (“ number One”); break;

case 2 : printf (“ number Two”); break;

default : printf (“ Good by ! ”);

}

getch ( );

}

ក្នុង ឧទាហរណ៍នេះ, យើងថែម Statement default នៅខាងចុង ។ នោះជាករណីសមមូលនឹងតំលៃក្រៅពី 0,1, 2, .

Ex5 : ករណី case មូយដែលមានតំលៃច្រើន ៖

#include <stdio.h>

#include <conio.h>

main ( )

{ int n;

printf (“ Enter n = ”);

scanf (“ %d”, &n );

switch (n)

{

case 0 : printf (“ Number Zero ”); break;

case 1 : printf (“ Number One ”); break;

case 2 : printf (“ Small number ”); break;

case 3 : printf (“ Small number ”); break;

case 4 : printf (“ Average number ”); break;

case 5 : printf (“ Big number ”);

}

printf (“ Good by ! );

getch ( );

return (0) ;

}

លំហាត់អនុវត្ដន៍

 គេអោយ 4ចំនួន a, b, c, d Read from Keyboard . ចូររកចំនួន Maximum និង Assignment តំលៃនោះទៅអោយ Variable Max, និង print the Result on screen output សរសេរកមμវិធីដោះស្រាយ ប្រព័ន្ឋសមីការខាងក្រោម ៖

ax + by = m

cx + dy = n

 សរសេរកមμវិធីដោះស្រាយសមីការ ax +b >0

4. សរសេរកមμវិធី Read from keyboard នូវបណ្ដាចំនួនគត់ n (1≤ n ≤ 10 )ហើយ សរសេរភាសា អងគ្លេសនៃចំនួនទាំងនោះមកលើ screen .

ឧបមាថា ៖ បើវាយបញ្ចូលលេខ 2 នោះត្រូវសរសេរមកលើ screen : 2 Tow .បណ្ដាប្រទេសជាសមាជិកនៃអង្គការពិភពលោកមួយ ៥។
ត្រូវបានបែងចែកជា
% ប្រភេទដែលមានលេខរៀង ៖ 1, 2, 3, 4, 5, ប្រទេសនីមួយៗត្រូវបង់វិភាគទានតាមការកំណត់មួយដូចខាងក្រោម ៖

។ រៀងរាល់ឆ្នាំ ប្រទេសទី 1, 2, 3, 4 ត្រូវបង់ 1%, 0,7%, 0,5%, 0,1% នៃប្រាក់ចំណូលប្រចាំឆ្នាំ ។ ប្រទេសប្រភេទទី5

ត្រូវបង់ 1.000.000$ . ចូរសរសេរកម μវិធី Read from keyboard នូវឈេ μាះប្រទេស, ប្រភេទប្រទេស, ប្រាក់ចំនូលប្រចាំឆ្នាំ (បើត្រូវការ ), ហើយគណនា និង សរសេរមកលើ screen នូវឈេ μាះរបទេស និង ប្រាក់ដែលត្រូវបង់វិភាគទារ ។

6. សរសេរកមμវិធី គណនាជ្រុង a នៃត្រីកោណ ABC បើគេស្គាល់ជ្រុង b ជ្រុង c និង មុំ B.
7. Read from keyboard នូវកូអរដោនេដេកាតនៃ4ចំនុច A, B, C, D. .

ចូរត្រួតពិនិត្យមើលបួនចំនួនខាងលើនោះអាចបង្កើតបានជាចតុកោណប៉ោង

បើបានចូរគណនាក្រលាផ្ទៃនៃចតុកោណប៉ោង នោះ, ហើយសរសេរមកលើ screen .ថ្ងៃ, ខែ, ឆ្នាំ នៃថ្ងៃណាមួយក្នុងសតវត្សទី2០, ហើយគណនាថ្ងៃនោះជាថ្ងៃអ្វី


? (ចន្ទ័, អង្គារ,…,អាទិត្យ ) ផ្អែកលើថ្ងៃបច្ចុប្បន្នដែល Read from keyboard .

9. Read from keyboard នូវកូអរដោនេ3ចំនួន A, B, C, ហើយ Read ថែមមួយចំនុច ំ ទៀតពី

keyboard, ហើយត្រួតពិនិត្យ មើលចំនុច ំ នោះ, ស្ថិតត្រីកោណ ABC ឬ នៅក្រៅត្រីកោណ

10. សរសេរកមμវិធី ដោះស្រាយសមីការ ax + bx + c >0

11. សរសេរកមμវិធី Read from keyboard នូវតំលៃ ខ ហើយគណនា ៖