تبليغاتX
دانشجویان دانشگاه پیام نور آبسرد
دانشجویان دانشگاه پیام نور آبسرد
سایت دانشجویان دانشگاه پیام نور واحد آبسرد

آموزش شبكه

 انواع شبكه از نظر جغرافيايي : شبكه از نظر بعد جغرافيايي به سه نوع LAN ، MAN و WAN تقسيم مي شوند . كه هر كدام ويژگي هاي منحصر به خود را دارند .

Local Area Network یا LAN : اين نوع شبكه ، كه در محيط محدودي كاربرد دارد ، در داخل يك ساختمان و يا ساختمان هاي نزديك به هم مورد استفاده قرار مي گيرد . شبكه هاي محلي ، براي اتصال رايانه ها در دفاتر شركت ها ، ادارات و كارخانه ها به كار مي روند .

ويژگي هاي آنها :

   _ رايانه ها نزديك به هم و معمولا در يك ساختمان يا مجموعه اي از ساختمان ها به كار مي روند .

   _ مالكيت خطوط انتقال خصوصي است و از سوي سازمان مربوط ، نصب ونگهداري مي شود

   _ سرعت انتقال داده ها بالاست .

    _ شبكه ها از ساختار و استاندار مشخص پيروي مي كنند .

 Metropolition Area Network  یا MAN :

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

Wide Area Network یا WAN :

با گسترش حوزه جغرافيايي ، شبكه هاي گسترده مطرح شدند . اين شبكه ها داراي مشخصات زير هستند :

- رايانه ها از يكديگر صدها و هزرها كيلومتر فاطله دارند .

- خطوط انتقال در اين نوع شبكه ها از سوي شركتهاي مخابراتي ايجاد و پشتيباني مي گردد .

- سرعت انتفال داده ها نسبتا كم است .

عناصر كلي يك شبكه

DTE : ماشين هاي مرتبط با داده ها همانند كامپيوتر را DTE مي گويند .

كانال انتقال : انتقال داده ها از منبع به مقصد توسط كانل انتقال صورت مي پذيرد .

DCE : براي انتقال داده ها از يك كامپيوتر به يك كامپيوتر ديگر توسط يك كايل نياز به تجهيزاتي است كه مشخصات الكتريكي دادها را با مشخصات كانال انتقال تطبيق دهد ، اين تجهيزات DCE نام دارند . همانند مودم كه وظيفه آن تبديل سيگنال هاي ديجيتال به آنالوگ و بر عكس است .

پهناي باند و نويز و سرعت انتقال داده ها در شبكه :

به محدوده فركانسي كه امواج آنالوگ بدون هيچ افتي از سيستم مخابراتي منتقل مي گردند ، گفته مي شود . در حالي كه فركانس خارج از اين محدوده عبور كند ، به شدت افت كرده و منتقل نمي شود .

به عنوان مثال ، سيستمي كه فقط اجازه عبور امواج آنالوگ با فركانس 400 هرتز تا 4000 هرتز را دارد داراي پهناي باند 3600 هرتز است .

( B.W=4000 Hz – 400 Hz )

نويز امواج الكتريكي مزاحمي هستند كه مواختلال در انتقال داده ها مي شوند . مقدار نويز از رابطه توان امواج داده ها بر توان نويز بدست مي آيد و با (S/N ) بدست مي آيد . سرعت انتقال داده ها يعني تعداد بيتي كه در زمان مشخصي از كانل انتقال عبور مي كند و به عوامل متعددي وابسته است . مهمترين عوامل موثر در اين زمينه در يك خط انتقال ، پهناي باند و ميزان نويز است . حداكثر سرعت داده ها در يك خط انتقال از رابطه شانون (SHANON) بدست مي آيد :

H = B.W * Log2 ( 1 + S/N )

با تشکر از شما .




ادامه مطلب + نوشته شده در  شنبه بیست و نهم دی 1386ساعت 17:24  توسط و.د  | 

ساختارهای کنترلی

در فصل ششم اشاره کردیم که در برنامه نویسی ساختیافته، هر برنامه از 3 ساختار کنترلی بنام: ساختار ترتیب، ساختار انتخاب و ساختار تکرار تشکیل می گردد. از آنجا كه اين 3 ساختار، نحوه و ترتيب اجراي برنامه را كنترل مي كنند، به آنها ساختارهاي كنترلي گفته مي شود. تا کنون فقط با برنامه هایی سروکار داشته ایم که از ساختار ترتیب استفاده می کرده اند، چرا که دستورهای زبان C در حالت عادی به همان ترتیبی که نوشته شده اند، یکی پس از دیگری اجرا می شوند.

اما زبان C دارای 3 نوع ساختار انتخاب می باشد که عبا رتند از : ساختار if یا ساختار تک انتخابی، ساختار if / else یا ساختار دو انتخابی و ساختار switch یا ساختار چند انتخابی. علاوه براین، این زبان دارای 3 نوع ساختار تکرار بنامهای while، for و do / while نیز می باشد که هریک را بطور کامل شرح خواهیم داد.

قرارداد: توجه کنید که در هنگام تشریح یک دستور، خود دستور با رنگ آبی و عملگرهای آن مانند () با رنگ قرمز نشان داده می شوند. قسمتهایی که در داخل <> قرار می گیرند، عبارت یا دستوری هستند که باید در هنگام استفاده جایگزین گردند.

ساختار انتخاب if

این دستور به شکل زیر استفاده می شود:

if () ;

نحوه کار بدینصورت است که ابتدا عبارت موجود در قسمت ارزیابی می شود. در صورتیکه درست ارزیابی گردد، دستور قسمت اجرا  خواهد  شد  و  در  صورتیکه  نادرست  باشد،  بدون  اینکه  دستور  قسمت   را اجرا کند به دستور بعدی خواهد رفت. این دستور می تواند بصورت زیر نیز استفاده گردد: 

if () ;
else ;

در اینصورت ابتدا عبارت موجود در قسمت ارزیابی می شود. در صورتیکه درست ارزیابی گردد، دستور قسمت اجرا خواهد شد، و در صورتیکه نادرست باشد، دستور قسمت اجرا خواهد شد. در هر حال فقط یکی از این دو قسمت اجرا خواهد گردید.

دقت کنید که پرانتز استفاده شده پس از دستور if برخلاف برخی زبانهای دیگر، اجباری است. علاوه براین، در این دستور نیازی به استفاده از then نمی باشد.

بعنوان مثال چنانچه متغیر grade حاوی نمره دانشجو باشد و بخواهیم بر مبنای نمره وی، پیغام مناسبی چاپ کنیم، می توانیم از دستور زیر استفاده کنیم:

if (grade> = 10) printf(“Passed !”);
else printf(“Failed!”);

در حالت عادی دستور if منتظر یک دستور در بدنه خود می باشد، اما چنانچه می خواهید چندین دستور را در بدنه یک دستور if دهید، باید آنها را در داخل آکولاد باز وبسته { } قرار دهید. این مجموع دستورات را یک دستور مرکب می گویند. بطور کلی در زبان C هرجا که می توان یک دستور قرار داد، می توان از یک دستور مرکب نیز استفاده کرد. به یک دستور مرکب، بلوک نیز گفته می شود. بنابراین صورت کلی دستور if به شکل زیر است:

if () {
;
;
….
;
}
else {
;
;
…….
;
}

توجه کنید که وجود قسمت else اختیاری است و در ضمن ممکن است یکی از دو قسمت دارای دستور ساده و دیگری دارای دستور مرکب باشد. بعنوان یک مثال کاملتر به برنامه زیر توجه کنید:

برنامه 1) برنامه ای بنویسید که ضرایب یک معادله درجه 2 را دریافت و ریشه های آن را محاسبه و چاپ نماید.

#include
#include
#include
#include
void main() {
int a, b, c;
float x1, x2, delta;
clrscr();
printf(“Please enter a, b and c : “);
scanf(“%d %d %d”, &a, &b, &c);
if (a==0) {
printf(“wrong equation!”);
exit(1) ;
}
delta = b*b – 4*a*c;
if (delta <0)
printf(“No answer !”);
else if (delta == 0) {
x1 = -b / (2*a);
printf(“There is one answer, x = %f”,x1);
}
else {
delta = sqrt(delta);
x1 = (-b+delta) / (2*a);
x2 = (-b-delta) / (2*a);
printf(“There are two answers, x1= %4.2f and x2= %4.2f”, x1, x2);
}
}
Please enter a, b and c : 3 -7 2
There is two answers, x1 = 2.00 and x2 = 0.33

چندين نكته درمورد برنامه بالا قابل ذكر است.

1- در اين برنامه از 2 تابع جديد استفاده شده است.اولي تابع sqrt كه يك عدد را به عنوان ورودي دريافت و جذر آن را باز مي گرداند. اين تابع در فايل math.h تعريف شده است. و ديگري تابع exit كه باعث مي شود اجراي برنامه خاتمه يابد. اين تابع نيز در فايل stdlib.h تعريف شده است.

2- به نحوه دندانه گذاري در برنامه دقت كنيد، هرجا كه بلوك جديدي ايجاد شده است، دستورات آن حدود 3 كاراكتر جلوتر نوشته شده اند. اينكار باعث مي شود كه خوانايي برنامه افزايش يابد.

3- توجه كنيد كه همانطور كه قبلا نيز گفته شد، خروجي يك عبارت مقايسه اي، يك عدد است كه 0 نشانه نادرست و هر عدد ديگر نشانه درست است. بنابراين در قسمت شرط يك دستور if مي توان بجاي يك عبارت مقايسه اي، هر عبارت ديگري كه يك مقدار عددي بازگرداند نيز قرار داد! بعنوان مثال مي توان بجاي دستور

if (a==0) …

از دستور زير استفاده كرد:

if (!a) …

دراينصورت چنانچه a برابر صفر باشد، نادرست تلقي خواهد شد و در نتيجه نقيض آن يعني ! ، درست محسوب مي گردد.
يك روش متداول استفاده از دستور if، استفاده از if هاي تودرتو مي باشد كه در مثال بالا نيز ديده مي شود. دراينحالت مجموعه اي از عبارات if-else-if بصورت متداخل قرار داده مي شوند. بعنوان نمونه به مثال زير توجه كنيد:

if (grade> = 18) printf("good!");
else if (grade> = 15) printf("medium!");
else if (grade> = 12) printf("rather weak!");
else if (grade> = 10) printf("weak");
else printf("failed!");

در چنين دستوري، كليه شرطها بترتيب از بالا به پايين بررسي شده و به محض اينكه يكي از آنها درست باشد، دستور مربوط به آن اجرا شده و از بقيه دستورات صرفنظر مي گردد. درصورتيكه هيچ يك از شرطها درست نباشد، دستور مربوط به آخرين else اجرا مي گردد. درچنين حالتي توصيه مي گردد كه شرطهاي نادر را كه امكان وقوع آنها كم است، در انتهاي كار بررسي نماييد، تا تعداد مقايسه كمتري صورت پذيرد.

مشكلي كه در مورد if هاي تودرتو پيش مي آيد، مسئله تعيين if مربوط به هر else است. بعنوان مثال در مورد دستور زير، else به كدام if تعلق دارد؟

if (a if (c ;
else ;

همانطور كه از دندانه گذاري نيز مشخص است، else مربوط به دومين if مي باشد. يعني درصورتي اجرا خواهد شد كه 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 چيست؟

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  توسط و.د  | 

آموزش هک

خلاصه درس: مسير آينده را در اين درس مشخص می‌کنم. لغاتی از ديکشنری جارگون را می‌گم. بحث Footprinting را با پيدا کردن ip سايت شروع می‌کنيم.
 
 
 
◊ ترسيم مسير برای آينده:

۱- اولين و مهمترين تصميم انتخاب نوع کامپيوتری است که می‌خواهيد هک کنيد ( کلاينت يا سرور )، زيرا روش‌هک کردن اين‌دو بجز در مراحل ابتدايی کاملا متفاوت است.
۲- دومين گام انتخاب يک کامپيوتر مشخص (مثلا کامپيوتری که فلان سايت را نگه می‌دارد که مثالی برای کامپيوتر سرور است و يا کامپیوتر فلان شخصی که با او چت می‌کنيد که مثالی برای کامپيوتر کلاينت است) و جمع‌آوری اطلاعات در مورد آن است. اين جمع‌آوری اطلاعات از قربانی (Victim) را Footprinting گويند. اولين مشخصه‌ای که بايد کشف شود، ip اوست. يکی ديگر از اطلاعات مهم که معمولا دنبالش هستيم، پيدا کردن نوع سيستم‌عامل و نيز برنامه‌هايی است که کامپيوتر شخص از آنها بهره می‌برد. يکی از مهمترين ( و گاه خطرناک‌ترين) کارها، تست‌کردن پورت‌های آن کامپيوتر برای ديدن اينکه کدام پورت‌ها باز و کدام‌ها بسته هستند.
۳- مرحله بعدی در واقع شروع تلاش برای نفوذ به سيستم است. اين نفوذ سطوح مختلف دارد و بالاترين آن که در کامپيوترهای سرور روی می‌دهد، حالتی است که بتوان username و password مربوط به مدير کامپيوتر (administrator) يا superuser را به‌دست آورده و از طريق اين Shell Account به نهايت نفوذ دست‌ يابيم ولی گاه به‌دلايل مختلف (مربوط به سطح علمی خود و ... ) نمی‌توان به اين سطح دست‌يافت اما به هر حال برای مرحله بعدی می‌تواند استفاده شود. اين مرحله جايی است که هنر شما يه عنوان يک هکر آغاز شده و نيز به پايان می‌رسد.
۴- اين مرحله بعد از نفوذ روی می‌دهد که در آن به يک سطحی از کنترل سيستم رسيده‌ايد. رفتار شما در اين مرحله مشخص می‌کند که چه نوع هکر هستيد(سامورايی، واکر و يا کراکر) و اينکه آيا جنبه ياد گرفتن را داشته‌ايد يا نه، همينجا مشخص خواهد شد.
۵- مرحله آخر پاک کردن ردپاست تا گير نيفتيم (البته بعضی وقتها برای کلاس گذاشتن بايد گير بيفتيم، هه هه ...). بعضی از سيستم‌ها آمار login را نگه می‌دارند که در مورد آنها اين مرحله بسيار مهم است.

خلاصه مطالب بالا به اين صورت است:
Selection -> FootPrinting -> Penetration -> [Changings] -> Cleaning
 
 
◊ شروع مبحث Footprinting


گفتيم که اولين مرحله جمع‌آوری اطلاعات است که به آن FootPrinting می‌گويند. اين مبحث را با آموزش روش پيدا کردن ip شروع می‌کنيم.


 
◊ پيدا کردن ip يک سايت با دانستن آدرس اينترنتی 


برای اين کار روشهای مختلفی هست:

۱- در (Internet Explorer (IE آدرس را تايپ کنيد و Enter را فشار دهيد. در قسمت پايين مرورگر يعنی Status Bar پس از چند لحظه برای مدت کوتاهی ip نمايش داده می‌شود و می‌توانيد آنرا يادداشت کنيد. اگر طول اين مدت بسيار کوتاه است می‌توانيد از صفحه عکس بگيريد ( با دکمه Print Screen ) و در يک نرم‌افزار گرافيکی بعد از باز کردن يک صفحه خالی به کمک Ctrl+V آنرا مشاهده کنيد. [ عجب راه احمقانه‌ای ;-)
اگر اين کار را برای www.yahoo.com انجام دهيم:



که همان شماره ip برای www.yahoo.com است.
نکته بسيار مهم اين است که به‌دليل ضريب اشتباه بسيار بالای آن هيچ‌گاه از اين روش استفاده نکنيد. نتايج ممکن است کاملا اشتباه باشد که بعدا ميگم چرا.

۲- دستور ping را در command prompt صادر کنيد:

ping domain
در اين حالت می‌توانم ip آن سايت را ملاحظه کنم. (البته کار اصلی ping يک چيز ديگست و ميشه گفت داريم ازش سوءاستفاده می‌کنيم). مثلا برای پيدا کردن ip سازين می‌نويسم:
ping sazin.com

و جواب می‌شنوم:

Pinging sazin.com [63.148.227.65] with 32 bytes of data:
 
Reply from 63.148.227.65: bytes=32 time=821ms TTL=111
Reply from 63.148.227.65: bytes=32 time=821ms TTL=111
Reply from 63.148.227.65: bytes=32 time=822ms TTL=111
Reply from 63.148.227.65: bytes=32 time=811ms TTL=111

 
Ping statistics for 63.148.227.65:
    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
    Minimum = 811ms, Maximum =  822ms, Average =  818ms
ملاحظه می‌فرماييد که ip سازين 63.148.227.65 است.
اگر دستور ping را به‌جای sazin.com برای www.sazin.com صادر کنيد، جواب همان است. البته برای سايت‌های بزرگ جواب‌های حاصل متفاوت خواهد بود.

۳- روش بعدی و کامل‌ترين روش whois کردن به بعضی سايت‌های خاص است. بعدا اين را کامل‌تر توضيح می‌دم ولی فعلا روشش رو می‌گم. آدرس زير را در مرورگر خود تايپ کنيد:
http://www.samspade.org/t/ipwhois?a=xxxxxx
که به‌جای xxxxxx آدرس مورد نظر را تايپ کنيد. مثلا برای sazin.com يکی از دو آدرس زير را بايد تايپ کرد:
http://www.samspade.org/t/ipwhois?a=sazin.com
http://www.samspade.org/t/ipwhois?a=www.sazin.com
چيزی که در صفحه ظاهر می‌شود به صورت زير است:
whois -h magic 63.148.227.65
sazin.com resolves to 63.148.227.65
 
Trying whois -h whois.arin.net 63.148.227.65
Qwest Communications NET-QWEST-BLKS-2 (NET-63-144-0-0-1) 
                                  63.144.0.0 - 63.151.255.255
Neutron Digital Media Corp. QWST-63-148-224 (NET-63-148-224-0-1) 
                                  63.148.224.0 - 63.148.231.255
 
# ARIN Whois database, last updated 2002-09-04 19:05
# Enter ? for additional hints on searching ARIN"s Whois database.
که آدرس ip در سطر اول و دوم ذکر شده است.

اگر دو روش آخر را برای سايت بزرگ yahoo انجام دهيم، نتايج زير را می‌بينيم:
--> روش ping :
www.yahoo.com ====> 64.58.76.229
yahoo.com ====> 66.218.71.198
--> روش whois :
...و www.yahoo.com ====> 66.218.71.86
64.58.79.230 و yahoo.com ====> 66.218.71.198

نتايج حاصل گويای آن است که چرا بهتر است از whois استفاده کنيم.



ادامه مطلب + نوشته شده در  شنبه بیست و نهم دی 1386ساعت 17:17  توسط و.د  | 

تعاريف پايه و نكات كاربردي در لينوكس و يونيكس

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


1- فرامين و دستورات
در محيط سيستم عاملهای گنو / لينوكس به بزرگی و كوچكی حروف حساس يا باصطلاح

case sesitive
ميباشند ، اين بدان معناست كه كلماتی چون  
Mozilla,
MOZILLA, mOzilla , mozilla

كاملا با هم متفاوت هستند و بعنوان چهار دستور جداگانه تلقی ميشوند .و بصورت پيش
فرض فقط دستور

mozilla
برای اجرای مرورگر اينترنت موزيلا در محيط اين سيستم قابل اجراست و بقيه دستورات
بدون نتيجه خواهد بود . همچنين كلمه عبور ورودی شما به سيستم و كلمه رمز عبور نيز
از اين قائده پيروی ميكنند .



2- نام فايلها در
لينوكس ميتواند حداكثر شامل 256 كاراكتر باشد كه اين كاراكترها كليه حروف و اعداد و
( -  و  _  و  . ) و حتی تعدادی كاراكترهای غير مصطلح ديگر باشد .



3- فايلهائی كه نام
آنها با دات يا ( . ) آغاز ميشود را نميتوان با دستور

ls
يا
dir
مشاهده و ليست نمود . چرا كه سيستم تصور ميكند اين فايلها دارای
خصوصيت پنهان بوده و بايد حتما از دستور  
ls
?a
   برای
مشاهده همه فايلهای موجود در مسير جاری استفاده كرد . (
a=all)



4- كاراكتر
/
در لينوكس مشابه همتای خود درداس يعنی

\
بوده و به معنای ريشه تمام دايركتوريهای موجود در سيستم فايل لينوكس است . برای
مثال برای رفتن به يكی از دايركتوريهای سيستم از دستور

cd   /usr/doc  
استفاده ميشود .



5- در لينوكس همه
دايركتوريها در زير شاخه يك دايركتوری اصلی بنام ريشه يا

root
قرار دارند و هيچگونه درايوی مثل داس يا ويندوز (
c,d,e,f,?)
وجود ندارد . اين بدان معناست كه حتی درايوهای فيزيكی مثل هارد ديسكهای متعدد و يا
حتی درايوهای شبكه پس از اتصال به سيستم فايل لينوكس در زير مجموعه دايركتوری ريشه
root
قرار ميگيرند .



6- در فايلهای
پيكربندی سيستمی لينوكس كليه خطوط دستوری كه با كاراكتر # شروع ميشوند صرفا حاوی
توضيحاتی برای راهنمائی كاربران ميباشند و در هنگام اجرای فايل پيكربندی ناديده
گرفته خواهند شد .



7- لينوكس بصورت
ذاتی يك سيستم چند كاربره ميباشد و كليه تنظيمات سيستمی  و فايلهای متعلق به هر
كاربر در يك دايركتوری اختصاصی وی در شاخه

/home/
قرار ميگيرد . تنظيمات كاربری و كلمه شناسائی و ساير تنظيمات اختصاصی اعمال شده در
سيستم توسط هر كاربر در دايركتوری

home
مخصوص وی و در فايلهائی قرار ميگيرد كه همگی با نقطه يا " . " آغاز ميگردند .



8- فايلهای تنظيمات
عمومی سيستم در دايركتوری

/etc
قرار دارند .



9- در لينوكس همچون
ساير سيستمهای عامل چند كاربره همه دايركتوريها و حتی تك تك فايلها  حاوی اطلاعات
مربوط به خصوصيات  و سطح دسترسی قابل تعريف  
permissions 
ميباشند .



10- دستورات تكميلی
هر فرمان اجرا شده در خط فرمان متنی با كاراكتر  -    و وقتی فرمان كمكی حاوی بيش
از يك كاراكتر باشد با  - -   آغاز ميشوند. اين مورد را ميتوان با برخی سوئيچها
كمكی فرمان داس  /  مقايسه كرد .



11- هنگامی كه
بخواهيد يك فرمان در پس زمينه سيستم اجرا شود بايد پس از تايپ دستور يا فرمان
مربوطه كاراكتر & را قرا دهيد .




ادامه مطلب + نوشته شده در  شنبه بیست و نهم دی 1386ساعت 17:12  توسط و.د  | 

آموزش جاوا

 

متغییرهایی که تاکنون معرفی کردیم مهمترین انواعی هستند که در اغلب برنامه های جاوا به کار می رود. اما برای اعداد صحیح سه نوع متغییر دیگر نیز به کار می برند ، نوع اول ، byte برای اعداد بین 128- تا 127 مورد استفاده قرار می گیرد .

 

مثال                  byte key=21;  این جمله متغییری به نام key با مقدار اولیه 21 ایجاد می کند .

 

نوع دوم short  است که محدوده آن از 32.768- تا 32.767 می باشد

 

مانند           short number =43;     این جمله متغییری به نام number با مقدار اولیه 43 ایجاد می کند .

 

نوع آخر، یعنی long برای اعداد صحیح بزرگی به کار می رود که نوع int  برای نگهداری آنها کفایت نی کند .

 

و همچنین در زبان جاوا با متغییری برخورد خواهیم کرد به نام Boolean که برای ذخیره مقادیر true (درست) و false (نادرست ) به کار برده می شود .

در این زبان برنامه نویسی به دو صورت می توان متغییر ها را مقداردهی کرد :

 روش اول : می توان هنگام ایجاد یک متغییر مقداری را به آن تخصیص داد

روش دوم : بعد از تعریف متغییر در هر جایی از برنامه می توان مقداری را در آن قرار داد.

و در صورتی که دو متغییر از یک نوع باشند می توان مقدار یک متغییر را در متغییر دیگر قرار داد ، مثال :

Int number=24;

Int key=number;

در نتیجه شما دو متغییر با مقدار اولیه 24 تعریف کرده اید .

 

تقدم عملگرها  :

برای ارزیابی عبارات و محاسبه آنها ترتیب زیر باید رعایت شود :

  • عملگرهای افزایش (مانندx++ ، این عملگر به مقدار x یک واحد می افزاید) و کاهش (مانندy-- ، این عملگر از مقدار y یک واحد می کاهد ) اولویت اول را دارند .
  • ضرب ، تقسیم و تقسیم صحیح در اولویت بعد بعد قرار می گیرند .
  • جمع و تفریق در اولویت سوم قرار دارند .
  • عملگرهای مقایسه در اولویت بعدی قرار می گیرند .
  • علامت مساوی = که برای مقداردهی یک متغییر استفاده می شود دارای کمترین اولویت است.

 

مثال :

Int z=5;

Int number=x++*6+4*10/2;

در نتیجه مقدار number مساوی 50 می باشد




ادامه مطلب + نوشته شده در  شنبه بیست و نهم دی 1386ساعت 16:55  توسط و.د  | 

درباره
مجموعه ای که مشاهده ميکنید حاصل تلاش شما و دوستان شماست .
هدف از راه اندازی اين مجموعه آشنا کردن هرچه بيشتر شما با علوم کامپيوتری ميباشد.

پيوندها
پيوندها ي روزانه
نويسندگان
آرشيو مطالب

دیکشنری آنلاین
This Template Designe By vahid - All Rights Reseived By absardpnu.Blogfa.Com