برنامه‌سازي پيشرفته
This presentation is the property of its rightful owner.
Sponsored Links
1 / 240

برنامه‌سازي پيشرفته PowerPoint PPT Presentation


  • 104 Views
  • Uploaded on
  • Presentation posted in: General

برنامه‌سازي پيشرفته. جلسة اول. برنامه‌سازي پيشرفته. مقدمه و معرفي درس برنامه‌سازي پيشرفته: بيان مفاهيم پيشرفته برنامه‌سازي با استفاده از زبان C. برنامه‌سازي پيشرفته. منبع اصلی جهت مطالعه دانشجويان کتاب: برنامه‌نويسي به زبان C (ويرايش دوم). برنامه‌سازي پيشرفته. سابقة تاريخي زبان C

Download Presentation

برنامه‌سازي پيشرفته

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


6928417

برنامه‌سازي پيشرفته

جلسة اول


6928417

برنامه‌سازي پيشرفته

مقدمه و معرفي درس

برنامه‌سازي پيشرفته:

بيان مفاهيم پيشرفته برنامه‌سازي با استفاده از زبان C


6928417

برنامه‌سازي پيشرفته

منبع اصلی جهت مطالعه دانشجويان

کتاب: برنامه‌نويسي به زبان C

(ويرايش دوم)


6928417

برنامه‌سازي پيشرفته

سابقة تاريخي زبان C

زبان B

زبان BCPL

زبان C :

در سال 1972 توسط دنيس ريچي طراحي شد.


6928417

برنامه‌سازي پيشرفته

ويژگيهاي بارز زبان C

  • C يک زبان مياني است


6928417

برنامه‌سازي پيشرفته

سطوح زبانهاي برنامه‌سازي

زبانهاي سطح پايين

Assembly

زبانهاي مياني

Java، ‍‍‍‍C

زبانهاي سطح بالا

Pascal، Ada، Cobol، Basic


6928417

برنامه‌سازي پيشرفته

ويژگيهاي بارز زبان C

  • C يک زبان ساختيافته است.

  • C زبان برنامه‌نويسي سيستم است.

  • C يک زبان قابل حمل است.

  • C زباني قابل انعطاف و قدرتمند است.


6928417

برنامه‌سازي پيشرفته

کليات زبان C

  • حساس به حروف (Case Sensitive)

    INT و int

  • کلمات کليدي کم

    مثال: for ، if ، while

    نکته: کليه کلمات کليدي با حروف کوچک هستند.


6928417

برنامه‌سازي پيشرفته

کليات زبان C

  • ; جدا کنندة دستورات از يکديگر:

    هر دستور در يک يا چند سطر

    چند دستور در هر سطر


6928417

برنامه‌سازي پيشرفته

کليات زبان C

  • توضيحات بين /* و /* يا بعد از //

    /* this is a sample comment. */

    // this is another sample comment.


6928417

برنامه‌سازي پيشرفته

استانداردسازي زبان C

  • گونه‌هاي مختلف زبان C

  • استانداردسازي زبان C :

    ANSI C


6928417

برنامه‌سازي پيشرفته

کامپايلر پيشنهادي زبان C

Borland C++ 3.1


6928417

پردازش

داده‌هاي خروجي

داده‌هاي ورودي

برنامه‌سازي پيشرفته

برنامة کامپيوتري


6928417

برنامه‌سازي پيشرفته

مجموعة دستورات هر زبان برنامه‌نويسي

  • دستورات کامپايلر زبان

  • دستورات ورودي - خروجي

  • دستورات محاسباتي و منطقي

  • دستورات کنترل روند برنامه


6928417

برنامه‌سازي پيشرفته

جلسة دوم


6928417

برنامه‌سازي پيشرفته

انواع داده‌هاي اصلي

int

float

double

char

void

boolean ?!!


6928417

برنامه‌سازي پيشرفته

int

اعداد صحيح با دامنه محدود

برای کامپيوترهای شخصی دو بايت

32767-

2762+


6928417

برنامه‌سازي پيشرفته

float

اعداد حقيقی با دامنة محدود

نمايش معمولی

نمايش علمی

12.3E- 4 = 12.00003


6928417

برنامه‌سازي پيشرفته

double

اعداد حقيقي با دقتي بيشتر از float


6928417

برنامه‌سازي پيشرفته

Char

کاراکترها نمادها يا حروف

‘a’

‘A’

‘+’

‘~’

بسته به محل استفاده عدد يا کاراکتر است.


6928417

برنامه‌سازي پيشرفته

void

دادة تهي

داراي کاربردهاي مختلف

مثال: توابع فاقد خروجي


6928417

برنامه‌سازي پيشرفته

انواع دادهاي ديگر

با ترکيب کلمات زير با برخي از انواع داده‌هاي اصلي:

signed ، unsigned (با علامت ، بدون علامت)

long ، short

مانند:

unsigned int

long int

unsinged long int


6928417

برنامه‌سازي پيشرفته

متغيرها

قوانين نامگذاري متغيرها:

  • حروف ‘a’ تا ‘z’ ، ‘A’ تا ‘Z’ ، ارقام و ‘_’

  • اولين کاراکتر رقم نباشد.

  • کلمات کليدي نمي‌توانند نام متغير باشند.


6928417

برنامه‌سازي پيشرفته

متغيرها

اسامي مجاز:

count

c124

avg_grade

اسامي غيرمجاز:

1test

bin#tree

for


6928417

برنامه‌سازي پيشرفته

تعريف متغير

; نام متغير نوع داده

int x ;

float m, n ;

char ch1, ch2, ch3 ;

long int count ;


6928417

برنامه‌سازي پيشرفته

مقدار دهي اوليه به متغيرها

int x = 5, y ;

char ch1 = ‘a’, ch2 = ‘A’, ch ;


6928417

برنامه‌سازي پيشرفته

ثابتها

تعريف ثابت:

مقدار ثابت نام ثابت#define

يا

مقدار = نام ثابت نوع داده const


6928417

برنامه‌سازي پيشرفته

مثال

#define M 100

#define P 3.14

const int n = 100 ;

const char c = ‘a’ ;


6928417

برنامه‌سازي پيشرفته

عملگرها

  • محاسباتي

  • رابطه‌اي

  • منطقي

  • بيتي


6928417

برنامه‌سازي پيشرفته

عملگرهاي محاسباتي

(يکاني)-

+ , - , * , / , %

++ , --


6928417

برنامه‌سازي پيشرفته

مثال

- x

x + y

x / y

x % y


6928417

برنامه‌سازي پيشرفته

++ و --

تفاوت

x ++

و

++ x


6928417

برنامه‌سازي پيشرفته

عبارات محاسباتي

ترکيبي از متغيرها، ثابتها و عملگرهاي محاسباتي

x + y * z / 2 - y


6928417

برنامه‌سازي پيشرفته

دستور انتساب

عبارت محاسباتي يا مقدار ثابت = نام متغير

int x, y = 19, z ;

x = 10 ;

z = x * 2 + y ;


6928417

برنامه‌سازي پيشرفته

تبديل انواع

char ch ;

int i ;

float f, result; ...

result = (ch / i) + f ;

ch = i ;

i = result ;


6928417

برنامه‌سازي پيشرفته

اولويت عملگرها

w = x * y + w

?

w = (x * y) + w

يا

w = x * (y + w)


6928417

برنامه‌سازي پيشرفته

قواعد اولويت عملگرها و پرانتزها

w = x * y + w

تقدم عملگرهاي محاسباتي:

()

++ --

(يکاني) -

* / %

+ -


6928417

برنامه‌سازي پيشرفته

عملگرهاي رابطه‌اي

> , >= , < , <=

== , !=

مثال:

x > y

x == y

x != y


6928417

برنامه‌سازي پيشرفته

عملگرهاي منطقي

!

&&

||

مثال:

(x > 10) && (x < y)

! ( x > 20)


6928417

برنامه‌سازي پيشرفته

عملگرهاي بيتي

(And) &

(Or) |

(Xor) ^

(Not) ~

(Right Shift) >>

(Left Shift) <<


6928417

برنامه‌سازي پيشرفته

مثال

char x = 7 , y ;

y = x & 2 ;

y = ~y ;


6928417

برنامه‌سازي پيشرفته

عملگرهاي ديگر

  • عملگرهاي ترکيبي شامل:

    += , - = , *= , /= , %=

    که x = x + y معادل x += y

  • غيره (در جاي خود توضيح داده خواهند شد)


6928417

برنامه‌سازي پيشرفته

جلسة سوم


6928417

برنامه‌سازي پيشرفته

ساختار يک برنامة ساده

#include < header file>

void main()

{

تعريف متغيرها

دستورات اجرايي

}


6928417

برنامه‌سازي پيشرفته

توابع ورودي - خروجي C

تابع و نه دستور

مهمترين:printf و scanf

<stdio.h>


6928417

برنامه‌سازي پيشرفته

تابع خروجي printf

printf (“ عبارت 1” , عبارت 2 )

عبارت 2 : اطلاعاتي که بايد به خروجي منتقل شوند.

(اختياري است)


6928417

برنامه‌سازي پيشرفته

printf (“ عبارت 1” , عبارت 2 )

عبارت 1 مي‌تواند شامل:

  • اطلاعاتي که بايد عينا در خروجي چاپ شوند

  • کاراکترهاي تعيين کنندة فرمت خروجي

  • کاراکترهاي کنترلي


6928417

برنامه‌سازي پيشرفته

کاراکترهاي تعيين کنندة فرمت خروجي

  • مشخص کنندة نوع اطلاعات ذکر شده در عبارت 2

  • با علامت % شروع مي‌شوند. مانند:

    %c (براي کاراکتر)

    %d (براي عدد صحيح)

    %f (براي عدد اعشاري)


6928417

برنامه‌سازي پيشرفته

کاراکترهاي کنترلي

  • تعيين شکل اطلاعات خروجي

  • با علامت \ شروع مي‌شوند. مانند:

    \n انتقال به سطر جديد

    \f انتقال به صفحة جديد


6928417

برنامه‌سازي پيشرفته

مثال

printf (“this is a test.”);

خروجي

this is a test.


6928417

برنامه‌سازي پيشرفته

مثال

int i =10 ;

char ch = ‘a’ ;

printf (“%d , %c” , i , ch);

خروجي

10 , a


6928417

برنامه‌سازي پيشرفته

مثال

int i =10 ;

char ch = ‘a’ ;

printf (“i = %d , ch = %c” , i , ch);

خروجي

i = 10 , ch = a


6928417

برنامه‌سازي پيشرفته

مثال

int i =10 ;

char ch = ‘a’ ;

printf (“i = %d\nch = %c” , i , ch);

خروجي

i = 10

ch = a


6928417

برنامه‌سازي پيشرفته

اولين برنامه

#include <stdio.h>

void main()

{

printf (“This is our first C program”) ;

}


6928417

برنامه‌سازي پيشرفته

تابع ورودي scanf

scanf (“ عبارت 1” , عبارت 2 )

عبارت 2 : آدرس متغيرهايي که بايد خوانده شوند

عبارت 1 : نوع متغيرها و نحوة خوانده شدن آنها


6928417

برنامه‌سازي پيشرفته

عبارت 1 شامل:

  • کاراکترهاي فرمت. مشخص‌کنندة نوع اطلاعات. مانند:

    %c (کاراکتر)

    ‌%d (عدد صحيح)


6928417

برنامه‌سازي پيشرفته

  • کاراکتر فضاي خالي

    تاثير: در نظر نگرفتن (رد کردن) فضاي خالي در اطلاعات ورودي

  • کاراکترهاي ديگر

    تاثير: خواندن و صرفنظر کردن از کاراکتر فوق


6928417

برنامه‌سازي پيشرفته

مثال

int i , j ;

char ch ;

scanf (“%d %d %c” , &i , &j , &ch) ;


6928417

برنامه‌سازي پيشرفته

مثال برنامه‌نويسي

دريافت شعاع يک دايره از ورودي و چاپ مساحت آن در خروجي


6928417

برنامه‌سازي پيشرفته

#include <stdio.h>

void main()

{

float r, area ;


6928417

برنامه‌سازي پيشرفته

printf (“Enter the radius:”) ;

scanf (“%f” , &r) ;

area = 3.14 * r * r ;

printf (“\n area = %f” , area) ;

}


6928417

برنامه‌سازي پيشرفته

جلسة چهارم


6928417

برنامه‌سازي پيشرفته

دستورات کنترل روند برنامه

ساختارهاي تصميم

و

حلقه‌هاي تکرار


6928417

برنامه‌سازي پيشرفته

ساختارهاي تصميم

if

if else

switch


6928417

برنامه‌سازي پيشرفته

if (عبارت منطقي)

دستور ;

مثال:

if (x > 10)

x ++ ;


6928417

برنامه‌سازي پيشرفته

if (عبارت منطقي)

{

دستور 1 ;

دستور 2 ;

...

nدستور ;

}


6928417

برنامه‌سازي پيشرفته

مثال:

if (x < y)

{

x = x + y ;

printf (“%d , %d”, x , y) ;

}


6928417

برنامه‌سازي پيشرفته

if (عبارت منطقي) {

دستور ;

... ;

}

else {

دستور ;

... ;

}


6928417

برنامه‌سازي پيشرفته

if ( (x > 10) && (x < 20) ) {

y = x * x ;

x ++ ;

}

else {

x -- ;

y = x + y ;

}


6928417

برنامه‌سازي پيشرفته

مثال برنامه‌نويسي

برنامه‌اي بنويسيد که عددي را از ورودي دريافت کرده و زوج يا فرد بودن آن را مشخص کند.


6928417

برنامه‌سازي پيشرفته

#include <stdio.h>

void main() {

int i ;

scanf (“%d” , &i) ;

if (i % 2 == 0)

printf (“The number is even.”) ;

else printf (“The number is odd.”) ;

}


6928417

برنامه‌سازي پيشرفته

دستورات شرطي متداخل

if ...

...

else if ...

...

else if ...


6928417

برنامه‌سازي پيشرفته

مثال:

if (ch == ‘+’)

r = x + y ;

else if (ch == ‘-’)

r = x - y ;

else if (ch == ‘*’)

r = x * y ;


6928417

برنامه‌سازي پيشرفته

دستور switch

براي تصميم‌گيريهاي چندگانه بر اساس

مقادير مختلف يک عبارت

(به جاي if هاي متداخل)


6928417

برنامه‌سازي پيشرفته

switch (عبارت) {

case مقدار 1 :

دستورات 1

break ;

case مقدار 2 :

دستورات 2

break ;


6928417

برنامه‌سازي پيشرفته

.

.

.

default :

nدستورات

}


6928417

برنامه‌سازي پيشرفته

مثال:

char ch;

switch (ch) {

case ‘+’ :

r = x + y ;

break ;


6928417

برنامه‌سازي پيشرفته

case ‘-’ :

r = x - y ;

break ;

case ‘*’ :

r = x * y ;

break ;


6928417

برنامه‌سازي پيشرفته

case ‘/’ :

r = x / y ;

break ;

default :

r = 0 ;

printf (“Invalid operator.”) ;

}


6928417

برنامه‌سازي پيشرفته

نکات:

  • بخش default اختياري است.

  • مقادير موجود در case ها نبايد مساوي باشند.


6928417

برنامه‌سازي پيشرفته

  • در switch فقط تساوي را مي‌توان چک کرد.

  • در صورت عدم استفاده از break دستورات case بعدي و تا آخر اجرا خواهد شد.


6928417

برنامه‌سازي پيشرفته

int grade ;

switch ( grade ) {

case 18 :

case 19 :

case 20 :

printf (“Good”) ;

break ;


6928417

برنامه‌سازي پيشرفته

case 10 :

printf (“Acceptable”) ;

}


6928417

برنامه‌سازي پيشرفته

ساختارهاي کنترل غيرشرطي

break

continue

goto

بدليل پايين آوردن خوانايي

استفاده از آنها توصيه نمي‌شود.


6928417

برنامه‌سازي پيشرفته

جلسة پنجم


6928417

برنامه‌سازي پيشرفته

ساختارهاي تکرار

for

while

do ... while


6928417

برنامه‌سازي پيشرفته

حلقة for

يکي از قويترين و کاملترين دستورات C

در تمامي کاربردهاي حلقه مي‌تواند بکار رود


6928417

برنامه‌سازي پيشرفته

for ( مقدار دهي اوليه ; شرط حلقه ; گام حرکت )

{

دستورات

...

}


6928417

مقداردهي اوليه

شرط حلقه

بلي

اجراي دستورات

گام حرکت

خير

برنامه‌سازي پيشرفته

الگوريتم اجراي for


6928417

برنامه‌سازي پيشرفته

مثال:

for ( i = 1 ; i < 10 ; i ++ )

{

scanf (“%d” , &num) ;

sum = sum + num ;

}


6928417

برنامه‌سازي پيشرفته

نکات

هر يک از 3 قسمت فوق اختياري هستند.

for ( ; ; )

{

...

}


6928417

برنامه‌سازي پيشرفته

قسمتهاي مقدار دهي اوليهو گام حرکت مي‌توانند شامل چندين دستور باشند که با

,

از يکديگر جدا مي‌شوند.


6928417

برنامه‌سازي پيشرفته

مثال:

for ( i = 0 , sum = 0 ; i < 20 ; i ++ , j -- )

{

sum = sum + i + j ;

printf (“%d” , sum) ;

}


6928417

برنامه‌سازي پيشرفته

مثال:

for ( i = 10 , j = 0 ;

(i > 0) && (j <=20) ;

i -- , j ++)

printf (“%d , “ , i + j) ;


6928417

برنامه‌سازي پيشرفته

حلقة while

while ( شرط حلقه )

{

دستورات

...

}


6928417

برنامه‌سازي پيشرفته

مثال:

int sum = 0 , i = 0 ;

while ( i != -1 )

{

sum = sum + i ;

scanf (“%d” , &i) ;

}


6928417

برنامه‌سازي پيشرفته

حلقة do ... while

do {

دستورات

...

} while (شرط حلقه )


6928417

برنامه‌سازي پيشرفته

مثال:

do {

sum = sum + n ;

scanf (“%d” , &n) ;

} while (n != -1)


6928417

برنامه‌سازي پيشرفته

مثال:

تبديل حلقة while به for

for ( ; while شرط حلقة ; )

{

whileبدنة حلقة

}


6928417

برنامه‌سازي پيشرفته

تبديل حلقة while به for (روش ديگر)

for ( ; while شرط حلقة ; whileبدنة حلقة ) ;


6928417

برنامه‌سازي پيشرفته

جلسة ششم


6928417

برنامه‌سازي پيشرفته

توابع

( ليست پارامترها ) نام تابع نوع خروجي تابع

{

دستورات

...

}


6928417

برنامه‌سازي پيشرفته

int factorial ( int n )

{

int i , f ;

for ( i = 1 , f = 1 ; i <= n ; i ++ )

f = f * i ;

return f ;

}


6928417

برنامه‌سازي پيشرفته

فراخواني تابع

int fact ;

fact = factorial ( 12 ) ;

در صورتي که پارامتري نداشته باشد ذکر () الزامي است.

ret = f () ;


6928417

برنامه‌سازي پيشرفته

براي تابعي که خروجي ندارد از کلمة

void استفاده مي‌شود.

void f ( int i , float j )

...


6928417

برنامه‌سازي پيشرفته

در برنامه همة توابع در يک سطح هستند به اين معني که در داخل يک تابع نمي‌توان تابع ديگري تعريف کرد.


6928417

برنامه‌سازي پيشرفته

نکاتي در مورد نوشتن توابع

  • بدون پرداختن به جزئيات پياده‌سازي، پارامترها و خروجي را طراحي کنيد.

  • تابع بايد فقط به آنچه نياز دارد دسترسي داشته باشد (Information hiding)

  • براي ارتباط با تابع از پارامترها استفاده کنيد.


6928417

برنامه‌سازي پيشرفته

پارامترهاي تابع

Call by value :

تغيير پارامتر در داخل تابع تاثيري بر فراخواننده ندارد.

Call by reference :

تغيير پارامتر در داخل تابع بر فراخواننده تاثير دارد.


6928417

برنامه‌سازي پيشرفته

شکل کلي يک برنامة C


6928417

تابع 1

nتابع

mainتابع

برنامه‌سازي پيشرفته

include section

Global Variables

.

.

.


6928417

برنامه‌سازي پيشرفته

متغيرها

محدودة شناسايي متغير ( Scope )

طول عمر متغير ( Life time )


6928417

برنامه‌سازي پيشرفته

انواع متغيرها

  • عمومي: خارج از توابع تعريف مي‌شوند.

    محدوده: از محل تعريف تا انتهاي برنامه

    طول عمر: از شروع اجراي برنامه تا پايان آن


6928417

برنامه‌سازي پيشرفته

انواع متغيرها

  • محلي: در داخل يک تابع تعريف مي‌شوند.

    محدوده: در داخل تابعي که تعريف شده‌اند.

    طول عمر: با شروع اجراي تابع، ايجاد و با پايان اجراي آن از بين مي‌روند.


6928417

برنامه‌سازي پيشرفته

مسالة همنام بودن متغيرها

نزديکترين تعريف در نظر گرفته مي‌شود.

( ارجحيت تعريف محلي به عمومي )


6928417

برنامه‌سازي پيشرفته

مثال:

#incude <stdio.h>

int i , j ;

int f1 ( int j )

{

j = j + i ;

return j * j ;

}


6928417

برنامه‌سازي پيشرفته

int k ;

void f2 ( void )

{

int n ;

scanf (“%d” , &n);

j = f1 (n) + k ;

}


6928417

برنامه‌سازي پيشرفته

void main ()

{

int i ;

for (i = 0 , k = 10 ; i < 10 ; i ++ )

{

f2 () ;

printf (“j=%d” , j) ;

}

}


6928417

برنامه‌سازي پيشرفته

متغيرهاي استاتيک محلي

;نام متغير نوع متغيرstatic

static int s ;


6928417

برنامه‌سازي پيشرفته

متغيرهاي استاتيک محلي

طول عمر: با اولين اجراي تابع ايجاد شده و تا پايان اجراي برنامه باقي مي‌مانند.

در نتيجه:

با خروج از تابع مقدار خود را حفظ مي‌کنند


6928417

برنامه‌سازي پيشرفته

متغيرهاي استاتيک محلي

فقط يک بار مقدار اوليه مي‌گيرند.

static int s = 0 ;


6928417

برنامه‌سازي پيشرفته

جلسة هفتم


6928417

برنامه‌سازي پيشرفته

آرايه

مجموعه‌اي از داده‌هاي:

همنوع

ترتيب‌دار توسط انديسها

با حداکثر عناصر مشخص


6928417

A

A[0]

A[1]

A[2]

A[3]

A[4]

برنامه‌سازي پيشرفته

آراية يک بعدي

نام آرايه نوع عناصر آرايه[ تعداد عناصر آرايه ]

int A [ 5 ] ;


6928417

برنامه‌سازي پيشرفته

چگونگي ارجاع به عناصر آرايه

نام آرايه[ انديس عنصر مورد نظر ]

مثال:

A [ 3 ] = 124 ;


6928417

برنامه‌سازي پيشرفته

مثال: خواندن عناصر يک آرايه از ورودي

int a [ 100 ] , i ;

for (i = 0 ; i < 100 ; i ++)

scanf (“%d”, &a[ i ] );


6928417

برنامه‌سازي پيشرفته

آراية يک بعدي بعنوان پارامتر تابع

void f ( int x [ ] )

{ ... }

void main () {

int a [10] ; ...

f (a) ;

}


6928417

برنامه‌سازي پيشرفته

آرايه‌هاي چندبعدي

نام آرايه نوع عناصر آرايه[بعد 1 ] [بعد 2 ] ... [n بعد]

int A [ 10 ] [ 12 ] [ 20 ] ;

دستيابي به عناصر آرايه:

A [0] [1] [2] = 400 ;


6928417

برنامه‌سازي پيشرفته

مثال: مقداردهي اوليه به عناصر يک آراية دو بعدي

int a [10] [20] , row , col ;

for (row = 0 ; row < 10 ; row ++)

for (col = 0 ; col < 20 ; col ++)

a [row] [col] = 0 ;


6928417

برنامه‌سازي پيشرفته

رشته

آرايه‌اي از کاراکتر

char نام رشته [طول رشته ]

char Str [20] ;


6928417

a

l

i

\0

?

S

S[0]

S[1]

S[2]

S[3]

S[4]

برنامه‌سازي پيشرفته

مقداردهي اوليه و نحوة ذخيره

char S [5] = “ali” ;


6928417

برنامه‌سازي پيشرفته

ورودي - خروجي رشته‌ها

scanf (“%s” , str)

gets (str)

printf (“%s” , str)


6928417

برنامه‌سازي پيشرفته

فرقscanf و gets

در scanf کاراکتر فضاي خالي مرز رشته است

در حالي که

در gets فقط Enter پايان رشته است

مثال: رشتة “Computer Science”


6928417

برنامه‌سازي پيشرفته

نکته

براي کار با رشته‌ها نمي‌توان از اپراتورها استفاده کرد

بلکه بايد

از توابع مربوط به رشته‌ها استفاده کرد.

<string.h>


6928417

برنامه‌سازي پيشرفته

مثال

char s [10] ;

s = “ali” ; // نادرست

if ( s == “ABC”) // نادرست

printf (“%s” , s) ;


6928417

برنامه‌سازي پيشرفته

مهمترين توابع رشته‌اي

طول رشته:strlen (s)

انتساب: strcpy (s1 , s2)

مقايسه: strcmp (s1 , s2)


6928417

برنامه‌سازي پيشرفته

مثال برنامه‌نويسي

برنامه‌اي بنويسيد که تعدادي نام از ورودي دريافت کرده و بمحض دريافت نام ali تعداد نامهاي دريافتي را چاپ کند.


6928417

برنامه‌سازي پيشرفته

#include <stdio.h>

#include <string.h>

void main (){

char s [30] ;

int count ;


6928417

برنامه‌سازي پيشرفته

gets (s);

for ( count = 0 ; strcmp (s , “ali”) != 0 ; ){

count ++ ;

gets (s) ;

} ;

printf (“The number is: %d” , count) ;

}


6928417

برنامه‌سازي پيشرفته

جلسة هشتم


6928417

100

2002

2002

برنامه‌سازي پيشرفته

اشاره‌گر ( Pointer )

اشاره‌‌گر متغيري است که حاوي آدرس يک متغير است و در واقع به آن اشاره مي‌کند.


6928417

برنامه‌سازي پيشرفته

لزوم استفاده از اشاره‌گرها در C

  • درک و استفادة بهتر از آرايه‌ها و رشته‌ها

  • استفاده از پارامترهاي Call by reference در توابع

  • تخصيص حافظة پويا

  • ايجاد و کار با ساختمانهاي داده‌اي پيچيده


6928417

برنامه‌سازي پيشرفته

نحوة تعريف متغير اشاره‌گر

نام متغير اشاره‌گر * نوع داده‌اي که به آن اشاره مي‌کند

int* p ;

char * pc ;

float * fp ;


6928417

برنامه‌سازي پيشرفته

عملگرهاي اشاره‌گر

& : آدرس عملوند خود را مشخص مي‌کند.

عملوند آن نام يک متغير است. & i

* : محتواي عملوند خود را مشخص مي‌کند.

عملوند آن نام يک متغير اشاره‌گر است. * p


6928417

pi

i

100

2002

برنامه‌سازي پيشرفته

مثال

int i = 100 ;

int * pi ;


6928417

pi

pi

i

i

2002

2002

2002

2002

100

450

برنامه‌سازي پيشرفته

pi = & i ;

* pi = 450 ;


6928417

برنامه‌سازي پيشرفته

عملگرهاي مجاز ديگر

  • انتساب اشاره‌گرها به يکديگر

  • جمع و تفريق با يک ثابت يا عبارت محاسباتي

  • عملگرهاي رابطه‌اي


6928417

برنامه‌سازي پيشرفته

مثال

int * p1 , * p2 , i ;

p1 = p2 ;

p1 = p1 + 2 ;

p1 = p1 + i * 2 ;

p1 == p2

p2 <= p1


6928417

برنامه‌سازي پيشرفته

اشاره‌گرها و توابع

پارامتر Call by reference پارامتري است که تغييرات آن در داخل تابع عينا به فراخوانندة آن منعکس مي‌شود.

براي استفاده از اين نوع پارامتر بايد از اشاره‌گر استفاده کرد.


6928417

برنامه‌سازي پيشرفته

مثال برنامه‌نويسي

تابعي که محتواي دو متغير را با يکديگر عوض مي‌کند.


6928417

برنامه‌سازي پيشرفته

روش غلط

void swap (int a , int b)

{

int temp ;

temp = a ;

a = b ;

b = temp ;

}


6928417

برنامه‌سازي پيشرفته

روش صحيح

void swap (int *a , int *b)

{

int temp ;

temp = *a ;

*a = *b ;

*b = temp ;

}


6928417

برنامه‌سازي پيشرفته

void main ()

{

int x = 10 , y = 20 ;

swap ( &x , &y ) ;

printf (“x = %d , y = %d” , x , y) ;

}

خروجي:

x = 20 , y = 10


6928417

A + 2

A

A[0]

A[1]

A[2]

A[3]

A[4]

برنامه‌سازي پيشرفته

اشاره‌گر و آرايه

نام آرايه اشاره‌گر به اولين عنصر آن است.

int A [5] ;


6928417

برنامه‌سازي پيشرفته

بنابراين

A [2]

معادل

* (A + 2)

A [2] = 100 ;

* (A + 2) = 100 ;


6928417

برنامه‌سازي پيشرفته

رشته و اشاره‌گر

رشته نيز يک آرايه است

و بنابراين

نام رشته اشاره‌گر به اولين عنصر آن است.

scanf (“%s” , s) ;


6928417

برنامه‌سازي پيشرفته

آرايه و رشته بعنوان پارامتر تابع

void f (int *a ; char *s) {

...

a [2] = 100 ;

strcpy (s , “Ali”) ;

}


6928417

برنامه‌سازي پيشرفته

void main () {

int b [10] ;

char str [20] ;

...

f (b , str) ;

}


6928417

برنامه‌سازي پيشرفته

تخصيص حافظة پويا

؟

نياز به حافظه‌اي که مقدار آن موقع نوشتن برنامه مشخص نيست بلکه در زمان اجرا مشخص مي‌شود.


6928417

برنامه‌سازي پيشرفته

تابع تخصيص حافظة پويا

void * malloc (اندازة حافظة مورد نياز به بايت)

int *p ;

p = (int *) malloc ( sizeof (int) ) ;


6928417

برنامه‌سازي پيشرفته

تعريف يک آرايه بصورت پويا

int *A ;

A = (int *) malloc ( sizeof (int) * 100 ) ;

با دستورات فوق آرايه‌اي با ظرفيت 100 عنصر با نام A و بصورت پويا ايجاد مي‌شود.


6928417

برنامه‌سازي پيشرفته

تابع آزادسازي حافظة پويا

free (اشاره‌گري که قبلا به آن حافظه اختصاص داده شده)

int *A ;

A = (int *) malloc ( sizeof (int) * 100 ) ;

کار با حافظة پويا... //

free (A) ;


6928417

برنامه‌سازي پيشرفته

مثال

برنامه‌اي که نمرة تعدادي دانشجو را دريافت کرده و ...

تعداد دانشجويان ؟


6928417

برنامه‌سازي پيشرفته

روش غلط

int n ;

float A [n] ;

...

scanf (“%d” , &n) ;


6928417

برنامه‌سازي پيشرفته

روش صحيح

int n ;

float *A ;

...

scanf (“%d” , &n) ;

A = (float *) malloc (sizeof (float) * n) ;

کار با آرايةA ... //

free (A) ;


6928417

برنامه‌سازي پيشرفته

جلسة نهم


6928417

برنامه‌سازي پيشرفته

ساختمان ( Structure )

براي نگهداري اطلاعات

از انواع داده‌اي مختلف (بر خلاف آرايه)

مرتبط با يکديگر

تحت يک نام


6928417

برنامه‌سازي پيشرفته

struct نام نوع ساختمان

{

نام فيلد 1 نوع فيلد 1;

...

; نام فيلد n نوع فيلد n

} اسامي متغيرهاي از نوع ساختمان;

قسمت متغيرها در آخر اختياري است و بدون آن فقط يک نوع ساختمان تعريف مي‌شود.


6928417

برنامه‌سازي پيشرفته

مثال: ساختماني براي نگهداري اطلاعات دانشجو

struct student {

int student_no ;

char fname [20] ;

char lname [10] ;

float average ;

} ;

struct student stud1 , stud2 ;


6928417

برنامه‌سازي پيشرفته

دستيابي به فيلدهاي ساختمان

نام فيلد . نام متغير از نوع ساختمان

stud1.average = 17.3 ;

scanf (“%d” , &stud1. student_no) ;

strcpy (stud1.lname , “Rezaie”) ;


6928417

برنامه‌سازي پيشرفته

نکته

انتساب ساختمانهاي همنوع به يکديگر امکان‌پذير است که با اين عمل تک‌تک فيلدها منتقل خواهد شد.

struct student stud1 , stud2 ;

...

stud1 = stud2 ;


6928417

برنامه‌سازي پيشرفته

آرايه‌اي از ساختمانها

مثال:آرايه‌اي براي نگهداري اطلاعات دانشجويان يک کلاس

struct student A [100] ;

A [15].average = 12.25 ;

strcpy (str1 , A [2].fname) ;


6928417

برنامه‌سازي پيشرفته

ساختمان و اشاره‌گر

دسترسي به فيلدها توسط اشاره‌گر به ساختمان

نام فيلد - > نام اشاره‌گر به ساختمان

struct student *p ;

p = &stud1 ;

p - > average = 14.5 ;


6928417

برنامه‌سازي پيشرفته

مثال برنامه‌نويسي: جابجايي محتواي دو رکورد

void swap ( struct student *s1 ,

struct student *s2) {

struct student temp ;

temp = *s1 ;

*s1 = *s2 ;

*s2 = temp ;

}


6928417

برنامه‌سازي پيشرفته

union

محلي از حافظه است که توسط دو يا چند متغير بطور مشترک استفاده مي‌شود

البته

نه بصورت همزمان


6928417

برنامه‌سازي پيشرفته

تعريف union

union نام نوع يونيون

{

نام فيلد 1 نوع فيلد 1;

...

; نام فيلد n نوع فيلد n

} اسامي متغيرهاي از نوع يونيون;


6928417

برنامه‌سازي پيشرفته

مثال

union u

{

int i ;

char ch ;

float f ;

} u1 ;


6928417

برنامه‌سازي پيشرفته

حافظه‌اي که در نظر گرفته مي‌شود

به اندازة طول عنصري است که

بيشترين طول را دارد.

f

u1

ch

i


6928417

برنامه‌سازي پيشرفته

جلسة دهم


6928417

برنامه‌سازي پيشرفته

فايل

براي انتقال خروجي برنامه‌ها به حافظة پايدار

بدليل

ماندگاري آنها

ايجاد ارتباط بين برنامه‌ها (فايل بعنوان ورودي)


6928417

برنامه‌سازي پيشرفته

انواع فايلها

متن ( Text )

باينري ( Binary )


6928417

برنامه‌سازي پيشرفته

ساختار اطلاعات در فايل متن

رشته‌اي از کاراکترها

براي مثال عدد 253 بصورت سه کاراکتر 2، 5 و 3 ذخيره شده و سه بايت را اشغال مي‌کند.


6928417

برنامه‌سازي پيشرفته

هر سطر به کاراکترهاي پايان سطر ختم (CR/LF) ختم مي‌شود.

پايان فايل را کاراکتري با کد اسکي 26 مشخص مي‌کند.


6928417

برنامه‌سازي پيشرفته

مثال

Adgvvh12<CR/LF>1255346asd6633<CR/LF><\26>


6928417

برنامه‌سازي پيشرفته

ساختار اطلاعات در فايل باينري

داده‌ها به همان شکل موجود در حافظه ذخيره مي‌شوند.

براي مثال عدد 253 چون يک عدد صحيح است در 2 بايت ذخيره مي‌شود.


6928417

برنامه‌سازي پيشرفته

پايان سطر در فايل باينري مفهومي ندارد.

پايان فايل از طول آن مشخص مي‌شود

(ديگر کاراکتر 26 پايان دهنده نيست)


6928417

برنامه‌سازي پيشرفته

مثال

♣:↓☻↨•¶9◘âèÿ‡A€Ө£¥:↓☻↨ âèÿ‡A€Ө£¥

داده‌هايي با نمايش قابل فهم نيستند


6928417

برنامه‌سازي پيشرفته

امكانات منطقي لازم دراستفاده از فايلها

  • تعريف متغير از نوع فايل

  • تعيين محل و عنوان فيزيکی فايل

  • باز کردن فايل

  • خواندن داده از فايل ورودی


6928417

برنامه‌سازي پيشرفته

  • نوشتن داده در فايل خروجی

  • اضافه کردن داده به انتهاي فايل

  • آزمون انتهای فايل درهنگام خواندن

  • آزمون انتهای سطر درهنگام خواندن (فقط فايل متن)

  • قرار دادن <CR/LF> در انتهاى سطر (فقط فايل متن)

  • بستن فايل


6928417

برنامه‌سازي پيشرفته

باز کردن فايل

FILE * fopen(char *filename, char *mode)

خروجي تابع به يک متغير اشاره‌گرفايل نسبت داده مي‌شود.

filename : مسير و نام فايل روي ديسک

mode : مشخص کنندة چگونگي باز شدن فايل


6928417

برنامه‌سازي پيشرفته

mode ترکيبي از کارکترهاي:

r فايل ورودي

w فايل خروجي

a اضافه کردن داده به انتهاي فايل

t فايل متن

b فايل باينري

+ فايل ورودي و خروجي


6928417

برنامه‌سازي پيشرفته

مثال

rt : فايل متن به عنوان ورودي

at : فايل متن براي اضافه کردن داده به انتهاي فايل

wb : فايل باينري به عنوان خروجي

r+b : فايل باينري به عنوان ورودي و خروجي


6928417

برنامه‌سازي پيشرفته

مثال

FILE *fp ;

fp = fopen (“c:\test.txt” , “wt”) ;

if (fp == NULL)

printf (“can not open file.”) ;

هميشه بايد براي اطمينان، باز شدن موفقيت آميز فايل را تست کرد.


6928417

برنامه‌سازي پيشرفته

بستن فايل

در انتهاي کار با فايل آن را مي‌بنديم.

fclose (FILE *fp) ;

مثال:

fclose (fp) ;


6928417

برنامه‌سازي پيشرفته

جلسة يازدهم


6928417

برنامه‌سازي پيشرفته

مهمترين توابع ورودي - خروجي فايل

fscanf

fprintf

fread

fwrite


6928417

برنامه‌سازي پيشرفته

fprintf (FILE *fp , “ عبارت 1” , عبارت 2 )

fscanf (FILE *fp , “ عبارت 1” , عبارت 2 )

دقيقا همانند printf و scanf

با تفاوت

ذکر اشاره‌گر فايل در ابتداي آنها


6928417

برنامه‌سازي پيشرفته

مثال

FILE *fp1 , *fp2 ;

fp1 = fopen (“c:\test.txt” , “rt”) ;

fp2 = fopen (“c:\ali.dat” , “wb”) ;

...

fscanf (fp1 , “%d %f %s” , &i , &f , str) ;

fprintf (fp2 , “%f, %s” , f , str) ;


6928417

برنامه‌سازي پيشرفته

fread و fwrite

بيشتر براي ورودي - خروجي رکورد استفاده مي‌شود

ولي

در همة موارد مي‌تواند بکار رود

و

سرعت بالايي نيز دارد.


6928417

برنامه‌سازي پيشرفته

fread (void *buffer, int num_byte ,

int count, FILE *fp)

buffer : محلي از حافظه که داده‌هاي خوانده شده بايد در آن قرار گيرند.

num_byte : طول داده‌اي که بايد خوانده شود.

count : تعداد عناصري (به طول num_byte) که بايد از فايل خوانده شوند.

fp : اشاره‌گر به فايلي که بايد از آن خوانده شود.


6928417

برنامه‌سازي پيشرفته

مثال

struct student stud ;

fread ( &stud ,

sizeof (struct student) ,

1 , fp ) ;


6928417

برنامه‌سازي پيشرفته

مثال

int a [20] ;

fread (a , sizeof (int) , 20 , fp ) ;

دريافت 20 عدد از فايل و قرار دادن آن در آرايه


6928417

برنامه‌سازي پيشرفته

fwrite (void *buffer, int num_byte ,

int count, FILE *fp)

پارامترهاي اين دستور دقيقا مانند fread است

با اين تفاوت که

buffer محلي از حافظه است که داده‌هايي که بايد در فايل نوشته شوند در آن قرار مي‌گيرند.


6928417

برنامه‌سازي پيشرفته

تشخيص پايان فايل

int feof (FILE *fp)

مثال:

if ( feof (fp) ) {

printf (“End of File”) ;

fclose (fp) ;

{


6928417

برنامه‌سازي پيشرفته

بازگشت به ابتداي فايل

rewind (FILE *fp)

مثال:

rewind (fp) ;


6928417

برنامه‌سازي پيشرفته

دسترسي تصادفي به فايل

fseek (FILE *fp, long num_byte, int origin)

اين تابع Cursor فايل را به تعداد num_byte بايت از محل origin تغيير مکان مي‌دهد.


6928417

برنامه‌سازي پيشرفته

origin :

  • SEEK_SET : ابتداي فايل

  • SEEK_CUR : موقعيت فعلي فايل

  • SEEK_END : انتهاي فايل


6928417

برنامه‌سازي پيشرفته

مثال

fseek (fp , 10 , SEEK_SET)

Cursor فايل را از اول فايل 10 بايت جلو مي‌برد.

fseek (fp , -20 , SEEK_END)

Cursor فايل را از انتهاي فايل 20 بايت عقب مي‌برد.


6928417

برنامه‌سازي پيشرفته

اصول اساسي شي‌گرايي

  • تجريد (Abstraction)

  • کپسوله‌سازي (Encapsulation)

  • ارث‌بري (Inheritance)


6928417

برنامه‌سازي پيشرفته

تجريد

استخراج مدلي از مسئله با در نظر گرفتن مهمترين نکات و حذف جزئيات زائد


6928417

برنامه‌سازي پيشرفته

کپسوله‌سازي

مخفي کردن جزئيات پياده‌سازي از کاربران


6928417

برنامه‌سازي پيشرفته

کپسوله‌سازي (ادامه)

کاربران فقط به واسط استفاده وابسته هستند و نه به جزئيات پياده‌سازي


6928417

برنامه‌سازي پيشرفته

ارث‌بري

نظم بخشيدن به تجريدهاي بدست آمده در ساختاري شبيه به درخت جهت قابليت استفاده مجدد


6928417

برنامه‌سازي پيشرفته

مفاهيم پايه شئ‌گرايي

  • شئ(Object)

  • کلاس (Class)

  • صفت (Property)

  • متد (Method)


6928417

اتوموبيل

چکش

فرآيند شيميايي

برنامه‌سازي پيشرفته

Object

موجوديت فيزيکي و يا مفهومي است مانند:


6928417

برنامه‌سازي پيشرفته

Object(ادامه)

مجموعه‌اي از داده‌ها +اعمال بر روي آن داده‌ها

مشخصا يک شئ داراي:

  • حالت

  • رفتار

  • هويت


6928417

برنامه‌سازي پيشرفته

Object(ادامه)

حالت: وضعيتي که هر لحظه شئ در آن قرار دارد و با مقدار صفات آن در آن لحظه مشخص مي‌شود.

رفتار: روشي که شئ به تعامل با ديگر اشيا مي‌پردازد که در واقع همان واسط ارتباطي شئ است.

هويت: همان چيزي است که دو شئ را از يکديگر متمايز مي‌سازد حتي اگر داراي حالت و رفتار يکسان باشند.


6928417

برنامه‌سازي پيشرفته

مثالهايي از شئ

اشيا معمولا با مستطيل نمايش داده مي‌شوند:


6928417

برنامه‌سازي پيشرفته

نمايش اشياء

با يک مستطيل و اسمي که زير آن خط کشيده شده نمايش داده مي‌شود.

: Lecturer

Y.Welikala

Y.Welikala : Lecturer


6928417

برنامه‌سازي پيشرفته

کلاس

مجموعه‌اي از اشيا داراي ويژگي و رفتار يکسان را کلاس مي‌نامند.

مانند کلاس:

  • انسان

  • دانشجو

  • ماشين

  • ...


6928417

برنامه‌سازي پيشرفته

کلاس (ادامه)

  • شي نمونه‌اي (instance) از يک کلاس است.

  • کلاس تجريدي است:

    • با تاکيد بر ويژگيهاي مرتبط

    • ناديده گرفتن ويژگيهاي نامرتبط


6928417

برنامه‌سازي پيشرفته

کلاس نمونه

  • Class

  • Course

ويژگيها

Name

Location

Days offered

Credit hours

Start time

End time

رفتارها

Add a student

Delete a student

Get course roster

Determine if it is full


6928417

برنامه‌سازي پيشرفته

نمايش کلاسها

  • کلاس با يک مستطيل به صورت زير نمايش داده مي‌شود.

Lecturer

نام

ذخيره کردن


6928417

برنامه‌سازي پيشرفته

کلاسهايي از اشيا

  • چند تا کلاس مشاهده مي‌کنيد؟


6928417

برنامه‌سازي پيشرفته

ويژگي چيست؟

شي

کلاس

ويژگي

:CourseOffering

مقدار ويژگي

Number=CS201

startTime=1030

endTime=1230

CourseOffering

number

startTime

:CourseOffering

endTime

Number=CS202

startTime=1300

startTime=900

startTime=900

endTime=1500

endTime=1100


6928417

رفتار چيست؟

برنامه‌سازي پيشرفته

کلاس

CourseOffering

addStudent

deleteStudent

getStartTime

رفتار

getEndTime


6928417

برنامه‌سازي پيشرفته

نحوه تعريف کلاس (شکل ساده)

class <class_name> // class header (prototype)

{

public:

<function_prototypes>

protected:

<function_prototypes>

private:

<function_prototypes>

<data_attributes>

};


6928417

برنامه‌سازي پيشرفته

مثال

Class point

{

private float x, y;

public void draw();

}


6928417

برنامه‌سازي پيشرفته

نحوه تعريف کلاس (شکل ساده)

  • کلمات public, private, protected تعيين کنندة نحوه دسترسي استفاده‌کنندگان از کلاس به ويژگيها و رفتار (متدها) کلاس مي‌باشد.

  • public به معني دسترسي براي عموم مي‌باشد.

  • private به معني دسترسي فقط براي اعضاي کلاس مي‌باشد.

  • protected به معني دسترسي براي اعضاي کلاس و ارث‌برندگان کلاس مي‌باشد.


6928417

برنامه‌سازي پيشرفته

نحوه تعريف کلاس (ارث‌بري)

class <class_name> : <superclass_name>

{

public:

<function_prototypes>

protected:

<function_prototypes>

private:

<function_prototypes>

<data_attributes>

};


6928417

برنامه‌سازي پيشرفته

سازنده کلاس

در ‍‍‍‍C++ متدي از کلاس که همنام آن کلاس است سازنده کلاس است.

به اين معني که موقع ايجاد شئ از آن کلاس ابتدا متد مذکور اجرا مي‌شود.


6928417

برنامه‌سازي پيشرفته

مثال

Class point

{

private float x, y;

public void point(float,float);

public void draw();

}


6928417

برنامه‌سازي پيشرفته

مخرب کلاس

در ‍‍‍‍C++ متدي از کلاس که همنام آن کلاس و با يک علامت ~ قبل از آن است مخرب کلاس است.

به اين معني که موقع از بين رفتن شئ آن کلاس در انتها متد مذکور اجرا مي‌شود.


6928417

برنامه‌سازي پيشرفته

مثال

Class point

{

private float x, y;

public void ~point();

public void draw();

}


6928417

برنامه‌سازي پيشرفته

نحوة ايجاد شئ

با استفاده از اپراتور new

Class point {…}

point p = new point(0,10) ;


6928417

برنامه‌سازي پيشرفته

ورودي در ‍‍‍‍C++

>> اپراتور ورودي

مثال:

cin >> var1, var2, var3;


6928417

برنامه‌سازي پيشرفته

ورودي در ‍‍‍‍C++

<< اپراتور خروجي

مثال:

cout << “Text :” << var2 ;


6928417

برنامه‌سازي پيشرفته


6928417

برنامه‌سازي پيشرفته


6928417

برنامه‌سازي پيشرفته


6928417

برنامه‌سازي پيشرفته

پايان


  • Login