• مشکی
  • سفید
  • سبز
  • آبی
  • قرمز
  • نارنجی
  • بنفش
  • طلایی
تعداد مطالب : 351
تعداد نظرات : 75
زمان آخرین مطلب : 6097روز قبل
کامپیوتر و اینترنت
آموزش زبان C بخش بیست هفتم
قسمت دوم

مثال 4: برنامه اي كه يك رشته و كاراكتري را از ورودي خوانده و تعداد دفعات
تكرار اين كاراكتر را رشته مشخص مي كند . main)(
{
char string[40] / ch ;
int count ;
printf("enter string for search:\n");
gets(string );
printf("\n enter a character:" );
ch=getche )(;
count=char_count(string/ch );
printf("\n number of occurs of " );
printf("char <%c> is:%d"/ch/count );
}

char_count(char *s/char letter)
{
int count=0 ;
while(*s)
if(*s++==letter)
count ++ ;
return(count );
}

نمونه اي از خروجي برنامه مثال 4 : enter string for search:
this is a simple test.
enter a character:
number of occurs of char is:3


مثال 5: برنامه اي كه رشته عددي را از ورودي خوانده و سپس آن را به مقدار
عددي تبديل مي كند . main)(
{
int number ;
char s[10] ;
printf("\n string representation");
printf(" of numeric:" );
gets(s );
ascii_to_int(&number/s );
printf("\n numeric value of ");
printf("string is:%d"/number );
}

ascii_to_int(int *value/char *str)
{
int sign=1 ;
*value=0 ;
while(*str==' ' )str++ ;
if(*str=='-' || *str=='+')
sign=(*str++=='-' )?- 1:1;
while(*str)
if((*str>='0' )&&( *str<='9'))
*value=(*value*10)+(*str++- 48 );
else
{
printf("Watning: the<%c> is:"/*str);
printf(" invalid character." );
exit(0 );
}
*value *=sign ;
}


خروجي هاي حاصل از 4 بار اجراي برنامه مثال 5 : string representation of a numeric-:342( 1)
numeric value of string is-:342

string representation of a numeric:+2341( 2)
numeric value of string is:+2341

string representation of a numeric:543( 3)
numeric value of string is:543

string representation of a numeric:45y4( 4)
Watning: the is invalid character.


مثال 6: برنامه اي كه عددي را از ورودي خوانده و سپس آن را به رشته تبديل
مي كند . main)(
{
int number ;
char s[10] ;
printf("\n enter a number: " );
scanf("%d"/&number );
int_to_ascii(number/s );
printf("\n the string value is:%s"/s);
}

int_to_ascii(int*value/char *str)
{
int sign=value ;
char temp / *savestr=str ;
if(value<0)
value*=-1 ;
do{
*str++=(value % 10)+48 ;
value=value/10 ;
} while(value>0 );
if( sign<0)
*str++='-' ;
*str-- ='\0' ;
while(savestr<STR)
{
temp=*str ;
*str--=*savestr ;
*savestr++=temp ;
}
}

نمونه اي از خروجي برنامه مثال 6 : enter a number:2341
the st
خداییش اگر خوشت اومد نظر بده
دوشنبه 19/6/1386 - 22:2
کامپیوتر و اینترنت
آموزش زبان C بخش بیست هفتم
قسمت اول
اشاره گرها و رشته ها

چون رشته ها در زبان C بصورت آرايه تعريف مي شوند بين آنها و اشاره گرها نيز
ارتباط نزديكي وجود دارد . بطوري كه بسياري از توابع كتابخانه اي كه با رشته ها
سر و كار دارند ، ارتباط نزديكي با اشاره گرها پيدا مي كنند . بعنوان مثال تابع
()strchr كه محل اولين وقوع كاراكتري را در رشته اي پيدا مي كند بصورت زير
استفاده مي شود :
) <رشته > و <كاراكتر مورد جستجو>(= strchr اشاره گر

مثال 1: برنامه اي كه يك رشته و كاراكتري را از ورودي خوانده و محل اولين
وقوع اين كاراكتر را در رشته پيدا مي كند . main)(
{
char ch/line[81]/*ptr/*strchr )(;
printf("\nenter string to search:\n");
gets(line );
printf("\n enter a character: " );
ch=getche )(;
ptr=strchr(line/ch );
printf("\n the string start at " );
printf("address:%u/line" );
printf("\n first occurence of" );
printf(" <%c> is address:%u"/ch/ptr);
printf("\n this is position:" );
printf("%d( start from 0)"/ptr-line);
}

نمونه اي از خروجي برنامه مثال 1 : enter string to search:
c has no bound checking.
enter a character: k
the string start at address:3984

first occurence of is address:8291
this is position:20(start from 0 );

همانطوريكه ازخروجي برنامه مثال 1 پيداست تابع strchr با جستجوي يك كاراكتر
در يك رشته ، آدرس اين كاراكتر را بعنوان نتيجه عمل مشخص ميكند و در يك اشاره گر
قرار مي دهد . همانطور كه قبلا" گفته شد ، اگر تابعي داراي نوعي غير از "صحيح "
باشد بايد در تابع فراخواننده ، نوع آن به كامپايلر اعلام گردد . لذا در مثال
(َ1) نوع تابع ()strchr بصورت اشاره گر به كاراكتر تعريف شده است . البته اگر با
استفاده از دستور پيش پردازنده # include فايل "string" به برنامه معرفي گردد
نيازي به تعريف اين تابع بصورت اشاره گر نيست .

مثال 2: برنامه اي كه رشته اي را از ورودي دريافت كرده و كليه حروف كوچك اين
رشته را به حروف بزرگ تبديل مي كند . main)(
{
char s[50] ;
printf("enter a string in");
printf(" lowercase:\n");
gets(s );
upper(s );
printf("\n uppercase of");
printf(" string is:\n");
puts(s );
}

upper(char *string)
{
while(*string)
{
if(*string>='a' && *string<='z')
*string=*string-32 ;
string++ ;
}
}

نمونه اي از خروجي برنامه مثال 2 : enter a string in lowercase:
in c all keyword are lowercase.
uppercase of string is:
IN C ALL KEYWORD ARE LOWERCASE.


مثال 3: برنامه اي كه رشته اي را از ورودي خوانده و كليه حروف بزرگ موجود در
رشته را به حروف كوچك تبديل مي كند : main)(
{
char s[50] ;
printf("enter a string in");
printf(" uppercase:\n");
gets(s );
upper(s );
printf("\n lowercase of string");
printf(" is:\n");
puts(s );
}

upper(char *string)
{
while(*string)
{
if(*string>='A' && *string<='Z')
*string+=32 ;
string++ ;
}
}

نمونه اي از خروجي برنامه مثال 3 : enter a string in uppercase:
THIS IS A TEST FOR CONVERT TO LOWER.
lowercase of string is:
this is a test for convert to lower.


خداییش اگر خوشت اومد نظر بده
دوشنبه 19/6/1386 - 22:2
کامپیوتر و اینترنت
آموزش زبان C بخش بیست ششم
اشاره گر و آرايه

در زبان C بين آرايه ها و اشاره گرها ارتباط نزديكي وجود دارد ( اشاره گرها
حاوي يك آدرس و اسم آرايه نيز يك آدرس است ). اسم آرايه آدرس اوليه عنصر آرايه
را مشخص مي كند . بعبارت ديگر اسم آرايه آدرس اولين محلي را كه عناصر آرايه از
آنجا به بعد در حافظه قرار مي گيرند در خود نگهداري مي كند . بعنوان مثال اگر
آرايه اي بصورت table[8] تعريف كرده باشيم و اولين عنصر آرايه در محل 400 حافظه
قرار داشته باشد و اشاره گري بنام ptr بصورت زير تعريف كرده باشيم ، int * ptr;

دستور ptr = & table[0] آدرس شروع آرايه يعني 400 را در اشاره گر ptr قرار
مي دهد ( اين دستور معادل دستور ptr = table; است ) و دستور t = * ptr محتويات
اولين محل آرايه ( اولين عنصر آرايه ) يعني (table[0]) را در متغيرt قرار داده
دستور * ptr = 0 محتويات اولين محل آرايه table را برابر با صفر قرار مي دهد .
با مطالبي كه تاكنون گفته شد براي دسترسي به عناصر آرايه علاوه بر انديس ، از
اشاره گرها نيز مي توان استفاده كرد :
آدرس آرايه را در اشاره گر ptr قرار مي دهد ptr= table;
به دومين عنصر آرايه اشاره مي كند (table[1]);(َptr+ 1) *
به i+1 امين عنصر آرايه اشاره مي كند ;(ptr+i) *

مثال : برنامه اي كه 5 مقدار را از ورودي خوانده و در آرايه اي قرار مي دهد .
سپس آنها را از آخرين مقدار به اولين مقدار به خروجي منتقل مي كند . main)(
{
int arr[5] /i ;
printf("\n enter five value: " );
for(i=0 ; i<5 ; i++)
scanf("%d"/&arr[i] );
printf("\n the reverse output is: ");
for(i=4 ; i>=0 ; i) --
printf("%4d"/*(arr+i ));
}

نمونه اي از خروجي برنامه مثال بالا : enter five value: 10 20 30 40 50
the reverse output is:50 40 30 20

خداییش اگر خوشت اومد نظر بده
دوشنبه 19/6/1386 - 22:1
کامپیوتر و اینترنت
آموزش زبان C بخش بیست پنجم
اعمال روي اشاره گرها

اعمالي كه بر روي اشاره گرها فايل انجام است به وسعت اعمالي كه بر روي ساير
متغيرهاي حافظه انجام پذير است ، نيست . اعمالي كه بر روي اشاره گرها انجام
پذيرند عبارتند از : 1
عمل انتساب : همچون ساير انواع متغيرها، ميتوان مقداري را به يك اشاره گر
نسبت داد ( مثال 1 ) . 2
اعمال محاسباتي : دو نوع اعمال محاسباتي مي توان بر روي اشاره گرها انجام
داد كه عبارتند از :
الف ) عمل جمع .
ب ) عمل تفريق .

مثال 1: main)(
{
int x ;
int *p1 / *p2 ;
p1=&x ;
p2=p1 ;
printf("\n the address of x is: ");
printf("%p"/p2 );
}

نمونه اي از خروجي برنامه مثال 1 : the address of x is:692B:0fDC

براي پي بردن به چگونگي عمل جمع و تفريق روي اشاره گرها فرض كنيد كه p
اشاره گري از نوع " صحيح " است و به ملح 2000 حافظه اشاره مي كند . اكنون دستور p + +;
را اجرا كنيم محتويات جديد اشاره گر p ، برابر با 2002 خواهد بود . زيرا
طول نوع " صحيح " برابر با 2 بايت است و با افزايش يك واحد به اشاره گر ، به
اندازه طول نوع اشاره گر به آن افزوده خواهد شد و نه به اندازه يك واحد . اگر
دستور ; - p- را صادر كنيم ، اشاره گر P مجددا" به محل 2000 حافظه اشاره خواهد
كرد . اگر باز هم دستور ; - p- را صادر كنيم اين بار به محل 1988 اشاره خواهد
كرد ( شكل 1 ) . char *ch= 2000;
int *i=2000;


ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ch | 2000 | i

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ch+1 | 2001 |

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ch+2 | 2002 | i+1

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ch+3 | 2003 |

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ch+4 | 2004 | i+2

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ ch+5 | 2005 |

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
حافظه
شكل (1) . انجام اعمال محاسباتي روي اشاره گر
3
مقايسه اشاره گرها : بااستفاده از عملگرهاي رابطه اي مي توان اشاره گرها را
با يكديگر مقايسه نمود. بعنوان مثال ، اگر pو qو از نوع اشاره گر باشند ، دستور
زير معتبر است : if(p < q )print f("p points to lower memory than q");

مقايسه اشاره گرها معمولا" در مواردي استفاده مي شود كه دو يا چند اشاره گر به اشاره مي كنند .
خداییش اگر خوشت اومد نظر بده
دوشنبه 19/6/1386 - 22:1
کامپیوتر و اینترنت
آموزش زبان C بخش بیست چهارم
عملگرهاي اشاره گر

دو عملگر در مورد اشاره گرها مورد استفاده قرار مي گيرند كه عبارتند از : *
و & . عملگر & يك عملگر يكاني است كه آدرس عملوند خود را مشخص مي كند . بعنوان
مثال دستور m = &name موجب مي شود تا آدرس متغير name در متغير m قرار گيرد .
عملگر * همانند عملگر & يك عملگر يكاني است ، محتويات يك آدرس حافظه را مشخص
مي كند . بعنوان مثال دستور p = m; موجب مي شود تا محتويات محلي كه آدرس آن در m
است به p منتقل گردد . بنابراين مجموعه دستورات (1) و (2) كه در ذيل آمده اند
معادل يكديگرند .
ؤ m= &name;
(َ1) ؤ
ؤ p= *m;
p= nam;( 2)
خداییش اگر خوشت اومد نظر بده
دوشنبه 19/6/1386 - 22:0
کامپیوتر و اینترنت
آموزش زبان C بخش بیست سوم
اشاره گرها

درك صحيح مفهوم اشاره گرها در زبان C بزرگترين موفقيت يك برنامه نويس است .
زيرا استفاده از اشاره گرها ويژگيهاي زير را دارد : 1
عمل تخصيص حافظه پويا امكان پذير است . 2
موجب بهبود كارآيي بسياري از توابع مي شود . 3
كار با رشته ها و آرايه ها را آسانتر مي كند . 4
فراخواني با ارجاع در توابع ، از طريق اشاره گرها امكان پذير است .
كليه متغيرهايي كه در برنامه ها مورداستفاده قرار ميگيرند در حافظه كامپيوتر
ذخيره مي شوند ( محل هايي از حافظه هستند ) . بنابراين هر متغير داراي يك آدرس
منحصر بفردي است كه توسط آن مي توان به متغير دسترسي پيدا كرد. اشاره گرها حاوي
آدرس متغيرهاي حافظه هستند. بعبارت ديگر اگر متغيري آدرس متغير ديگر را در خود
نگهداري كند به متغير اول يك اشاره گر گفته مي شود . بعنوان مثال ، اگر محتويات
متغيري كه در محل 1000 حافظه قرار دارد برابر با 1004 باشد ، اين متغير به محل 1004
حافظه اشاره خواهد كرد ( شكل 1 ) .
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ |
محتويات حافظه | آدرس حافظه
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
ؤؤؤؤؤؤ 1004 | 1000 |
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ 1001 | | |
|
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ 1002 | | |
|
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ 1003 | | |
|
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
<ؤؤؤؤ| | 1004
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ 1005 | |

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ
شكل (1) . مفهوم اشاره گر

براي تعريف متغيرهاي اشاره گر از روش كلي زير استفاده مي شود :
نام متغير اشاره گر * نوع
نوع ، يكي از انواع معتبر در زبان C است . نوع اشاره گر مشخص مي كند كه اين
اشاره گر بايد به چه نوع داده اي اشاره كند ( سر و كارش با چه نوع داده اي است ).
در زبان C برخلاف زبان هايي مثل PL/I اشاره گرها داراي نوع هستند. لذا دراستفاده
از اشاره گرها بايد دقت كافي بخرج داد تا نتيجه نادرستي از برنامه حاصل نگردد .
بعنوان مثال ، دستور int *p; متغير p را از نوع اشاره گر تعريف مي كند كه فقط
بايد به متغيرهاي از نوع "صحيح " اشاره نمايد. البته اگر اشاره گرp به متغيرهايي
از انواع ديگر اشاره نمايد ، كامپايلر زبان C خطايي را به برنامه نويس اعلام
نمي كند ولي برنامه نويس بايد بداند كه اين امر يقينا" در نتيجه اجراي برنامه
اثر گذاشته و موجب عدم صحت اجراي برنامه گشته و به نتايج حاصل از برنامه
اطميناني نيست . بعنوان مثال در حين اجراي برنامه زير از طرف كامپايلر خطايي
گزارش نخواهد شد ولي مي دانيم كه اين برنامه نتيجه مطلوبي نخواهد داشت . main)(
{
float x/y ;
int *p ;
p=&x ;
y=*p ;
}

در برنامه فوق ، چون p به متغير x اشاره ميكند و p از نوع " صحيح " است ، x
را بصورت عدد " صحيح " در نظر ميگيرد و در دستور بعدي كه محتويات محلي كه p به را به y منتقل مي كند، عمل انتقال به درستي انجام نميشود.
خداییش اگر خوشت اومد نظر بده
دوشنبه 19/6/1386 - 22:0
کامپیوتر و اینترنت
آموزش زبان C بخش بیست دوم
بعضي از توابع رشته اي

بعضي از توابع بر روي رشته ها عمل كرده و دستكاري رشته ها را آسان مي كنند .
كه مي توان از مقايسه رشته ها ، تعيين طول رشته ها، الحاق كردن رشته ها به يكديگر
و ... نام برد .

تابع ()strcpy
تابع ()strcpy براي قرار دادن رشته اي در رشته ديگر مورد استفاده قرار گرفته
و بصورت زير استفاده مي شود : ;
("رشته " و متغير رشته اي )strcpy
اهميت اين تابع وقتي مشخص مي شود كه بدانيم ، مقدار دادن به متغير رشته اي
بطور مستقيم امكان پذير نيست بلكه فقط از طريق اين تابع صورت پذيرد . مثلا" اگر
داشته باشيم : char name[11];

دستور انتساب زير غلط خواهد بود : name="ALI";

با استفاده از تابع ()strcpy عمل فوق را مي توان بصورت زير انجام داد : strcpy(name/"ALI");

اين مساله بدين علت است : " همانطور كه در C نمي توان دو آرايه را با حكم
انتساب (=) به يكديگر نسبت داد ، دو رشته نيز نمي توانند با حكم انتساب ، به
يكديگر نسبت داده شوند .

مثال 1: برنامه اي كه يك رشته و يك عدد( كه بيانگر موقعيتي ازاين رشته است )
را از ورودي خوانده و موجب حذف كاراكتر موجود در آن محل مي شود . main)(
{
char string[81] ;
int position ;
printf("\n type a string: " );
gets(string );
printf("\n enter position for " );
printf("delete character: " );
scanf("%d"/&position );
strcpy(&string[position]/
&string[position+1] );
puts(" the result string is :" );
puts(string );
}

نمونه اي از خروجي برنامه مثال 1: type a string: in thee name of allah.
enter position for delete character:5
the result string is:
in the name of allah.

در مثال 1 متغير position به موقعيتي از رشته اشاره ميكند كه كاراكتر موجود
در آن بايد حذف شود . با استفاده از تابع ()strcpy قسمتي از رشته string را با
شروع از position + 1 ، در همين رشته با شروع از موقعيت position كپي كرده ايم .
اين عمل موجب حذف كاراكتري كه در موقعيت position قرار داشته است مي گردد . با
فرض اين كه رشته ورودي برابر با "cart" و موقعيت كاراكتري كه بايد حذف شود 2
فرض گردد خروجي حاصل از اجراي برنامه مثال 1 بصورت زير خواهد بود : type a string: cart.
enter position for delete character:2
the result string is:cat


تابع ()strcat
اين تابع براي الحاق كردن ( به دنبال هم قرار دادن ) دو رشته استفاده ميشود
و بصورت زير به كار مي رود : strcat(s1/s2)
s1
و s2و دو رشته اي هستند كه بايد با هم الحاق شوند . s2 در انتهاي رشته s1
قرار خواهد گرفت .

مثال 2: main)(
{
char s1[21] / s2[21] ;
puts("enter string : " );
gets(s1 );
puts("enter string : " );
gets(s2 );
strcat(s1/s2 );
puts("result string is: " );
puts(s1 );
}

درپاسخ به درخواست برنامه ، اگر بجاي s1 عبارت good وبجاي s2 عبارت moorning
را وارد كنيم ، خروجي بدين صورت است : enter string :
good

enter string :
moorning.

result string is:
goodmoorning.

براي تمرين ميتوانيد برنامه را طوري تغيير دهيد كه بين دو عبارت ، يك فاصله
(blank) باشد .

تابع ()strlen
تابع ()strlen براي تعيين طول يك رشته مورد استفاده قرار گرفته و بصورت زير
به كار مي رود : strlen(s)
s
رشته اي است كه طول آن بايد تعيين شود .

مثال 3: main)(
{
char name[31] ;
puts(" enter a string: " );
gets(name );
printf("\n string length is:");
printf("%d"/strlen(name ));
}

نمونه اي از خروجي برنامه مثال 3 : enter a string:
the c language is very quick.

string length is:29

روش ديگر براي پيدا كردن طول يك رشته ، استفاده از تابع ()scanf با پارامتر
كنترلي %n است . با استفاده از تابع ()scanf و پارامتر %n ، مثال 3 را مي توان
بصورت زير نوشت : main)(
{
char name[31] ;
int count ;
scanf("%s%n"/name/&count);
printf("\n string length is:");
printf("%d"/count );
}


تابع ()strcmp
تابع ()strcmp براي مقايسه كاراكتري دو رشته مورد استفاده قرار ميگيرد و به
اين صورت بكار مي رود : strcmp(s1/s2)
s2
و s1و دو رشته اي هستند كه بايد با يكديگر مقايسه شوند . اين تابع نتيجه
مقايسه دو رشته را بصورت صفر ، منفي و يا مثبت مشخص مي كند :
نتيجه |(s1/s2()strcmp
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ s1=s2 | 0

منفي | s2 <َs1
مثبت | s2 >َs1

تابع ()strchr
تابع ()strchr براي جستجوي يك كاراكتر در يك رشته بكار مي رود و محل وجود
اولين وقوع آن را مشخص مي كند. اگر كاراكتر مورد نظر در رشته وجود نداشته باشد
مقداري كه توسط اين تابع برگردانده مي شود برابر با صفر است . اين تابع بصورت
زير استفاده مي شود : strchr(s/ ch)
ch
كاراكتري است كه بايد در رشته s جستجو شود. بعنوان مثال ، بااجراي دستور: if( strchr( "hello"/'e'))printf( "e is in hello");

چون حرف e در عبارت hello وجود دارد پيام مناسبي چاپ مي شود .

تابع ()strstr
تابع ()strstr براي جستجو زير رشته اي در يك رشته مورد استفاده قرار گرفته و
بصورت زير بكار مي رود : strstr(s1/s2)
s2
رشته اي است كه بايد در رشته s1 جستجو شود . اگر s2در s1ر پيدا شود محل
اولين وقوع آن توسط تابع برگردانده مي شود ولي اگر s2در s1ر وجود نداشته باشد
مقدار صفر برگردانده خواهد شد . بعنوان مثال ، با اجراي دستور : if( strstr( "this is"/"hi"))printf( "hi found");

بعلت وجود رشته hi در رشته this is ، پيام مناسبي صادر مي شود .

مثال 4: main)(
{
char s1[80] / s2[80] ;
char ch ;
puts(" enter string : " );
gets(s1 );
puts(" enter string : " );
gets(s2 );
puts("enter character for search");
printf(" in s1: " );
ch=getche )(;
printf("\n length of s1 is:");
printf("%d"/strlen(s1 ));
printf("\n length of s2 is:");
printf("%d" /strlen(s2 ));
if(!strcmp(s1/s2))
printf("\n string are equal. ");
if(strstr(s1/s2))
printf("\n is in . " );
else
printf("\n is not in .");
if(strstr(s1/ch))
printf("\ncharacter<%c>is in.");
else
{
printf("\ncharacter<%c>is");
printf(" not in .");
}
}

نمونه اي از خروجي برنامه مثال 4 : enter string :
this is a sample statement.
enter string :
sample
enter character for search in : m
length of is:28
length of is:6
is in .
character is
خداییش اگر خوشت اومد نظر بده
دوشنبه 19/6/1386 - 21:59
کامپیوتر و اینترنت
آموزش زبان C بخش بیست یکم
آرايه اي از رشته ها

گاهي ممكن است ، به عنوان مثال بخواهيم تعدادي از نام افراد را در آرايه اي
نگهداري كنيم : ولي با اطلاعاتي كه تاكنون از رشته ها داريم شايد نتوانيم چنين
كاري را انجام دهيم . براي اين كار بايد آرايه اي از رشته ها داشته باشيم . چون
رشته ها خود ازنوع آرايه هستند بايد آرايه اي ازآرايه ها را تعريف كنيم ( آرايه اي
از آرايه ها همان آرايه دوبعدي است ). براي توضيح بيشتر به مثال 1 توجه نماييد.

مثال : برنامه اي كه با تعريف آرايه اي از رشته ها ، 5 نام را در آن قرار
مي دهد و سپس با خواندن نامي از ورودي آنرا در آرايه جستجو مي كند . main)(
{
int dex/exist ;
int k ;
char name[21] ;
static char list [5][21]=
{ "ali" /
"ahmad" /
"alireza" /
"jalal" /
"mohammad"
} ;
printf("\nenter one name for");
printf(" search:");
gets(name );
for(dex=0 ; dex<5;dex++)
if(strcmp(list[dex]/name)==0)
{
exist=1 ;
break ;
}
if( exist==1)
{
printf("\nname ");
printf("<%s> exist in table."/name);
}
else
{
printf("\nname ");
printf("<%s> not exist. "/name);
}
}

دو نمونه از خروجي برنامه مثال بالا :
( الف ) enter one name for search:reza
name not exist.


( ب ) enter one name for search:ali
name exist in table.
ال بالا از تابع ()strcmp استفاده شده كه كارش مقايسه دو رشته مي باشد.


خداییش اگر خوشت اومد نظر بده
دوشنبه 19/6/1386 - 21:58
کامپیوتر و اینترنت
آموزش زبان C بخش بیستم
توابع ورودي خروجي رشته ها

در زبان C توابع متعددي وجود دارند كه در مورد رشته ها استفاده مي شوند .
اكثر اين توابع براي خواندن رشته ها از صفحه كليد و يا چاپ آنها در صفحه نمايش
بكار مي روند .

تابع ()gets
تابع ()gets براي خواندن رشته هااز صفحه كليد بكارميرود و بصورت زير استفاده
مي شود :
(متغير رشته اي )gets

مثال 1: main)(
{
char fname[21] ;
printf("enter your name: " );
gets(fname );
printf("\nyour name is : %s"/fname);
}

نمونه اي از خروجي برنامه مثال 1 : enter your name : bahrami
your name is : bahrami

شايد اين پرسش مطرح شود " با وجود تابع ()scanf كه مي تواند براي رشته ها و
متغيرهاي عددي استفاده شود چه لزومي دارد از تابع ()gets استفاده گردد " ? در
پاسخ به اين پرسش بايد گفت كه تابع ()scanf رشته ها را پيوسته در نظر مي گيرد .
يعني اگر در بين يك رشته ، از فاصله (blank) و يا tab استفاده شود ، از اين
كاراكترها ( فاصله و يا tab ) به بعد ، بعنوان رشته ديگري منظور ميشوند ( مثال 2
) . براي رفع اين اشكال مي توان از تابع ()gets استفاده نمود .

مثال 2: main)(
{
char name[21] ;
printf("enter your name family:");
scanf("%s"/gets(name );
printf("\n your name is : %s"/name );
}

نمونه اي از خروجي برنامه مثال 2 : enter your name : einollah jafarnezhad
your name is : einollah

همانطوري كه از خروجي برنامه پيداست ، در پاسخ به درخواست برنامه نام و نام
خانوادگي Einollah jafarnezhad را وارد نموده ايم كه چون بين نام و نام خانوادگي
فاصله افتاده است فقط نام (Einollah) در متغير name قرار گرفته و در خروجي چاپ
شده است ولي نام خانوادگي از دست رفته است . اگر بجاي scanf از تابع gets
استفاده شود اين مشكل پيش نخواهد آمد ، زيرا در ()gets فقط كليد enter ، جدا
كننده است .

تابع ()puts
اين تابع براي انتقال يك رشته به خروجي بكار مي رود و بصورت زير استفاده
مي شود .
(عبارت رشته اي )puts
هنگام استفاده از تابع puts، مي توان از يك متغير رشته اي و يا يك رشته ( كه
در داخل نقل قول (") باشد ) بجاي عبارت رشته اي استفاده كرد .

مثال 3: برنامه اي كه دو رشته را از ورودي خوانده و سپس محتويات يك رشته را
به رشته ديگر منتقل مي كند . طول هاي دو رشته ورودي مي توانند با يكديگر برابر
نباشند .
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ main)(
{
char s1[81]/ s2[81] ;
int i / j ;
char temp ;
puts("enter string : " );
gets(s1 );
puts("enter string : " );
gets(s2 );
for(i=0 ; s1[i] && s2[i] ; i++)
{
temp=s1[i] ;
s1[i]=s2[i] ;
s2[i]=temp ;
}
if(s1[i])
{
j=i ;
while(s1[i])
s2[i]=s1[i++] ;
s2[i]\'\0' ;
s1[i]\'\0' ;
}
else if( s2[i])
{
j=i ;
while(s2[i])
s1[i]=s2[i++] ;
s2[i]\'\0' ;
s1[i]\'\0' ;
}

puts("new content of s1 is:" );
puts(s1 );
puts("new content of s2 is:" );
puts(s2 );
}

نمونه اي از خروجي برنامه مثال 3 : enter string :
first string
enter string :
second string
new content of s1 is:
second string
new content of s2 is:
first string


مثال 4: برنامه اي كه با خواندن يك رشته و دو كاراكتر از ورودي ، كاراكتر اول
را با كاراكتر دوم در سرتاسر رشته جايگزين مي كند . main)(
{
char string[50] ;
char source_letter/target_letter ;
int i ;
printf("\n enter the string :" );
gets(string );
printf("\n enter source character:" );
source_lette=getche )(;
printf("\n enter target character:" );
target_letter=getche )(;
if(source_letter != target_letter)
for(i=0 ; string[i] ; i++)
if(string[i]==source_letter)
string[i]=target_letter ;
printf("\n result string is:\n");
puts(string );
}

نمونه اي از خروجي برنامه مثال 4 : enter the string : in the name of allah.

enter source character: a
enter target character: A

result string is:in th
خداییش اگر خوشت اومد نظر بده
دوشنبه 19/6/1386 - 21:58
کامپیوتر و اینترنت
آموزش زبان C بخش نوزدهم
رشته ها

رشته ها معمولا" نوعي داده هستند كه در زبانهاي برنامه سازي به اشكال متفاوتي
مورد استفاده قرار گرفته و براي ذخيره كردن و دستكاري متن ها ، ( مثل كلمات
اسامي افراد ، جملات و غيره ) به كار مي روند . اما در زبان C رشته ها نوعي داده
نيستند بلكه به صورت آرايه اي از كاراكترها ( از نوع char ) هستند كه به NULL
( رشته تهي ) كه داراي ارزش عددي صفر است ختم ميشوند. براي نمايش NULL از '\0'
استفاده مي شود . بنابراين طول رشته ها را كه بصورت آرايه تعريف مي شوند ، بايد
به اندازه يك واحد بيش از مقدار لازم در نظر بگيريم . مثلا" اگر بخواهيم رشته اي
را كه طولاني ترين اسم آن داراي 30 حرف باشد ، براي ذخيره كردن اسامي افراد
تعريف كنيم بايد آرايه اي به طول 31 را در نظر بگيريم . كامپايلر زبان C كاراكتر NULL
را به انتهاي رشته ها اضافه مي كند و نيازي نيست كه برنامه نويس آن را در
انتهاي رشته ها قرار دهد .

مثال 1: main)(
{
char fname[21] ;
printf("enter your name: " );
scanf("%d"/fname );
printf("\nyour name is : %s"/fname);
}

نمونه اي از خروجي برنامه مثال 1 : enter your name : ali
your name is : ali

رشته Ali در متغير fname بصورت زير قرار مي گيرد :
ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ | a | l | i |\0 | | | | | | | | | | | | | | |

ؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤؤ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17


نكته اي كه در مورد مثال 1 بايد روشن شود اين است كه تاكنون براي خواندن
مقادير متغيرها از ورودي توسط تابع ()scanf ، اسم متغير را با & ذكر مي كرديم .
اما دليلي كه در اين مثال براي خواندن محتويات رشته fnameاز &ز استفاده نشده
اين است كه fname نام يك آرايه است و نام آرايه بعنوان يك آدرس به اولين عنصر

خداییش اگر خوشت اومد نظر بده
دوشنبه 19/6/1386 - 21:57
مورد توجه ترین های هفته اخیر
فعالترین ها در ماه گذشته
(0)فعالان 24 ساعت گذشته