Sharif_C__13921.pdf

‫ﺑﺴﻤﻪ ﺗﻌﺎﻟﻲ‬
‫ﻣﺒﺎﻧﻲ ﺑﺮﻧﺎﻣﻪﺳﺎزي )‪40153 (C‬‬
‫)‪Fundamental of Programming (C‬‬
‫داﻧﺸﮕﺎه ﺻﻨﻌﺘﻲ ﺷﺮﻳﻒ‬
‫داﻧﺸﻜﺪه ﻣﻬﻨﺪﺳﻲ ﻛﺎﻣﭙﻴﻮﺗﺮ‬
‫ ‬
‫ ‪ :‬‬
‫‪ :‬‬
‫ ‪.‬‬
‫ ‪.3 31 4 '! ( ) *+ ,-. /0 '! ( ) 1 2 ! "#$ %& :‬‬
‫ ‪=>? "#$ 9 1 @ A .3#+ 6 ! '! +78 2 9 ! :; <$$ ! "#$ %& ( ) :‬‬
‫‪( ) *+ ,-. /0 2 " C+78 *+ A D : EFG 2 ! )2 1+78 B ! '! ( ) *+‬‬
‫!' ‪.3 31 4 7‬‬
‫ !‪B+ 9 B+ 6 2 L 2 $M: 3N +OG PQF (4 J+G$ 9 ) H 9 :‬‬
‫ ‪.
( %&' '>+! >S C9 B+ 6 %!? ! R+ 1"! +OG .3 "#$ +OG‬‬
‫ )‪.3T ! -8': 2 " 4 2 7$ ! 4 13: :‬‬
‫ﺳﻮاﻻت ﺗﺴﺘﻲ )‪ 50‬ﻧﻤﺮه(‬
‫‪ .1‬اﮔﺮ ﻣﻘﺪار اوﻟﻴﻪ ‪ x‬ﺑﺮاﺑﺮ ‪ 3‬ﺑﺎﺷﺪ‪ ،‬ﻛﺪاﻣﻴﻚ از ﮔﺰﻳﻨﻪﻫﺎي زﻳﺮ ﺧﺮوﺟﻲ ‪ 7‬را ﺗﻮﻟﻴﺪ ﺧﻮاﻫﺪ ﻛﺮد؟‬
‫اﻟﻒ‪x ++ 4 .‬‬
‫ب‪x += 4 .‬‬
‫ج‪x =+ 4 .‬‬
‫د‪x + 4 = x .‬‬
‫‪ .2‬ﺧﺮوﺟﻲ ﻛﺪ ﻣﻘﺎﺑﻞ ﻛﺪام ﮔﺰﻳﻨﻪ ﺧﻮاﻫﺪ ﺑﻮد؟‬
‫;‪int a, b‬‬
‫اﻟﻒ‪11 .‬‬
‫; ‪a = 1 & 126 ? 1 : 2‬‬
‫ب‪.‬‬
‫‪12‬‬
‫; ‪b = 1 && 126 ? 1 : 2‬‬
‫ج‪.‬‬
‫‪22‬‬
‫د‪.‬‬
‫‪21‬‬
‫;)‪printf ("%d", a‬‬
‫;)‪printf ("%d", b‬‬
‫‪1‬‬
‫‪ .3‬اﮔﺮ ﻫﻤﻪي ﻣﺘﻐﻴﺮﻫﺎي ﻣﻮﺟﻮد در ﻛﺪ زﻳﺮ ﻗﺒﻞ از اﺟﺮاي ﻛﺪ ﺑﺮاﺑﺮ ‪ 5‬ﺑﺎﺷﻨﺪ‪ ،‬ﺧﺮوﺟﻲ ﭘﺲ از اﺟﺮاي ﻫﺮ ﻛﺪام از دﺳﺘﻮرات ‪ a‬و ‪b‬‬
‫)ﺑﻪ ﺻﻮرت ﺟﺪاﮔﺎﻧﻪ( ﭼﻪ ﺧﻮاﻫﺪ ﺑﻮد؟‬
‫;‪a) p *= x++‬‬
‫;‪b) q /= ++x‬‬
‫اﻟﻒ‪.‬‬
‫‪p = 25, x = 5‬‬
‫‪x = 6‬‬
‫‪q = 0,‬‬
‫ب‪.‬‬
‫‪p = 25, x = 5‬‬
‫‪x = 6‬‬
‫ج‪.‬‬
‫‪q = 1,‬‬
‫‪p = 25, x = 6‬‬
‫‪x = 6‬‬
‫‪q = 1,‬‬
‫د‪.‬‬
‫‪p = 25, x = 6‬‬
‫‪x = 6‬‬
‫‪q = 0,‬‬
‫‪ .4‬ﺧﺮوﺟﻲ ﺑﺮﻧﺎﻣﻪ زﻳﺮ ﻛﺪام ﮔﺰﻳﻨﻪ اﺳﺖ؟‬
‫‪g = 6‬‬
‫اﻟﻒ‪.‬‬
‫‪f = 12‬‬
‫‪g = 6‬‬
‫ب‪.‬‬
‫‪f = 6‬‬
‫ج‪.‬‬
‫‪g = 12‬‬
‫‪f = 12‬‬
‫د‪.‬‬
‫‪g = 12‬‬
‫‪f = 6‬‬
‫;‪int g=0,f=0‬‬
‫;)‪void f1(void‬‬
‫;)‪void f2(void‬‬
‫{)(‪int main‬‬
‫;)(‪f2‬‬
‫;)‪printf("g = %d \n f = %d", g, f‬‬
‫;‪return 0‬‬
‫}‬
‫{)‪void f1(void‬‬
‫;‪int g = 1‬‬
‫;‪g++;f++‬‬
‫;)(‪f2‬‬
‫}‬
‫{)‪void f2(void‬‬
‫) ‪if ( g > 5‬‬
‫;‪return‬‬
‫;‪g++‬‬
‫;‪f++‬‬
‫;)(‪f1‬‬
‫}‬
‫‪ .5‬ﺧﺮوﺟﻲ ﺑﺮﻧﺎﻣﻪ ﻣﻘﺎﺑﻞ ﻛﺪام ﮔﺰﻳﻨﻪ اﺳﺖ؟‬
‫اﻟﻒ‪5 .‬‬
‫ب‪.‬‬
‫‪01234‬‬
‫ج‪.‬‬
‫‪012345‬‬
‫د‪.‬‬
‫‪12345‬‬
‫)(‪int main‬‬
‫{‬
‫;‪int i, j‬‬
‫;‪i = 5‬‬
‫)‪for (j = i == 5 ; j <= 5 ; j++‬‬
‫;)‪printf("%d", j‬‬
‫}‬
‫‪2‬‬
‫ ﭼﻨﺪﺑﺎر در ﺧﺮوﺟﻲ ﭼﺎپ ﺧﻮاﻫﺪ ﺷﺪ؟‬x ‫ ﭘﻴﻐﺎم‬.6
int main()
{
int x;
for(x = -1; x <= 10; x++)
{
if(x < 5)
continue;
else
break;
printf("x");
}
return 0;
}
10 .‫اﻟﻒ‬
11 .‫ب‬
‫ ﺻﻔﺮ‬.‫ج‬
5 .‫د‬
‫ ﺑﺎ اﺟﺮاي ﻗﻄﻌﻪ ﺑﺮﻧﺎﻣﻪ زﻳﺮ ﻛﺪام ﮔﺰﻳﻨﻪ در ﺧﺮوﺟﻲ ﻧﻤﺎﻳﺶ داده ﻣﻲﺷﻮد؟‬.7
int main()
{
int i;
i=1;
while (i <= 10)
{
if (i == 5)
continue;
printf("%d ", i);
i++;
}
printf("End");
return 0;
}
1 2 3 4 End .‫اﻟﻒ‬
1234
.‫ب‬
1 2 3 4 6 7 8 9 10 End
.‫ج‬
1 2 3 4 6 7 8 9 10
.‫د‬
‫ ﺧﺮوﺟﻲ ﺑﺮﻧﺎﻣﻪ ﻣﻘﺎﺑﻞ ﻛﺪام ﮔﺰﻳﻨﻪ اﺳﺖ؟‬.8
int main()
{
21 31 41 51 60 .‫اﻟﻒ‬
int i = 1,
j = 1;
21 31 41 50
for(; j; printf("%d%d\t", i, j))
j = i++ <= 4;
return 0;
}
3
.‫ب‬
11 21 31 41 51 60
.‫ج‬
11 21 31 41 50
.‫د‬
‫ ﺧﺮوﺟﻲ ﺑﺮﻧﺎﻣﻪ ﻣﻘﺎﺑﻞ ﻛﺪام ﮔﺰﻳﻨﻪ ﺧﻮاﻫﺪ ﺑﻮد؟‬.9
void f1(int c)
{
20 20 20 .‫اﻟﻒ‬
c = c * 2;
.‫ب‬
10 40 40
}
int main()
10 20 20
.‫ج‬
{
10 10 10
.‫د‬
int a = 10;
f1(a);
printf ("%d ", a);
if ( (a = 20) || (a == 30) || (a = 40))
printf ("%d ", a);
printf ("%d ", a);
return 0;
}
‫ ﺧﺮوﺟﻲ ﻛﺪام ﮔﺰﻳﻨﻪ ﺧﻮاﻫﺪ ﺑﻮد؟‬،‫ ﺑﻪ ﺑﺮﻧﺎﻣﻪ داده ﺷﻮد‬2 ‫ اﮔﺮ ورودي‬.10
int main()
{
int i;
scanf ("%d", &i);
switch(i)
{
case 1: printf("%d ", i);
case 2: printf("%d ", i);
case 3: printf("%d ", i); break;
default: printf("%d ", i); break;
}
return 0;
}
4
2
.‫اﻟﻒ‬
22
.‫ب‬
222
.‫ج‬
2222
.‫د‬
‫ﺳﻮاﻻت ﺗﺸﺮﻳﺤﻲ )‪ 50‬ﻧﻤﺮه(‬
‫ﺳﻮال ‪ 20) .1‬ﻧﻤﺮه(‬
‫ﺑﺮاي ﻣﺤﺎﺳﺒﻪ ﻋﺪد ‪ π‬ﻣﻲﺗﻮان از راﺑﻄﻪ زﻳﺮ اﺳﺘﻔﺎده ﻛﺮد‪.‬‬
‫‪π‬‬
‫‪2 2 4 4 6 6‬‬
‫… ‪= + + + + +‬‬
‫‪2‬‬
‫‪1 3 3 5 5 7‬‬
‫ﺗﺎﺑﻌﻲ ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﺗﻌﺪاد ﺟﻤﻼت ﺳﺮي ﻓﻮق را ﺑﻪ ﻋﻨﻮان ﻳﻚ ﻋﺪد ﺻﺤﻴﺢ از ورودي درﻳﺎﻓﺖ ﻛﺮده و ﻣﻘﺪار ‪ π‬را ﺑﺎ اﺳﺘﻔﺎده از راﺑﻄﻪ‬
‫ﻓﻮق ﺣﺴﺎب ﻛﺮده و ﺑﻪ ﺗﺎﺑﻊ ﻓﺮاﺧﻮاﻧﻨﺪه ﺑﺮﮔﺮداﻧﺪ‪ .‬ﭘﺎراﻣﺘﺮ ورودي )ﺗﻌﺪاد ﺟﻤﻼت ﺳﺮي( ﻳﻚ ﻋﺪد ﺻﺤﻴﺢ ﺑﻴﻦ ‪ 5‬ﺗﺎ ‪ 50‬ﻣﻲﺑﺎﺷﺪ و اﮔﺮ‬
‫اﻳﻦ ﭘﺎراﻣﺘﺮ در ﻣﺤﺪوده ﺧﻮاﺳﺘﻪ ﺷﺪه ﻧﺒﻮد‪ ،‬ﻣﻘﺪار ‪ -1‬را ﺑﻪ ﻋﻨﻮان ﺧﺮوﺟﻲ ﺗﺎﺑﻊ در ﻧﻈﺮ ﺑﮕﻴﺮد‪.‬‬
‫ﺟﻮاب‪.‬‬
‫‪….‬‬
‫‪7‬‬
‫‪6‬‬
‫‪5‬‬
‫‪4‬‬
‫‪3‬‬
‫‪2‬‬
‫‪1‬‬
‫…‬
‫‪8‬‬
‫‪8‬‬
‫‪6‬‬
‫‪6‬‬
‫‪4‬‬
‫‪4‬‬
‫‪2‬‬
‫‪ 0‬ﻣﺮﺣﻠﻪ‬
‫‪ 2‬ﺻﻮرت ﻛﺴﺮ = ‪a‬‬
‫…‬
‫‪9‬‬
‫‪7‬‬
‫‪7‬‬
‫‪5‬‬
‫‪5‬‬
‫‪3‬‬
‫‪3‬‬
‫‪ 1‬ﻣﺨﺮج ﻛﺴﺮ = ‪b‬‬
‫ﻫﻤﺎﻧﻄﻮر ﻛﻪ در ﺷﻜﻞ ﺑﺎﻻ ﻣﺸﺨﺺ ﺷﺪه اﺳﺖ ﺻﻮرت در ﻣﺮاﺣﻞ زوج ﺑﺎ ﻋﺪد ‪ 2‬ﺟﻤﻊ ﺷﺪه اﺳﺖ و ﻣﺨﺮج در ﻣﺮاﺣﻞ ﻓﺮد ﺑﺎ ﻋﺪد ‪ 2‬ﺟﻤﻊ ﺷﺪه اﺳﺖ‪.‬‬
‫ﻟﺬا ﺧﻮاﻫﻴﻢ داﺷﺖ‪.‬‬
‫)(‪double f‬‬
‫ﻧﻌﺮﻳﻒ درﺳﺖ ﺗﺎﺑﻊ ‪ 1‬ﻧﻤﺮه ﻣﺜﻼ ﺧﺮوﺟﻲ را ﺻﺤﻴﺢ ﻧﮕﻴﺮد ‪//‬‬
‫{‬
‫;‪int n‬‬
‫;)‪scanf("%d", &n‬‬
‫‪ 1‬ﻧﻤﺮه ﺑﺮاي درﻳﺎﻓﺖ درﺳﺖ ﻋﺪد ﺻﺤﻴﺢ از ورودي ‪//‬‬
‫;‪if (n < 5 || n > 50) return -1‬‬
‫‪ 2‬ﻧﻤﺮه ‪//‬‬
‫;‪float a = 0, b= 1‬‬
‫;‪double sum = 0‬‬
‫ﺑﺎﻳﺪ اﻋﺸﺎري ﺑﺎﺷﺪ ‪ 1‬ﻧﻤﺮه ‪//‬‬
‫;‪int c‬‬
‫)‪for (c = 0; c < n; c++‬‬
‫ﻧﻮﺷﺘﻦ ﻳﻚ ﺣﻠﻘﻪ ﺗﻜﺮار ﻣﻨﺎﺳﺐ و درﺳﺖ ﺑﺮاي ﻣﺤﺎﺳﺒﻪ ‪ 5‬ﻧﻤﺮه ‪//‬‬
‫{‬
‫;‪if (c%2) a += 2‬‬
‫‪ 3‬ﻧﻤﺮه ﺑﺮاي ﺗﻮﻟﻴﺪ ﺻﻮرت ﻛﺴﺮ ‪//‬‬
‫;‪else b+= 2‬‬
‫‪ 3‬ﻧﻤﺮه ﺑﺮاي ﺗﻮﻟﻴﺪ ﻣﺨﺮج ﻛﺴﺮ ‪//‬‬
‫ﺗﻘﺴﻴﻢ ﺑﺎﻳﺪ ﺑﻪ ﺻﻮرت اﻋﺸﺎري ﺑﺎﺷﺪ ﻳﻌﻨﻲ اﮔﺮ ﺻﻮرت و ﻣﺨﺮج ﺻﺤﻴﺢ آﻧﮕﺎه ﺑﻨﻮﻳﺴﻴﻢ*‪/‬‬
‫;)‪sum += (1.0 * a / b‬‬
‫رﻋﺎﻳﺖ اﻳﻦ ﻧﻜﺘﻪ ‪ 2‬ﻧﻤﺮه ﺧﻮاﻫﺪ داﺷﺖ‬
‫‪*/‬‬
‫;)‪sum += (a/b‬‬
‫}‬
‫;‪sum *= 2‬‬
‫‪ 2‬ﻧﻤﺮه ﺑﺮاي دﻗﺖ داﻧﺸﺠﻮ ﺑﻪ ﺳﻮال و ﺿﺮب در ﻋﺪد ‪//‬‬
‫;‪return sum‬‬
‫}‬
‫‪5‬‬
‫ﺳﻮال ‪ 15) .2‬ﻧﻤﺮه(‬
‫ﺗﺎﺑﻌﻲ ﺑﺎزﮔﺸﺘﻲ ﺑﻪ ﻧﺎم ‪ rec_pow‬ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻳﻚ ﻋﺪد ﺻﺤﻴﺢ ﻣﺜﺒﺖ ﺑﻪ ﻧﺎم ‪ y‬و ﻳﻚ ﻋﺪد ‪ double‬ﺑﻪ ﻧﺎم ‪ x‬را ﮔﺮﻓﺘﻪ و ﻣﻘﺪار ‪ x‬ﺑﻪ‬
‫ﺗﻮان ‪ y‬را ﺣﺴﺎب ﻛﻨﺪ‪.‬‬
‫ﺑﻪ ﻋﻨﻮان ﻣﺜﺎل ‪ header‬ﺗﺎﺑﻊ ﺑﻪ ﺻﻮرت )‪ double rec_pow (double x, int y‬ﺑﻮده و ﺑﻪ ازاء وروديﻫﺎي ‪ x=2.5‬و ‪y=3‬‬
‫ﻣﻘﺪار ‪ 15.625‬ﺑﺮﮔﺸﺖ داده ﻣﻲﺷﻮد‪.‬‬
‫ﺟﻮاب‪.‬‬
‫)‪double rec_pow(double x, int y‬‬
‫{‬
‫ﻗﺴﻤﺖ ﭘﺎﻳﻪ اﻟﮕﻮرﻳﺘﻢ ﻛﻪ ﺑﻪ ﻳﻜﻲ از دو ﺻﻮرت زﻳﺮ ﻣﻲ ﺷﻮد )‪ 3‬ﻧﻤﺮه( ‪//‬‬
‫)‪if (y == 0‬‬
‫;‪return 1‬‬
‫ﻳﺎ ‪//‬‬
‫)‪if (y == 1‬‬
‫;‪return x‬‬
‫ﻗﺴﻤﺘﻲ ﻛﻪ داده ﻫﺎي ﻧﺎﻣﺮﺑﻮط را ورودي ﻣﻨﺎﺳﺐ ﺑﺮﮔﺮداﻧﺪ )‪ 1‬ﻧﻤﺮه( )ﻣﻤﻜﻦ اﺳﺖ ﺗﺎﺑﻊ ﺑﻪ ﮔﻮﻧﻪ اي ﻃﺮاﺣﻲ ﺷﺪه ﺑﺎﺷﺪ ﻛﻪ ﺑﺮاي ﺗﻮان ﻫﺎي ﻣﻨﻔﻲ ﺟﻮاب درﺳﺖ ‪//‬‬
‫ﺑﺮﮔﺮداﻧﺪ وﻟﻲ ﺟﺰو ﻟﺰوﻣﺎت ﻣﺴﺌﻠﻪ ﻧﻴﺴﺖ(‬
‫)‪if (y < 0‬‬
‫;‪return -1‬‬
‫ﻗﺴﻤﺘﻲ ﻛﻪ ﻓﺮاﺧﻮاﻧﻲ ﺑﺎزﮔﺸﺘﻲ اﻧﺠﺎم داده ﻣﻲ ﺷﻮد و داده ﻣﻨﺎﺳﺐ ﺑﺎزﮔﺸﺖ داده ﻣﻲ ﺷﻮد )‪ 9‬ﻧﻤﺮه( ‪//‬‬
‫;)‪return x* rec_pow(x,y-1‬‬
‫}‬
‫ﺑﺮاي اﻳﻨﻜﻪ ﻛﺎﻣﻼً ﺗﺎﺑﻊ و ﻧﺤﻮ دﺳﺘﻮرات درﺳﺖ ﺑﺎﺷﻨﺪ‪ 2) .‬ﻧﻤﺮه( ‪//‬‬
‫‪6‬‬
‫ﺳﻮال ‪ 15) .3‬ﻧﻤﺮه(‬
‫ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻣﺨﺘﺼﺎت ﺳﻪ ﻧﻘﻄﻪ را از ورودي ﺑﮕﻴﺮد و ﺑﮕﻮﻳﺪ ﻛﻪ آن ﺳﻪ ﻧﻘﻄﻪ ﻫﻢﺧﻂ ﻫﺴﺘﻨﺪ ﻳﺎ ﻧﻪ‪ .‬اﮔﺮ ﻫﻢ ﺧﻂ ﺑﻮدﻧﺪ‪،‬‬
‫ﺧﺮوﺟﻲ ﺑﺮﻧﺎﻣﻪ‪ ،‬ﻳﻚ ﻣﻌﺎدﻟﻪ ﺧﻂ ﺑﻪ ﺻﻮرت ‪ ax + by + c = 0‬ﺧﻮاﻫﺪ ﺑﻮد و اﮔﺮ ﻫﻢﺧﻂ ﻧﺒﻮدﻧﺪ‪ ،‬ﺧﺮوﺟﻲ ‪ NO‬ﺧﻮاﻫﺪ ﺑﻮد‪ .‬ورودي ﺑﻪ‬
‫ﺻﻮرت ﺷﺶ ﻋﺪد اﻋﺸﺎري ﺧﻮاﻫﺪ ﺑﻮد ﻛﻪ ﻣﺨﺘﺼﺎت ﺳﻪ ﻧﻘﻄﻪ ‪ B ،A‬و ‪ C‬را ﺑﻴﺎن ﻣﻲﻛﻨﺪ‪.‬‬
‫راﻫﻨﻤﺎﻳﻲ‪ :‬ﺳﻪ ﻧﻘﻄﻪ )‪ B(x2, y2) ،A(x1, y1‬و )‪ C(x3, y3‬را ﻫﻢﺧﻂ ﮔﻮﻳﻨﺪ ﻫﺮﮔﺎه ﺷﻴﺐ دو ﺧﻂ ‪ AB‬و ‪ BC‬ﺑﺎ ﻫﻢ ﺑﺮاﺑﺮ ﺑﺎﺷﻨﺪ‪ .‬ﺷﻴﺐ ﺧﻂ‬
‫‪௬ ି௬‬‬
‫‪ AB‬از ﻓﺮﻣﻮل ‪ ݉ = ௫మ ି௫భ‬ﻗﺎﺑﻞ ﻣﺤﺎﺳﺒﻪ اﺳﺖ‪ .‬ﻫﻤﭽﻨﻴﻦ‪ ،‬ﻣﻌﺎدﻟﻪ ﺧﻂ ‪ AB‬ﺑﻪ ﺻﻮرت ‪ଵ ሻ‬ݔ ‪ −‬ݔ‪ଵ = ݉ሺ‬ݕ ‪ −‬ݕ ﻧﻮﺷﺘﻪ ﻣﻲﺷﻮد‪.‬‬
‫‪భ‬‬
‫‪మ‬‬
‫ﺟﻮاب‪.‬‬
‫)(‪int main‬‬
‫{‬
‫ﺗﻌﺮﻳﻒ ‪ 6‬ﻣﺘﻐﻴﺮ اﻋﺸﺎري )ﻧﺒﺎﻳﺪ از آراﻳﻪﻫﺎ اﺳﺘﻔﺎده ﺷﻮد( )‪ 2‬ﻧﻤﺮه( ‪//‬‬
‫;‪float x1,x2,x3,y1,y2,y3‬‬
‫;‪float m1,m2‬‬
‫ﺧﻮاﻧﺪن اﻋﺪاد از ورودي )‪ 3‬ﻧﻤﺮه( ‪//‬‬
‫;)"‪printf("Specify point A by entering its coordinates (x and y):\n‬‬
‫;)‪scanf("%f %f", &x1, &y1‬‬
‫;)"‪printf("Specify point B by entering its coordinates (x and y):\n‬‬
‫;)‪scanf("%f %f", &x2, &y2‬‬
‫;)"‪printf("Specify point C by entering its coordinates (x and y):\n‬‬
‫;)‪scanf("%f %f", &x3, &y3‬‬
‫ﻣﺤﺎﺳﺒﻪ ﺷﻴﺐ ﺧﻂﻫﺎ )‪ 3‬ﻧﻤﺮه( ‪//‬‬
‫;)‪m1 = (y2-y1)/(x2-x1‬‬
‫;)‪m2 = (y3-y2)/(x3-x2‬‬
‫ﻣﻘﺎﻳﺴﻪ ﺷﻴﺐ ﺧﻂﻫﺎ )‪ 2‬ﻧﻤﺮه( ‪//‬‬
‫ﺧﺮوﺟﻲ ﺑﺎ ﻓﺮﻣﺖ درﺳﺖ ﻣﻌﺎدﻟﻪ ﺧﻂ )‪ 5‬ﻧﻤﺮه( ‪//‬‬
‫)‪if (m1 != m2‬‬
‫;)"‪printf("NO‬‬
‫‪else‬‬
‫;)‪printf("y-%f=%f(x-%f)", y1, m1, x1‬‬
‫;‪return 0‬‬
‫}‬
‫‪7‬‬
‫ﺳﻮال ‪ - 4‬ﻣﺨﺼﻮص داﻧﺸﺠﻮﻳﺎن ﻣﻬﻨﺪﺳﻲ ﻛﺎﻣﭙﻴﻮﺗﺮ و ﺑﺮق‪ 20) .‬ﻧﻤﺮه(‬
‫ﺑﺮﻧﺎﻣﻪاي ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻣﺨﺘﺼﺎت دو ﻣﺴﺘﻄﻴﻞ را از ورودي ﮔﺮﻓﺘﻪ و ﻣﺴﺎﺣﺖ ﻧﺎﺣﻴﻪي ﻣﺸﺘﺮك ﺑﻴﻦ دو ﻣﺴﺘﻄﻴﻞ را ﺣﺴﺎب ﻛﻨﺪ‪ .‬ﺑﻪ ازاء‬
‫ﻫﺮ ﻣﺴﺘﻄﻴﻞ دو ﻧﻘﻄﻪ )ﺟﻤﻌﺎً ﭼﻬﺎر ﻋﺪد اﻋﺸﺎري( ﺑﺎﻳﺪ ﮔﺮﻓﺘﻪ ﺷﻮد‪ .‬ﺗﻮﺟﻪ ﻛﻨﻴﺪ ﻛﻪ ﻫﺮ ﻣﺴﺘﻄﻴﻞ ﺑﺎ اﺳﺘﻔﺎده از دو ﻧﻘﻄﻪ‪ ،‬ﻣﻲﺗﻮاﻧﺪ ﺑﻪ‬
‫ﻳﻜﻲ از ﭼﻬﺎر ﻓﺮم زﻳﺮ ﻧﻤﺎﻳﺶ داده ﺷﻮد‪.‬‬
‫ﺑﻪ ﻋﻨﻮان ﻧﻤﻮﻧﻪ‪ ،‬ﻫﺪف از اﻳﻦ ﺳﻮال ﭘﻴﺪا ﻛﺮدن ﻧﺎﺣﻴﻪ ﭘﺮرﻧﮓ ﺑﻴﻦ دو ﻣﺴﺘﻄﻴﻞ زﻳﺮ ﻣﻲﺑﺎﺷﺪ‪ .‬اﻟﺒﺘﻪ اﻳﻦ اﺣﺘﻤﺎل ﻫﻢ وﺟﻮد دارد ﻛﻪ‬
‫ﻧﺎﺣﻴﻪ ﻣﺸﺘﺮك وﺟﻮد ﻧﺪاﺷﺘﻪ ﺑﺎﺷﺪ ﻛﻪ در اﻳﻦ ﺻﻮرت ﻣﺴﺎﺣﺖ ﻧﺎﺣﻴﻪ ﻣﺸﺘﺮك ﺑﺮاﺑﺮ ﺻﻔﺮ ﺧﻮاﻫﺪ ﺑﻮد‪.‬‬
‫ﺟﻮاب‪.‬‬
‫)(‪int main‬‬
‫{‬
‫ﺗﻌﺮﻳﻒ ﻣﺘﻐﻴﺮﻫﺎ )‪ 2‬ﻧﻤﺮه( ‪//‬‬
‫;‪float x1, y1, x2, y2, x3, y3, x4, y4‬‬
‫;‪float temp‬‬
‫;‪float x_length=0, y_length=0‬‬
‫ﺧﻮاﻧﺪن ﻣﺨﺘﺼﺎت ﻧﻘﺎط از ورودي )‪ 1‬ﻧﻤﺮه( ‪//‬‬
‫;)‪scanf("%f %f %f %f",&x1,&y1,&x2,&y2‬‬
‫;)‪scanf("%f %f %f %f",&x3,&y3,&x4,&y4‬‬
‫‪8‬‬
// rectangle1 change to first position
// (‫ ﻧﻤﺮه‬5) ‫ﺗﺒﺪﻳﻞ ﻣﺨﺘﺼﺎت ﻧﻘﺎط ﺧﻮاﻧﺪه ﺷﺪه ﺑﺮاي ﻣﺴﺘﻄﻴﻞ اول ﺑﻪ ﻳﻜﻲ از ﭼﻬﺎر ﺣﺎﻟﺖ ﻓﻮق‬
if(x1>x2) {
temp=x1;
x1=x2;
x2=temp;
temp=y1;
y1=y2;
y2=temp;
}
if(y1>y2) {
temp=y1;
y1=y2;
y2=temp;
}
// rectangle2 change to first position
// (‫ ﻧﻤﺮه‬5) ‫ﺗﺒﺪﻳﻞ ﻣﺨﺘﺼﺎت ﻧﻘﺎط ﺧﻮاﻧﺪه ﺷﺪه ﺑﺮاي ﻣﺴﺘﻄﻴﻞ دوم ﺑﻪ ﺣﺎﻟﺖ ﻣﻔﺮوض ﺑﺮاي ﻣﺴﺘﻄﻴﻞ اول‬
if(x3>x4) {
temp=x3;
x3=x4;
x4=temp;
temp=y3;
y3=y4;
y4=temp;
}
if(y3>y4) {
temp=y3;
y3=y4;
y4=temp;
}
// calculate x common space
// (‫ ﻧﻤﺮه‬2) ‫ﭘﻴﺪا ﻛﺮدن ﻃﻮل ﻧﺎﺣﻴﻪ ﻣﺸﺘﺮك‬
if(x1<x4 && x4<x2)
if(x1<x3 && x3<x2)
x_length=x4-x3;
else
x_length=x4-x1;
else
if(x1<x3 && x3<x2)
x_length=x2-x3;
else
x_length=0;
9
//calculate y common space
// (‫ ﻧﻤﺮه‬2) ‫ﭘﻴﺪا ﻛﺮدن ﻋﺮض ﻧﺎﺣﻴﻪ ﻣﺸﺘﺮك‬
if(y1<y4 && y4<y2)
if(y1<y3 && y3<y2)
y_length=y4-y3;
else
y_length=y4-y1;
else
if(y1<y3 && y3<y2)
y_length=y2-y3;
else
y_length=0;
// (‫ ﻧﻤﺮه‬3) ‫ﮔﺰارش ﺧﺮوﺟﻲ ﺑﺎ در ﻧﻈﺮ ﮔﺮﻓﺘﻦ اﺣﺘﻤﺎل ﺻﻔﺮ ﺑﻮدن ﻣﺴﺎﺣﺖ‬
printf("%f",x_length*y_length);
return 0;
}
10