درصورتي اجرا خواهد شد كه a
if (a < b) if (a if (c ; if (c ;
else ; }
else ; else ;
بعنوان يك مثال ديگر، به نمونه زير دقت كنيد:
if () {
if ()
if () ;
else ; // this refer to if ()
}
else ;//this refer to if
برنامه 2) برنامه اي بنويسيد كه 3 عدد را دريافت و حداكثر آنها را چاپ كند.
#include
void main() {
int a, b, c, max;
printf("Please enter 3 numbers :");
scanf("%d %d %d",&a, &b, &c);
if (a> b)
if (a> c) max = a;
else max= c;
else if (b> c) max = b;
else max = c;
printf("Maximum is %d",max);
}
ساختار تكرار while
همانطور كه در بخش الگوريتمها نيز گفته شد، يك ساختار تكرار باعث مي شود تا زمانيكه شرط خاصي برقرار است، عمليات مشخصي تكرار گردد. دستور while نيز باعث ايجاد يك حلقه تكرار به شكل زير مي گردد:
while () ;
اين دستور باعث مي شود تا زمانيكه شرط موجود در قسمت درست است، دستور قسمت تكرار شود، و به محض اينكه شرط نادرست گردد، كنترل اجرا به دستور بعد از حلقه مي رود.
بازهم دستور موجود در قسمت مي تواند يك دستور مركب باشد، دراينصورت دستور بصورت زير درخواهد آمد:
while () {
;
;
…….
;
}
برنامه 3) برنامه اي بنويسيد كه يك عدد را دريافت و فاكتوريال آن را محاسبه و چاپ نمايد.
#include
void main() {
int i,number;
long int factorial;
printf("Please enter number :");
scanf("%d",&number);
factorial = 1;
i = 1;
while (i <= number) {
factorial *= i;
i ++;
}
printf("Factorial of %d is %ld"number,factorial);
}
برنامه 4) برنامه اي بنويسيد كه يك متن را از كاربر دريافت و آن را با حروف بزرگ چاپ كند.
#include
void main() {
char ch;
ch = getch() ;
while (ch != 13) {
if (ch>= 'a' && ch <= 'z')
ch -= 32;
putch(ch);
ch = getch();
}
}
ساختار تكرار for
همانگونه كه در مثال مربوط به حل مسئله فاكتوريال ديده مي شود، گاهي نياز به حلقه تكراري داريم كه به تعداد دفعات مشخصي تكرار گردد. در چنين مواقعي با استفاده از يك متغير شمارنده، تعداد تكرارها را تا رسيدن به مقدار مورد نظر می شماریم و سپس به حلقه پایان می دهیم. به چنین حلقه هایی، تکرار تحت کنترل شمارنده یا تکرار معین می گوییم، چرا که تعداد تکرار ها از قبل مشخص است. چنین حلقه ای دارای 3 جزء اصلی می باشد:
1- مقداردهی اولیه به متغیر شمارنده حلقه
2- شرط پایان حلقه (پایان شمارش)
3- نحوه افزایش متغیر شمارنده
از آنجا که در تمام حلقه هایی که تکرار معین دارند، همین ساختار استفاده می شود؛ در اکثر زبانهای برنامه سازی یک ساختار تکرار ویژه، بنام حلقه for، برای اینکار در نظر گرفته شده است. اما در این بین، حلقه تکرار for در زبان C دارای ویژگیهای خاصی است که آنرا از سایر زبانها متمایز کرده و به آن قدرت بسیار بالایی داده است. شکل کلی این دستور بصورت زیر است:
for ( ; ; ) ;
وظایف عبارات فوق بشرح زیر است :
1- ، مقداردهی اولیه به متغیر حلقه
2- ، شرط اجرای حلقه
3- ،نحوه افزایش متغیر حلقه
البته همانندموارد قبل بازهم قسمت می تواند یک دستور مرکب باشد. نحوه کار حلقه بدینصورت است که در ابتدای شروع حلقه فقط برای یکبار اجرا می شود. سپس عبارت بررسی می گردد و در صورتیکه درست ارزیابی شود (≠ 0)، آنگاه دستور اجرا شده و سپس به ابتدای حلقه باز می گردد. از اجرای دوم به بعد، ابتدا عبارت اجرا می گردد (یعنی متغیر حلقه افزایش می یابد) و سپس عبارت بررسی می گردد و مجددا درصورت درست بودن، حلقه تکرار می شود. اینکار تا زمانیکه مقدار عبارت نادرست ( = 0) ارزیابی شود، تکرار می گردد. به محض اینکه این اتفاق بیفتد، کنترل اجرا به دستور پس از حلقه انتقال می یابد.
درحقیقت هر حلقه for معادل با حلقه while زیر است:
;
while () {
;
;
}
بعنوان یک مثال ساده، تکه برنامه زیر اعداد بین 0 تا 100 را چاپ می نماید:
int count;
for (count = 0; count <= 100; count ++)
printf(“%d “,count);
اگر بخواهيم تنها مضارب 5 چاپ شوند، حلقه را به شكل زير تغيير مي دهيم:
for (count = 0; count <= 100; count += 5)
حتي مي توان مضارب 5 را از آخر به اول چاپ كرد:
for (count = 100; count> = 0; count -= 5)
قسمت شرط مي تواند يك شرط مركب نيز باشد، بعنوان مثال:
for (count = 0; count <100 && sw==1; count ++)
كه در اينصورت در هربار اجراي حلقه، علاوه بر مقدار شمارنده، مقدار متغير sw نيز بررسي مي گردد.
نكته آخر اينكه قسمت مقدار دهي اوليه و افزايش متغير نيز مي توانند شامل چند عبارت باشند كه در اينصورت با كاما از يكديگر جدا مي شوند. بعنوان مثال:
for (a = 0, b = 100; b – a> 50; a++, b--)
در ادامه یک مثال کاملتر برای تشریح این حلقه آمده است:
برنامه 5) برنامه ای بنویسید که تعدادی عدد را از کاربر دریافت و 2 عدد بزرگتر و مجموع آنها را محاسبه و چاپ نماید.
#include
void main() {
int i, n, number;
int sum, max1, max2;
printf(“please enter n : “);
scanf(“%d”,&n);
sum = 0;
max1 = max2 = -1;
for (i=1 ; iprintf(“enter number : “);
scanf(“%d”,&number);
sum += number;
if (number> max1) {
max2 = max1;
max1 = number;
}
else if (number> max2)
max2 = number;
} //end for
printf(“Sum = %d, Maximum 1=%d, Maximum 2= d”, sum, max1, max2);
}
نكته جالب در مورد حلقه for آنستكه مي توان هريك از 3 عبارت فوق را حذف كرد. به مثالهاي زير توجه كنيد:
for (;i<100; i++)
مقداردهي اوليه حذف شده است. اين در صورتي است كه بنحوي قبل از شروع حلقه، مقدار متغير i تعيين شده باشد.
for (i= 0;i<100;)
نحوه افزايش متغير حلقه حذف شده است. اين مورد زماني بكار مي رود كه نحوه افزايش متغير حلقه پيچيده بوده و توسط برنامه نويس در داخل حلقه انجام شود.
for (;i<100;)
هر دو مورد فوق حذف شده است.
for (i=0; ;i++)
شرط ادامه حلقه حذف شده است. اين مورد زياد متداول نيست و ممكن است باعث شود حلقه براي هميشه اجرا شود. در چنين مواردي حتما بايد در داخل حلقه با استفاده از دستور break (كه در قسمتهاي بعدي توضيح داده خواهد شد)، راهي براي خروج از حلقه قرار داده شود.
حلقه do / while
همانگونه كه در قسمت الگوريتمها توضيح داده شد، در بعضي مواقع لازم است كه شرط ، در انتهاي حلقه بررسي گردد. دستور do / while از نوع حلقه هايي است كه ابتدا دستورات را اجرا كرده و سپس شرط ادامه حلقه را بررسي مي نمايد. شكل كلي اين دستور بصورت زير است:
do
;
while () ;
نحوه كار اين حلقه به اين صورت است كه ابتدا دستور اجرا مي گردد، سپس شرط حلقه بررسي شده و درصورتيكه درست بود، به ابتداي حلقه باز گشته و آن را مجددا اجرا مي كند. البته دستور مي تواند يك دستور مركب باشد.
بعنوان يك مثال كوچك، ممكن است شما از كاربر خواسته ايد كه اعلام كند آيا مايل به ادامه هست يا خير؟ وي بايد پاسخ y يا n بدهد، اما ممكن است يك حرف اشتباه (مانند m) وارد كند. قصد داريم تكه برنامه اي بنويسيم كه عمل دريافت پاسخ را تا زمانيكه يك حرف درست وارد شود، تكرار كند. مسلم است كه بايد ابتدا يك پاسخ وارد شود و سپس درستي آن بررسي گردد.
char answer;
do {
printf("Do you want to continue (y/n) ?");
answer = getch();
} while (answer != 'y' && answer != 'n') ;
بعنوان يك نمونه كاملتر به مثال زير توجه كنيد.
برنامه 6) فرض كنيد نمرات يك گروه از دانشجويان بصورت درجه بندي (A, B, C and D) آماده شده است. برنامه اي بنويسيد كه نمرات دانشجويان را دريافت و در پايان درصد هريك از نمرات را محاسبه و چاپ نمايد. در ضمن از آنجا كه تعداد دانشجويان از قبل مشخص نيست، كاربر در انتهاي نمرات، حرف Q (مخفف Quit) را وارد مي نمايد.
#include
void main() {
int aCount, bCount, cCount, dCount, n;
char grade;
aCount = bCount = cCount = dCount = n = 0;
do {
printf("Enter grade (Q for Quit) : ");
grade = getch() ;
n ++;
if (grade == 'A') aCount ++;
else if (grade == 'B') bCount ++;
else if (grade == 'C') cCount ++;
else if (grade == 'D') dCount ++;
else if (grade == 'Q') n --;
else {
printf("Wrong grade, try again.\n");
n --;
}
} while (grade != 'Q' ) ;
printf("Statistics :\n");
printf("Grade A : %f percent\n", float(aCount)/float(n));
printf("Grade B : %f percent\n", float(bCount)/float(n));
printf("Grade C : %f percent\n", float(cCount)/float(n));
printf("Grade D : %f percent\n", float(dCount)/float(n));
} // end main
ساختار switch / case
اگر مجددا به برنامه 6 دقت كنيد، خواهيد ديد كه در بعضي موارد قصد داريم برحسب مقادير مختلف يك عبارت (در اينجا مقدار متغير grade)، عمليات متفاوتي را انجام دهيم. گرچه اينكار با استفاده از دستورات if / else متداخل قابل انجام است، اما ساختار مناسبتري نيز براي اينكار وجود دارد، كه به آن ساختار چندانتخابي مي گوييم. شكل كلي ان ساختار بصورت زير است:
switch () {
case : ;
;
…
;
case : ;
;
…
;
…
default : ;
;
…
;
}
برنامه 7) برنامه 6 را با استفاده از دستور switch / case بازنويسي نماييد. برنامه را بگونه اي بنويسيد كه حروف بزرگ و كوچك هردو مورد قبول واقع شود.
#include
void main() {
int aCount, bCount, cCount, dCount, n;
char grade;
aCount = bCount = cCount = dCount = n = 0;
do {
printf("Enter grade (Q for Quit) : ");
grade = getch() ;
n ++;
switch (grade) {
case 'A' :
case 'a' : aCount ++; break ;
case 'B' :
case 'b' : bCount ++; break ;
case 'C' :
case 'c' : cCount ++; break ;
case 'D' :
case 'd' : dCount ++; break ;
case 'Q' :
case 'q' : n--; break ;
default : printf("Wrong grade, try again.\n");
n --;
} //end switch
} while (grade != 'Q' ) ;
printf("Statistics :\n");
printf("Grade A : %f percent\n", float(aCount)/float(n));
printf("Grade B : %f percent\n", float(bCount)/float(n));
printf("Grade C : %f percent\n", float(cCount)/float(n));
printf("Grade D : %f percent\n", float(dCount)/float(n));
} // end main
برنامه 8) برنامه اي بنويسيد كه يك عدد، يك عملگر و يك عدد ديگر را از كاربر دريافت و پس از اعمال عملگر برروي دو عدد، حاصل را چاپ نمايد.
#include
void main() {
int number2, number2, result;
char op ;
printf("Please enter number1 operator number2 : ");
scanf("%d %c %d",&number1, &number2, &op, &number3);
result = 0;
switch (op) {
case '+' : result = number1 + number2 ; break;
case '-' : result = number1 - number2 ; break;
case '*' : result = number1 * number2 ; break;
case '/' : if (number2 != 0) result = number1 / number2 ;
else printf("There is no answer!\n");
break;
case '%' : if (number2 != 0) result = number1 % number2 ;
else printf("There is no answer!\n");
break;
default : printf("invalid operator!\n");
}
printf("Result = %d",&result);
}
دستورات break و continue
اين دستورات قادرند مسير اجراي برنامه را در يك حلقه تكرار تغيير دهند. البته اين تغيير مسير بصورت كنترل شده بوده و همانند دستور goto نمي توان به هرجاي دلخواه پرش كرد.
چنانچه دستور break در يك ساختار while، for، do/while ويا switch بكار رود، باعث مي شود كه بلافاصله كنترل اجراي برنامه از ساختار خارج شده و به اولين دستور پس از ساختار برود. قبلا كاربرد اين دستور را در switch ديده ايد. در اينجا به مثال زير دقت كنيد:
برنامه 9) برنامه 5 را بگونه اي تغيير دهيد كه فقط اعداد مثبت را بپذيرد، و درصورتيكه عدد منفي وارد شد، بلافاصله به عمليات خاتمه داده و نتايج تا همين نقطه را چاپ نمايد.
#include
void main() {
int i, n, number;
int sum, max1, max2;
printf(“please enter n : “);
scanf(“%d”,&n);
sum = 0;
max1 = max2 = -1;
for (i=1 ; iprintf(“enter number : “);
scanf(“%d”,&number);
if (number <0) break; // this is the difference
sum += number;
if (number> max1) {
max2 = max1;
max1 = number;
}
else if (number> max2)
max2 = number;
} //end for
printf(“Sum = %d, Maximum 1=%d, Maximum 2= d”, sum, max1, max2);
}
اما دستور continue فقط در حلقه هاي while، for و do/while بكار مي رود. نحوه عمل آن بدين صورت است كه به محض آنكه كنترل اجرا به اين دستور برسد، بلافاصله از باقيمانده حلقه صرفنظر كرده و مجددا به ابتداي حلقه باز مي گردد و اجراي آن را از سر مي گيرد. در مورد حلقه for، پس از بازگشت به ابتداي حلقه، عمل افزايش مقدار متغير حلقه نيز صورت مي پذيرد.
بعنوان مثال، چنانچه بخواهيم برنامه 9 را بگونه اي تغيير دهيم كه از اعداد منفي صرفنظر كند و آنها را در محاسبات لحاظ نكند، كافيست دستور
if (number <0) break;
را به دستور زير تبديل كنيم:
if (number <0) continue;
دراينصورت، چنانچه عدد منفي باشد، بدون اينكه محاسبات بعدي انجام شوند، كنترل به ابتداي حلقه بازگشته و عدد بعدي را دريافت مي كند.
ادامه مطلب
+
نوشته شده در شنبه بیست و نهم دی 1386ساعت 17:21 توسط و.د
|
PHP يک زبان برنامه نويسی با کد باز (Open-Source) است که اگرچه در ابتدا صرفا جهت برنامه نويسی تحت وب توليد شد، امروزه کارآييهای فراوانی پيدا کرده است. PHP يک زبان تحت سرور است (Server-Side) که طبيعتا برای اجرا نياز به يک برنامه سرويس دهنده وب (Web Server) دارد.
کسانيکه مانند خود من قبلا با PERL کار کرده اند و حالا قصد دارند با PHP کار کنند، احتمالا مثل من در ابتدا به مشکلاتی بر خواهند خورد اما مطمئن باشيد که PHP را سريع خواهيد آموخت. آنچه به نظر من از خصوصيات خوب PHP بشمار می آيد آن است که با وجود شباهت PHP با PERL، PHP پيچيدگيهای PERL را کمتر دارا می باشد. هرچند که قدرت PERL بر روی متن ها غير قابل انکار است اما فراموش نکنيد که PHP را صرفا برای محيط وب ساخته اند پس به اندازه کافی ( و حتی بيش از حد کافی ) امکانات کار با stringها را به شما ارائه خواهد کرد. فکر می کنم مقدمه چينی بيش از اين هم حوصله شما را سر می برد و هم من را از موضوع دور می کند پس بر می گرديم به PHP.
برای شروع کار با PHP چه نياز داريم؟
PHP برای اجرا نياز به يک Web-Server دارد. دم دست ترين Web-Server برای شما احتمالا IIS خواهد بود، چرا که با استفاده از سی دی Windows قابل نصب است. نمی خواهم در اين مقاله به شرح نصب IIS (يا وب سرورهای ديگر) بپردازم اما اگر نياز به شرح آن داريد لطفا با من تماس بگيريد تا بطور مفصل آن را شرح دهم (آدرس پست الکترونيکی من در انتهای اين مقاله آمده است). برای کسانيکه بقول يکی از دوستان من، "مرام Open Source" گلوی آنها را می فشارد شايد بهتر باشد از Apache به عنوان Web-Server استفاده کنند. (البته اگر از حق هم نگذريم Apache خيلی از IISبهتره!!!)
اگر Web-Server مورد علاقه شما به درستی بر روی دستگاه شما نصب شده است، حالا نياز داريد که PHP را بر روی آن نصب کنيد. برای بدست آوردن کد PHP از آدرس http://www.php.net/downloads.php استفاده کنيد.
طبيعتا برای مشاهده نتيجه اجرای فايلهای PHP نياز به يک مرورگر وب (Web Browser) داريد که مسلما رايجترين آن Internet Explorer است. برای درست کردن هر فايل PHP هم نياز به يک ويرايشگر ساده متنی داريد (مثلا Word pad يا Note pad ) توجه کنيد که از ويرايشگرهای حرفه ای مانند Microsoft Word نمی توانيد استفاده کنيد زيرا اين ويرايشگرها از کاراکترهای پنهانی فراوانی استفاده می کنند که در هنگام ذخيره فايل متنی اين کاراکترها هم ذخيره خواهند شد که باعث عدم اجرای دستورات PHP می شوند. با هم يک کد ساده PHP بنويسيم.
حالا می خواهيم اولين کد PHP را با هم درست کنيم. ويرايشگر متن را باز کنيد (مثلا Word pad) و در آن چنين بنويسيد:
echo (“Hi! I am the first PHP script you have made!”);
?>
حالا فايلتان را با عنوان 1st.php و در Web Server Local Folder ذخيره نماييد (اگر از IIS استفاده می کنيد اين فولدر در درايوی که Windows را در آن نصب کرده ايد، با نام Inetpub وجود دارد. در داخل آن فولدر ديگری به نام wwwroot وجود دارد که بايد فايلتان را در آن بريزيد.)
حالا مرورگر وب خود را باز کنيد (مثلا Internet Explorer) و در قسمت آدرس آن ابتدا //:http و سپس نام کامپيوتر خود و يا آدرس IP آن را تايپ نماييد (نام کاميوتر را در Control panel/System/Network Identification و IP را در صورتيکه تعيين کرده باشيد در قسمت Command Prompt و با اجرای دستور ipconfig می توانيد مشاهده کنيد) و پس از يک Backslash (/) نام فايل (1st.php) را تايپ نموده و Enter را بزنيد. بعنوان مثال نام کامپيوتر من siamak است. پس بايد در قسمت آدرس مرورگرم خط زير را بنويسم:
http://siamak/1st.php
اگر همه چيز را تا اينجا درست انجام داده باشيد، متن زير در مرورگرتان پديدار می شود:

همانطور که احتمالا متوجه شديد، بايد کد PHP خود را در داخل تگ قرار دهيد. البته می توانيد از روشهای ديگر نيز استفاده کنيد اما متداولترين روش همين است.
دستور ()echo در PHP وظيفه چاپ در خروجی را بر عهده دارد.
می توانستيم همين کد را با کمک تگهای HTML و بصورت زير نيز بنويسيم:
echo ("Hi! I am the first PHP script you have made!");
?>
ادامه مطلب
+
نوشته شده در شنبه بیست و نهم دی 1386ساعت 17:18 توسط و.د
|
مقايسه خواص عمومي يك كلاس در C++ و C#
قبل از بررسي تفاوت بين كلاسها بين C++ و C# ابتدا خاصيت هاي عمومي يك كلاس را بررسي كرده سپس به بررسي تفاوت بين اين دو زبان قدرتمند خواهيم پرداخت.
تعريف. كلاس در حالت ساده مجموعه اي از خواص(attributes) و روش ها (methodes) است كه در رابطه با هم هدف مشتركي را دنبال مي كنند و خدماتي را ارائه مي كنند. البته اين تعريف در حد يك تعريف علمي مي باشد ولي ذكر اين نكته ضروري است كه اكثر تعاريف در شي گرايي در طبيعت وجود دارد و در ساده ترين حالت براي تعريف يك كلاس مي توان از تعريف انسان استفاده كرد كه اين بحث در اين مقاله نمي گنجد. در هر حال ما به تعريف فوق اكتفا كرده و بحث را ادامه مي دهيم.
خواص ها و روش ها كه در تعريف كلاس ارائه شد مي تواند نحوه دسترسي متفاوتي مانند public و private و protected داشته باشد كه براي برنامه نويسان C++ نيازي به توضيح نيست.
تفاوت در تعريف يك كلاس:
چنانچه در مقاله لايه ها در C# نيز اشاره شد يك كلاس در يك برنامه C# در داخل يك لايه تعريف خواهد شد(اجباري نيست). تعريف يك كلاس در C# تفاوتهايي با C++ دارد كه سعي خواهيم كرد اين تفاوت ها را با چند مثال توضيح دهيم.
فرض كنيد كلاس زير در C++ تعريف شده است كه اين كلاس را به يك كلاس C# تبديل خواهيم كرد.
// Test.h
class CTest{
private:
int m_at1;
int f1();
public:
float m_at2;
int f2();
CTest();
~CTest();
};
// Test.cpp
#include "test.h"
CTest::CTest(){
m_at1 = 0;
m_at2 = 0.0;
}
CTest::~CTest(){
// cout << "destructor call";
}
int CTest::f1(){
return m_at1;
}
int CTest::f2(){
return m_at1+(int)m_at2;
}
تفاوت اول:
بر خلاف C++ در C# تعريف و نحوه عملكرد يك تابع يا Method در خود تعريف كلاس قرار داده مي شود. در C++ غالبا تعريف كلاس در فايل .h و بدنه توابع در فايل .cpp قرار مي گرفت. البته ذكر اين نكته ضروري است كه مي توان همين عمل را در .h نيز قرار داد ولي در يك برنامه بزرگ اين عمل كنترل برنامه را از دست برنامه نويس خارج كرده و همچنين مشكلات ديگري را براي برنامه نويسان ايجاد مي كند كه برنامه نويسان C++ با اين مشكلات آشنا هستند.
تفاوت دوم:
بر خلاف C++ در C# يك دسته از متغييرها را نمي توان بصورت public يا private و ... تعريف كرد و براي هر متغيير بايد نحوه دسترسي به آن نيز مشخص شود.
تفاوت سوم:
بر خلاف C++ در C# تابع destructor وجود ندارد و خود C# مسئول از بين بردن يك شي مي باشد كه اين از بين بردن با توجه به محدوده تعريف اين شي انجام مي شود. البته تعريف destructor وجود دارد ولي نمي توان destructor را فراخواني كرد . در C++ فراخواني Destructor با استفاده از عملگر delete قابل انجام بود ولي چون C# مديريت object ها را خود بعهده مي گيرد شي ايجاد شده نميتواند توسط برنامه خراب شود. اين مطلب در مقالات بعدي مورد بررسي قرار خواهد گرفت.
با توجه به تفاوتهاي ذكر شده مي توان اين كلاس را به صورت زير براي يك كلاس C# ارائه كرد.
// Test.cs
using System;
namespace NS
{
publicclass CTest
{
privateint m_at1;
public float m_at2;
privateint f1()
{
return m_at1;
}
public int f2()
{
return m_at1+(int)m_at2;
}
public CTest()
{
m_at1 = 0;
m_at2 = 0.0f;
}
~Test()
{
// Console.WriteLine("destructor call");
}
}
}
ايجاد يك كلاس در ++ و #
در موقع استفاده از يك كلاس اگر از default constructor براي ايجاد يك كلاس استفاده مي شود در C# بايد constructor بصورت void فراخواني شود ( مانند توابع void معمولي)
به مثال زير دقت كنيد.
// C++ code
CTest *a;
a = new CTest;
// C# Code
CTest a;
a = new CTest();
ذكر اين نكته ضروري است كه در C# وقتي كلاسي تعريف مي شود در واقع اشاره گر به آن كلاس معرفي مي شود بنابراين با تعريف CTest a كلاسي از CTest ايجاد نمي شود و فقط يك اشاره گر از CTest تعريف مي شود و براي ايجاد يك كلاس استفاده از عملگر new اجباري است.
ولي در C++ تعريف CTest a به منزله ايجاد يك كلاس و فراخواني Default Constructor مي باشد.
ادامه مطلب
+
نوشته شده در پنجشنبه بیست و هفتم دی 1386ساعت 0:52 توسط و.د
|
آرایه ها در برنامه نویسی c
آرايه در C عبارتست از مجموعه اي از داده هاي همنوع كه تحت يك نام مشترك و در خانه هاي متوالي حافظه ذخيره مي گردند. براي دسترسي به عناصر آرايه، بايد از نام آرايه بعلاوه انديس استفاده كرد. در قسمتهاي بعدي، نحوه تعريف و استفاده از آرايه ها را تشريح خواهيم كرد.
آرايه هاي يك بعدي
پيش از آنكه بتوان از يك آرايه يك بعدي استفاده كرد، بايد آن را اعلان كرد. اعلان آرايه ها بصورت زير انجام مي گردد:
[] ;
بعنوان مثال:
int A[10];
خط بالا يك آرايه 10 تايي از اعداد صحيح بنام A ايجاد مي نمايد. هر كدام از عناصر اين آرايه مي توانند بعنوان يك متغير مستقل مورد استفاده قرار گيرد. براي دسترسي به عناصر اين آرايه بايد از انديس استفاده نمود. در زبان C انديسها در داخل كروشه [] قرار مي گيرند. نكته بسيار مهمي كه بايد بدان توجه كرد آنستكه در C انديس يك عدد صحيح است كه از 0 آغاز مي گردد. به مثال زير توجه نماييد:
int A[10] ;
A[2] = 8;
و يا چنانچه بخواهيم مقدار خانه سوم را بر 2 تقسيم و در متغير x بريزيم، داريم:
x = A[3] / 2;
اكنون به يك مثال دقت كنيد.
برنامه 1) برنامه اي بنويسيد كه شماره دانشجويي و معدل تعدادي دانشجو را دريافت، و سپس چنانچه معدل دانشجو از ميانگين كلاس :
- بيش از يك نمره بيشتر باشد، چاپ كند : عالي
- حداكثر يك نمره بيشتر يا كمتر باشد، چاپ كند : خوب
- بيش از يك نمره كمتر باشد، چاپ كند : ضعيف
#include
void main() {
float average[100] ;
long int id[100] ;
int i, n ;
float totalAverage;
printf("enter number of students : ");
scanf("%d", &n);
for (i = 0; i < n ; i ++) {
printf("enter id and average : ");
scanf("%ld %f", &id[i], &average[i]);
totalAverage += average[i];
}
totalAverage /= n;
for (i = 0; i < n ; i ++) {
if (average[i] > = totalAverage + 1)
printf("%ld : excellent !\n", id[i]);
else if (average[i] > = totalAverage – 1)
printf("%ld : good !\n", id[i]);
else printf("%ld : weak !\n", id[i]);
}
}
چند نكته مهم راجع به آرايه در C وجود دارد كه حتما بايد به آنها دقت كنيد:
1- اندازه آرايه ها در C ثابت بوده و حتما بايد توسط يك مقدار ثابت صحيح تعيين گردد. بعنوان مثال اعلان زير خطاي نحوي محسوب مي گردد:
int n ;
n=100 ;
int A[n];
اما مي توان با استفاده از متغير هاي ثابت (ثابتهاي داراي نام)، اندازه آرايه را تعيين كرد، كه در قسمتهاي بعدي به آن اشاره خواهد شد.
2- انديس آرايه ها در C عدد صحيح بوده و هميشه از 0 شروع مي شود. لذا به تفاوت "عنصر چهار آرايه" يعني A[4] و "چهارمين عنصر آرايه" يعني A[3] دقت كنيد. اين مسئله معمولا باعث بروز خطاهاي منطقي مي گردد.
3- در C مرز آرايه ها بررسي نمي گردد. بدين معنا كه چنانچه انديسي خارج از محدوده مجاز يك آرايه استفاده شود، باعث ايجاد خطا توسط كامپايلر نمي گردد، اما مسلما برنامه را دچار يك خطاي منطقي خواهد كرد. بعنوان مثال:
int A[10] ;
A[12] = 20 ; //this is not a syntax error but a logical error
لذا بررسي مرزهاي آرايه بعهده خود برنامه نويس است و بايد از درستي برنامه خود و خارج نشدن از محدوده مجاز مطمئن گردد.
4- مقداردهي اوليه به آرايه هاي يك بعدي بصورت زير انجام مي پذيرد:
int A[3] = {5, 2, 8};
كه در اينجا A[0] برابر 5 ، A[1] برابر 2 و A[2] برابر 8 خواهد شد.
علاوه براين مي توان فقط به تعدادي از عناصر آرايه مقدار داد، دراينصورت مقدار عناصر باقيمانده آرايه اتوماتيك 0 خواهد شد.
int B[10] = {5, 8} ;
در اينجا عناصر B[2] به بعد مقدار 0 خواهند گرفت. بنابراين مي توان براي 0 كردن كليه عناصر يك آرايه به شكل زير عمل كرد :
int C[10] = {0};
چنانچه به آرايه مقدار دهي اوليه كرده باشيم، مي توان تعداد عناصر آرايه را نيز ذكر نكرد، دراينصورت اندازه آرايه بطور اتوماتيك برابر تعداد مقادير مشخص شده خواهد شد.
int C[] = {10, 15, 20};
در مثال فوق آرايه C با 3 عضو درنظر گرفته مي شود.
ادامه مطلب
+
نوشته شده در پنجشنبه بیست و هفتم دی 1386ساعت 0:48 توسط و.د
|
ايجاد فايل XML با استفاده از يک بانک اطلاعاتی
از بانک های اطلاعاتی به منظور ذخيره و مديريت داده ها استفاده می گردد . در صورتی که قصد ارسال داده های ذخيره شده در يک بانک اطلاعاتی را برای يک سرويس گيرنده داشته باشيم ، XML گزينه ای مطلوب در اين رابطه است . با استفاده از XML داده ها در ساختاری ذخيره و سازماندهی می شوند که سرويس گيرندگان با هر نوع پلت فرم قادر به استفاده از آنان با توجه به اهداف عملياتی خود می باشند. در حقيقت ، XML مکانيزم استانداردی به منظور مبادله داده بين دو نقطه مبداء و مقصد را فراهم می نمايد . بدين ترتيب بخش های متفاوت يک نرم افزار و يا نرم افزارهای مختلف ، قادر به مبادله داده بين خود خواهند بود .
XML در دات نت دارای نقشی محوری و اساسی بوده و نظير چسبی است که تمام بخش های فريمورک دات نت را به يکديگر متصل و مرتبط می نمايد .مثلا" ADO.NET اساس کار خود را بر روی DataSet استوار نموده که بطور کامل از XML حمايت می نمايد . کلاس DataSet دارای مجموعه وسيعی از متدهای لازم به منظور پردازش اسناد XML است . برخی از متداولترين آنان عبارتند از :
-
ReadXml
-
WriteXml
-
GetXml
-
GetXmlSchema
-
InferXmlSchema
-
ReadXmlSchema
-
WriteXmlSchema.
در اين مقاله با نحوه ايجاد يک سند XML که محتويات آن متاثر از اجرای يک query در ارتباط با يک بانک اطلاعاتی می باشد ، آشنا خواهيم شد. بدين منظور مراحل زير را دنبال خواهيم کرد :
-
مرحله اول : ايجاد بانک اطلاعاتی ( از يک بانک اطلاعاتی Access استفاده خواهيم کرد )
-
مرحله دوم : مشخص نمودن يک ساختار برای فايل XML
-
مرحله سوم : ايجاد يک فرم وب که ليست محصولات را در يک DataGrid نمايش داده و کاربر بتواند با استفاده از Button تعبيه شده بر روی آن اقدام به ايجاد فايل XML و Schema مربوط به آن نمايد .
-
مرحله چهارم : ايجاد يک DataSet و پر نمودن داده در آن با استفاده از يک SQL query ( اين کار را در روتين Page_Load انجام خواهيم داد )
-
مرحله پنجم : نوشتن روتين مربوط به ايجاد فايل XML
مرحله اول : ايجاد بانک اطلاعاتی
بانک اطلاعاتی Products و جدول OurProducts
 |
مرحله دوم : مشخص نمودن يک ساختار برای فايل XML
فايل XML که قصد ايجاد آن را داريم دارای ساختار زير است :
| فا يل XML نمونه |
|
s> Spec> Spec> ... s> |
مرحله سوم : ايجاد يک فرم وب
در فرم وب از دو کنترل DataGrid و Button استفاده شده است . از کنترل DataGrid به منظور نمايش محتويات Dataset و از کنترل Button به منظور ايجاد فايل XML ، استفاده خواهيم کرد .
| فرم وب |
|
<%@ Page Language ="VB" %> <%@ Import Namespace="System.Xml" %> <%@ Import Namespace="System.Data" %> <%@ Import Namespace="System.IO" %> <%@ Import Namespace="System.Data.OleDb" %>
asp:DataGrid>
|
مرحله چهارم : ايجاد يک DataSet و پر نمودن داده در آن
اين کار از طريق روتين Page_laod انجام می شود . در اين روتين پس از ارتباط با بانک اطلاعاتی Products و اجرای يک query در ارتباط با جدول OurProducts ، داده مورد نظر در DataSet قرار گرفته و در نهايت با نسبت دهی آن به خصلت DataSource کنترل DataGrid ، داده ها در کنترل DataGrid نمايش داده می شوند .
| روتين Page_Load |
|
Sub Page_Load(s As Object, e As EventArgs) If Not Page.IsPostBack Then Dim myDataSet As New DataSet("myXMLProduct") Dim myConn As New OleDbConnection( "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=C:\Products.mdb") Dim mydataAdapter As New OleDbDataAdapter _ ("SELECT ProductID,ProductName,UnitPrice FROM OurProducts" ,myConn) mydataAdapter.Fill(myDataSet,"ProductSpec") ProductGrid.DataSource=myDataSet.Tables(0) ProductGrid.DataBind Session("Ds")=myDataSet End If End Sub |
مرحله پنجم : روتين MakeXml
در اين مرحله فايل های myXMLData.xml و myXMLData.xsd ايجاد خواهند شد . بدين منظور يک DataSet ايجاد و داده آن از طريق متغير Session ايجاد شده در روتين Page_Load پر می گردد .
| روتين MakeXml |
|
Sub MakeXML(s As Object, e As EventArgs) Dim myFs1 As New FileStream (Server.MapPath _ ("myXMLData.xml") ,FileMode.Create ,FileShare.ReadWrite) Dim myFs2 As New FileStream(Server.MapPath _ ("myXMLData.xsd"),FileMode.Create,FileShare.ReadWrite) Dim myDataSet As New DataSet myDataSet=Session("Ds") myDataSet.WriteXml(myFs1) myFs1.Close() myDataSet.WriteXmlSchema(myFs2) myFs2.Close() End Sub |
پس از ذخيره تمامی کدهای اشاره شده در فايل MakeXmlFromDataBase.aspx و مشاهده آن در مرورگر ، خروجی زير را خواهيم داشت :
پس از فعال نمودن دکمه "ايجاد فايل XML " ، فايل های myXMLData.xml و myXMLData.xsd ايجاد می گردند .
فايل myXMLData.xml
ادامه مطلب
+
نوشته شده در سه شنبه هجدهم دی 1386ساعت 2:54 توسط و.د
|