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

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


  • 111 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


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

جلسة اول


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

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

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

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


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

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

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

(ويرايش دوم)


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

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

زبان B

زبان BCPL

زبان C :

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


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

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

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


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

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

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

Assembly

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

Java، ‍‍‍‍C

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

Pascal، Ada، Cobol، Basic


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

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

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

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

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

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


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

کليات زبان C

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

    INT و int

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

    مثال: for ، if ، while

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


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

کليات زبان C

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

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

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


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

کليات زبان C

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

    /* this is a sample comment. */

    // this is another sample comment.


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

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

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

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

    ANSI C


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

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

Borland C++ 3.1


پردازش

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

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

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

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


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

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

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

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

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

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


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

جلسة دوم


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

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

int

float

double

char

void

boolean ?!!


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

int

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

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

32767-

2762+


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

float

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

نمايش معمولی

نمايش علمی

12.3E- 4 = 12.00003


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

double

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


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

Char

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

‘a’

‘A’

‘+’

‘~’

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


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

void

دادة تهي

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

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


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

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

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

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

long ، short

مانند:

unsigned int

long int

unsinged long int


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

متغيرها

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

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

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

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


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

متغيرها

اسامي مجاز:

count

c124

avg_grade

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

1test

bin#tree

for


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

تعريف متغير

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

int x ;

float m, n ;

char ch1, ch2, ch3 ;

long int count ;


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

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

int x = 5, y ;

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


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

ثابتها

تعريف ثابت:

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

يا

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


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

مثال

#define M 100

#define P 3.14

const int n = 100 ;

const char c = ‘a’ ;


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

عملگرها

  • محاسباتي

  • رابطه‌اي

  • منطقي

  • بيتي


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

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

(يکاني)-

+ , - , * , / , %

++ , --


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

مثال

- x

x + y

x / y

x % y


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

++ و --

تفاوت

x ++

و

++ x


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

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

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

x + y * z / 2 - y


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

دستور انتساب

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

int x, y = 19, z ;

x = 10 ;

z = x * 2 + y ;


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

تبديل انواع

char ch ;

int i ;

float f, result; ...

result = (ch / i) + f ;

ch = i ;

i = result ;


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

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

w = x * y + w

?

w = (x * y) + w

يا

w = x * (y + w)


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

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

w = x * y + w

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

()

++ --

(يکاني) -

* / %

+ -


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

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

> , >= , < , <=

== , !=

مثال:

x > y

x == y

x != y


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

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

!

&&

||

مثال:

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

! ( x > 20)


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

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

(And) &

(Or) |

(Xor) ^

(Not) ~

(Right Shift) >>

(Left Shift) <<


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

مثال

char x = 7 , y ;

y = x & 2 ;

y = ~y ;


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

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

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

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

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

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


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

جلسة سوم


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

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

#include < header file>

void main()

{

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

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

}


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

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

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

مهمترين:printf و scanf

<stdio.h>


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

تابع خروجي printf

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

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

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


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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

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

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

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

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


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

مثال

printf (“this is a test.”);

خروجي

this is a test.


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

مثال

int i =10 ;

char ch = ‘a’ ;

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

خروجي

10 , a


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

مثال

int i =10 ;

char ch = ‘a’ ;

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

خروجي

i = 10 , ch = a


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

مثال

int i =10 ;

char ch = ‘a’ ;

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

خروجي

i = 10

ch = a


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

اولين برنامه

#include <stdio.h>

void main()

{

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

}


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

تابع ورودي scanf

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

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

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


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

عبارت 1 شامل:

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

    %c (کاراکتر)

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


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

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

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

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

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


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

مثال

int i , j ;

char ch ;

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


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

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

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


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

#include <stdio.h>

void main()

{

float r, area ;


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

printf (“Enter the radius:”) ;

scanf (“%f” , &r) ;

area = 3.14 * r * r ;

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

}


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

جلسة چهارم


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

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

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

و

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


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

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

if

if else

switch


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

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

دستور ;

مثال:

if (x > 10)

x ++ ;


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

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

{

دستور 1 ;

دستور 2 ;

...

nدستور ;

}


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

مثال:

if (x < y)

{

x = x + y ;

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

}


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

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

دستور ;

... ;

}

else {

دستور ;

... ;

}


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

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

y = x * x ;

x ++ ;

}

else {

x -- ;

y = x + y ;

}


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

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

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


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

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

}


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

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

if ...

...

else if ...

...

else if ...


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

مثال:

if (ch == ‘+’)

r = x + y ;

else if (ch == ‘-’)

r = x - y ;

else if (ch == ‘*’)

r = x * y ;


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

دستور switch

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

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

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


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

switch (عبارت) {

case مقدار 1 :

دستورات 1

break ;

case مقدار 2 :

دستورات 2

break ;


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

.

.

.

default :

nدستورات

}


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

مثال:

char ch;

switch (ch) {

case ‘+’ :

r = x + y ;

break ;


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

case ‘-’ :

r = x - y ;

break ;

case ‘*’ :

r = x * y ;

break ;


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

case ‘/’ :

r = x / y ;

break ;

default :

r = 0 ;

printf (“Invalid operator.”) ;

}


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

نکات:

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

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


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

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

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


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

int grade ;

switch ( grade ) {

case 18 :

case 19 :

case 20 :

printf (“Good”) ;

break ;


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

case 10 :

printf (“Acceptable”) ;

}


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

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

break

continue

goto

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

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


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

جلسة پنجم


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

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

for

while

do ... while


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

حلقة for

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

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


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

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

{

دستورات

...

}


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

شرط حلقه

بلي

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

گام حرکت

خير

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

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


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

مثال:

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

{

scanf (“%d” , &num) ;

sum = sum + num ;

}


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

نکات

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

for ( ; ; )

{

...

}


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

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

,

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


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

مثال:

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

{

sum = sum + i + j ;

printf (“%d” , sum) ;

}


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

مثال:

for ( i = 10 , j = 0 ;

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

i -- , j ++)

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


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

حلقة while

while ( شرط حلقه )

{

دستورات

...

}


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

مثال:

int sum = 0 , i = 0 ;

while ( i != -1 )

{

sum = sum + i ;

scanf (“%d” , &i) ;

}


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

حلقة do ... while

do {

دستورات

...

} while (شرط حلقه )


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

مثال:

do {

sum = sum + n ;

scanf (“%d” , &n) ;

} while (n != -1)


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

مثال:

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

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

{

whileبدنة حلقة

}


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

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

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


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

جلسة ششم


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

توابع

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

{

دستورات

...

}


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

int factorial ( int n )

{

int i , f ;

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

f = f * i ;

return f ;

}


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

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

int fact ;

fact = factorial ( 12 ) ;

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

ret = f () ;


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

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

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

void f ( int i , float j )

...


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

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


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

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

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

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

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


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

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

Call by value :

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

Call by reference :

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


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

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


تابع 1

nتابع

mainتابع

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

include section

Global Variables

.

.

.


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

متغيرها

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

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


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

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

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

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

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


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

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

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

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

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


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

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

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

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


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

مثال:

#incude <stdio.h>

int i , j ;

int f1 ( int j )

{

j = j + i ;

return j * j ;

}


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

int k ;

void f2 ( void )

{

int n ;

scanf (“%d” , &n);

j = f1 (n) + k ;

}


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

void main ()

{

int i ;

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

{

f2 () ;

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

}

}


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

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

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

static int s ;


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

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

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

در نتيجه:

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


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

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

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

static int s = 0 ;


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

جلسة هفتم


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

آرايه

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

همنوع

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

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


A

A[0]

A[1]

A[2]

A[3]

A[4]

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

آراية يک بعدي

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

int A [ 5 ] ;


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

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

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

مثال:

A [ 3 ] = 124 ;


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

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

int a [ 100 ] , i ;

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

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


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

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

void f ( int x [ ] )

{ ... }

void main () {

int a [10] ; ...

f (a) ;

}


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

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

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

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

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

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


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

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

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

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

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

a [row] [col] = 0 ;


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

رشته

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

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

char Str [20] ;


a

l

i

\0

?

S

S[0]

S[1]

S[2]

S[3]

S[4]

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

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

char S [5] = “ali” ;


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

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

scanf (“%s” , str)

gets (str)

printf (“%s” , str)


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

فرقscanf و gets

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

در حالي که

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

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


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

نکته

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

بلکه بايد

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

<string.h>


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

مثال

char s [10] ;

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

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

printf (“%s” , s) ;


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

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

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

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

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


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

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

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


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

#include <stdio.h>

#include <string.h>

void main (){

char s [30] ;

int count ;


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

gets (s);

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

count ++ ;

gets (s) ;

} ;

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

}


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

جلسة هشتم


100

2002

2002

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

اشاره‌گر ( Pointer )

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


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

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

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

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

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

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


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

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

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

int* p ;

char * pc ;

float * fp ;


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

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

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

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

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

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


pi

i

100

2002

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

مثال

int i = 100 ;

int * pi ;


pi

pi

i

i

2002

2002

2002

2002

100

450

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

pi = & i ;

* pi = 450 ;


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

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

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

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

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


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

مثال

int * p1 , * p2 , i ;

p1 = p2 ;

p1 = p1 + 2 ;

p1 = p1 + i * 2 ;

p1 == p2

p2 <= p1


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

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

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

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


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

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

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


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

روش غلط

void swap (int a , int b)

{

int temp ;

temp = a ;

a = b ;

b = temp ;

}


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

روش صحيح

void swap (int *a , int *b)

{

int temp ;

temp = *a ;

*a = *b ;

*b = temp ;

}


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

void main ()

{

int x = 10 , y = 20 ;

swap ( &x , &y ) ;

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

}

خروجي:

x = 20 , y = 10


A + 2

A

A[0]

A[1]

A[2]

A[3]

A[4]

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

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

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

int A [5] ;


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

بنابراين

A [2]

معادل

* (A + 2)

A [2] = 100 ;

* (A + 2) = 100 ;


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

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

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

و بنابراين

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

scanf (“%s” , s) ;


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

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

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

...

a [2] = 100 ;

strcpy (s , “Ali”) ;

}


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

void main () {

int b [10] ;

char str [20] ;

...

f (b , str) ;

}


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

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

؟

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


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

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

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

int *p ;

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


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

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

int *A ;

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

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


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

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

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

int *A ;

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

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

free (A) ;


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

مثال

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

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


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

روش غلط

int n ;

float A [n] ;

...

scanf (“%d” , &n) ;


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

روش صحيح

int n ;

float *A ;

...

scanf (“%d” , &n) ;

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

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

free (A) ;


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

جلسة نهم


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

ساختمان ( Structure )

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

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

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

تحت يک نام


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

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

{

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

...

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

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

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


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

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

struct student {

int student_no ;

char fname [20] ;

char lname [10] ;

float average ;

} ;

struct student stud1 , stud2 ;


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

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

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

stud1.average = 17.3 ;

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

strcpy (stud1.lname , “Rezaie”) ;


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

نکته

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

struct student stud1 , stud2 ;

...

stud1 = stud2 ;


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

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

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

struct student A [100] ;

A [15].average = 12.25 ;

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


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

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

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

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

struct student *p ;

p = &stud1 ;

p - > average = 14.5 ;


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

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

void swap ( struct student *s1 ,

struct student *s2) {

struct student temp ;

temp = *s1 ;

*s1 = *s2 ;

*s2 = temp ;

}


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

union

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

البته

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


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

تعريف union

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

{

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

...

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

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


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

مثال

union u

{

int i ;

char ch ;

float f ;

} u1 ;


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

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

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

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

f

u1

ch

i


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

جلسة دهم


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

فايل

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

بدليل

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

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


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

انواع فايلها

متن ( Text )

باينري ( Binary )


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

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

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

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


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

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

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


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

مثال

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


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

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

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

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


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

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

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

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


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

مثال

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

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


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

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

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

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

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

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


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

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

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

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

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

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

  • بستن فايل


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

باز کردن فايل

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

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

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

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


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

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

r فايل ورودي

w فايل خروجي

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

t فايل متن

b فايل باينري

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


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

مثال

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

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

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

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


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

مثال

FILE *fp ;

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

if (fp == NULL)

printf (“can not open file.”) ;

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


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

بستن فايل

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

fclose (FILE *fp) ;

مثال:

fclose (fp) ;


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

جلسة يازدهم


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

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

fscanf

fprintf

fread

fwrite


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

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

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

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

با تفاوت

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


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

مثال

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


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

fread و fwrite

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

ولي

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

و

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


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

fread (void *buffer, int num_byte ,

int count, FILE *fp)

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

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

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

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


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

مثال

struct student stud ;

fread ( &stud ,

sizeof (struct student) ,

1 , fp ) ;


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

مثال

int a [20] ;

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

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


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

fwrite (void *buffer, int num_byte ,

int count, FILE *fp)

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

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

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


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

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

int feof (FILE *fp)

مثال:

if ( feof (fp) ) {

printf (“End of File”) ;

fclose (fp) ;

{


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

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

rewind (FILE *fp)

مثال:

rewind (fp) ;


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

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

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

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


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

origin :

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

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

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


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

مثال

fseek (fp , 10 , SEEK_SET)

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

fseek (fp , -20 , SEEK_END)

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


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

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

  • تجريد (Abstraction)

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

  • ارث‌بري (Inheritance)


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

تجريد

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


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

کپسوله‌سازي

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


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

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

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


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

ارث‌بري

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


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

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

  • شئ(Object)

  • کلاس (Class)

  • صفت (Property)

  • متد (Method)


اتوموبيل

چکش

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

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

Object

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


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

Object(ادامه)

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

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

  • حالت

  • رفتار

  • هويت


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

Object(ادامه)

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

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

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


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

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

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


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

نمايش اشياء

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

: Lecturer

Y.Welikala

Y.Welikala : Lecturer


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

کلاس

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

مانند کلاس:

  • انسان

  • دانشجو

  • ماشين

  • ...


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

کلاس (ادامه)

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

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

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

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


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

کلاس نمونه

  • 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


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

نمايش کلاسها

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

Lecturer

نام

ذخيره کردن


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

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

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


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

ويژگي چيست؟

شي

کلاس

ويژگي

:CourseOffering

مقدار ويژگي

Number=CS201

startTime=1030

endTime=1230

CourseOffering

number

startTime

:CourseOffering

endTime

Number=CS202

startTime=1300

startTime=900

startTime=900

endTime=1500

endTime=1100


رفتار چيست؟

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

کلاس

CourseOffering

addStudent

deleteStudent

getStartTime

رفتار

getEndTime


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

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

class <class_name> // class header (prototype)

{

public:

<function_prototypes>

protected:

<function_prototypes>

private:

<function_prototypes>

<data_attributes>

};


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

مثال

Class point

{

private float x, y;

public void draw();

}


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

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

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

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

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

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


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

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

class <class_name> : <superclass_name>

{

public:

<function_prototypes>

protected:

<function_prototypes>

private:

<function_prototypes>

<data_attributes>

};


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

سازنده کلاس

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

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


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

مثال

Class point

{

private float x, y;

public void point(float,float);

public void draw();

}


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

مخرب کلاس

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

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


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

مثال

Class point

{

private float x, y;

public void ~point();

public void draw();

}


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

نحوة ايجاد شئ

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

Class point {…}

point p = new point(0,10) ;


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

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

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

مثال:

cin >> var1, var2, var3;


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

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

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

مثال:

cout << “Text :” << var2 ;


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


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


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


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

پايان


  • Login