slide1
Download
Skip this Video
Download Presentation
برنامه‌سازي پيشرفته

Loading in 2 Seconds...

play fullscreen
1 / 240

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


  • 149 Views
  • Uploaded on

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

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' برنامه‌سازي پيشرفته' - devin-barlow


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
slide2
برنامه‌سازي پيشرفته

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

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

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

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

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

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

(ويرايش دوم)

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

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

زبان B

زبان BCPL

زبان C :

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

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

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

  • C يک زبان مياني است
slide6
برنامه‌سازي پيشرفته

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

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

Assembly

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

Java، ‍‍‍‍C

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

Pascal، Ada، Cobol، Basic

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

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

  • C يک زبان ساختيافته است.
  • C زبان برنامه‌نويسي سيستم است.
  • C يک زبان قابل حمل است.
  • C زباني قابل انعطاف و قدرتمند است.
slide8
برنامه‌سازي پيشرفته

کليات زبان C

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

INT و int

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

مثال: for ، if ، while

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

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

کليات زبان C

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

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

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

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

کليات زبان C

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

/* this is a sample comment. */

// this is another sample comment.

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

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

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

ANSI C

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

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

Borland C++ 3.1

slide13

پردازش

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

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

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

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

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

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

  • دستورات کامپايلر زبان
  • دستورات ورودي - خروجي
  • دستورات محاسباتي و منطقي
  • دستورات کنترل روند برنامه
slide16
برنامه‌سازي پيشرفته

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

int

float

double

char

void

boolean ?!!

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

int

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

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

32767-

2762+

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

float

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

نمايش معمولی

نمايش علمی

12.3E- 4 = 12.00003

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

double

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

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

Char

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

‘a’

‘A’

‘+’

‘~’

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

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

void

دادة تهي

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

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

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

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

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

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

long ، short

مانند:

unsigned int

long int

unsinged long int

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

متغيرها

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

  • حروف ‘a’ تا ‘z’ ، ‘A’ تا ‘Z’ ، ارقام و ‘_’
  • اولين کاراکتر رقم نباشد.
  • کلمات کليدي نمي‌توانند نام متغير باشند.
slide24
برنامه‌سازي پيشرفته

متغيرها

اسامي مجاز:

count

c124

avg_grade

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

1test

bin#tree

for

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

تعريف متغير

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

int x ;

float m, n ;

char ch1, ch2, ch3 ;

long int count ;

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

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

int x = 5, y ;

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

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

ثابتها

تعريف ثابت:

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

يا

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

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

مثال

#define M 100

#define P 3.14

const int n = 100 ;

const char c = ‘a’ ;

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

عملگرها

  • محاسباتي
  • رابطه‌اي
  • منطقي
  • بيتي
slide30
برنامه‌سازي پيشرفته

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

(يکاني)-

+ , - , * , / , %

++ , --

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

مثال

- x

x + y

x / y

x % y

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

++ و --

تفاوت

x ++

و

++ x

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

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

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

x + y * z / 2 - y

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

دستور انتساب

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

int x, y = 19, z ;

x = 10 ;

z = x * 2 + y ;

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

تبديل انواع

char ch ;

int i ;

float f, result; ...

result = (ch / i) + f ;

ch = i ;

i = result ;

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

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

w = x * y + w

?

w = (x * y) + w

يا

w = x * (y + w)

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

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

w = x * y + w

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

()

++ --

(يکاني) -

* / %

+ -

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

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

> , >= , < , <=

== , !=

مثال:

x > y

x == y

x != y

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

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

!

&&

||

مثال:

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

! ( x > 20)

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

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

(And) &

(Or) |

(Xor) ^

(Not) ~

(Right Shift) >>

(Left Shift) <<

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

مثال

char x = 7 , y ;

y = x & 2 ;

y = ~y ;

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

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

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

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

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

  • غيره (در جاي خود توضيح داده خواهند شد)
slide44
برنامه‌سازي پيشرفته

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

#include < header file>

void main()

{

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

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

}

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

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

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

مهمترين:printf و scanf

<stdio.h>

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

تابع خروجي printf

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

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

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

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

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

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

  • اطلاعاتي که بايد عينا در خروجي چاپ شوند
  • کاراکترهاي تعيين کنندة فرمت خروجي
  • کاراکترهاي کنترلي
slide48
برنامه‌سازي پيشرفته

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

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

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

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

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

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

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

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

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

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

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

مثال

printf (“this is a test.”);

خروجي

this is a test.

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

مثال

int i =10 ;

char ch = ‘a’ ;

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

خروجي

10 , a

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

مثال

int i =10 ;

char ch = ‘a’ ;

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

خروجي

i = 10 , ch = a

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

مثال

int i =10 ;

char ch = ‘a’ ;

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

خروجي

i = 10

ch = a

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

اولين برنامه

#include <stdio.h>

void main()

{

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

}

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

تابع ورودي scanf

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

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

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

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

عبارت 1 شامل:

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

%c (کاراکتر)

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

slide57
برنامه‌سازي پيشرفته
  • کاراکتر فضاي خالي

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

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

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

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

مثال

int i , j ;

char ch ;

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

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

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

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

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

#include <stdio.h>

void main()

{

float r, area ;

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

printf (“Enter the radius:”) ;

scanf (“%f” , &r) ;

area = 3.14 * r * r ;

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

}

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

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

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

و

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

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

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

if

if else

switch

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

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

دستور ;

مثال:

if (x > 10)

x ++ ;

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

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

{

دستور 1 ;

دستور 2 ;

...

nدستور ;

}

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

مثال:

if (x < y)

{

x = x + y ;

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

}

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

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

دستور ;

... ;

}

else {

دستور ;

... ;

}

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

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

y = x * x ;

x ++ ;

}

else {

x -- ;

y = x + y ;

}

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

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

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

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

#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.”) ;

}

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

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

if ...

...

else if ...

...

else if ...

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

مثال:

if (ch == ‘+’)

r = x + y ;

else if (ch == ‘-’)

r = x - y ;

else if (ch == ‘*’)

r = x * y ;

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

دستور switch

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

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

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

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

switch (عبارت) {

case مقدار 1 :

دستورات 1

break ;

case مقدار 2 :

دستورات 2

break ;

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

.

.

.

default :

nدستورات

}

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

مثال:

char ch;

switch (ch) {

case ‘+’ :

r = x + y ;

break ;

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

case ‘-’ :

r = x - y ;

break ;

case ‘*’ :

r = x * y ;

break ;

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

case ‘/’ :

r = x / y ;

break ;

default :

r = 0 ;

printf (“Invalid operator.”) ;

}

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

نکات:

  • بخش default اختياري است.
  • مقادير موجود در case ها نبايد مساوي باشند.
slide81
برنامه‌سازي پيشرفته
  • در switch فقط تساوي را مي‌توان چک کرد.
  • در صورت عدم استفاده از break دستورات case بعدي و تا آخر اجرا خواهد شد.
slide82
برنامه‌سازي پيشرفته

int grade ;

switch ( grade ) {

case 18 :

case 19 :

case 20 :

printf (“Good”) ;

break ;

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

case 10 :

printf (“Acceptable”) ;

}

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

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

break

continue

goto

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

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

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

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

for

while

do ... while

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

حلقة for

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

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

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

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

{

دستورات

...

}

slide89

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

شرط حلقه

بلي

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

گام حرکت

خير

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

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

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

مثال:

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

{

scanf (“%d” , &num) ;

sum = sum + num ;

}

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

نکات

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

for ( ; ; )

{

...

}

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

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

,

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

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

مثال:

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

{

sum = sum + i + j ;

printf (“%d” , sum) ;

}

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

مثال:

for ( i = 10 , j = 0 ;

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

i -- , j ++)

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

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

حلقة while

while ( شرط حلقه )

{

دستورات

...

}

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

مثال:

int sum = 0 , i = 0 ;

while ( i != -1 )

{

sum = sum + i ;

scanf (“%d” , &i) ;

}

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

حلقة do ... while

do {

دستورات

...

} while (شرط حلقه )

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

مثال:

do {

sum = sum + n ;

scanf (“%d” , &n) ;

} while (n != -1)

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

مثال:

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

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

{

whileبدنة حلقة

}

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

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

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

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

توابع

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

{

دستورات

...

}

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

int factorial ( int n )

{

int i , f ;

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

f = f * i ;

return f ;

}

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

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

int fact ;

fact = factorial ( 12 ) ;

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

ret = f () ;

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

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

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

void f ( int i , float j )

...

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

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

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

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

  • بدون پرداختن به جزئيات پياده‌سازي، پارامترها و خروجي را طراحي کنيد.
  • تابع بايد فقط به آنچه نياز دارد دسترسي داشته باشد (Information hiding)
  • براي ارتباط با تابع از پارامترها استفاده کنيد.
slide108
برنامه‌سازي پيشرفته

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

Call by value :

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

Call by reference :

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

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

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

slide110

تابع 1

nتابع

mainتابع

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

include section

Global Variables

.

.

.

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

متغيرها

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

مثال:

#incude <stdio.h>

int i , j ;

int f1 ( int j )

{

j = j + i ;

return j * j ;

}

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

int k ;

void f2 ( void )

{

int n ;

scanf (“%d” , &n);

j = f1 (n) + k ;

}

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

void main ()

{

int i ;

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

{

f2 () ;

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

}

}

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

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

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

static int s ;

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

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

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

در نتيجه:

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

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

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

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

static int s = 0 ;

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

آرايه

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

همنوع

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

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

slide123

A

A[0]

A[1]

A[2]

A[3]

A[4]

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

آراية يک بعدي

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

int A [ 5 ] ;

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

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

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

مثال:

A [ 3 ] = 124 ;

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

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

int a [ 100 ] , i ;

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

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

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

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

void f ( int x [ ] )

{ ... }

void main () {

int a [10] ; ...

f (a) ;

}

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

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

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

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

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

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

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

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

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

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

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

a [row] [col] = 0 ;

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

رشته

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

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

char Str [20] ;

slide130

a

l

i

\0

?

S

S[0]

S[1]

S[2]

S[3]

S[4]

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

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

char S [5] = “ali” ;

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

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

scanf (“%s” , str)

gets (str)

printf (“%s” , str)

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

فرقscanf و gets

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

در حالي که

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

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

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

نکته

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

بلکه بايد

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

<string.h>

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

مثال

char s [10] ;

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

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

printf (“%s” , s) ;

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

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

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

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

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

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

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

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

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

#include <stdio.h>

#include <string.h>

void main (){

char s [30] ;

int count ;

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

gets (s);

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

count ++ ;

gets (s) ;

} ;

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

}

slide140

100

2002

2002

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

اشاره‌گر ( Pointer )

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

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

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

  • درک و استفادة بهتر از آرايه‌ها و رشته‌ها
  • استفاده از پارامترهاي Call by reference در توابع
  • تخصيص حافظة پويا
  • ايجاد و کار با ساختمانهاي داده‌اي پيچيده
slide142
برنامه‌سازي پيشرفته

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

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

int * p ;

char * pc ;

float * fp ;

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

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

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

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

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

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

slide144

pi

i

100

2002

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

مثال

int i = 100 ;

int * pi ;

slide145

pi

pi

i

i

2002

2002

2002

2002

100

450

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

pi = & i ;

* pi = 450 ;

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

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

  • انتساب اشاره‌گرها به يکديگر
  • جمع و تفريق با يک ثابت يا عبارت محاسباتي
  • عملگرهاي رابطه‌اي
slide147
برنامه‌سازي پيشرفته

مثال

int * p1 , * p2 , i ;

p1 = p2 ;

p1 = p1 + 2 ;

p1 = p1 + i * 2 ;

p1 == p2

p2 <= p1

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

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

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

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

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

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

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

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

روش غلط

void swap (int a , int b)

{

int temp ;

temp = a ;

a = b ;

b = temp ;

}

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

روش صحيح

void swap (int *a , int *b)

{

int temp ;

temp = *a ;

*a = *b ;

*b = temp ;

}

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

void main ()

{

int x = 10 , y = 20 ;

swap ( &x , &y ) ;

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

}

خروجي:

x = 20 , y = 10

slide153

A + 2

A

A[0]

A[1]

A[2]

A[3]

A[4]

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

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

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

int A [5] ;

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

بنابراين

A [2]

معادل

* (A + 2)

A [2] = 100 ;

* (A + 2) = 100 ;

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

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

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

و بنابراين

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

scanf (“%s” , s) ;

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

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

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

...

a [2] = 100 ;

strcpy (s , “Ali”) ;

}

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

void main () {

int b [10] ;

char str [20] ;

...

f (b , str) ;

}

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

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

؟

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

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

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

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

int *p ;

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

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

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

int *A ;

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

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

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

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

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

int *A ;

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

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

free (A) ;

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

مثال

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

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

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

روش غلط

int n ;

float A [n] ;

...

scanf (“%d” , &n) ;

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

روش صحيح

int n ;

float *A ;

...

scanf (“%d” , &n) ;

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

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

free (A) ;

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

ساختمان ( Structure )

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

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

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

تحت يک نام

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

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

{

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

...

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

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

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

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

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

struct student {

int student_no ;

char fname [20] ;

char lname [10] ;

float average ;

} ;

struct student stud1 , stud2 ;

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

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

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

stud1.average = 17.3 ;

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

strcpy (stud1.lname , “Rezaie”) ;

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

نکته

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

struct student stud1 , stud2 ;

...

stud1 = stud2 ;

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

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

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

struct student A [100] ;

A [15].average = 12.25 ;

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

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

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

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

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

struct student *p ;

p = &stud1 ;

p - > average = 14.5 ;

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

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

void swap ( struct student *s1 ,

struct student *s2) {

struct student temp ;

temp = *s1 ;

*s1 = *s2 ;

*s2 = temp ;

}

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

union

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

البته

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

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

تعريف union

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

{

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

...

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

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

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

مثال

union u

{

int i ;

char ch ;

float f ;

} u1 ;

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

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

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

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

f

u1

ch

i

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

فايل

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

بدليل

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

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

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

انواع فايلها

متن ( Text )

باينري ( Binary )

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

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

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

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

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

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

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

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

مثال

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

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

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

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

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

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

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

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

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

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

مثال

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

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

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

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

  • تعريف متغير از نوع فايل
  • تعيين محل و عنوان فيزيکی فايل
  • باز کردن فايل
  • خواندن داده از فايل ورودی
slide188
برنامه‌سازي پيشرفته
  • نوشتن داده در فايل خروجی
  • اضافه کردن داده به انتهاي فايل
  • آزمون انتهای فايل درهنگام خواندن
  • آزمون انتهای سطر درهنگام خواندن (فقط فايل متن)
  • قرار دادن <CR/LF> در انتهاى سطر (فقط فايل متن)
  • بستن فايل
slide189
برنامه‌سازي پيشرفته

باز کردن فايل

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

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

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

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

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

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

r فايل ورودي

w فايل خروجي

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

t فايل متن

b فايل باينري

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

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

مثال

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

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

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

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

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

مثال

FILE *fp ;

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

if (fp == NULL)

printf (“can not open file.”) ;

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

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

بستن فايل

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

fclose (FILE *fp) ;

مثال:

fclose (fp) ;

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

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

fscanf

fprintf

fread

fwrite

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

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

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

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

با تفاوت

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

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

مثال

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) ;

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

fread و fwrite

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

ولي

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

و

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

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

fread (void *buffer, int num_byte ,

int count, FILE *fp)

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

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

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

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

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

مثال

struct student stud ;

fread ( &stud ,

sizeof (struct student) ,

1 , fp ) ;

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

مثال

int a [20] ;

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

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

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

fwrite (void *buffer, int num_byte ,

int count, FILE *fp)

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

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

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

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

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

int feof (FILE *fp)

مثال:

if ( feof (fp) ) {

printf (“End of File”) ;

fclose (fp) ;

{

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

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

rewind (FILE *fp)

مثال:

rewind (fp) ;

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

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

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

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

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

origin :

  • SEEK_SET : ابتداي فايل
  • SEEK_CUR : موقعيت فعلي فايل
  • SEEK_END : انتهاي فايل
slide207
برنامه‌سازي پيشرفته

مثال

fseek (fp , 10 , SEEK_SET)

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

fseek (fp , -20 , SEEK_END)

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

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

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

  • تجريد (Abstraction)
  • کپسوله‌سازي (Encapsulation)
  • ارث‌بري (Inheritance)
slide209
برنامه‌سازي پيشرفته

تجريد

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

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

کپسوله‌سازي

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

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

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

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

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

ارث‌بري

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

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

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

  • شئ(Object)
  • کلاس (Class)
  • صفت (Property)
  • متد (Method)
slide214

اتوموبيل

چکش

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

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

Object

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

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

Object(ادامه)

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

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

  • حالت
  • رفتار
  • هويت
slide216
برنامه‌سازي پيشرفته

Object(ادامه)

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

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

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

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

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

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

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

نمايش اشياء

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

: Lecturer

Y.Welikala

Y.Welikala : Lecturer

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

کلاس

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

مانند کلاس:

  • انسان
  • دانشجو
  • ماشين
  • ...
slide220
برنامه‌سازي پيشرفته

کلاس (ادامه)

  • شي نمونه‌اي (instance) از يک کلاس است.
  • کلاس تجريدي است:
    • با تاکيد بر ويژگيهاي مرتبط
    • ناديده گرفتن ويژگيهاي نامرتبط
slide221
برنامه‌سازي پيشرفته

کلاس نمونه

  • 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

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

نمايش کلاسها

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

Lecturer

نام

ذخيره کردن

slide223

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

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

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

ويژگي چيست؟

شي

کلاس

ويژگي

:CourseOffering

مقدار ويژگي

Number=CS201

startTime=1030

endTime=1230

CourseOffering

number

startTime

:CourseOffering

endTime

Number=CS202

startTime=1300

startTime=900

startTime=900

endTime=1500

endTime=1100

slide225
رفتار چيست؟

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

کلاس

CourseOffering

addStudent

deleteStudent

getStartTime

رفتار

getEndTime

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

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

class <class_name> // class header (prototype)

{

public:

<function_prototypes>

protected:

<function_prototypes>

private:

<function_prototypes>

<data_attributes>

};

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

مثال

Class point

{

private float x, y;

public void draw();

}

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

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

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

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

class <class_name> : <superclass_name>

{

public:

<function_prototypes>

protected:

<function_prototypes>

private:

<function_prototypes>

<data_attributes>

};

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

سازنده کلاس

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

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

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

مثال

Class point

{

private float x, y;

public void point(float,float);

public void draw();

}

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

مخرب کلاس

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

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

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

مثال

Class point

{

private float x, y;

public void ~point();

public void draw();

}

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

نحوة ايجاد شئ

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

Class point {…}

point p = new point(0,10) ;

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

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

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

مثال:

cin >> var1, var2, var3;

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

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

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

مثال:

cout << “Text :” << var2 ;

ad