 |
فهرست اصلی |
|
 |
لینکهای سریع |
 |
موضوعات |
|
|
|
 |
آرشیو مطالب |
|
|
 |
لینکستان |
|
| اگر می خواهید با وبلاگ ما تبادل لینک کنید لینک ما را با نام " آموزش زبانهای برنامه نویسی و ترفندستان " قرار دهید و در بخش تماس با ما و یا نظرات لینک خود را قرار دهید. |
|
|
|
 |
رتبه بندی سایتها در موتورهای جستجوگر |
|
|
هر بار كه شما توسط موتور جستجو، جستجويي انجام مي دهيد، عنكبوت(spider) آن به آهستگي از ميان ميليون ها فهرست حركت مي كند و آنهايي را كه بيشتر با مورد جستجوي شما ارتباط دارند را به تصوير مي كشد .حتي ميزان اين ارتباط نيز مورد ارزشيابي قرار مي گيرد تا مرتبط ترين سايتها در ابتدا به نمايش درآيند. البته موتور جستجو همواره درست عمل نمي كند. گاهي صفحات نا مربوط به چشم مي خورند و در مواردي براي يافتن آنچه مي خواهيد بايد جستجوي بيشتري انجام دهيد. موتور جستجو در يافتن اطلاعات عمل شگفت انگيزي انجام ميدهد.
براستي موتورهاي جستجو عمل ارزش گذاري ورتبه بندي را چگونه انجام ميدهند ؟ پاسخ از اين قرار است : توسط يك گروه دستورالعملها كه الگوريتم خوانده مي شوند. هر موتور جستجو از گروه متفاوتي از الگوريتم ها استفاده مي كند، اما همه آنها از اصول عمومي خاصي پيروي مي كنند. از آنجا كه موتورهاي جستجو قصد دارند توجه مشتريان را مجددا به خود جلب كنند، تلاششان بر اين است كه نتايج جستجوي مرتبط تري را پيدا کنند.
يك راه براي دستيابي به اين هدف توجه به مكان قرارگيري و تراكم عبارات جستجو يا كلمات كليدي در يك صفحه وب است. موتور جستجو بررسي مي كند که كلمات كليدي در بخش عنوان(Title)، بخش سرآغاز(Head)، در ابتداي پاراگراف يا در متن آمده اند. فرض بر اينست كه صفحات مرتبط با کلمات مورد جستجو، اين عبارات كليدي را برجسته تر و چشمگيرتر مورد استفاده قرار مي دهند. موتور جستجو تحليل مي كند كه كلمات كليدي در مقايسه با ديگر كلمات چند مرتبه به كار رفته اند. Meta tag ها نيزممكن است در تشخيص ارتباط نقش داشته باشند، هرچند بسياري از موتورهاي جستجو آنها را در نظر نمي گيرند و آن دسته كه به آن اهميت مي دهند، ممكن است به صورتهاي متفاوتي آنها را ارزشگذاري كنند.
امكان دارد موتورهاي جستجو، وب سايتها را بعلت Spamming جريمه يا تحريم كنند. كلمات كليدي يكنواخت و خسته كننده ، كلمات كليدي تكراري در انتهاي يك صفحه و ارايه كردن صفحه اي كه به صورت اتوماتيك مخاطب را به صفحه اي با محتواي كاملا متفاوت هدايت كند، همه اشكالي از Spamming هستند.
در پايان، موتورهاي جستجو تحليل ارتباط (Link Analysis) را نيز در مشخص كردن ارزشيابي خود به كار مي برند. با تحليل اينكه صفحات چگونه به يكديگر متصل مي شوند يك موتور جستجو مي تواند مشخص كند که آن صفحه در چه مورد است و آيا آن صفحه به اندازه كافي مهم است كه در رتبه بندي به حساب آيد يا خير؟ مهم است كه به ياد داشته باشيم , با اينكه اكثر موتورهاي جستجو از اصول يكساني پيروي مي كنند، الگوريتم هاي متفاوتي دارند. به اين دليل است كه انجام يك جستجو در موتورهاي جستجوي مختلف، نتايج بسيار متفاوتي به بارمي آورد. براي مثال ممكن است برخي موتورهاي جستجو تعداد بيشتري از صفحات وب را فهرست کنند و برخي ديگر در فاصله هاي زماني کم تر اين کار را انجام دهند.
نتيجه نهايي اينكه هيچ دو موتور جستجويي فهرست يكساني از صفحات وب ندارند. بنابراين رتبه بندي در موتورهاي جستجو ممكن است بسيار متفاوت باشد. به همين دليل طراحان سايتهاي وب، معمولا يک موتور عمده را هدف قرار مي دهند و سعي مي کنند طراحي سايت را به گونه اي انجام دهند که براي آن موتور خاص، مناسب تر باشد و رتبه بهتري داشته باشد و البته با اين کار، به احتمال زياد، رتبه در برخي موتورهاي ديگر را از دست خواهد داد. حتي برخي از طراحان ممکن است موتورهاي منطقه اي و تخصصي خاصي را هدف قرار دهند و برايشان امتياز در موتورهاي عمومي اهميت نداشته باشد.
شما بايد قبل از اعمال هرگونه تنظيمات در سايت خود، اول به اين نکته که کدام موتور جستجو را هدف قرار مي دهيد توجه کنيد سپس سايت خود را براي بدست آوردن حداکثر امتياز در آن موتور بهينه کنيد.
با توضيحات فوق، به نظر مي رسد بايد در مورد خدماتي که ادعا مي کنند سايت شما را با اندک هزينه اي در صدها و هزاران موتور جستجو در مکان مناسبي قرار مي دهند، بيشتر احتياط کرد. |
|
| حسن لاچینانی |
سه شنبه بیستم اسفند 1387 |
 |
|
 |
توجه |
|
به زودی قسمت پرسش و پاسخ راه اندازی خواهد شد . البته منوط به ارسال نظرات دوستان . با تشکر مدیر وبلاگ
|
|
| هادی بهارلو |
جمعه یازدهم بهمن 1387 |
 |
|
 |
babylon هم جاسوس از آب در امد |
|
اين نرم افزار با برنامه كم حجمي كه بطور مخفيانه با خود همراه دارد و بروي رايانه كاربر نصب مي شود ، قادر است به راحتي اطلاعات و برنامه و اعداد و ارقام دستگاه و به اصطلاح كاربردهاي statistics را بخواند و ضبط كند و در هنگام اتصال به اينترنت براي مسير اينترنتي مشخص شده در برنامه بفرستد و هر چند اگر تصور كنيم كه كار اين برنامه محاسبات و آمارگيريهاي سري و تحقيقات اكتشاف اسنادي باشد ، نه جاسوسي مستقيم ، باز هم بايد گفت كه اطلاعات ارسالي ،در مسير كمك به جريان بخشي به اقتصاد صهيونيسيم جهاني خواهد بود و به نوعي جاسوسي آشكار به حساب مي آيد .
يك كارشناس برنامه نويسي و شبكه هاي اينترنتي گفت كه در هنگام تحقيق و كار بروي برنامه مترجم چند زبانه بابيلون" babylon dictionary" متوجه مساله مشكوكي در اين برنامه رايانه اي شده است . به گزارش قدسنا، اين كارشناس رايانه اي گفت : در سال 2000 كه اين برنامه را به دست آوردم بسيار خوشحال شدم ،چون اين برنامه چندين زبان را پشتيباني مي كند و جالب آنكه برخلاف ساير نرم افزارهاي ترجمه نسخه عبري آن بسيار كامل بود و با تحقيق و موشكافي در برنامه و با بكار بردن يك فاير وال غير صهيونيستي متوجه شدم كه اين برنامه اطلاعات پاكت هاي تي سي پي را به سروري با دامين منتهي به "سي او . آي ال" ارسال مي كند . tcp pockets to a sercer that ends with the name .co.il ) ) و با علم به اينكه اين دامنه (دومين) متعلق به سرورهاي سايتهاي اسرائيلي است ،اطمينان پيدا كردم كه اين يك شركت يهودي با برنامه نويسان يهودي است كه هر چند به امريكا يا كشوري ديگر مهاجرت كرده است اما سياستهاي صهيونيستي را دنبال مي كند و در سيستم جاسوسي يهوديان اسرائيل بكار مي رود .
وي ادامه داد : اين نرم افزار با برنامه كم حجمي كه بطور مخفيانه با خود همراه دارد و بروي رايانه كاربر نصب مي شود ، قادر است به راحتي اطلاعات و برنامه و اعداد و ارقام دستگاه و به اصطلاح كاربردهاي statistics را بخواند و ضبط كند و در هنگام اتصال به اينترنت براي مسير اينترنتي مشخص شده در برنامه بفرستد و هر چند اگر تصور كنيم كه كار اين برنامه محاسبات و آمارگيريهاي سري و تحقيقات اكتشاف اسنادي باشد ، نه جاسوسي مستقيم ، باز هم بايد گفت كه اطلاعات ارسالي ،در مسير كمك به جريان بخشي به اقتصاد صهيونيسيم جهاني خواهد بود و به نوعي جاسوسي آشكار به حساب مي آيد .
شركتهاي يهودي جهان به شدت در امور تجسسي دخالت مي كنند و اخيرا با خريد تمام شركتهاي بزرگ firewall سهم خود را از بازار تجسس و دزدي اطلاعات بشدت بالا برده اند و در صورت ترديد در اين مساله مي توان با جستجويي اندك درباره شركت سرمايه گذاري mashov در اينترنت اطلاعاتي در اين باره بدست آورد .
وي مي افزايد كه برنامه جاسوسي موجود در بابيلون كاركرد سي پي يو ( cpu performance) را به شدت تضعيف كرد و آنرا تحت فشار مي گذارد تا سرانجام بتواند اطلاعات جمع آوري شده را از روي خطوط اينترنتي به سوي سازندگان خود ارسال كند .
پيش از اين فاش شده بود كه موساد همكاري بسيار نزديكي با سايت اينترنتي ياهو داشته است و نرم افزارهاي طراحي شده توسط اين شركت توسط سرويس اطلاعات رژيم صهيونيستي تحت كنترل قرار دارد و "ياهوو مسنجر" از جمله اين نرم افزارهاي پيشرفته است كه قابليت جاسوسي دقيق براي موساد را دارا مي باشد. اين نرم افزار قادر است كلمات را در قالب نوشتار يا گفتار تفكيك و حساسيت خود را به كليد واژه هاي تعريف شده نشان دهد كه ازهمين طريق موساد قادر است با رديابي افرادي كه از اين نرم افزار براي ارسال مكالمات فوري و يا نامه هاي الكترونيكي استفاده مي كنند، محل فعاليت رايانه مورد استفاده را شناساسي كند و مخالفان خطرناك را كه اقدامات امنيتي موثر مي كنند از ميان بردارد . وي افزود : بعيد نيست كه تلفنهاي همراه نيز در درون خود اينگونه برنامه هاي ناشناخته و مخفي جاسوسي داشته باشند و براحتي اطلاعات و موقعيت دارنده خود را در اختيار سازندگان اين تجهيزات مدرن قرار دهد . منبع:عصر ايران
|
|
| هادی بهارلو |
سه شنبه هشتم بهمن 1387 |
 |
|
 |
حذف کردن ویستا بدون از بین رفتن XP |
|
 افراد زيادي هستند که پس از نصب ويندوز ويستا و کار
کردن با آن از اين ويندوز خوششان نمي آيد و با وجود تبليغات
مايکروسافت درباره اين ويندوز
باز هم ويندوز اکس پي را به آن ترجيح
ميدهند و ميخواهند ويندوز ويستا را از رايانه خود حذف کنند.
چنانچه فقط ويندوز ويستا روي رايانه شما نصب باشد ، براي حذف آن
کار خاصي لازم نيست و کافيست طبق معمول درايو مربوط به ويندوز را
فرمت و اقدام به نصب ويندوز مورد نظر خود کنيد. اما اگر ويندوز
ويستا را در کنار ويندوز اکس پي نصب کرده باشيد، چکار ميکنيد؟
درايو مربوط به فايل هاي نصب شده ويندوز ويستا را فرمت ميکنيد و
هر بار که رايانه تان روشن ميشود ، از ليست انتخاب ويندوز هاي
نصب شده، ويندوز ويستا را رد و ويندوز اکس پي را انتخاب ميکنيد؟
گرچه اين روش عملي است، اما اصولي نيست و روش درستي به حساب نمي
آيد. اگر ميخواهيد ويندوز ويستا را درست حذف کنيد
ميتوانيد به روش زير عمل کنيد: 1_ وارد ويندوز
اکس پي خود شويد. 2_ دي وي دي نصب ويندوز ويستا را در درايو
مربوطه قرار دهيد. 3_ گزينه Run را از منوي شروع انتخاب و اين
عبارت را تايپ کنيد: e:\boot\bootsect.exe\nt52ALL\force (دقت
کنيد که به جاي عبارت e: بايد نام درايو مربوط به دي وي دي را
وارد کنيد) 4_ رايانه را مجددا راه اندازي کنيد. خواهيد ديد
که گزينه هاي انتخاب ويندوز وجود ندارند و ويندوز شما با ويندوز
اکس پي اجرا ميشود. 5_ درايو مربوط به ويندوز ويستا را فورمت
و دو فايل Boot.bak و Bootsect.bak را از درايو مربوط به نصب
ويندوز اکس پي نيز حذف کنيد. 6_ در نهايت نيز براي اطمينان از
صحت حذف ويندوز ويستا يک بار ديگر رايانه را مجددا راه اندازي
کنيد.
|
|
| هادی بهارلو |
سه شنبه هفدهم دی 1387 |
 |
|
 |
آموزش برنامه نویسی به زبان C (جلسه سوم:) |
|
همانطور که گفته شد این زبان ، یک زبان ساخت یافته است و هر برنامه در این زبان ، شامل یک یا چند تابع است.یکی از این توابع main() است.این تابع به عنوان تابع اصلی بوده و بقیه ی تئوابع جزء توابع فرعی هستند.
اجرای یک برنامه باید با تابع اصلی شروع شود یعنی همان main() .ابتدا باید تابع اصلی و سپس تابع فرعی را بنویسیم. بعد از main() متغیر های مورد استفاده ی این تابع تعریف می شود.
سپس تابع اصلی با یک } شروع و به{ ختم می شود.تعریف توابع فرعی پس از توابع اصلی صورت می گیرد.
نباید فراموش کرد که توابع مورد استفاده ی برنامه نویس در کجا قرار دارند و برنامه چگونه به آنها دسترسی پیدا می کند.این توابع و سایر اطلاعاتی که کامپایلر برای ترجمه ی برنامه به آنها وجود دارد،در تعدادی از فایل ها به نام فایل های سرآیند (header)قرار دارند.
پسوند فایل های سرآیند .h است.و معمولا بر روی فهرستی از دیسک به نام INCLUDE قرار دارند.برنامه نویس باید بداند که که هر تابع مورد استفاده در برنامه در کدام فایل سرآیند قرار دارد و همان فایل را به برنامه اضافه کند.
برای اتصال فیل های سرآیند از دستوری به نام #include استفاده می شود.این دستور قبل از main() قرار می گیرد.
<فایل سرآیند>#include
int main()
{
اعلان متغیرها
دستورات اجرایی
}
Printf
این تابع در فایل stdio.h قرار دارد و برای چاپ اطلاعات در صفحه ی نمایش به کار می رود.
نحوه کاربرد تابع printf :
به دوصورت به کار می رود :
(" <عبارت 1> ")printf
(<عبارت 2>،"<عبارت1>")printf
<عبارت2> اطلاعاتی است که باید به خروجی منتقل شود و <عبارت1> می تواند شامل موارد ذیل باشد:
1.اطلاعاتی که باید عینا در خروجی چاپ شود.
2.کاراکترهای تعیین کننده ی فرمت خروجی.(این نوع کاراکترها نوع اطلاعاتی را که در <عبارت2>ذکر شده اند و باید به خروجی بروند مشخص می کنند.این کاراکتر ها با % شروع می شوند.)
3.کاراکترهای کنترلی.(این نوع کاراکتر ها شکل خروجی اطلاعات را مشخص میکنند و با \ شروع می شوند)
کاراکترهای فرمت (عمومی ترین آنها)
%c یک کاراکتر یه خروجی می رود.
d% اعداد صحیح دهدهی مثبت و منفی به خروجی می رود.
%f اعداد صحیح دهدهی مثبت و منفی به خروجی می رود.
%%علامت%
البته ناگفته نماند که حدود17 کاراکتر فرمت را زبان c می شناسد که در اینجا به همین چهار کاراکتر اکتفا می کنیم.
کاراکترهای کنترلی
\f موجب انتقال کنترل به صفحه ی جدید می شود.
\n موجب انتقال کنترل به خط جدید می شود.
\" چاپ کوتیشن( " )
back slash \\
و چند نوع دیگر که در صورت لزوم به توضیح آنها نیز می پردازیم.
مثال:
برنامه ای که دو رشته را به خروجی می برد: (برای درج توزیحات از : /*توزیحات*/ یا : توزیحات/ استفاده میشود)
include "stdio.h" /tabe baraye ehzare :printf#
int main()
{
printf("errorist.blogf."); /chape ghesmati az jomle
printf("com"); /chape edameye jomle
}
و جمله ای که در خروجی چاپ می گردد:
errorist.blogfa.com |
|
|
سه شنبه هفدهم دی 1387 |
 |
|
 |
آموزش برنامه نویسی به زبان C (جلسه دوم:) |
|
انواع داده
هدف از برنامه نویسی ،ورود داده ها به کامپیوتر ، پردازش داده ها و استخراج نتایج است . پس داده ها نقش مهمی را در برنامه نویسی ایفا می کنند.
انواع داده ها و مقادیر قابل قبول آنها
هشت بیت :
char, -127 to 127
unsignec char, 0 to 255
signed char, -127 to 127
شانزده بیت :
short int, -32767 to 32767
unsigned short int, 0 to 65535
signed short int , -32767 to 32767
بین شانزده تا سی و دو بیت :
int , -32767 to 32767
unsigned int, 0 to 65535
singned int , -32767 to 32767
سی و دو بیت :
long int, -2147483647 to 2147483647
signed long int , -2147483647 to 2147483647
unsigned int, 0 to 4294967295
float, 7raghame deghat
شصت و چهار بیت :
double , 15raghame deghat
هشتاد بیت :
longf double , 19 raghame deghat
متغیر ها
متغیر نامی برای کلمات حافظه است که داده ها در آنها قرار می گیرند و ممکن است در طول اجرای برنامه تغییر کنند.برای مراجعه به متغبر از نامشان استفاده می کنیم.بنابرابن متغیرها امکان نامگذاری برای کلمات حافظه را فراهم می کنند.متغیر ها باید دارای نوع باشندویعنی متغیر های بدون نوع در C شناخته نمی شوند.
تعیین نوع متغیر را تعریف متغیر گویند.
برای تغینن نوع متغیر اینگونه عمل می کنیم :
; نام متغیر نوع داده
تعریف متغیر ها :
int x.y ;
float m.n;
char ch1.ch2;
double d1;
long int p1;
اسامی مجاز برای متغیر ها :
count
test23
sum
S_1
سامی غیر مجاز برای متغیر ها :
1test
high!there
grade.1
.pcx
برای مقدار دادن به متغیر ها :
۱.هنگام تعریف نوع متغیر
int x,y =5 ;
۲.پس از تعریف نوع متغیر و با دستور انتساب(=)
int x,y,z ;
float f1,f2 ;
x=12 ;
y=z=2 ;
f1=f2=12.34 ;
۳.با دستورات ورودی
int x,z ;
scanf ("%d%d,&x,&z) ;
عملگرها
نمادهایی هستند که اعمال خاصی را انجام میدهند.
عملگرهای محاسباتی
این نوع عملگر ها، محاسباتی را روی عملوندها انجام می دهند.
- تفریق و منهای یکانی
+ جمع
* ضرب
/ تقسیم
% باقیمانده ی تقسیم
-- کاهش
++ افزایش
تقدم عملگرهای محاسباتی
(از بالاترین تقدم به پایین ترین تقدم)
-- ++
- (منهای یکانی)
% / *
- +
عملگرهای رابطه ای
این نوع عملگرها ، ارتباط بین عملوندها را مشخص می کنند.
< بزرگتر
> کوچکتر
=< بزرگتر یا مساوی
=> کوچکتر یا مساوی
= = متساوی
=! نا مساوی
عملگرهای منطقی
این نوع عملگرها بر روی عبارات منطقی عمل می کنند. عبارات منطقی دارای دو ارزش درستی و نادرستی اند.(ارزش نادرستی با مقدار صفر و ارزش درستی با مقادیر غیر صفر مشخص می شوند.)
! نقیض(not)
&& و((and
|| یا(or)
تقدم عملگرهای منطقی و رابطه ای
!
= > > = < <
=! = =
&&
||
(تقدم این عملگرها پایین تر از سایر عملگرها ست)
عملگرهای ترکیبی
از ترکیب عملگرهای محاسباتی و علامت = مجموعه دیگری از عملگر ها ایجاد می شود که عمل محاسباتی و انتساب را انجام دهند.
= + انتساب جمع
= - انتساب تفریق
= * انتساب ضرب
= / انتساب تقسیم
= % انتساب باقیمانده ی تقسیم |
|
|
سه شنبه هفدهم دی 1387 |
 |
|
 |
آموزش برنامه نویسی به زبان C (جلسه اول:) |
|
زبان C در سال 1972 توسط دنیس ریچی طراحی شد.این زبان تکامل یافته ی زبانBCPL از زبانB میباشد که طراح آن کن تامپسون می باشد،نتیجه شده است.علت نامگذاری C این است که بعد از B طراحی شد.
کسانی که تا حدودی با زبانهای برنامه سازی آشنایی دارند،می دانند که زبان دیگری به نام C++ وجود دارد و آن از C ناشی شده است.C++ علاوه بر ویژگیهای C ،ویژگیهای جدیدی دارد که در C موجود نیست.
زبانC یک زبان میانی است.زبانهای برنامه سازی را می توان به سه دسته تقسیم کرد:زبانهای سطح بالا،زبانهای میانی،زبانهای سطح پایین.
علت میانی بودن زبان C این است که، از طرفی همانند زبان سطح پایینی مثا اسمبلی قادر است مستقیما به حافظه دستیابی داشته باشد و با مفاهیم بیت،بایت و آدرس کارکند و از طرف دیگر،برنامه های این زبان،همچون زبانهای سطح بالایی مثل پاسکال،از قابلیت خوانایی بالایی برخوردارند.به عبارت دیگر،دستورالعملهای این زبان،به زبام محاوره ای انسان نزدیک است،که این ویژگی،مربوط به زبانهای سطح بالا است.
زبان C،یک زبان ساخت یافته است.در این زبان با استفاده از حلقه های تکراری مثل while،for، do while میتوان برنامه هایی نوشت که قابلیت خوانایی و درک آنها بالا باشد.
زبانهای ساخت یافته:
پاسکال
ادا
C،(C++)
ماجولا-2
جاوا
زبانهای غیر ساخت یافته:
فرترن
بیسیک
کوبول
کلمات کلیدی زبان
auto,break,case,char,const,cntinue,default,do,
double,else,enum,extern,float,
for,goto,if,int,long,register,return,short,signed,
sizedof,static,struct,switch,typedof,union,unsigned,void,volatile,while
این زبان برنامه نویسی ،قابل انعطاف و بسیار قدرتمند است.در این زبان ،هیچ محدودیتی برای برنامه نویس وجود ندارد.هر آنچه را که فکر می کنید،میتوانید در این زبان پیاده سازی کنید.
این زیان،زبان برنامه نویسی سیستم است.برنامه های سیستم برنامه هایی هستند که امکان بهره برداری از سخت افزار و سایر نرم افزارها ر فرام می کنند.بعضی از برنامه های سیستم عبارت اند از :سیستم عامل ،مفسر،کامپایلر،ویراستارها،واژه پردازها،مدیریت بانکهای اطلاعاتی واسمبلر. ارتباط تنگاتگی بین این زبان و اسمبلی وجود دارد و به این ترتیب می توان از تمتام قابلیت های اسمبلی در این زبان استفاده کرد. قابل حم است.معنای قابل حمل این است کهبرنامه هایی که به این زبان، در یک نوع کامپیوتر(مثل آی.بی.ام)نوشته شدند،بدون انجام تغییرات با انجام تغییرات اندک،در کامپیوترهای دیگر(مثل VAX -DEC) قابل استفاده اند.
C،زبان کوچکی است.تعداد کلمات کلیدی این زبان انگشت شمار است(30 کلمه ی کلیدی).تصور نشود که هر چه تعداد کلمات کلیدی زبان بیشتر باشد،آن زبان قدرتمند است.به عنون مثال زبان بیسیک در حدود صد وپنجاه کلمه ی کلیدی دارد ولی قدرت زبان---به مراتب بیشتر از زبان بسیک است.تجه داشته باشید که بعضی از کامپایلر هایC،علاوه بر این 32 کلمه ی کلیدی ،کلمات دیگری را به زبان اضافه کده اند.
esm,_ss,interrupt,_cs,cdecl,near,_ds,far,pascal,_es,huge |
|
|
سه شنبه هفدهم دی 1387 |
 |
|
 |
آیا الان دوستمون آن لاین هست |
|
برای اینکه بفهمیم دوستمون آیا در حال حاضر آنلاین هست و مشغول چت با از ما بهترونه! یا نه می تونیم از سایت زیر استفاده کنیم. یعنی بعد از ورود به این سایت در قسمت بالا کافیه که آی دی اونا وارد کنیم .
|
|
| هادی بهارلو |
پنجشنبه پنجم دی 1387 |
 |
|
 |
آموزش XML (بخش چهارم) |
|
|
|
آشنايي با XML قسمت چهارم در این قسمت به تعریف یک نوع دیگر از خواننده های XML میپردازیم که من بیشتر از این نوع استفاده میکنم بجز موارد خواص. البته این مبحث زیاد جای بحث نداره به همین دلیل بسیار مختصر به شرح اون میپردازم.
XMLNodeReader همین طور که از اسمش معلومه برای برسی XML بر اساس گره ها (Node) طراحی شده. این Reader از DTD و XML Schema پشتیبانی نمیکند ولی تعریف های داخل DTD رو میشناسه.
خوب طبق معمول با یک مثال این Reader رو تعریف میکنیم.که من فکر میکنم هیچ آموزشی نمیتونه مانند مثال به یک نفر کمک کنه پس ما هم... :
|
|
Imports System.Xml
Dim Reader As XMLNodeReader Dim DOC As New XmlDocument DOC.Load("\Data\Setting.Xml") Reader = New XMLNodeReader(DOC) Do Until Reader.EOF Reader.Read() MsgBox("---") MsgBox("Depth: " & Reader.Depth) MsgBox("LocalName: " & Reader.LocalName) MsgBox("Attribute: " & Reader.ReadAttributeValue) MsgBox("Value: " & Reader.Value) MsgBox("---") Loop
همینطور که میبینید این Reader هم بسیار شبیه Reader قبلی است. ولی در Open کردن فایل کمی تفاوت دارد. مهمترین قسمت این قسمت طریقه بازشدن فایل بوسیله XMLNodeReader است چون بقیه قسمتهای NodeReader و TextReader فرق چندانی با هم ندارد. ولی یک Object اضافه بر سازمان در این قسمت برای باز کردن فایل استفاده کردم. این Object بسیار قدرتمند است و در آینده حتما بر روی اون بحث خواهم کرد. من به شما سفارش میکنم اگر از XML به صورت ابتدایی استفاده میکنید از همین Reader استفاده کنید چون بسیار سریع تر و دقیقتر ( نه از نظر من حتی از نظر Microsoft) از TextReader است. من برای مطرح کردن بقیه مسایل در XML باید به آموزش کوتاهی درباره DTD بپردازم پس تا یادداشت بعد. | |
|
| هادی بهارلو |
چهارشنبه بیست و هفتم آذر 1387 |
 |
|
 |
آموزش XML (بخش سوم) |
|
|
آشنايي با XML قسمت سوم
یک حالت ساده از خواننده های فایلهای XML در .Net همین XMLTextReader است. این راننده (Driver) فقط رو به جلو حرکت میکند وهرچی در سر راهش باشد در حافظه اش ذخیره میکند.و مهمترین قسمت اینکه از DTD و XMLSchema نیز پشتیبانی نمیکند.و این برای شروع کار ما که با این دو نوع آشنا نیستیم بسیار مناسب است.
|
|
|
Imports System.Xml
Dim Reader as XmlTextReader Reader = New XmlTextReader("Data\Setting.Xml")'فایل مورد نظر Do Until Reader.EOF'در صورت به اتمام رسیدن فایل حلقه متوقف میشود Reader.Read()'خواندن تگ بعدی MsgBox(">---") MsgBox("Depth: " & Reader.Depth) 'مقدار فرو رفتگی یک تگ داخل تگهای بالای خودش MsgBox("LocalName: " & Reader.LocalName) 'خواندن اسم تگ localName is Book MsgBox("Attribute: " & Reader.ReadAttributeValue) 'مقدار خاصیت قرار داده شده MsgBox("Value: " & Reader.Value) 'محتوای داخلی تگ MsgBox("---<") Loop
همینطور که میبینید بسیار ساده میشه از این Object استفاده کرد. شمامیتونید به راحتی فایل XML خود رو باز کرده و اون رو به ترتیب بخونید.
*همانطور که میبینید در قسمت خواصیت تگ اگر تگ خواصیتی رو نداشته باشه مقدار برگشتی False میباشد. *در قسمت Depth ؛ اگر تگی در داخل روت اصلی باشد مقدار 1 رو بر مگردونه و اگریک تگ در داخل این تگ باشه پس مقدار 2 رو بر میگردونه و اگر خود روت باشه مسلماً مقدار صفر 0 را بر میگردونه. *شما میتوانید با استفاده از LocalName یک فیلتر قرار دهید که هر LocalName که مقداری در بر نگیرد نمایش ندهد.
البته من فقط این Reader ها رو معرفی میکنم و اگر نکته مهمی وجود داشته باشد گفته میشود.پس اگر در این زمینه مشکلی بوجود اومد میتونید اونو مطرح کنید چون این مبحث خیلی وسیع هست و نمیشه به این راحتی با اون کنار اومد. | |
|
| هادی بهارلو |
چهارشنبه بیست و هفتم آذر 1387 |
 |
|
 |
آموزش XML (بخش دوم) |
|
|
|
|
آشنايي با XML قسمت دوم
اکثر افرادی که قصد یادگیری XML رو دارند، نمی تونند XML رو خوب بفهمند. شما سعی کنید XML رو یک سیستم ذخیره اطلاعات بدونید.بعدا با یادگیری قسمتهای بعدی XML با کاربردهای XML آشنا میشید و راحتتر میتونید به صورت حرفه ای از اون استفاده کنید.البته این یادآوری کنم که من فقط قصد آشنا سازی شما با XML رو دارم نه آموزش کامل XML. XML برای خود یک دستوره نگارشی و املایی دارد. شما در حین یادگیری عبارتهای XML با اون آشنا میشید. تگها: شما با عبارتهای HTML یا همان TAG ها آشنا هستید < تگ> در XML از همان تگها استفاده میشود ولی نکته مهم اینجاست که XML به شدت به حروف کوچک و بزرگ حساسیت داره پس اگر شما تگ ابتدای خودتون رو به دین صورت نوشتید < TaG> باید تگ پاییانی هم بدین صورت بنویسید < /TaG>.
اعلان شروع فایل XML: فایل XML با یک اعلان شروع میشه که باید در اولین خط باشه (کاملا اختیاری): xml version="1.0" ? > حتما به بزرگی و کوچکی حروف دقت کنید. تگ اعلان XML به صورت < ؟ و بعد کلمه XML و بعد از اون نوع version که تا کنون آخرین اون "1.0" بوده قرار میگیره و سپس تگ پایانی اون ؟ >. نوشتن تگها: تگها در حقیقت همان رکوردها هستند که فیلدهای متغییری میتوانند داشته باشند(البته اگر با Database آشنا باشید). شما اطلاعات خودتون رو با استفاده از تگها ذخیره میکنید مثلا برای ذخیره اسمتون: AraSoft< /Name > برای ذخیره اطلاعات شما به دو تگ نیاز دارید یکی آغازی و دیگری پایانی این دو در حقیقت تشکیل یک تگ صحیح را میدهند. یک تگ آغازی به صورت اول > و بعد اسم مورد نظر و سپس < نوشته میشود. تگ پایانی تنها یک تفاوت کوچک دارد که آن در آولین بخش تگ است. تگ پایانی به صورت اسم مورد نظر و <. میبینید که در تگ پایانی علاوه بر>یک علامت / هم وجود دارد:
Begin: < Name > End: < /Name >
برای نوشتن تگها باید به این توجه کنید که اسم تگ شروع (< Name>) و اسم تگ پایانی (< /Name>) نباید از نظر کوچکی و بزرگی فرق کند. و نکته مهم اینکه شما باید XML خود رو با یک تگ اصلی بپوشانید و بقیه تگها رو داخل اون قرار دهید مثل:
< ? Xml version="1.0" ?> < Root> < /Child1 > < /Child2>
< / Root>
تداخل تگها: اگر شما تگی رو شروع کردید و میخواهید تگی رو داخل اون قرار دهید شروع و پایان تگ باید در داخل تگ اصلی باشد مانند زیر:
درست: < ? Xml version="1.0" ?> < root> < child1/>
:غلط < ? Xml version="1.0" ? > < root > < child1 >
< /child1 > ß-----Error
تگ پوچ: شاید در مرور Xml های که من نوشتم یه این تگ < Child1 /> رسیده و تعجب کنید که چرا من قانون نوشتن تگها رو نقض کردم و لی در حقیقت این خود یک دستور نگارشی است مبنی بر اینکه اگر تگی هیچ مقداری رو در بر نمیگیرد بهتر است به صورت < Name/> نوشته شود "شبیه به HTML" تا به راحتی برسی XML افزوده شود. افزوردن ویژگی به تگ: تگ ها قدرت داشتن ویژگی رو دارند (Attribute).
1.Home< /SectionOfSite> 2.Home< /SectionOfSite>
شما میتوانید برای مقدار هر تگ یک خاصیت یا ویژگی تعیین کنید. مثلا من در شماره 1 گفتم قسمت سایت=خانه و با زبان فارسی و در شماره 2 گفتم که قسمت سایت=خانه و به زبان انگلیسی. | |
|
| هادی بهارلو |
چهارشنبه بیست و هفتم آذر 1387 |
 |
|
 |
آموزش XML (بخش اول) |
|
| آموزش XML (بخش اول) |
|
|
XML چيست ؟
یکی از ابزاری است که این مدته به شدت وارد بورس شده و حیفه، که من حرفی از این مبحث مطرح نکنم. XML یک سیستم ذخیره اطلاعات است که میتوان در زمینه های مختلف تعمیمش داد. حال من آموزش گوشه های از XML رو میخوام با یک مثال شروع کنم. شما فقط سعی کنید مکانیزم کاری و کاربرد XML رو درک کنید. درک مطالب و مباحث کمکه زیادی به شما در برنامه نویسی میکنه پس مثال زیر رو با دقت بخونید، اگه گوشه های از کد رو متوجه نشدید مهم نیست چون در درس های بعدی این Object ها و باقیه Object های مربوط به XML رو آموزش میدم.
من یک فایل در آدرس "C:\Data1.XML" دارم با محتوای زیر:
< ?xml version="1.0" ?> < Person> AraSoft< /Name > 18< /Age> Male< /Sex>
حال لازمه که این اطلاعات که شامل اسم ، سن ، جنسیت من هست در برنامه استفاده کنیم.پس ابتدا Namespace مورد نظر " System.Xml " رو به برنامه اضافه کرده و Imports System.Xml ... استاد میکنید. و در قسمت مورد نظر کد مربوط رو مینویسیم:
Dim Reader as XMLNodeReader Dim DC as New XMLDocument Dim NickName, Sex as String Dim Age as Long
DC.load ("C:\Data1.Xml") Reader = New XMLNodeReader (DC) Do until Reader.EOF Reader.Read Select Case Reader.LocalName Case "Name" If Reader.IsStartElement then Reader.MoveToElement If Not Reader.Value.Trim = Nothing then MSGbox (Reader.Value) End IF End If Case "Age" If Reader.IsStartElement then Reader.MoveToElement If Not Reader.Value.Trim = Nothing then MSGbox (Reader.Value) End IF End If Case "Sex" If Reader.IsStartElement then Reader.MoveToElement If Not Reader.Value.Trim = Nothing then MSGbox (Reader.Value) End IF End If End Select Loop
خوب ما یک XML داریم و یک کد که از این اطلاعات استفاده میکنه.شما کافیست از کد به این برسید که XML در چه حیطه ای است و کجا بدرد میخورد، به راحتی میتوانید تمام مباحث XML را به راحتی یاد بگیرید.فعلا این مثال رو داشته باشید تا من در دفعه بعد یک آموزش ساده و پایه ای از XML رو استاد کنم.فقط یادتون نره قدم به قدم پس تا بعد. | |
|
| هادی بهارلو |
چهارشنبه بیست و هفتم آذر 1387 |
 |
|
 |
آموزش زبان XML |
|
| آموزش XML |
|
|
XML برای شرح و بيان اطلاعات طراحی شده است. • HTML برای نمايش اطلاعات و برای تمركز روی چگونگی ديده شدن اطلاعات طراحی شده است.
قبل از ادامه اين بحث، شما بايد مقداری درك پايه ای از موارد زير داشته باشيد: • WWW,HTML و اساس ساخت صفحات وب • زبانهای اسكريپت وب مانند JavaScript , VBScript
XMLچيست؟
• XML برگرفته شده از كلمات Extensible Markup Language است. • XML يك Markup Language مانند HTML است. • tag (برچسب) های XML از قبل تعريف شده نيستند، شما خودتان بايد آنها را تعريف كنيد. • XML از يك (Document Type Definition) DTD برای شرح اطلاعات استفاده ميكند. • XML با يك DTD طراحی ميشود تا خود-توصيف باشد.
تفاوت اصلی بين XML و HTML • XML برای حمل اطلاعات طراحی شده است. • XML يك جايگزين برای HTML نيست. • XML و HTML برای هدفهای مختلفی طراحی شده اند. • HTML برای نمايش اطلاعات و XML برای شرح و حمل و نقل اطلاعات است.
XML كاری انجام نميدهد! شايد اين موضوع برای درك كردن كمی مشكل باشد، اما XML كاری انجام نميدهد. XML ساخته نشده تا كاری انجام دهد. XML به عنوان يك راه برای سازماندهی كردن، ذخيره كردن و فرستادن اطلاعات ساخته شده است. مثال زير يك يادداشت از Jani به Tove است كه در ساختار XML ذخيره شده است:
note.xml - ۱ مثال
< note > < to>Tove< /to> < from>Jani< /from> < heading>Reminder< /heading> < body>Dont forget me this weekend!< /body> < /note >
يادداشت يك سرباره (header) و يك بدنه اصلی پيغام دارد، همچنين اطلاعات فرستنده و گيرنده را هم در بر دارد. اما هنوز اين سند XML كاری انجام نميدهد. آن فقط اطلاعات محضی است كه در برچسبهای XML قرار گرفته است.
XML آزاد و قابل گسترش • برچسبهای XML از قبل تعريف شده نيستند، شما بايد برچسبها را خودتان درست كنيد. • برچسبهايی كه در HTML بكار ميروند از پيش تعريف شده هستند و مؤلف سندهای HTML فقط ميتواند از برچسبهای تعريف شده در HTML استاندارد استفاده كند ( مانند و< h1>). • XML به مؤلف اجازه ميدهد تا برچسبهای خود و ساختار آنها را تعريف كند. • برچسبهای مثال بالا ( مانند < to >و< from >) در XML استاندارد تعريف شده نيستند، اين برچسبها توسط مؤلف سند XML تعريف شده اند.
XML يك مكمل برای HTML • XML يك جايگزين برای HTML نيست. • درك اينكه XML يك جايگزين برای HTML نيست خيلی مهم است. • در آينده گسترش وب احتمال داده ميشود كه XML برای شرح اطلاعات به كار خواهد رفت،درحاليکه كه HTML برای فرمت و نمايش اطلاعات به كار خواهد رفت. • شايد اين بهترين تعريف از XML باشد: ابزاری مستقل از سخت افزار و نرم افزار برای انتقال اطلاعات است.
XML ميتواند اطلاعات را از HTML جدا كند • با XML اطلاعات شما در خارج از HTML ذخيره ميشود. • هنگامی كه HTML برای نمايش اطلاعات استفاده ميشود، اطلاعات در درون HTML ذخيره شده است. با XML اطلاعات ميتواند در فايلهای جدای XML ذخيره شود. در اين روش شما ميتوانيد HTML را به عنوان لايه ای روی اطلاعات و برای نمايش آنها فرض كنيد و مطمئن باشيد كه تغيير در اطلاعات لايه های زيرين احتياج به تغيير HTML شما نخواهد داشت.
برای داد و ستد اطلاعات با XML اطلاعات ميتواند بين سيستم های ناسازگار داد و ستد شود. در دنيای واقعی، سيستم های كامپيوتری و بانك های اطلاعاتی شامل اطلاعات در فرمت های ناسازگار هستند. يكی از وقت گيرترين چالش ها برای گسترش دهندگان، انتقال اطلاعات بين چنين سيستمهايی شده است.
XML و B2B با استفاده از XML اطلاعات تجاری می تواند روی اينترنت داد و ستد شود. در آينده ای نزديك بايد منتظر شندن خبرهای بيشتری از XML و B2B(Business to Business) باشيم. XML می رود تا زبان اصلی برای داد و ستد اطلاعات اقتصادی بين تجارت ها، روی اينترنت بشود. امروزه تعداد زيادی از برنامه های B2B در حال گسترش است.
XML برای توزيع اطلاعات با XML ، فايل های متنی می توانند برای توزيع اطلاعات استفاده گردند (در اينجا منظور از توزيع، انتقال و پخش اطلاعات از يك نوع سيستم به سيستمهای نوع ديگر است). زمانی كه اطلاعات در فايل های متنی ذخيره شود، XML يك روش مستقل از سخت افزار و نرم افزار برای انتقال و توزيع اطلاعات فراهم می كند. اين روش باعث ميشود كه ايحاد و ساخت اطلاعاتی كه برنامه های كاربردی مختلف بتوانند با آن كار كنند بسيار آسان بشود. همچنين توسعه و ارتقاء يك سيستم به سيستم عامل، سرور، برنامه كاربردی و جستجوگرهای جديد را نيز آسانتر مينمايد.
XML برای ذخيره اطلاعات با XML فايل های متنی ميتوانند برای ذخيره اطلاعات استفاده بشوند. XML همچنين ميتواند برای ذخيره اطلاعات در فايلها و بانك های اطلاعاتی مورد استفاده قرارگيرد. برنامه هايی ميتواند نوشته شوند كه اطلاعات را در منابع ذخيره و فراخوانی كنند و برنامه های اصلی ميتوانند برای نمايش اطلاعات استفاده شود.
XML ميتواند اطلاعات شما را مفيدتر كند XML اطلاعات شما را برای كاربرهای بيشتری قابل دسترس ميكند. به دليل مستقل بودن XML از سخت افزار و نرم افزار و برنامه، شما ميتوانيد اطلاعات خود را برای برنامه هايی غير از جستجوگرهای HTML هم قابل دسترس نماييد. به اين ترتيب اطلاعات شما در همه انواع برنامه های كاربردی ديگر قابل استفاده است، برای مثال يك برنامه كاربردی ميتواند اطلاعات شما را كه در يك بانك اطلاعاتی ذخيره شده است برای نابينايان به خروجی مخصوص خود انتقال دهد.
XML و زبان های جديد XML مادر WAP و WML است. WML كه برای دستگاه های دستی مانند موبايل ها به منظور ارتباط با اينترنت مورد استفاده قرار ميگيرد، در XML نوشه شده است. | |
|
| هادی بهارلو |
چهارشنبه بیست و هفتم آذر 1387 |
 |
|
 |
آموزش برنامه نویسی شبکه و اینترنت با ویژوال بیسیک |
|
آموزش برنامه نویسی شبکه و اینترنت با ویژوال بیسیک برای همه به زبان فارسی این هم عیدی من به همه عزیزان . از اینجا دانلود کنید
عید همگی مبارک باشه |
|
| هادی بهارلو |
چهارشنبه بیست و هفتم آذر 1387 |
 |
|
 |
مقايسه سيستم عامل هاي UNIX و Windows |
|
مقايسه سيستم عامل هاي UNIX و Windows مقدمه در روزهاي اوليه صنعت كامپيوتر (دهه هفتاد )، بيشتر كامپيوترهايي كه توليد مي شد mainframe بودند و افراد خاصي از آنها استفاده مي كردند . هر سازنده براي سخت افزار خود يك سيستم عامل مجزا مي نوشت كه فقط بر روي آن سخت افزا ر خاص اجرا مي شد؛ يعني سخت افزار و سيستم عامل مربوط به آن با هم بعنوان يك محصول فروخته مي شدند . در آن زمان آزمايشگاه Bell كه قسمتي از شركت AT&T بود (امروزه بصورت مستقل و تحت نام Lucent Technologies فعاليت مي كند ) به علت مشكلات كارمندان شركت در كار كردن با سيتمهاي mainframe شروع به نوشتن سيستم عامل UNIX و زبان برنامه نويسي C براي استفاده داخلي كارمندان خود نمود. در آن زمان AT&T اجازه فروش سخت افزار و نرم افزار بنام خود را نداشت، لذا پس از مدتي كد سيستم عامل UNIX را براي مصارف آكادميك به دانشگاهها عرضه كرد. از آنجايي كه سيستم عامل طوري طراحي شده بود كه به سادگي قابل انتقال بر روي سخت افزارهاي مختلف بود، مورد توجه دانشگاهها قرار گرفت. آنها با استفاده از مي توانستند يك سيستم عامل واحد بر روي سخت افزارهاي مختلف خود داشته باشند Ken Thompson يكي از پديد آورندگان ، UNIX آن را به ، دانشگاههاي California و Berkeley برد و در آنجا تغييرات عمده اي توسط دانشجويان در كد UNIX اعمال شد كه منجر به پديد آمدن UNIX 1 گرديد. پس از مدتي كه شركت اجازه ورود به تجارت كامپيوتر را پيدا كرد استفاده رايگان UNIX ممنوع شد و همين امر باعث شد عده اي به فكر ايجاد يك نسخه رايگان UNIX بيفتند. پروژه هاي FreeBSD ، NetBSD ، و بعدها Linux از اين جمله مي باشند. از طرفي شركتهاي بزرگي مانند Sun ، IBM ، DEC ، SCO و HP به توليد سيستم عاملهاي مخصوص خود Berkeley Standard Distribution form of UNIX 1 بر پايه BSD پرداختند. شركت AT&T نيز سرگرم توليد نسخه خاص خود به نام System V بود. ورود سيستم عاملهاي جديد بر پايه UNIX باعث كنار زدن ساير سيستم عاملهاي انحصاري شد. تنها سيستم عاملهايي كه توانستند بازار خود را حفظ كنند MVS محصول شركت IBM و OpenVMS محصول شركت DEC بودند MVS) به علت تعداد بالاي نسخه هاي نصب شده و OpenVMS به علت امنيت و قابليت اطمينان بالا). با توليد ريزكامپيوترها و كامپيوترهاي شخصي سازندگان سخت افزار دوباره شروع به ارائه سيستم عاملهاي انحصاري خود نمودند؛ حتي با ارتقاء سخت افزار سيستم عاملها نيز تغيير مي كردند. شركتهاي Commodore و Apple سيستم عاملهاي نسبتًا گرافيكي براي كامپيوترهاي PET 64 ، C و Apple ارائه كردند. شركت Digital Research نيز سيستم عامل CP/M را ارائه كرد كه روي عده اي از سخت افزارها قابل اجرا بود. پس از مدتي و با همه گير شدن كامپيوترهاي شخصي شركتهاي Commodore ، Atari و Apple سيستم عاملهاي گرافيكي خود را با نامهاي Amiga ، GEM و Macintosh به بازار عرضه كردند. بعدها شركت Microsoft يك كپي از M / CP بنام MS-DOS و يك كپي از Macintosh بنام Windows را وارد بازار كرد. نقطه قوت اين سيستم عاملها واسط كاربر گرافيكي آنها بود كه استفاده كردن از آنها را خيلي ساده تر مي كرد و همين نكته باعث شد در بين عموم طرفداران زيادي پيدا كنند. در ميان اين سيستم عاملها Amiga و GEM داراي پايه هاي بسيار قوي بودند درحاليكه Macintosh و Windows . چنين وضعيتي نداشتند به علت مديريت نامناسب و تصميم گيريهاي بد شركت Commodore و GEM نيز به علت مشكلات مالي شركت Atari از دور رقابت كنار رفتند. Microsoft ، با ارائه نسخه هاي 95 ،98 NT و 2000 مرتبًا سعي در بهبود دادن وضعيت سيستم عامل Windows . نمود Apple نيز سعي كرد اين كار را با ارائه Copeland كه (هيچوقت به بازار عرضه نشد) و Mac OS X انجام دهد. در ميان سيستم عاملهاي كامپيوترهاي شخصي، 2 / OS كه توسط شركت IBM عرضه شد تنها سيستم عاملي بود كه واسط كاربر گرافيكي خوب و يك ساختار پايه اي محكم را باهم دارا بود، ولي Microsoft با تاكتيكهايي كه در پيش گرفت (از جمله ائتلاف با Intel بعنوان مطرحترين سازنده قطعات كامپيوترهاي شخصي) مانع از گسترش و همگاني شدن آن شد. از زماني كه كامپيوترهاي شخصي وارد بازار شدند نسخه هايي از نيز براي آنها ايجاد شد، مانند گونه هاي مختلف پروژه هاي BSD و Linux . Linux اولين سيستم عامل مبتني بر UNIX است كه در دنياي كامپيوترهاي شخصي متداول شد و براي اين منظور طراحي شده كه بعنوان يك جايگزين براي Windows باشد. كار بر روي Linux توسط Torvalds شروع شد و امروزه دهها هزار برنامه نويس داوطلب در سرتاسر دنيا روي آن كار مي كنند. دو گروه KDE و GNOME بر روي واسط كاربر گرافيكي Linux كار مي كنند و حاصل كار آنها اين است كه امروزه، صرفنظر از مشكلات موجود در نصب كردن سيستم، عده زيادي از افراد غيرمتخصص مي توانند از Linux استفاده كنند. پيش بيني مي شود كه در آينده نزديك Linux بعنوان يك سيستم عامل با ساختار پايه اي محكم و واسط كاربر گرافيكي مدرن بتواند جاي خود را در بين كاربران كامپيوتر پيدا كند.
در اين قسمت نگاهي اجمالي مي اندازيم به تفاوتهاي موجود در سيستم عاملهاي Windows و UNIX اين تفاوتها از چند نظر مورد بررسي قرار مي گيرند، از جمله: قابليت اطمينان مديريت هزينه امنيت سرعت قابليت اطمينان سيستمهاي مبتني بر UNIX معمولا از قابليت اطمينان بالايي نسبت به سيستمهاي Windows برخوردارند. پديده هايي مانند hang و crash در سيستمهاي Windows بيشتر اتفاق مي افتد. اغلب كاربران سيستمهاي Windows با آن صفحه آبي معروف به Blue Screen of Death آشنا هستند 2. علاوه بر اين در سيستمهاي Windows براي ايجاد تغييرات كوچك يا حتي نصب يك نرم افزار سيستم بايد reboot شود. معمولا براي ارائه سرويسهايي كه قرار است 24 ساعته در دسترس باشند (مانند وب) از سيستمهاي Windows استفاده نمي كنند چون reboot شدن سيستمي كه چنين سرويسي را ارائه مي كند اصلا جنبه خوشايندي ندارد، مخصوصًا اگر سرويس ارائه شده تجاري باشد در دسترس نبودن سرويس ممكن است زيانهاي اقتصادي فراواني به همراه داشته باشد. در مقابل براي ارائه سرويس چاپ مي توان از Windows استفاده كرد چون براي مثال يك بار در هفته reboot شدن يك سرور چاپ براي كسي اهميت چنداني ندارد. سيستم عاملهاي Windows در اصل يك مشكل بزرگ دارند و آن در مورد استفاده از registry مي باشد. سيستم عاملهاي مبتني بر UNIX از دايركتوري etc براي نگهداري اطلاعات پيكربندي و تنظيمات خود سيستم عامل و كاربردهاي نصب شده بر روي آن استفاده مي كنند ولي سيستم عامل Windows از يك پايگاه داده براي نگهداري اين اطلاعات استفاده مي كند. اين ايده ممكن است از لحاظ منطقي خيلي بهتر از روش UNIX و نگهداري فايلهاي پيكربندي بصورت پراكنده در دايركتوريهاي مختلف باشد، ولي عمل ثابت كرده كه اينگونه نيست. كل registry در يك فايل باينري نگهداري مي شود كه سيستم عامل و تمام كاربردها قبل از اجرا محتويات آن فايل را تمامًا بررسي مي كنند. از اينجا اين نكته روشن مي شود كه يك فايل بزرگ است كه مدام نيز در حال تغيير است و در نتيجه امكان صدمه ديدن آن نيز بسيار زياد است و در صورت صدمه ديدن نه سيستم عامل و نه هيچ كاربرد ديگر نمي تواند به درستي بر روي سيستم اجرا شود. سيستمهاي UNIX فايلهاي پيكربندي و تنظيمات مربوط به سيستم عامل و كاربردها را در فايلهاي متني جداگانه در دايركتوري etc / نگهداري مي كنند. گذشته از پراكندگي فايلها كه يك عيب براي اين روش محسوب مي شود مزاياي قابل توجهي از آن حاصل مي شود. هر نرم افزار براي اجرا شدن فقط فايلهاي مربوط به خودش را مي خواند و در صورت معيوب بودن يكي از فايلها فقط در نرم افزار مربوطه تاثير مي گذارد نه در كل سيستم، بعلاوه اينكه تصحيح فايلهاي متني خيلي ساده تر از تصحيح فايل باينري registry مي باشد. يك شاهد بر اين مدعا راه اندازي سايت MSN مي باشد. موقع راه اندازي اين سايت مهندسان شركت Microsoft سعي در استفاده از NT براي سرورهاي شبكه داشتند ولي پس از دو هفته تلاش موفق به اين كار نشدند و بالاجبار از سيستمهاي UNIX استفاده كردند. استفاده از UNIX براي آنها متضمن پرداخت هزينه اضافي بود در صورتيكه براي استفاده از Windows هيچ هزينه اي متحمل نمي شدند، از طرف ديگر مهندسان شركت كار ديگري مهمتر از يافتن و رفع مشكلات نداشتند؛ يعني اگر مشكل قابل رفع شدن بود مسلمًا آنها اين كار را انجام مي دادند و هزينه اضافي صرف خريد سيستمهاي UNIX نمي كردند. تنها نتيجه معقولي كه حاصل مي شود اين است كه سيستمهاي Windows داراي مشكلات اساسي بودند كه استفاده از آنها را بعنوان سرورهاي عملياتي غيرممكن مي ساخت، مشكلاتي در پايه كه رفع آنها به معناي دور ريختن تمامي كدهاي نوشته شده بود. مهمترين اين مشكلات استفاده از registry مي باشد كه همچنان به قوت خود باقيست. هم اكنون نيز بخش عظيمي از سرورهاي شبكه MSN را سيستمهاي UNIX تشكيل مي دهد، هرچند ادعاي خود Microsoft اين است كه فقط قسمت كوچكي از شبكه از سيستمهاي UNIX استفاده مي كند و شركت در حال تبديل اين قسمت به سيستمهاي Windows مي باشد.
مديريت سيستمهاي Windows نياز به مديريت و مراقبت بيشتري نسبت به سيستمهاي UNIX دارند. از آنجا كه سيستمهاي Windows امكانات زيادي جهت مديريت اتوماتيك ندارند به همين علت لزوم مديريت مستقيم و حضور فيزيكي مدير سيستم بيشتر مي شود كه همين باعث صرف وقت و هزينه زيادي مي شود. يكي از ابزارهايي كه مديريت يك سيستم را ساده تر مي كند اجراي اتوماتيك دستورات و برنامه ها مي باشد Windows طوري طراحي نشده است كه امكانات زيادي براي اجراي اتوماتيك دستورها داشته باشد. در Windows مي توان اجراي دستورات را زمان بندي كرد ولي از آنجا كه اكثر كارها در Windows نيازمند مداخله كاربر مي باشد و اغلب با ماوس انجام مي شود اتوماتيك كردن اين كارها دشوار است. در بسياري از مواقع با نصب برخي ابزارها مانند perl مي توان انجام اين كار را ساده تر كرد ولي مديران سيستمهاي Windows با اين قبيل ابزارها كمتر آشنا هستند. در مقابل در سيستمهاي UNIX از دستور at و سرويس cron براي اجراي برنامه ها و دستورات در سر زمانهاي خاص استفاده مي شود كه با استفاده از آنها تقريبًا تمام كارهاي لازم را مي توان بر روي سيستم انجام داد. يكي از ضعفهاي ديگر سيستمهاي Windows مربوط به سرويس telnet مي باشد. در سيستمهاي Windows با استفاده از telnet فقط مي توان يك سري اعمال محدود را انجام داد، يعني فقط همانهايي كه از طريق اعلان امكانپذيرند. در مقابل در سيتمهاي UNIX كاربر هنگام استفاده از سرويس telnet از اكثر امكانات سيستم بصورت متني (بدون گرافيك) مي تواند استفاده كند. تفاوت Windows و UNIX در اين است كه در UNIX تمام قابليتهاي سيستم از طريق اعلان دستور قابل دسترسي است و نيازي به استفاده از محيط گرافيكي نمي باشد. امروزه با گسترش سيستمهاي (بخصوص (Linux در بازار تعداد كساني كه به دنبال مديريت اين نوع سيستمها مي روند بيشتر شده و از اين ميان بيشتر آنها ترجيح مي دهند واسط گرافيكي و كار كردن با كاربردهاي موجود را ياد بگيرند تا اصول كار و كار كردن با محيط متني و دستورات كه همين امر تاثيرات سوئي را در آينده به دنبال خواهد داشت.
هزينه هزينه اي كه بابت خريد سخت افزار و سيستم عامل صرف مي شود معمولا قسمت كوچكي از كل هزينه هاي يك سرور را شامل مي شود. هزينه هاي ديگر و حتي مهمتري نيز هستند كه اغلب ناديده گرفته مي شوند كه منجر به اتخاذ تصميم اشتباه هنگام خريد سيستم مي گردد. هزينه هايي كه مي توان براي يك سرور در نظر گرفت شامل موارد زير مي باشد: هزينه خريد سخت افزار هزينه خريد سيستم عامل و نرم افزارهاي ديگر هزينه پشتيباني فني هزينه ارتقاء سخت افزار هزينه ارتقاء سيستم عامل و نرم افزارها هزينه ها و ضررات ناشي از در دسترس نبودن سرويس هزينه بازيابي اطلاعات ناشي از بروز اشكالات در سخت افزار يا سيستم عامل هزينه پرسنل جهت نگهداري و مديريت سيستم اگر در خريد سخت افزار و سيستم عامل دقت كافي صورت نگيرد ساير هزينه ها كه هزينه هاي پنهان ناميده مي شوند به شدت افزايش خواهند يافت. براي مثال ممكن است خريد يك سيستم Intel Pentium به همراه Advanced Server 2000 Windows ... ، ـ , چيزي كمتر از ?,??? دلار هزينه داشته باشد ولي در عوض هزينه خريد يك سيستم Sun UltraSparc به همراه Solaris ...ـ بيش از ??,??? دلار خواهد بود. در صورت خريد يك سيستم Windows-Intel, صرفه جويي زيادي در هزينه خريد انجام مي شود ولي در مقابل هزينه هاي پنهاني كه اين سيستم به مرور زمان اعمال مي كند جبران صرفه جويي در هزينه اوليه را خواهد كرد.
امنيت سيستمهاي مبتني بر UNIX از امنيت بالايي نسبت به سيستمهاي Windows برخوردارند. سيستم عامل UNIX چيزي فراتر از ?? سال عمر دارد و در اين مدت عده زيادي برنامه نويس داوطلب بدون هيچگونه چشمداشتي بر روي آن كار كرده اند. كوچكترين bug يا اشكال امنيتي فورًا بر روي اينترنت اعلام مي شود و عده زيادي در جهت حل آن دست بكار مي شوند، به همين علت تعداد سايتها و گروههاي خبري مربوط به UNIX خيلي بيشتر از تعداد سايتهاي مربوط به Windows مي باشد. در مقابل Windows يك سيستم عامل نسبتًا جديد است كه بيش از ?? سال سابقه ندارد. كد اين سيستم عامل در انحصار شركت Microsoft است و بنابراين تنها مرجع رفع مشكلات بوجود آمده خود شركت مي باشد. بديهي است كه مدت زمان رفع مشكلات و bug هاي Windows بسيار طولانيتر از همين زمان براي سيستم عامل UNIX خواهد بود. همين مي تواند مهمترين دليل براي اين باشد كه سيستمهاي Windows بيشتر در معرض حملات مهاجمين يا ويروسها قرار مي گيرند. موسسه امريكايي NSA 3 در سال 1983 استانداردي بنام TCSEC 4 يا Orange Book تدوين كرده كه در سال ???? يك استاندارد اروپايي بنام ITSEC 5 نيز از روي آن تهيه شده است. اين استانداردها بعنوان يك ابزار براي سنجش ميزان امنيت سيستمها بكار مي روند. چهار طبقه D تا A در اين استانداردها وجود دارد كه D نشانگر كمترين امنيت و A نشانگر بيشترين امنيت مي باشد.
تمام سيستم عاملهاي Windows كه بر پايه تكنولوژي NT ساخته شده اند در طبقه بندي C2 مي باشند. اين در حالي است كه بسياري از سيستمهاي UNIX از جمله Solaris ، HP-UX ، Ultrix و IRIX در طبقه بندي B قرار دارند (براي مثال Solaris در طبقه بندي B1 قرار دارد). همين نكته تفاوت اين دو نوع سيستم عامل را از نظر امنيتي روشن مي كند. اين طبقه بنديها بر اساس حداكثر امكانات موجود در سيستم عامل صورت مي گيرد ولي ميزان بهره برداري از سيستم بستگي به مدير سيستم دارد كه بتواند به نحو مقتضي از اين امكانات استفاده نمايد.
سرعت سرعت يك سيستم هم به مشخصات سخت افزار بستگي دارد و هم به سيستم عامل. ميزان فضاي حافظه، نوع پردازنده RISC) يا CISC بودن معماري پردازنده)، سرعت كار پردازنده و ساير قطعات (از جمله برد اصلي، ديسك، كارت شبكه، ...) از جمله فاكتورهاي سخت افزاري تعيين كننده سرعت مي باشند. نحوه عملكرد سيستم عامل نقش مهمي در سرعت سيستم دارد. سرعت سيستمهاي UNIX به مراتب بهتر از سيستمهاي Windows . مي باشند Windows مشكلات زيادي در مديريت حافظه دارد ولي UNIX از حافظه استفاده بهينه مي كند و فضاي حافظه را هدر نمي دهد بطوريكه حتي قسمتهايي از خود سيستم عامل نيز بصورت module مي باشند كه فقط در صورت نياز در حافظه قرار مي گيرند. يكي از مشكلات Windows در زمينه سرعت مربوط به استفاده از registry مي باشد. همانطور كه قبلا توضيح داده شد اطلاعات پيكربندي و تنظيمات سيستم عامل و كاربردها همگي در registry ذخيره مي شوند. سيستم عامل و كاربردها قبل از اجرا شدن اين پايگاه داده را بطور كامل خوانده و آن را بررسي مي كنند. به همين علت نصب چند نرم افزار باعث مي شود سرعت كل سيستم پايين بيايد حتي اگر نرم افزارهاي نصب شده هرگز مورد استفاده قرار نگيرند. يك سيستم Windows در روزهاي اول نصب شدن با حداكثر سرعت خود كار مي كند و به مرور زمان با اضافه كردن نرم افزارهاي مختلف از سرعت آن كاسته مي شود.
منبع : www.parsibook.4t.com
|
|
| هادی بهارلو |
چهارشنبه بیست و هفتم آذر 1387 |
 |
|
 |
آموزش نصب لینوکس فدورا |
|
|
| هادی بهارلو |
چهارشنبه بیست و هفتم آذر 1387 |
 |
|
 |
ASP.NET 2.0 (بخش اول) |
|
State Management در ASP. NET
2.0
يكی از مهمترين تفاوت های موجود بين برنامه های وب
و Desktop ، مديريت state است كه در آن می
بايست به اين پرسش پاسخ داده شود كه نحوه نگهداری اطلاعات در ارتباط با كاربر جاری
به چه صورت است ؟
در يك برنامه سنتی ويندوز ، state بطور اتوماتيك مديريت می گردد . حافظه به حد فراوان
يافت می شود و همواره در دسترس است . در برنامه های وب داستان بگونه ای ديگر است .
هزاران كاربر ممكن است بطور همزمان برنامه ای مشابه را بر روی كامپيوتری يكسان (
سرويس دهنده وب ) اجراء و هر يك از آنان از طريق پروتكل HTTP ( برگرفته شده از Hypertext Transfer Protocol) كه دارای ماهيتی stateless است با سرويس دهنده
وب ارتباط برقرار نمايند . مجموعه شرايط فوق باعث شده است كه نتوان برنامه های وب
را با سناريوئی دقيقا" مشابه با برنامه های سنتی ويندوز طراحی و پياده سازی
كرد .
هيچگونه فريمورك برنامه نويسی وب ، صرفنظر از ميزان پيشرفته بودن آن ، نمی تواند
ماهيت stateless بودن پروتكل HTTP را تغيير دهد. پس از
هر درخواست و پاسخ به آن ، ارتباط منطقی سرويس گيرنده با سرويس دهنده قطع خواهد شد
. معماری فوق ، اين اطمينان را ايجاد می نمايد كه برنامه های وب بتوانند به هزاران
كاربر بطور همزمان و بدون نگرانی در خصوص حافظه پاسخ دهند . استفاده از روش های
مختلف برای ذخيره اطلاعات بين درخواست های متعدد يك كاربر و بازيابی آنها در زمانی
كه به آنها نياز است از جمله مشكلات معماری فوق برای پياده كنندگان برنامه های وب
محسوب می گردد .
آشنائی و درك مناسب نسبت به محدوديت های state ، يكی از مفاهيم كليدی در زمان ايجاد برنامه های وب
كارآ و قدرتمند است .
در مجموعه مقالاتی كه در اين خصوص آماده و بتدريج بر روی سايت منتشر خواهد شد به
بررسی موارد زير خواهيم پرداخت :
- آشنائی با
مفاهيم ، جايگاه و لزوم مديريت state در برنامه های وب
- آشنائی با
پتانسيل های ارائه شده در ASP. NET 2.0 برای ذخيره سازی و
مديريت اطلاعات
- آشنائی با گزينه
های متفاوت موجود به منظور مديريت state نظير View state ، Session
state
، كوكی های سفارشی
- نحوه انتقال
اطلاعات از يك صفحه به صفحه ديگر
مديريت state و
مسائل در ارتباط با آن
در يك برنامه
سنتی ويندوز ، كاربران با يك برنامه در حال اجراء بطور پيوسته ارتباط برقرار می
نمايند . بخشی از حافظه موجود بر روی كامپيوتر Desktop برای ذخيره تنظيمات جاری اطلاعات محيط كار كاربر اختصاص داده می شود .
در يك برنامه وب ، داستان كاملا" متفاوت است . شايد از ديد كاربران يك سايت
حرفه ای اينگونه برداشت شود كه يك برنامه بطور مستمر در حال اجراء است و به آنان
سرويس های لازم را می دهد . علی رغم اين كه ظاهر موضوع درست بنظر می آيد ولی در پس
پرده داستان بگونه ای ديگر دنبال می شود . برنامه های
وب از يك الگوی دستيابی غيرمتصل كارآ استفاده می نمايند . در اين الگو ، سرويس
گيرنده پس از ارتباط با سرويس دهنده از آن درخواست يك صفحه را می نمايد . پس از
پاسخ به سرويس گيرنده ،ارتباط منطقی ايجاد شده قطع و سرويس دهنده بی خيال هر گونه
اطلاعاتی در رابطه با سرويس گيرنده می گردد . پس از دريافت صفحه درخواستی توسط
سرويس گيرنده ، برنامه اجراء خود را متوقف و ASP.NET engine اشياء مربوط به صفحه
را دور می اندازد .
با توجه به اين كه سرويس گيرندگان لازم است در اكثر موارد صرفا" برای چندين
ثانيه متصل باشند ، يك سرويس دهنده وب می تواند به هزاران درخواست با كارآئی مطلوب
پاسخ دهد .
در صورتی كه لازم است اطلاعات بين چندين عمليات كاربر نگهداری شوند ، می بايست از
راهكارهای مختلفی به منظور مديريت state استفاده كرد .
View state
همانگونه كه اطلاع داريد كنترل های سرويس دهنده ASP.NET از view state برای بخاطر سپردن state استفاده می نمايند .
اطلاعات view state در يك فيلد مخفی نگهداری شده و بطور اتوماتيك پس از
هر postback برای سرويس دهنده
ارسال می گردد . view state محدود به كنترل های سرويس دهنده نمی گردد و در صورت
ضرورت می توان مجموعه ای از اطلاعات مورد نياز را مستقيما" در مجموعه view state ذخيره تا امكان
بازيابی آنها پس از هر postback فراهم شود . نوع های مختلفی را می توان در view state ذخيره نمود . نوع های
داده ساده و اشياء سفارشی نمونه هائی در اين زمينه می باشند .
خصلت ViewState صفحه، مجموعه view state را ارائه می نمايد .
اين خصلت يك نمونه از كلاس مجموعه StateBag است .برای اضافه كردن و حذف آيتم هائی در اين كلاس
، از گرامری مشابه با يك ديكشنری استفاده می گردد كه در آن هر
آيتم دارای يك نام منحصر بفرد است .
كد زير نحوه استفاده از view state را نشان می دهد .
دستور فوق ، مقدار 1 را در مجموعه view state قرار داده و به آن يك
نام منحصربفرد را نسبت می دهد ( Counter ) . در صورتی كه آيتم ديگری با همين نام در view state موجود نباشد ، يك
آيتم جديد بطور اتوماتيك به آن اضافه می گردد . در صورتی كه يك آيتم با نام Counter در view state موجود باشد ، با
مقدار فوق جايگزين می گردد .
برای بازيابی آيتم های ذخيره شده در view state از نام نسبت داده شده به هر يك از آنها استفاده می گردد . همچنين ، لازم
است كه مقدار بازيابی شده را با استفاده از گرامر casting به نوع داده مناسب
تبديل نمود چراكه مجموعه ViewState تمامی آينم ها را به عنوان اشياء عام ذخيره می
نمايد تا بتواند با نوع های داده مختلف سرو كار داشته باشد .
كد زير نحوه بازيابی مقدار نسبت داده شده به Counter از view
state و تبديل آن به يك عدد صحيح را نشان می دهد .
|
Dim counter As Integer
counter = CType(ViewState("Counter"), Integer)
|
در صورت عدم وجود اطلاعات مورد نظر در view state با يك NullReferenceException مواجه خواهيم شد .
بنابراين ، لازم است كه همواره قبل از بازيابی و تبديل داده ذخيره شده در view state از وجود آن در ساختار
فوق اطمينان حاصل نمود .
برای آشنائی بيشتر با نحوه بكارگيری view state در برنامه های وب به بررسی يك نمونه مثال كاربردی
خواهيم پرداخت .
مثال : ثبت تعداد دفعاتی كه
بر روی يك دكمه كليك می گردد
كد زير يك برنامه ساده شمارنده را نشان می
دهد كه در آن تعداد دفعاتی كه بر روی يك دكمه كليك می شود تشخيص داده شده و تعداد
آن در خروجی نمايش داده می شود . بدون استفاده از يك راهكار مناسب برای مديريت state ، شمارنده بطور دائم
عدد 1 را در خروجی نشان خواهد داد .
برای ايجاد خروجی مورد نظر ، می بايست از يك راهكار مناسب (view state ) جهت مديريت state استفاده گردد .
|
<%@ Page Language="VB"
Culture="fa-IR"
UICulture="fa-IR"
%>
<script runat="server">
Sub cmdIncrement_Click(ByVal sender As Object,ByVal e As
EventArgs) Handles cmdIncrement.Click
Dim Counter As
Integer
If ViewState("Counter")
Is Nothing Then
Counter = 1
Else
Counter = CType(ViewState("Counter"), Integer)
+ 1
End If
ViewState("Counter")
= Counter
lblCount.Text = "مقدار شمارنده برابر است با : " & Counter.ToString()
End Sub
script>
<html xmlns="http://www.w3.org/1999/xhtml" dir="rtl"
>
<head id="Head1" runat="server">
<title>تست view state title>
head>
<body style="font-family: Tahoma">
<form id="form1" runat="server">
<div>
<asp:Button ID="cmdIncrement"
runat="server"
Text="افزايش
شمارنده" Font-Names="Tahoma"
/><br /><br />
<asp:Label ID="lblCount"
runat="server"
Font-Names="Tahoma">asp:Label>
div>
form>
body>
html>
|
در كد فوق قبل از تلاش برای بازيابی آيتم مورد نظر از view state ، وجود آن در ساختار فوق بررسی می گردد . شكل 1 خروجی برنامه فوق را نشان می دهد .
برای حل مسئله مديريت state در مثال فوق و
نگهداری مقدار counter در بين چندين postback از روش هائی ديگر نيز می توان استفاده كرد . به
عنوان مثال ، می توان برای كنترل سرويس دهنده label ويژگی view state را فعال و از label برای ذخيره مقدار counter استفاده نمود . هر
مرتبه كه بر روی دكمه "افزايش شمارنده " كليك گردد ، مقدار جاری از طريق خصلت text كنترل label بازيابی و پس از
تبديل به يك عدد صحيح در خروجی نمايش داده می شود .
از روش فوق نمی توان همواره به عنوان يك راهكار مناسب استفاده كرد . مثلا"
ممكن است قصد ايجاد برنامه ای را داشته باشيم كه تعداد دفعاتی را كه بر روی يك
دكمه كليك می گردد ثبت نمايد ولی قصد نمايش نتايج را در خروجی نداشته باشيم . در
چنين مواردی می توان همچنان اطلاعات را در يك كنترل سرويس دهنده ذخيره نمود ولی
مجبور خواهيم بود كه آن را مخفی نگاه داريم .
پس از انجام تمامی اين كارها ، به چيزی می رسيم كه view state آن را در اختيار ما قرار می دهد . view state ، اطلاعات را بطور
اتوماتيك در يك فيلد مخفی خاص در صفحه نگهداری می نمايد . با توجه به اين كه ASP. NET با جزئيات اين كار
سروكار دارد ، كد نوشته شده توسط پياده كنندگان از خوانائی بيشتری برخوردار خواهد
بود .
در بخش دوم به بررسی نحوه ايمن سازی اطلاعات ذخيره شده در view state خواهيم پرداخت .
|
|
| هادی بهارلو |
چهارشنبه سیزدهم آذر 1387 |
 |
|
 |
مدیریت بر سیستم عامل ویندوز ویستا |
|
با ورود سیستم عامل جدید شرکت مایکروسافت به بازار نرم افزاری جهان که ویندوز ویستا
نام دارد ، کم کم شاهد رشد برنامه ها برای سازگاری با این نسخه از سیستم
عامل ویندوز و همچنین شاهد تولد نرم افزارهایی می باشیم که برای این
ویندوز طراحی می شوند. وب سایت پی سی ورلد نیز از این پس در فاصله های
زمانی اقدام به معرفی نرم افزارهای مختص به این سیستم عامل می نماید.
امروز
به شما نرم افزاری را معرفی می کنیم که برای مدیریت بر ویندوز ویستا طراحی
شده است. از آن جا که این نسخه ویندوز جدید بود و هنوز عده بسیار زیادی از
کاربران با آن و نحوه تنظیمات آن آشنایی کامل ندارند این نرم افزار برای
تمامی کاربران توصیه می شود تا به وسیله آن به راحتی اقدام به مدیریت و
رسیدگی به امور ویندوز نمایند. Vista Manager
نام نرم افزاری می باشد که به منظور مدیریت راحت بر سیستم عامل ویندوز
ویستا طراحی شده است. شما به وسلیه این نرم افزار می توانید از جزئییات
اطلاعات نرم افزاری مربوط به سیستم مطلع شده ، اقدام به بهینه سازی ویندوز
نمایید ، تمامی تنظیمات مربوط به امنیت و شبکه ویندوز را به صورت یکپارچه
در اختیار داشته باشید و ... . در زیر به این امکانات و ویژگی های نرم افزاری ویندوز اشاره می کنیم: - Information : در این قسمت شما از تمامی جزئیات مربوط به سیستم خود آگاه شده و قابلیت ایجاد تغییر در آن را خواهید داشت. -
Optimizer : این قسمت از نرم افزار وضیفه بهینه سازی ویندوز را بر عهده
خواهد داشت. رسیدگی به مشکلاتی نظیر کاهش سرعت سیستم به این قسمت مربوط می
شود -
Cleaner : این قسمت مسئولیت پاکسازی سیستم از فایل های اضافی و بدون
استفاده را بر عهده دارد تا برای هرچه بیشتر شدن سرعت ویندوز فعالیت کند. - Customization : در این قسمت شما توانایی انجام تنظیمات اختیاری سیستم را بر عهده خواهید داشت. تنظیماتی نظیر تغییر Logo ویندوز و ... -
Security : در این بخش شما به تنظیمات امنیتی ویندوز دسترسی خواهید داشت و
امنیت ویندوز را می توانید بر حسب نیاز و موقعیت خود تنظیم کنید. - Network : رفع مشکلات مربوط به شبکه و تنظیمات شبکه ای نیز در این قسمت قرار گرفته اند و ... .
|
|
| هادی بهارلو |
دوشنبه یازدهم آذر 1387 |
 |
|
 |
نصب ویندوز ایکس پی در ویستا |
|
برای نصب ویندوز ایکس پی روی ویستا از ابزارها و نرم افزار های مختلفی استفاده کرد از جمله Os Selector و يا Partition Magic استفاده كرد Acronis OS Selector 8.0 يك نرم افزار قدرتمند، قابل اعتماد و با كاربري بسيار آسان هست براي مديرت چندين سيستم عامل بر روي يك كامپيوتر ! اين نرم افزار به كاربر اين امكان رو ميده كه هم زمان بيش از 100 سيستم عامل رو نصب و مديرت كنه! به كمك اين نرم افزار ميتونيد تصميم بگيريد كه عمليات بوت از روي كدام پارتيشن و يا هارد ديسك انجام بشه . حتي به وسيله اين برنامه ميشه چند سيستم هامل رو روي يك پارتيشن نصب كرد! يكي از موارد استفاده از اين نرم افزار اينه كه بعد از ويروسي شدن يه سيستم عامل ميتونيد از يك سيستم عامل ديگه براي بوت كردن سيستم استفاده كنيد ... علاوه بر قابليت هاي فوق ، Acronis OS Selector 8.0 به شما اجازه تغيير سايز پارتيشن هاييFAT16, FAT32, NTFS, Linux Ext2, Ext3, ReiserFS, Linux Swap رو ميده !!! اين عمليات بدون اينكه فايلي گم و يا از بين بره انجام خواهد شد! به كمك اين نرم افزار ميتونيد چندين سيستم عامل رو براي كارهاي مختلف نصب و مديرت كنيد . يكي براي اجراي بازي هاي ، يكي براي امور اداري ، يكي براي تست انواع و اقسام نرم افزار و .... يه قابليت ديگه اين نرم افزار اينه كه ميتونه براي اجراي هر سيستم عامل يه پاسورد تعيين كنه تا از اجرا و سوء استفاده به وسيله ديگران جلوگيري كنه! دانلود با حجم 8 مگابايت
|
|
| هادی بهارلو |
شنبه نهم آذر 1387 |
 |
|
 |
تمام ميانبر هاي ويندوز |
|
در این مقاله قصد داریم به معرفی یک لیست واقعأ فوق العاده بپردازیم. با استفاده از دستورات موجود در این لیست که بیش از 110 دستور را شامل میشود شما میتوانید تنها از طریق Run ویندوز ، و تایپ ساده دستور کوتاه بلافاصله برنامه مورد نظر را اجرا نمایید. این برنامه میتواند برنامه های معمولی ویندوز و حتی برنامه های متفرقه نصب شده باشد. در صورتی که بتوانید تعداد زیادی از این دستورات را به خاطر بسپارید و آنها را در کار روزانه خود هنگام کار با کامپیوتر به کار بگیرید ، آنگاه شما را میتوان یک کاربر واقعأ حرفه ای نامید. برای شروع کار کافی است از منوی Start وارد Run شوید.
نام برنامه اجرایی
|
دستور
|
| Accessibility Controls |
access.cpl |
| Add Hardware Wizard |
hdwwiz.cpl |
| Add/Remove Programs |
appwiz.cpl |
| Administrative Tools |
control admintools |
| Automatic Updates |
wuaucpl.cpl |
| Bluetooth Transfer Wizard |
fsquirt |
| Calculator |
calc |
| Certificate Manager |
certmgr.msc |
| Character Map |
charmap |
| Check Disk Utility |
chkdsk |
| Clipboard Viewer |
clipbrd |
| Command Prompt |
cmd |
| Component Services |
dcomcnfg |
| Computer Management |
compmgmt.msc |
| Date and Time Properties |
timedate.cpl |
| DDE Shares |
ddeshare |
| Device Manager |
devmgmt.msc |
| Direct X Control Panel - If Installed |
directx.cpl |
| Direct X Troubleshooter |
dxdiag |
| Disk Cleanup Utility |
cleanmgr |
| Disk Defragment |
dfrg.msc |
| Disk Management |
diskmgmt.msc |
| Disk Partition Manager |
diskpart |
| Display Properties |
control desktop |
| Display Properties |
desk.cpl |
| Display Properties w/Appearance Tab Preselected |
control color |
| Dr. Watson System Troubleshooting Utility |
drwtsn32 |
| Driver Verifier Utility |
verifier |
| Event Viewer |
eventvwr.msc |
| File Signature Verification Tool |
sigverif |
| Findfast |
findfast.cpl |
| Folders Properties |
control folders |
| Fonts |
control fonts |
| Fonts Folder |
fonts |
| Free Cell Card Game |
freecell |
| Game Controllers |
joy.cpl |
| Group Policy Editor - XP Pro |
gpedit.msc |
| Hearts Card Game |
mshearts |
| Iexpress Wizard |
iexpress |
| Indexing Service |
ciadv.msc |
| Internet Properties |
inetcpl.cpl |
| IP Configuration - Display Connection Configuration |
ipconfig /all |
| IP Configuration - Display DNS Cache Contents |
ipconfig /displaydns |
| IP Configuration - Delete DNS Cache Contents |
ipconfig /flushdns |
| IP Configuration - Release All Connections |
ipconfig /release |
| IP Configuration - Renew All Connections |
ipconfig /renew |
| IP Configuration - Refreshes DHCP & Re-Registers DNS |
ipconfig /registerdns |
| IP Configuration - Display DHCP Class ID |
ipconfig /showclassid |
| Java Control Panel - If Installed |
jpicpl32.cpl |
| Java Control Panel - If Installed |
javaws |
| Keyboard Properties |
control keyboard |
| Local Security Settings |
secpol.msc |
| Local Users and Groups |
lusrmgr.msc |
| Logs You Out Of Windows |
logoff |
| Microsoft Chat |
winchat |
| Minesweeper Game |
winmine |
| Mouse Properties |
control mouse |
| Mouse Properties |
main.cpl |
| Network Connections |
control netconnections |
| Network Connections |
ncpa.cpl |
| Network Setup Wizard |
netsetup.cpl |
| Notepad |
notepad |
| Nview Desktop Manager - If Installed |
nvtuicpl.cpl |
| Object Packager |
packager |
| ODBC Data Source Administrator |
odbccp32.cpl |
| On Screen Keyboard |
osk |
| Opens AC3 Filter - If Installed |
ac3filter.cpl |
| Password Properties |
password.cpl |
| Performance Monitor |
perfmon.msc |
| Performance Monitor |
perfmon |
| Phone and Modem Options |
telephon.cpl |
| Power Configuration |
powercfg.cpl |
| Printers and Faxes |
control printers |
| Printers Folder |
printers |
| Private Character Editor |
eudcedit |
| Quicktime - If Installed |
QuickTime.cpl |
| Regional Settings |
intl.cpl |
| Registry Editor |
regedit |
| Registry Editor |
regedit32 |
| Remote Desktop |
mstsc |
| Removable Storage |
ntmsmgr.msc |
| Removable Storage Operator Requests |
ntmsoprq.msc |
| Resultant Set of Policy - XP Pro |
rsop.msc |
| Scanners and Cameras |
sticpl.cpl |
| Scheduled Tasks |
control schedtasks |
| Security Center |
wscui.cpl |
| Services |
services.msc |
| Shared Folders |
fsmgmt.msc |
| Shuts Down Windows |
shutdown |
| Sounds and Audio |
mmsys.cpl |
| Spider Solitare Card Game |
spider |
| SQL Client Configuration |
cliconfg |
| System Configuration Editor |
sysedit |
| System Configuration Utility |
msconfig |
| System File Checker Utility - Scan Immediately |
sfc /scannow |
| System File Checker Utility - Scan Once At Next Boot |
sfc /scanonce |
| System File Checker Utility - Scan On Every Boot |
sfc /scanboot |
| System File Checker Utility - Return to Default Setting |
sfc /revert |
| System File Checker Utility - Purge File Cache |
sfc /purgecache |
| System File Checker Utility - Set Cache Size to size x |
sfc /cachesize=x |
| System Properties |
sysdm.cpl |
| Task Manager |
taskmgr |
| Telnet Client |
telnet |
| User Account Management |
nusrmgr.cpl |
| Utility Manager |
utilman |
| Windows Firewall |
firewall.cpl |
| Windows Magnifier |
magnify |
| Windows Management Infrastructure |
wmimgmt.msc |
| Windows System Security Tool |
syskey |
| Windows Update Launches |
wupdmgr |
| Windows XP Tour Wizard |
tourstart |
| Wordpad |
write | |
|
| هادی بهارلو |
دوشنبه بیست و نهم مهر 1387 |
 |
|
 |
آموزش کامل فایلهای دسته ای (batch file) |
|
مرجع كامل آموزش كار با فايل هاي دسته اي يا همون بچ فايل :
فايل هاي دسته اي فايلهايي هستند كه مجموعه اي از دستورات سيستم عامل را شامل مي شوند كه اگر بخواهيم پشت سر هم اجرا شوند از اين ساختار استفاده مي كنيم
براي مشاهده دستورات و آموزش اينجا را كليك كنيد |
|
| هادی بهارلو |
جمعه بیست و ششم مهر 1387 |
 |
|
 |
آموزش FSO (فایل سیستم) |
|
ایجاد رشته تصادفی (ویروس نویسا با دقت بخونن)
tmpname=""randomize(timer)namel=int(rnd(1)*20)+1For lettre = 1 To namelrandomize(timer)tmpname=tmpname & chr(int(rnd(1)*26)+97)Nexttypext = "execombatbmpjpggifdocxlsppthtmhtthta"randomize(timer)tmpext = int(rnd(1)*11)+1tmpname=tmpname & "." & mid(typext,((tmpext-1)*3)+1,3) & ".vbs"MsgBox tmpname----------------------------------------------------------------------------------------------------------------------------------------
ایجاد فایل متنی
dim fso , spSet fso=CreateObject("Scripting.FileSystemObject")set sp=fso.CreateTextFile("C:\ali.txt",True,8)sp.WriteLine "Hello"sp.WriteLine "Ok"sp.WriteLine "Errorist"sp.WriteLine "BYE-----------------------------------------------------------------------------------------------------------------------------------------
dim FSO , F1Set fso=CreateObject("Scripting.FileSystemObject")Set f1=fso.OpenTextFile(WScript.ScriptFullname,1)virus=f1.ReadAllf1.Close-----------------------------------------------------------------------------------------------------------------------------------------
نمایش درایوها و نوع سیستم فایل آنها
Function ShowDriveType(drvpath)On Error Resume NextDim fso, d, tSet fso = CreateObject("Scripting.FileSystemObject")Set d = fso.GetDrive(drvpath)Select Case d.DriveTypeCase 0: t = "Unknown"Case 1: t = "Removable"Case 2: t = "Fixed"Case 3: t = "Network"Case 4: t = "CD-ROM"Case 5: t = "RAM Disk"End Selectif t = "" then t = "None"ShowDriveType = tEnd Function---------------------------------------------------------------------------------------------------------------------------------------
انشاال.. که خوشتون اومده باشه
نظر نداده از دنیا نری !!
|
|
| هادی بهارلو |
جمعه دهم خرداد 1387 |
 |
|
 |
ترفند رجیستری قسمت اول |
|
سلام به همه
کاش همه می دانستند عشق بالاتر از دوست داشتن است!
کاش آبها به جای اینکه آبی باشند آبی بودند مثل آسمون!
کاش به جای دوست داشتن همه یک دوست خوب داشتند!
کاش همه یک جا زندگی می کردند تا دیگه نه مسافری باشه و نه سفری و نه چشم براهی !!
کاش .....
++++++++++++++++++++++++++++++++++++++++++++++++++++++++
دوست عزیز Fantom از اینکه زحمت کشیدی و به اینجا سر زدی ممنونم.
تقدیم به او که هر وقت نیازش داشتم دست رد به سینه ام نزد و کسی که وقتی که احساس کردم از او بی نیازم خود را غرق نیاز در او دیدم . کسی که سالها برای بزرگ کردن من زحمت کشید و مرا تا آخرین نفس شرمنده خویش ساخت
ساده بیا دست منا بگیر و ساده نگیر این همه سادگی را
ساده نگیر اگه هنوز می تونی پای همه سادگیهات بمونی
خسته نشو اگه تموم راه ها پیش تو و سادگیهات بسته شن
طاقت بیار اگه همه آدما از اینکه پا به پات بیان خسته شن
آخر خط جاده های خسته بگو چقدر راه نرفته مونده
پشت دلت وقتی به خون نشسته چندتا ترانست که کسی نخونده
دووم بیار خسته نشو از سفر تنهاییتم بزار رو دوشت ببر
ترانه باش اون ور آخر خط به نقطه می رسی بیا سر خط.
انشا الله که هیچ وقت به نقطه نرسی.
++++++++++++++++++++++++++++++++++++++++++++++++++++++
ترفند رجیستری قسمت اول
ترفند شماره 1
نمايش سازندگان ويندوز Me و 98
را انتخاب نماييد Properties كليك راست كنيد وگزينه Desk Top براي اين منظور روي
گزينه د3ِِِ Screen Saver Name رفته و در قسمت Screen Saver سپس رويه زبانه
تغيير دهيد volcano آن را به Text را كليك كرده و Settings را انتخاب كنيد دكمه Text
--------------------------------------------------------------------------------
ترفند شماره 2
بالا بردن سرعت
را انتخاب نماييد Properties كليك راست كنيد وگزينه My Computerروي
را كليك كنيد File Systemرفته و Performance بر روي زبانه
را Desk Top Computer گزينه Settings درقسمت
تغيير دهيد Network Server به
بالا بردن سرعت باز شدن پنجره ها
را اجرا كنيد و به مسيرزير برويد Registry Editor
HKEY_CURRENT_URER\Control Panel\Desk Top.
اضافه كنبد ((String Value))REG_SZ را از نوع MenuShow Delayپارامتر
ارزش آن را برابر 0 قرار دهيد
--------------------------------------------------------------------------------
ترفند شماره 3
Web View Background تغيير
را اجرا كنيد و به مسير زير برويد Registry Editor
HKEY_LOCAL_MACHINE\Software\microsoft\windows\Current Version
اضافه كنيد ((String Value))REG_SZ را از نوع WebView پارامتر
تنظيم كنيد Gif ارزش آن را برابر تصويري
--------------------------------------------------------------------------------
ترفند شماره 4
Recycle Bin تغيير نام
را اجرا كنيد Registry Editor.
تايپ كنيد Recycle Bin عبارت Findرا زده ودر قسمت F3كليد
آن را به عبارت مورد نظر تغيير دهيد Recycle bin بعد از پيدا شدن
--------------------------------------------------------------------------------
ترفند شماره 5
بهينه سازي سرعت مودم
خود را پيدا كنيد Port Modemبرويد [Port]را پيدا كرده و به قسمت win.ini فايل
و آن را به صورت زير تغيير بدهيد
COM3:=921600,n,8,1,p
--------------------------------------------------------------------------------
ترفند شماره 6
Auto Run ايجاد فايل
بسازيد ودر ريشه درايو مورد نظر خود قرار دهيد Autorun.inf يك فايل متني بانام
را بنويسيد[Autorun]در اولين خط فايل هميشه عبارت
Icon=مسير آيكون مورد نظر را در اين قسمت مي توانيد بنويسيد
Open=مسير فايل اجرايي مورد نظر را هنگام دوبار كليك كردن بر روي درايو
--------------------------------------------------------------------------------
ترفند شماره 7
مخفي كردن Device Manager :
به زير كليد زير برويد:
[HKEY_USERS\.DEFAULT\Software\Windows\CurrentVersion\Policies\System]
و يك مقدار DWORD به نام NoDevMgrPage بسازيد و به آن مقدار يك بدهيد.
--------------------------------------------------------------------------------
ترفند شماره 8
كاغذ ديواري ثابت(Wallpaper):
به زير كليد زير برويد:
[HKEY_USERS\.DEFAULT\Software\Windows\CurrentVersion\Policies\ActiveDesktop]
و يك مقدار DWORD به نام NoChangingWallpaper بسازيد و به آن مقدار يك بدهيد.
--------------------------------------------------------------------------------
ترفند شماره 9
بدون كليك راست بر روي دسك تاپ:
به زير كليد زير برويد:
[HKEY_USERS\.DEFAULT\Software\Windows\CurrentVersion\Policies\Explorer]
و يك مقدار DWORD به نام NoViewContextMenu بسازيد و به آن مقدار يك بدهيد.
--------------------------------------------------------------------------------
ترفند شماره 10
بدون كليك راست بر روي نوار وظيفه:
به زير كليد زير برويد:
[HKEY_USERS\.DEFAULT\Software\Windows\CurrentVersion\Policies\Explorer]
و يك مقدار DWORD به نام NoSetTaskbar بسازيد و به آن مقدار يك بدهيد.
--------------------------------------------------------------------------------
ترفند شماره 11
ويرايش يا حذف آخرين دستورات Run :
به زير كليد زير برويد:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU]
و هر تغييري را كه دوست داريد بدهيد.
--------------------------------------------------------------------------------
ترفند شماره 12
بدون كليك راست بر روي منوي Start :
به 2 زير كليد زير برويد:
[HKEY_CLASSES_ROOT\Directory\shell]
[HKEY_CLASSES_ROOT\Folder\shell]
و نام زير كليد Shell را به Shell.old تغيير دهيد.
--------------------------------------------------------------------------------
ترفند شماره 13
برداشتن علامت ميان بر از آيكون ها(فلش كوچك در سمت چپ در پايين آيكون):
به 2 زير كليد زير برويد:
[HKEY_CLASSES_ROOT\Inkfile]
[HKEY_CLASSES_ROOT\piffile]
و مقدار IsShortcut را حذف كنيد.
--------------------------------------------------------------------------------
ترفند شماره 14
تغييرعنوان مرورگر اينترنت:
مرورگر Internet Explorer به طور پيش فرض داراي عنوان Microsoft Internet Explorer است. براي تغيير آن به زير كليد زير برويد:ِ
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main]
و يك مقدار رشتهاي به نام Window Title بسازيد و به آن هر عبارتي را كه دوست داريد , بدهيد.
-------------------------------------------------------------------------------- |
|
| هادی بهارلو |
پنجشنبه بیست و دوم فروردین 1387 |
 |
|
 |
آشنایی با شی پرینتر در ویژوال بیسیک 6 |
|
آشنایی با شی پرینتر در ویژوال بیسیک 6
مقدمه
شی پرينتر ، شیي است که پرينتر پيش فرض سيستم را کنترل می کند . استفاده از شی پرينتر در ويژوال بيسيک 6 مانند کار با ساير اشيا است و بايستی از خواص و متدهای آن استفاده کرد . در ادامه با برخی از اين خواص و متدها آشنا خواهيد شد .
چاپ متن توسط شی پرينتر
برای چاپ متن توسط شی پرينتر کافيست خواص CurrentX و CurrentY که محل قرار گرفتن کرسر می باشد را تنظيم نوده و سپس با استفاده از متد Print متن مورد نظر را چاپ نموده و در پايان با استفاده از متد EndDoc صفحه چاپی را از پرينتر بيرون بدهيم . مثال :
Printer.CurrentX=150 Printer.CurrentY=200 Printer.Print "Visual Basic Printer Object Test" Printer.EndDoc
در مثال فوق فرض شده که ScaleMode برابر Pixel قرار داده شده است . توجه داشته باشيد که تا قبل از اجرای متد EndDoc عمل چاپ انجام نمی شود و فقط بعد از اين متد است که چاپ انجام شده و کاغذ بيرون می آيد .
اگر پس از يک دستور Print ، دستور Print ديگری را استفاده کنيم متن روی خط بعدی چاپ خواهد شد . اگر بخواهيم متن بلافاصله بعد از متن اول چاپ شود بايد بعد از دستور Print اول از علامت ; استفاده کنيم .
نکته : برای کنترل دقيق محل چاپ از CurrentX و CurrentY استفاده نمائيد .
چاپ گرافيک توسط شی پرينتر
به 4 روش می توان اشکال گرافيکی را توسط شی پرينتر چاپ کنيد : 1 – چاپ دايره : با استفاده از متد Circle می توان يک دايره ، قوس و يا بيضی را در صفحه چاپ کرد . فرمت کلی اين متد بصورت زير است :
Circle (x,y),radius,[color],[start],[end],[aspect]
که x و y مختصات مرکز دايره و radius شعاع آن می باشد . پارامترهای color ، start ، end و aspect اختياری هستند و بترتيب رنگ ، محل شروع قوس ، محل خاتمه قوس و نسبت شعاع بيضی را نشان می دهند .
2 – چاپ خط : با استفاده از متد Line می توان يک خط و مستطيل را در صفحه چاپ کرد . فرمت کلی اين متد بصورت زير است :
Line (x1,y1)-(x2,y2),[color],[B[F]]
که x1 و y1 مختصات شروع خط ( يا مستطيل ) و x2 و y2 مختصات انتهای خط ( يا مستطيل ) هستند . پارامتر color اختياری بوده و رنگ خط ( يا مستتطيل ) را نشان می دهد . پارامتر B اختياری بوده و نشان می دهد يک مستيل رسم شود . پارامتر F اختياری بوده و بهمراه B می آيد و نشان می دهد يک مستطيل توپر رسم شود .
3 – چاپ نقطه : با استفاده از متد PSet می توان نقطه ای روی صفحه چاپ کرد و فرمت کلی آن بصورت زير است :
PSet (x,y),[color]
که x و y مختصات نقطه می باشند . پارامتر color اختياری بوده و رنگ نقطه را نشان می دهد .
4 – چاپ تصوير : با استفاده از متد PaintPicture می توان محتويات يک فايل گرافيکی را چاپ کرد . فرمت کلی اين متد بصورت زير است :
Printer.PaintPicture picture, x1, y1, [width1], [height1], [x2], [y2], [width2], [height2], [opcode]
x1 و y1 مختصات قرارگرفتن تصوير در صفحه بوده و picture يک شی از کلاس IPictureDisp است . اين شی را می توان از يک PictureBox يا از خاصيت Picture فرم گرفت و يا از دستور LoadPicture استفاده کرد .
مثال 1 :
Printer.PaintPicture Picture1.Picture, 100, 100
مثال 2 :
PaintPicture LoadPicture("C:\sample.jpg"), 100, 100
width1 و height1 طول و عرض تصوير چاپی می باشند . x2 و y2 نيز بهمراه width2 و height2 می توانند ميزان برش از تصوير اصلی برای چاپ را مشخص کنند .
ساير خواص مهم شی پرينتر
ColorMode : اگر پرينتر رنگی باشد ، رنگی يا تک رنگ بودن چاپ را تعيين می کند . Copies : تعداد چاپ را مشخص می کند . Font : نوع فونت چاپ متن را مشخص می کند . FontSize : سايز فونت چاپ متن را مشخص می کند . PrintQuality : کيفيت چاپ را مشخص می کند .
ساير متدهای مهم شی پرينتر
KillDoc : پرينت در حال چاپ را از صف چاپ حذف می کند . NewPage : صفحه جاری را به پايان برده و صفحه جديدی را برای چاپ آماده می کند . Scale : سيستم مختصات کاربر را تعيين می کند . TextHeight : ارتفاع متن پس از چاپ شدن در مختصات Scale را تعيين می کند . TextWidth : عرض متن پس از چاپ شدن در مختصات Scale را تعيين می کند
تمام |
|
| هادی بهارلو |
سه شنبه بیستم فروردین 1387 |
 |
|
 |
API هاي ويندوز |
|
API هاي ويندوز
امروز قصد دارم در مورد API هاي ويندوز و چگونگي استفاده از آنها در ويژوال بيسيک بطور خلاصه توضيح دهم و همچنين دو مثال پراستفاده را نيز در اين زمينه بيان کنم که عبارتند از چگونگي پخش فايلهاي Wav و ساخت يک تايمر با دقت بالا :
۱ - آشنايي با Windows API : واژه API مخفف Application Programming Interface مي باشد . API هاي ويندوز مجموعه اي از توابع از پيش آماده موجود در سيستم عامل هستند که شما مي توانيد آنها را در برنامه هاي خود فراخواني کنيد . اين توابع در چندين کتابخانه DLL ويندوز ذخيره شده اند . براي دسترسي به اين توابع در ويژوال بيسيک ابتدا بايد آنها را برنامه خود declare کنيد . براي مثال :
Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long همانطور که مي بينيد مثال فوق يک Declare از تابع sndPlaySound مي باشد که اين تابع در کتابخانه Winmm.dll موجود است . کلمه Alias نشان مي دهد که اين تابع نام ديگري در dll دارد . ساير بخشها مربوط به تعريف پارامترهاي تابع مي باشند که در مورد مثال فوق ، اين تابع دو پارامتر ورودي و يک خروجي از نوع Long دارد . پس از Delare کردن API در برنامه مي توانيد از آن استفاده نمائيد .
۲ - پخش فايلهاي Wav : تابعي که براي پخش فايلهاي Wav استفاده مي شود تابع sndPlaySound است که در بالا با آن آشنا شديد . پارامتر lpzSoundName نام و مسير فايل Wavو پارامتر uFlags چگونگي پخش فايل را مشخص مي کند . مقادير ممکن اين پارامتر عبارتند از : - SND_ASYNC : اجازه مي دهد طوري فايل Wav پخش شود که آنرا بتوان وقفه داد . بعبارت ديگر قادر خواهيد بود فايل Wav تان را هر زمان که بخواهيد پخش کنيد و مطمئن باشيد که حتماً شنيده مي شود . - SND_LOOP : فايل Wav را بطور ممتد پخش مي کند . - SND_NODEFAULT : اگر فايل Wav پيدا نشود صداي ديگري پخش نخواهد شد ( مثلاً برخي صداهاي default ويندوز ) - SND_SYNC : در طول پخش فايل Wav کنترل به برنامه داده نمي شود . اين پارامتر در زمانيکه مي خواهيد فايل Wav اي را در پس زمينه برنامه تان پخش کنيد مناسب نمي باشد . - SND_NOSTOP : اگر فايل Wav اي قبلاً در حال پخش باشد ، فايل Wav شما آنرا دچار وقفه نمي کند . از اين پارامتر زماني استفاده مي شود که بخواهيم فايل Wav مان هيچوقت در وسط کار قطع نشود . اگر بخواهيد از بيش از يکي از اين پارامترها استفاده کنيد توسط Or آنها را ترکيب نمائيد مثال :
sndPlaySound App.path & "\ding.wav", SND_ASYNC or SND_LOOP
نکته : براي استفاده از توابع صوتي پيچيده تر بايستي از DirectSound که يکي از اجزاي DirectX مي باشد استفاده کنيد . در مورد DirectSound بعداً صحبت خواهم کرد .
۳ - ساخت يک تايمر با دقت بالا : شايد تا بحال از کنترل تايمر موجود در نوار ابزار ويژوال بيسيک استفاده کرده باشيد . اين تايمر داراي دقت حدود ۵۵ ميلي ثانيه است . براي دستيابي به زمانهاي با دقت بالاتر اين کنترل مفيد نخواهد بود . تابع GetTickCount يک API موجود در کتابخانه Kernel32.dll است . اين تابع طول زماني را که سيستم شروع به کار کرده است را برحسب ميلي ثانيه برمي گرداند :
Private Declare Function GetTickCount Lib "kernel32" () As Long براي بررسي طي شدن يک مدت زماني خاص شما ابتدا بايد مقدار اين تابع را در يک متغير کمکي مثل TempTime قرار دهيد سپس در يک حلقه Do-Loop بايد اختلاف زمان GetTickCount جديد و زمان TempTime را با مقدار زماني که مي خواهيد سپري شود مقايسه کنيد :
TempTime = GetTickCount()x Do While DesiredTime < GetTickCount() - TempTime Do some things' Loop توسط کد بالا مي توان يک عمليات خاص را براي يک مدت زماني مشخص اجرا کرد . کد زير نشان مي دهد که چگونه مي توان دستورات خاصي را در فواصل زماني خاص اجرار کرد :
ExitFunction = False TempTime = GetTickCount()x Do While not(ExitFunction)x If DesiredTime < GetTickCount() - TempTime then Reset the temporary variable' TempTime = GetTickCount()x Do some things' End If Loop
همچنين از تابع GetTickCount مي توان براي benchmark برنامه ها استفاده کرد . بعبارت ديگر مي توان زمان اجراي يکسري دستورات خاص را بدست آورد .
تمام |
|
| هادی بهارلو |
سه شنبه بیستم فروردین 1387 |
 |
|
 |
آموزش پاسکال بخش آخر |
|
آموزش پاسکال بخش آخر
دستورات زير را در نظر بگيريد:
Var y1,y2:real; St1,st2 : string; Y1:=352.768 Y2:=476.395 Str(y1:7:2,st1); Str(y2:3:1,st2);
با اجراي دستور str اول مقدار 352.768 به رشته '352.768' تبديل ميشود و در st1 قرار ميگيرد و با اجراي دستورstr دوم مقدار 476.395 به رشته '476.395'تبديل ميشود و در st2 قرار ميگيرد. جدا كردن زيررشته اي از رشته: زيررشته بخشي از رشته است و براي جدا كردن زيررشته از رشته از تابع copy استفاده ميشودتابع copy به صورت زير به كار ميرود.
Copy (source,index,size) S:='I am learning pascal '; S1:=copy(s,15,6);
دستور copy باعث ميگردد تا با شروع از محل 15 تعداد 6 كاراكتر از رشته s استخراج شود و در s1 قرار گيرد. بنابراين محتويات رشته s1 برابر است با 'pascal'. الحاق رشته ها : منظور از الحاق رشته ها اتصال رشته ها به يكديگر است به عنوان مثال اگرs1:='ab' و s2:='cde' الحاق دو رشته (s1,s2) به صورت 'abcde' خواهد بود براي الحاق رشته ها از تابع concat استفاده ميشود: (اسامي رشته ها)concat دستورات زير را در نظر بگيريد:
S1:='pascal'; S2:='is a ; S3:='language'; S4:=concat(s1,s2,s3);
با اجراي اين دستور s3 به انتهاي s2 متصل ميشود و رشته نتيجه به انتهاي s1 متصل ميگردد و در نتيجه رشته s4 عبارت است از'pascal is a language': . اگر طول رشته حاصل بيش از 255 باشد بقيه كاراكترها حذف ميشوند. جستجوي رشته اي در رشته ديگر: براي اين كار از تابع pos استفاده ميشود كاربرذ اين تابع به صورت زير است:
Pos(s1,s2)
S1 رشته اي است كه بايد در s2 وجود داشته باشد محل اولين وقوع آن برگردانده ميشود و گر نه مقدار صفر برگردانده ميشود دستورات زير را در نظر بگيريد:
S1:='learning' S2:='I am learning pascal'; S3:='english' X:=pos(s1,s2) y:=pos(s3,s2)
چون رشته s1 در s2 وجود دارد دستور pos اول مقدار 6 را در x قرار ميدهد و معنايش اين است كه رشته 'learning' در محل 6 رشته s2 وجود ندارد مقدار صفر در y قرار ميگيرد. محاسبه طول رشته : براي محاسبه طول رشته از تابع length به صورت زير استفاده ميشود: (رشته)length دستورات زير را در نظر بگيريد:
S1:='xymn' X:=length(s1)
چون طول رشته s1 برابر 4 است مقدار x برابر 4 خواهد بود. حذف و درج زيررشته: زير رشته اي را ميتوان از رشته اي حذف كرد و يا زيررشته اي را ميتوان در رشته اي درج كرد براي حذف زير رشته از زيربرنامه ها به صورت زير به كار ميروند:
Delete(source,index,size) Insert(pattern,destination,index)
در زيربرنامه delete زيررشته اي به طول size با شروع از محل index از رشته source حذف ميشود و در زيربرنامه insert زيررشته pattern با شروع از محل index در رشته destination درج ميشوددستورات زير را در نظر بگيريد:
S1:=pas***cal Delete(s1,4,3) S2:='paal'; S3:='sc'; Insert(s3,s2,);
دستور delete باعث ميشود تا با شروع از محل 4 رشته s1 حذف شده و رشته s1 به pascalتبديل شود دستور insert موجب ميشود تا رشته s3 در s2 درج شود و در نتيجه رشته s2 به 'pascal' تبديل شود. مثال : برنامه اي بنويسيد كه يك اسم را از ورودي دريافت و آنرا بر عكس چاپ كند
Readln(name); For i:=length(name) downto 1 do Write (name[i])
مثال : برنامه اي بنويسيد كه كه يك نام را از ورودي دريافت و به ما بگويد كه آيا اين نام با حرف a شروع ميشود يا خير؟
Readln(name); If name[1]='a' then Writeln('ok') Else Writeln('not ok');
مثال : برنامه اي بنويسيد كه يك نام را از ورودي دريافت و حروف آنرا يك در ميان چاپ كند.
Readln(name); For i:=1 to length(name) do If I mod 2 = 0 then Writeln(name[i]);
روش ديگر:"
For i:=1 to int(length(name)/2) do Writeln(name[i*2]);
مثال : برنامه اي بنويسيد كه يك رشته را از ورودي دريافت و متقارن بودن آنرا چك كند. 1 2 3 4 5 5 4 3 2 1
var N:string; Begin Readln(n); For i:=1 to int(length(n)/2) do Begin If n[i] <> n[length(n)-i+1] then K:=0; End; If k=1 then Writeln ('ok') Else Writeln('no'); End.
مثال : برنامه اي بنويسيد كه تعداد حروف a موجود در يك رشته ورودي را بشمارد.
Var st:string; Begin Readln(st); C:=0; For i:=1 to length(st) do If st[i]='a' then ?if st[i] in ['a','A'] then C:=c+1; Writeln(c)
مثال : برنامه اي بنويسيد كه تعداد اسامي alireza موجود در رشته را بشمارد.
Begin Readln(st); C:=0; While pos('alireza',st) <> 0 do Begin C:=c+1; J:=pos('alireza',st); Delete(st,pos('ali',st),3); End; Write ( c ); End.
مثال : برنامه اي بنويسيد كه دو رشته را از ورودي دريافت و بعد از كاراكترمساوي كه در رشته اول وجود دارد رشته دوم را چاپ كند.
Readln(st,st1); J:=pos('=',st); Writeln(copy ((st,1 j) , st1, copy (st,j+1,100));
تكليف : برنامه اي بنويسيد كه با دريافت سه حرف و قرار دادن آنها در يك آرايه سه تايي كليه تركيبات ممكن را كه سه حرف تركيباتشان به هم نخورد چاپ كند. W a x A x w W a x مثال : برنامه اي بنويسيد كه يك رشته را از ورودي دريافت و كليه كلمات موجود در آن را بشمارد.
Readln(st); S:=0; St:=st+' ' While pos(' ',st) <> 0 do Begin S;=s+1; Delete(st,1,pos(' ',st)); While st[1]=' 'do Delet (st,1,1); End; End.
تكليف : برنامه اي بنويسيد كه 100 رسته را از ورودي دريافت و در يك آرايه به طول 100 از نوع string بريزيد و به سؤالات زير جواب دهد. 1- تعداد كل كلمات 1- تعداد كل حروف 2- تعداد حروف صدا دار
ذخيره اطلاعات : Log file : فايلي است كه تمام تغييرات مربوط به يك محيط را ثبت ميكند فايلها : 1- متني text 2- ركوردي typed 3-بدون نوع 4-untyped
معرفي فايلهاي متني : Var
Text : نام فايل
نسبت دادن فايل :
; ('نام خارجي ,'نام فايل ) assign
مثال :
Assign(f,'c:\a1.dat.ddd');
باز كردن جهت خواندن
;( نام فايل)reset
باز كردن جهت نوشتن
; ( نام فايل)rewrite ) ___,نام فايل)readln ) ___,نام فايل)writeln ) نام فايل)close
تا close انجام نشود data ذخيره نميشود . نكته بسيار مهم : در هر يك از مسائلي كه در مورد فايلها مطرح ميشود مي بايستي به نحوي از يكي از تكنيكهاي نگهداري اطلاعات در حافظه اصلي استفاده نمود اين تكنيكها ممكن است استفاده از متغيرها و آرايه ها و ماتريسها و ودرختهاو...استفاده نمود ولي تنها با دو عمل خواندن و نوشتن به روي فايل كار انجام ميشود Update : ميخوانيم ولي دوباره ميريزيم سر جاش Append : بهش يك چيزي اضافه ميكنيم نكته : عمل rewrite باعث ميگردد چنانچه فايل وجود نداشته باشد ايجاد و چنانچه وجود دارد اطلاعاتش به طور كامل پاك شود. مثال : برنامه اي بنويسيد كه100 اسم را از ورودي دريافت و آنها را در يك فايل به نام a1.dat))بنويسد.
Var F:text;a:string; Begin Assign(f,'a1.dat'); Rewrite(f); For i:=1 to 100 do Readln(a); Writeln(f,a); End; Close(f); End.
مثال : برنامه اي بنويسيد كه فايل a1.dat را خوانده و به ما بگويد چند بار اسم ali تكرار شده است؟
Var A:text; B:string; Begin Assign(a,'a1.dat'); Reset(a); Sum:=0; For i:=1 to 00 do Begin Readln(a,b); If b='ali' then Sum:=sum+1; End; Close(a,b); End;
مثال : برنامه اي بنويسيد كه تعدادي اسم را كه آخرين آنها end است از ورودي دريافت و در يك فايل به نام aa.dat بريزد آنگاه فايل را بسته و قسمتهاي زير را به طور جداگانه انجام دهد. 1- تعداد حسنها بيستر است يا علي ها 2- چند اسم وجود دارد كه با حرف z شروع ميشود.
Var f:text; Name:string; Begin Assign(f,'aa.dat'); Rewrite(f); Readln(name); While name<> 'end' do Begin Writeln(f,name); Readln(name); End; Close(f); H:=1; A:=1; Z:=1; Reset(f); While not eof (f) do Begin Readln(f,name); If name='ali' then A:=a+1; If name ='hassan' then H:=h+1; End; Close(a); If h>a then writeln('h>a'); If h If h=a then writeln('h=a'); End; Close(f); Reset(f); While not eof (f) do Begin Readln(f,name); If name[i]='z' then Z;=z+1; End; Close(f); Writeln('sum of z is :'z); End.
تكليف : برنامه اي بنويسيد كه تعدادي نام را از ورودي دريافت و در يك فايل بريزد سپس فايل تشكيل شده را باز كرده و از روي اين فايل دو فايل ديگر تشكيل دهيد كه در يكي از آنها اسامي كه بين a تا z قرار گرفته اند ريخته و در فايل دوم كليه اسامي كه از v تا z هستند را بريزد.
Program test; Var Name : string; F,f1,f2:text; Begin Assign(f,'a.dat'); Rewrite(f); Writeln('enter a name '); Readln(name); While length(name)>0 do Begin Writeln(f,name); Writeln('enter a name'); Readln(name); End; Close(f); Reset(f); Assign(f1,'a1.dat'); Assign(f2,'a2.dat'); Rewrite(f1); Rewrite(f2); While not eof (f) do begin Readln(f,name); Case name[1] of 'a'..'u':writeln(f1,name); 'v'..'z':writeln(f2,name); end; end; close(f2); close(f1); close(f); end.
تكليف : برنامه اي بنويسيد كه نام دو فايل را از ورودي دريافت و از اطلاعات داخل اين دو فايل فايل سومي تشكيل دهد كه حاصل تركيب دو فايل قبل باشد.
var h,f,g:text; a:string; begin
writeln('enter first filename') ; readln(a); assign(h,a); writeln('enter second filename') ; readln(a); assign(f,a); reset(h); reset(f); assign(g,'out.dat'); rewrite(g); while not eof(h) do begin readln(h,a); writeln(g,a); end; while not eof(f) do begin readln(f,a); writeln(g,a); end; close(f); close(h); close(g); End.
تكليف :برنامه اي بنويسيد كه در ضمن عمل merge دو فايل مرتب شده را با يكديگر تركيب و يك فايل مرتب شده به دست آوريم.
پایان |
|
| هادی بهارلو |
سه شنبه بیستم فروردین 1387 |
 |
|
 |
آموزش پاسکال بخش سوم |
|
آموزش پاسکال بخش سوم
مثال : برنامه اي بنويسيد كه دو عدد را از ورودي دريافت و طبق جدول زير نسبت به مقدار آن واكنش نشان دهد
3 2 1 a B+...+3+2+1 1..b b..1 واكنش
Begin Writeln (' enter a,b :'); Readln(a,b); Case a of 1:begin for i:=1 to b do write(i); end; 2:begin or I;=b downto 1 do write(i); end; 3:begin sum:=0; for i:=1 to b do sum:=sum+I; write(sum); end; end.
آرايه ها : آرايه ها به عناصري اتلاق ميشود كه با يك نام تعدادي محل از حافظه را كنترل كند براي تشخيص محلها از انديس استفاده ميشود انواع آرايه ها : 1- آرايه هاي يك بعدي 2- عناصر دو بعدي 3- آرايه هاي سه بعدي
تعريف آرايه ها : var نوع of ]انديس پايان..انديس شروع: array [ نام آرايه نوع متغير آرايه : متغير آرايه خواندن آرايه : مثال : برنامه اي بنويسيد كه نمرات 100 دانش آموز را از ورودي دريافت و در يك آرايه بريزد.
Var A:array[1..100] of real; Begin For i:=1 to 100 do Readln(a[i]);
مثال : برنامه اي بنويسيد كه نمرات 100 دانش آموز را از ورودي دريافت و 50 تاي اول را چاپ كند سپس تعداد نمرات 20 را مشخص كند.
Var A:array[1..100] of real; Begin For I;=1 to 100 do Writeln('enter no(',I,')'); Readln(a[i]); For i:=1 to 50 do Writeln(a[i]); S:=0; For i:=1 to 100 do If i:=1 to 100 do If a[i]=20 then S:=s+1; Writeln(s); End.
پيدا كردن max,min عنصر اول =min حلقه براي گردش در آرايه Min < عنصر فعلي if عنصر فعلي min := Write(min); مثال : برنامه اي بنويسيد كه با دريافت نمرات 100 دانش آموز بالاترين و پايين ترين نمره را در بين اين 100 نفر پيدا كند.
Var A:array[1..100] of real; I:integer; Begin For i:=1 to 100 do Readln(a[i]); Min:=a[1]; Max:=a[1]; For i:=2 to 100 do Begin If a[1]< min then Min:=a[i]; If a[i]>max then Max := a[i]; End; Writeln('max is :',max,'min is :',min); End.
مثال : برنامه اي بنويسيد كه با دريافت 100 اسم به ما بگويد تعداد تكرار اسم ali چند بار است وآيا اسم hassan بيشتر ذكر شده يا اسم reza ؟
Var A:array [1..100] of string; Begin For i:=1 to 100 do Readln(a[i]); Ali:=0; Reza:=0; Hassan:=0; For i:=1 to 100 do Begin If a[i]='ali' then Ali:=ali+1; If a[i]='reza' then Reza:=reza+1; If a[i]='hassan' then Hassan:=hassan+1; Endd Writeln(ali is :',ali); If reza>hassan then Writeln('reza') Else Writeln('hassan'); End.
مثال : برنامه اي بنويسيد كه با دريافت نام و نمره 100 دانش آموز تنبل ترين فرد كلاس را مشخص كند.
Var Name:array[1..100] of string; No:array[1..100] of real; Begin For i:=1 to 100 do Begin Readln(name[i]); Readln(no[i]); End; Min:=no[1]; Namemin:=name[1]; For i:=2 to 100 do begin If no[i] Begin Min:=no[i]; Namemin:=name[i]; Writeln(namemin); End.
آرايه هاي دو بعدي: وقتي از آرايه دوبعدي استفاده ميكنيم بايد از دو حقه for استفاده كنيم. مثال : برنامه اي بنويسيد كه نمرات 4 كلاس كه هر يك 20 دانش آموز دارد را از ورودي دريافت وتنبل ترين فرد را در اين 4 كلاس مشخص كند.
Var A:array[1..20,1..4] of real; Begin For i:=1 to 4 do Begin For j:=1 to 20 do Readln(a[j,i]); End; Min:=a[1,1]; For i:=1 to 4 do For j:=1 to 20 do If a[j,i]< min then Min:=a[j,i]; Writeln(min); End.
مثال : در يك آرايه 100*20دوهزار كاراكتر نگهداري ميشود برنامه اي بنويسيد كه تعداد تكرار حرف A را با a مقايسه كند و همچنين به ما بگويد آيا كاراكتر z در اين ماتريس وجود دارد ؟
Var A:array[1..20,1..100] of character; Bool:Boolean; B,b1:integer; Begin For i:=1 to 100 do For j:=1 to 20 do If a[I,j]='A' then B:=b+1; If a[I,j]='a' then B1:=b1+1; If a[I,j]='z' then Bool:=true; End; If b>b1 then writeln('A>a'); If b If b=b1 then writeln('A=a'); If true then writeln('''z''exist'); End.
تكليف : ميخواهيم نام و نمره تعدادي دانش آموز يك كلاس را از ورودي دريافت كنيم و مشخص كنيم كه تنبل ترين و زرنگ ترين فرد كلاس كيست.چند نفر نمره زير 10 گرفتند؟نام كساني كه نمره آنها در بازه 17 تا 15 مي باشد ب همراه نمره آنها چاپ شود آخرين نفر نامش end است حداكثر تعداد دانش آموزان 100 نفر است.
Var
a:array [1..100] of string ; b:array[1..100] of real; begin i:=1; read(a[i]); while a[i]<>'end' do begin readln(b[i]); i:=i+1; readln(a[i]); end; j:=i-1; min:=a[1]; max:=a[1]; for i:= 2 to j do begin if b[i] >max then begin max:=b[i]; name:a[i]; end; end writeln(name); count:=0; for i:=1 to j do if b[i]<=10 then count:=count+1; writeln(count); for i:=1 to j do if (b[i]<17) and (b[i]>15) then write(b[i],a[i]); end.
تكليف : برنامه اي بنويسيد كه حاصل اين عبارت را حساب كند. i/i!=1/1!+2/2!+3/3!+4/4!+5/5! N!= 1*2*3*4*…*n
Begin Sum:=0; For n:=1 to 5 do Begin For m:=1 to n do F:=f*m; Sum:=sum+n/f; End; Writeln(sum); End.
تكليف : برنامه اي بنويسيد كه نمرات 80 دانش آموز را كه در چهار كلاس دسته بنده شده اند را از ورودي دريافت كند سپس به سوالات زير جواب دهد. 1- معدل هر يك از كلاسها 2- نمره تنبل ترين و زرنگترين شخص در هر كلاس به طور جداگانه
Var A:array [1..4,1..20] of real; Begin For i:=1 to 4 do For j:=1 to 20 do Begin Writeln('please enter nomreh'); Readln(a[I,j]); End; For i:=1 to 4 do Begin Sum:=0 ; For j:=1 to 20 do Begin Sum:=a[I,j]+sum; End; Writeln(sum/20,'average of this class'); End; For i:=1 to 4 do Begin Max :=a[1,1]; Min:=a[1,1]; For j:=2 to 20 do Begin If a[I,j]>max then Max :=a[I,j]; End; Writeln(I,min,max); End; End.
- String : String آرايه اي از كاراكترهاست .اغلب لازم است كاراكترهايي در رشته موجود درج شوندو يا كاراكترهايي به جاي بخشي از رشته نوشته شوند , زيررشته اي در رشته جستجو گردد و يا دو رشته با هم الحاق شوند. رشته تهي : طول رشته ثابت نيست و با داداه هايي كه در آن ذخيره شده است مشخص مي گردد.كاراكترهايي كه در رشته قرار مي گيرد از حداكثر طولي كه براي آن تعيين ميشود بيشتر نخواهد بود. اگر name رشته كاراكتري باشد دستور زير name را به رشته تهي تبديل ميكند:
Name:='';
تبديل رشته به اعداد : در پاسكال زير برنامه هايي وجود دارند كه به آساني ميتوانند رشته ها را پردازش كنند. زيربرنامه val رشته عددي را گرفته به مقدار عددي تبديل ميكند. رشته عددي رشته اي است كه حاوي كاراترهاي '0' تا '9' و نقطه مميز باشد مثل '12.5' و'13.5' زيربرنامه val به صورت زير به كار ميرود.
Val (st,number,error)
St رشته اي است كه بايد به عدد تبديل شود و number متغيري است كه رشته تبديل شده به عدد در آن قرار ميگيرد. چنانچه در رشته st كاراكتر نا معتبري (كاراكترهاي غير از( '0' تا '9' و'.' ) , محل وجود آن كاراكتر در پارامتر error قرار ميگيرد. اگر error برابر با صفر باشد معنايش اينست كه كاراكتر نا معتبري وجود ندارد. اگر number از نوع صحيح باشد st به مقدار صحيح و اگر number از نوع اعشاري باشد st به مقدار اعشاري تبديل ميشود . مثال زير را در نظر بگيريد:
Var st :string; Num,e:integer; St:='352'; Val (st,num,e);
مقدار 352 در متغير num ومقدار صفر در متغير e قرار ميگيرد اكنون دستورات زير را در نظر بگيريد :
St:='35#'2; Val (st,num,e);
با اجراي دستور val به دليل وجود كاراكتر' # ' كه كاراكتر نامعتبري در اعداد است عدد 2 در متغير e قرار ميگيرد و معنايش اينست كه كاراكتر شماره 2 ( شماره گذاري از صفر شروع ميشود) نامعتبر است و عمل تبديل صورت نميگيرد و مقدار num تعريف نشده است. تبديل عدد به رشته : براي تبديل مقدار عددي به رشته عددي از زيربرنامهstr استفادهميشود و به صورت زير به كار ميرود:
Str (number : format,numstring)
با اين دستور مقداري كه در number قرار دارد به رشته اي به طول format تبديل ميشود و در رشته numstring قرار ميگيرد . دستورات زير را در نظر بگيريد:
Var x:integer; St:string; X=352; Str(x:5,st);
با اجراي اين دستور مقدار 352 به رشته '352' تبديل شده در st قرار ميگيرد
پایان |
|
| هادی بهارلو |
سه شنبه بیستم فروردین 1387 |
 |
|
 |
كامل ترين مرجع خطاهاي مودم به فارسی |
|
به نام تنها برنامه نویس هستی
كامل ترين مرجع خطاهاي مودم به فارسی
600 . اگر سيستم در حال شماره گيري باشد و دوباره شماره گيري نماييد اين خطا نمايش داده مي شود .
601 . راه انداز Port بي اعتبار مي باشد .
602 . Port هم اكنون باز مي باشد براي بسته شدن آن بايد كامپيوتر را مجددا راه اندازي نمود.
603 . بافر شماره گيري بيش از حد كوچك است .
604 . اطلاعات نادرستي مشخص شده است .
605 . نمي تواند اطلاعات Port را تعيين كند .
606 . Port شناسايي نمي شود .
607 . ثبت وقايع مربوط به مودم بي اعتبار مي باشد .
608 . راه انداز مودم نصب نشده است .
609 . نوع راه انداز مودم شناسايي نشده است .
610 . بافر ندارد .
611 . اطلاعات مسير يابي غير قابل دسترس مي باشد .
612 . مسير درست را نمي تواند پيدا نمايد .
613 . فشرده سازي بي اعتباري انتخاب شده است .
614 . سرريزي بافر .
615 . Port پيدا نشده است .
616 . يك درخواست ناهمزمان در جريان مي باشد .
617 .Port يا دستگاه هم اكنون قطع مي باشد .
618 . Port باز نمي شود. ( وقتي رخ مي دهد كه يك برنامه از Port استفاده كند ).
619 . Port قطع مي باشد (وقتي رخ مي دهد كه يك برنامه از Port استفاده كند).
620 . هيچ نقطه پاياني وجود ندارد .
621 . نمي تواند فايل دفتر راهنماي تلفن را باز نمايد .
622 . فايل دفتر تلفن را نمي تواند بارگذاري نمايد .
623 . نمي تواند ورودي دفتر راهنماي تلفن را بيابد .
624 . نمي توان روي فايل دفتر راهنماي تلفن نوشت .
625 . اطلاعات بي اساسي در دفتر راهنماي تلفن مشاهده مي شود .
626 . رشته را نمي تواند بارگذاري كند .
627 . كليد را نمي تواند بيابد .
628 . Port قطع شد .
629 . Port بوسيله دستگاه راه دور قطع مي شود. (درست نبودن راه انداز مودم با برنامه ارتباطي).
630 . Port به دليل از كارافتادگي سخت افزار قطع مي شود .
631 . Port توسط كاربر قطع شد .
632 . اندازه ساختار داده اشتباه مي باشد .
633 . Port هم اكنون مورد استفاده مي باشد و براي Remote Access Dial-up پيكر بندي نشده است (راه انداز درستي بر روي مودم شناخته نشده است) .
634 . نمي تواند كامپيوتر شما را روي شبكه راه دور ثبت نمايد .
635 . خطا مشخص نشده است .
636 . دستگاه اشتباهي به Port بسته شده است .
637 . رشته ( string ) نمي تواند تغيير يابد .
638 . زمان درخواست به پايان رسيده است .
639 . شبكه ناهمزمان قابل دسترس نيست .
640 . خطاي NetBIOS رخ داده است .
641 . سرور نمي تواند منابع NetBIOS مورد نياز براي پشتيباني سرويس گيرنده را بدهد .
642 . يكي از اسامي NetBIOS شما هم اكنون روي شبكه راه دور ثبت مي گردد ، ( دو كامپيوتر مي خواهند با يك اسم وارد شوند ) .
643 .Dial-up adaptor در قسمت network ويندوز وجود ندارد .
644 . شما popus پيغام شبكه را دريافت نخواهيد كرد .
645 . Authentication داخلي اشكال پيدا كرده است.
646 . حساب در اين موقع روز امكان log on وجود ندارد .
647 . حساب قطع مي باشد .
648 . اعتبار password تمام شده است .
649 . حساب اجازه Remote Access را ( دستيابي راه دور ) را ندارد . ( به نام و كلمه عبور اجازه dial-up داده نشده است ) .
650 . سرور Remote Access ( دستيابي راه دور ) پاسخ نمي دهد .
651 . مودم شما ( يا ساير دستگاههاي اتصال دهنده ) خطايي را گزارش كرده است . ( خطا از طرف مودم بوده است ) .
652 . پاسخ نا مشخصي از دستگاه دريافت مي گردد .
653 . Macro (دستورالعمل كلان). ماكرو خواسته شده توسط راه انداز در ليست فايل .INF موجود نمي باشد .
654 . يك فرمان يا يك پاسخ در قسمت .INF دستگاه به يك ماكرو نامشخص اشاره مي نمايد .
655 . دستور العمل (پيغام) در قسمت فايل .INF دستگاه مشاهده نمي شود .
656 . دستورالعمل (ماكرو) (default off) در فايل .INF دستگاه شامل يك دستور العمل نامشخص مي باشد .
657 . فايل .INF دستگاه نمي تواند باز شود .
658 . اسم دستگاه در فايل .INF دستگاه يا در فايل .INI رسانه بيش از حد طولاني مي باشد .
659 . فايل .INI رسانه به نام ناشناخته يك دستگاه اشاره مي نمايد .
660 . فايل .INI رسانه براي اين فرمان پاسخي را ندارد .
661 . فايل .INF دستگاه فرمان را از دست داده است .
662 . تلاش براي قرار دادن يك ماكرو ليست نشده در قسمت فايل .INF صورت نگرفته است.
663 . فايل .INI رسانه به نوع ناشناخته يك دستگاه اشاره مي نمايد .
664 . نمي تواند به حافظه اختصاص دهد .
665 . Port براي Remote Access (دستيابي راه دور) پيكر بندي نشده است.
666 . مودم شما (ياساير دستگاههاي اتصال دهنده) در حال حاضر كار نمي كنند .
667 . فايل .INI رسانه را نمي تواند بخواند .
668 . اتصال از بين رفته است .
669 . پارامتر به كار برده شده در فايل .INI رسانه بي اعتبار مي باشد .
670 . نمي تواند نام بخش را از روي فايل .INI رسانه بخواند .
671 . نمي تواند نوع دستگاه را از روي فايل .INI رسانه بخواند .
672 . نمي تواند نام دستگاه را از روي فايل .INI رسانه بخواند .
673 . نمي تواند كاربر را از روي فايل .INI رسانه بخواند .
674 . نمي تواند بيشترين حد اتصال BPS را از روي فايل .INI رسانه بخواند .
675 . نمي تواند بيشترين حد BPS حامل را از روي فايل .INI رسانه بخواند .
676 . خط اشغال مي باشد .
677 . شخص به جاي مودم پاسخ مي دهد .
678 . پاسخي وجود ندارد .
679 . نمي تواند عامل را پيدا نمايد .
680 . خط تلفن وصل نيست .
681 . يك خطاي كلي توسط دستگاه گزارش مي شود .
682 . Writing section name دچار مشكل مي باشد .
683 . Writing device type با مشكل روبرو شده است .
684writing device name .684 با مشكل روبرو مي باشد .
685 . Writing maxconnectbps مشكل دارد .
686 . Writing maxcarrierBPS دچار مشكل مي باشد .
687 . Writing usage با مشكل مواجه است .
688 . Writing default off دچار مشكل مي باشد .
689 . Reading default off با مشكل مواجه است .
690 . فايل INI خالي ست .
691 . دسترسي صورت نمي پذيرد زيرا نام و كلمه عبور روي دامين بي اعتبار مي باشد
692 . سخت افزار در درگاه يا دستگاه متصل شده از كار افتاده است .
693 . Binary macro با مشكل مواجه مي باشد .
694 . خطاي DCB يافت نشد .
695 . ماشين هاي گفتگو آماده نيستند .
696 . راه اندازي ماشين هاي گفتگو با مشكل روبرو مي باشد .
697 . Partial response looping با مشكل روبرو مي باشد .
698 . پاسخ نام كليدي در فايل INF . دستگاه ، در فرمت مورد نظر نمي باشد .
699 . پاسخ دستگاه باعث سر ريزي بافر شده است .
700 . فرمان متصل به فايل INF . دستگاه بيش از حد طولاني مي باشد .
701 . دستگاه به يك ميزان BPS پشتيباني نشده توسط گرداننده com تغيير مي يابد .
702 . پاسخ دستگاه دريافت مي گردد زماني كه هيچكس انتظار ندارد .
703 . در فعاليت كنوني مشكلي ايجاد شده است .
704 . شماره اشتباه callback .
705 . مشكل invalid auth state .
706 . Invalid auth state دچار مشكل مي باشد .
707 . علامت خطاياب . x. 25
708 . اعتبار حساب تمام شده است .
709 . تغيير پسورد روي دامين با مشكل روبرو مي باشد .
710 . در زمان ارتباط با مودم شما خطاهاي سري يش از حد اشباع شده مشاهده مي گردد.
711 . Rasman initialization صورت نمي گيرد گزارش عملكرد را چك كنيد
712 . درگاه Biplex در حال اجرا مي باشد . چند ثانيه منتظر شويد و مجددا شماره بگيريد .
713 . مسيرهاي ISDN فعال در خط اصلي قطع مي باشد .
714 . كانال هاي ISDN كافي براي ايجاد تماس تلفني در دسترس نمي باشند .
715 . به دليل كيفيت ضعيف خط تلفن خطاهاي فراواني رخ مي دهد .
716 . پيكر بندي remote access IP غير قابل استفاده مي باشد .
717 . آدرسهاي IP در static pool remote access IP وجود ندارد .
718 . مهلت بر قراري تماس PPP پايان پذيرفته است .
719 . PPP توسط دستگاه راه دور پايان مي يابد .
720 . پروتكل هاي كنترلppp پيكر بندي نشده اند .
721 . همتاي PPP پاسخ نمي دهد .
722 . بسته PPPبي اعتبار مي باشد .
723 . شماره تلفن از جمله پيشوند و پسوند بيش از حد طولا ني مي باشد .
724 . پروتكل IPXنمي تواند بر روي درگاه dial –out نمايد زيرا كامپيوتر يك مسير گردان IPX مي باشد .
725 . IPX نمي تواند روي port (درگاه) dial – in شود زيرا مسير گردان IPX نصب نشده است .
726 . پروتكل IPX نمي تواند براي dial – out ، روي بيش از يك درگاه در يك زمان استفاده شود .
727 . نمي توان به فايل TCPCFG . DLL دست يافت .
728 . نمي تواند آداپتور IP متصل به remote access را پيدا كند .
729 . SLIP استفاده نمي شود مگر اينكه پروتكل IP نصب شود .
730 . ثبت كامپيوتر كامل نمي باشد .
731 . پروتكل پيكر بندي نمي شود .
732 . توافق بين PPP صورت نگرفته است .
733 . پروتكل كنترل PPP براي پروتكل اين شبكه ، در سرور موجود نمي باشد .
734 . پروتكل كنترل لينك PPP خاتمه يافته است .
735 . آدرس مورد نياز توسط سرور رد مي شود .
736 . كامپيوتر راه دور پروتكل كنترل را متوقف مي نمايد .
737 . نقطه برگشت ( LOOPBACK DETECTED ) شناسايي شد .
738 . سرور آدرس را مشخص نمي كند .
739 . سرور راه دور نمي تواند از پسورد ENCRYPTED ويندوز NT استفاده نمايد.
740 . دستگاه هاي TAPI كه براي remote access پيكر بندي مي گردند به طور صحيح نصب و آماده نشده اند .
741 . كامپيوتر محلي از encryption پشتيباني نمي نمايد .
742 . سرور راه دور از encryption پشتيباني نمي نمايد .
743 . سرور راه دور به encryption نياز دارد .
744 . نمي تواند شماره شبكه IPX را استفاده نمايد كه توسط سرور راه دور در نظر گرفته شده است گزارش وقايع را باز بيني نماييد .
745 . يك فايل مهم و ضروري آسيب ديده است . Dial – up networking را مجددا نصب نماييد .
751 . شماره callback شامل يك كاراكتر بي اعتبار مي باشد . كاراكترهاي زير فقط مجاز دانسته مي شوند : Space, T, P, W, (,), - , @. 0تا9 .
752 . در زمان پر دازش script يك خطاي نحوي صورت مي گيرد .
753 . اتصال نمي تواند قطع شود زيرا توسط مسير گردان چند پروتكلي ايجاد شده است .
754 . سيستم قادر به يافتن bundle چند انصالي نمي باشد .
755 . سيستم قادر به اجراي شماره گيري خودكار نمي باشد زيرا اين ورودي يك شماره گير عادي را دارد .
756 . اين اتصال هم اكنون در شماره گيري مي باشد .
757 . خدمات دستيابي راه دور خود به خود آغاز نمي شوند اطلا عات بيشتري در گزارش وقايع در اختيار شما قرار مي گيرد .
758 . اشتراك اتصال اينترنت هم اكنون روي اين اتصال ميسر مي گردد .
760 . در زمان فراهم آوري امكانات مسير يابي ، اين خطا رخ مي دهد .
761 . در زمان فراهم شدن اشتراك اتصال اينترنت براي اين اتصال اين خطا ايجاد مي گردد.
763 . اشتراك اتصال اينترنت فعال نمي باشد . دو اتصال LAN و يا بيشتر به علاوه اتصالي كه با اين LANها مشترك شده است وجود دارد .
764 . دستگاه كارت خوان smartcard نصب نيست .
765 . اشتراك اتصال اينترنت ميسر نمي باشد . اتصال LAN با آدرس IP در حال حاضر پيكر بندي مي شود كه براي آدرس گذاري اتوماتيك IP مورد نياز مي باشد .
766 . سيستم نمي تواند هيچ گواهي اي را بيابد .
767 . اشتراك اتصال اينترنت ميسر نمي گردد اتصال LAN بر روي شبكه شخصي انتخاب مي گردد كه بيش از يك آدرس IP را پيكر بندي كرده است . اتصال LANرا با يك آدرسIP مجزا ، مجددا پيكر بندي نماييد قبل از اينكه اشتراك اتصال اينترنت صورت گيرد .
768 . به دليل رمز دار نكردن داده ها اتصال صورت نمي پذيرد .
769 . مقصد مشخصي قابل دست يابي نمي باشد .
770 . دستگاه راه دور تلا ش براي ايجاد اتصال را نمي پذيرد .
771 . اقدامات اتصال صورت نمي گيرد زيرا شبكه اشغال مي باشد .
772 . سخت افزار شبكه كامپيوتر راه دور با نوع تلفن مورد نياز سازگاري ندارد .
773 . امكان ايجاد اتصال موثر نمي باشد زيرا شماره مقصد تغيير كرده است .
774 . به دليل از كار افتارگي موقت ، اتصال صورت نمي گيرد .
775 . مكالمه تلفني توسط كامپيوتر راه دور متوقف شد .
776 .مكالمه تلفني نمي تواند وصل گردد زيرا مقصد خواسته است كه ويژگي را حفظ نمايد .
777 . اتصال صورت نمي گيرد زيرا مودم ( يا ساير وسايل ارتباط دهنده ) روي كامپيوتر راه دور دچار مشكل مي باشند .
778 . تاييد هويت سرور غير ممكن مي باشد .
779 . براي بر قراري dial – out اين اتصال بايد از smartcard استفاده نماييد .
780 . عمل انجام شده براي اين اتصال بي اعتبار مي باشد .
781 . تلاش براي رمز گذاري (encryption) صورت نمي گيرد زيرا گواهي معتبري يافت نمي گردد .
782 . ترجمه آدرس شبكه (NAT) در حال حاضر به عنوان يك پروتكل مسير يابي نصب مي گردد و بايد قبل از اينكه اشتراك اتصال اينترنت فراهم گردد حذف شود .
783 . اشتراك اتصال اينترنت ميسر نمي باشد . اتصال LAN كه به عنوان شبكه شخصي انتخاب مي گردد يا فراهم نمي شود و يا از شبكه قطع مي باشد . لطفا قبل از فراهم شدن اشتراك اتصال اينترنت از اتصال آداپتور LAN مطمئن شويد .
784 . در حالي كه اين اتصال را در زمان log on استفاده مي كنيد شما نمي توانيد شماره بگيريد زيرا اين اتصال براي استفاده از نام كاربري پيكر بندي شده است كه متفاوت از نام كاربر روي smartcard مي باشد . چنانچه بخواهيد آنرا در زمان log on استفاده نماييد بايد براي استفاده از (username) روي كارت smart آنرا پيكربندي كنيد .
785 . در صورت استفاده از اين اتصال در زمان log on شما نمي توانيد شماره گيري نماييد زيرا براي استفاده از يك smartcard پيكر بندي نشده است . چنانچه بخواهيد آنرا در زمان log on به كار ببريد بايد امكانات اين اتصال را تصحيح و آماده نماييد به طوري كه smartcard استفاده نمايد .
786 . مبادرت به اتصال L2TP صورت نمي پذيرد زيرا هيچ گواهينامه معتبري براي تصديق (authentication) امنيت روي كامپيوتر شما وجود ندارد .
787 . اتصال L2TP غير ممكن است زيرا لايه امنيتي نمي تواند كامپيوتر راه دور را authentication نمايد .
788 . تلاش براي ايجاد اتصال L2TP بي نتيجه مي باشد زيرا لايه امنيتي نمي تواند پارامترهاي سازگار با كامپيوتر راه دور را فراهم نمايد .
789 . تلاش براي اتصال L2TP فراهم نمي گردد زيرا لايه امنيتي با يك خطاي پردازشي در طول سازگاري با كامپيوتر راه دور مواجه است .
790 . تلاش براي اتصال L2TP صورت نمي گيرد زيرا تاييد گواهينامه بر روي كامپيوتر راه دور ميسر نمي باشد .
791 . اتصال L2TP ميسر نمي باشد زيرا خط مشي امنيتي (security policy) براي اتصال يافت نمي شود .
792 . اتصال L2TP صورت نمي گيرد زيرا زمان توافق امنيتي به پايان رسيده است .
793 . اتصال L2TP ميسر نمي گردد زيرا اين خطا رخ مي دهد در حالي كه در مورد امنيت به توافق مي رسند .
794 . ويژگي RADIUS ا ين كاربر PPP نمي باشد .
795 . ويژگي RADIUS نوع تونلي براي اين كاربر ، نادرست مي باشد .
796 . ويژگي RADIUS نوع خدمات براي اين كار نه قالب بندي مي شود و نه callback قالب بندي مي شود .
797 . مودم پيدا نشد .
798 . گواهينامه اي شناسايي نمي شود كه بتواند پروتكل قابل ارائه استفاده شود .
799 . اشتراك اتصال اينترنت ميسر نمي گردد زيرا دو IP شبيه به هم در شبكه وجود دارد . IC ها به ميزباني نيازمند مي باشند كه براي استفاده از 192 ، 168 ، 0 ، 1 پيكر بندي شده است . مطمئن شويد كه هيچ سرويس گيرنده ديگري براي استفاده از 192 ، 168 ، 0 ، 1 پيكر بندي نشده است .
800 . قادر به ايجاد اتصال VPN نمي باشد . سرويس دهنده VPN در دسترس نمي باشد و يا ممكن است پارامترهاي امنيتي براي اتصال به درستي پيكربندي نشده باشند .
امیدوارم بهره کافی برده باشید |
|
| هادی بهارلو |
جمعه شانزدهم فروردین 1387 |
 |
|
 |
TAPI چيست ؟ |
|
آموزش ویژوال بیسیک
TAPI چيست ؟
TAPI يا Telephony API يک کتابخانه استاندارد برای کار با مودم و نوشتن برنامه های تلفنی می باشد . برای نمونه می توان از برنامه های Phone Dialer ( شماره گير تلفن ) ، برنامه شبکه سازی تلفنی ( Dialup Networking ) ، برنامه تشخيص پالس مودم برای ضبط اطلاعات وارد شده از طرف کاربران و کاربردهای ديگر در اين زمينه نام برد . اين کتابخانه به شما کمک کمک می کند تا بدون درگير شدن با برنامه نويسی سخت افزار مودم و درايور آن بطور مستقيم بتوانيد برنامه های کاربردیي در اين زمينه بنويسيد . مروری بر Microsoft Telephony :
Telephony امکان مجتمع سازی کامپيوترها با دستگاههای ارتباطی و شبکه ها را فراهم نموده است . معمولاً دستگاه ارتباطی يک مودم و خط ارتباطی نيز شبکه PSTN ( شبکه عمومی تلفن سوئيچينگ ) می باشد . برخی از کاربردهای Telephony عبارتند از :
۱ - کنفرانسهای مالتی مديا بصورت Multicast ۲ - VoIP ۳ - مرکز پاسخ گويي اتوماتيک ۴ - تماس تلفنی از طريق کامپيوتر روی شبکه PSTN
دياگرام زير معماری Microsoft Telephony را نشان می دهد : برنامه های TAPI :
برای نوشتن برنامه های کاربردی با استفاده از TAPI بايستی ابتدا در مورد سطح سرويسی که می خواهيم ارائه دهيم تصميم گيری کنيم . برای مثال برای نوشتن يک برنامه شماره گير تلفن نياز به استفاده کامل از TAPI نيست و می توان از قابليتهای خود ويندوز در اين زمينه استفاده کرد ( Assisted Telephony ) . در بخشهای بعدی در مورد سطوح مختلف سرويس در TAPI بيشتر صحبت خواهم کرد . دومين مطلبی که بايد مورد توجه قرار داد اينست که می خواهيم از TAPI 2.x استفاده کنيم يا از TAPI 3.x . تفاوت ايندو آنست که TAPI ورژن ۲ يک API برمبنای C است در حاليکه ورژن ۳ آن بر مبنای تکنولوژی COM می باشد . در بخشهای بعدی مطالب بيشتری در مورد تفاوتهای اين دو نسخه بيان خواهم کرد . بخشهای اصلی يک برنامه کامل TAPI عبارتند از :
۱ - TAPI Initialization : شامل load کردن TAPI dll ، اتصال به TAPI Server ، مذاکره در مورد ورژن TAPI و برپاسازی سيستم اطلاع رسانی event می باشد .
۲ - Session Control : مقداردهی اوليه ، دريافت و کنترل تماسها
۳ - Device Control : دريافت و تنظيم اطلاعات دستگاه
۴ - Media Control : تشخيص و يا توليد تونها و ارقام ، کنترل stream
۵ - TAPI Shutdown : آزاد سازی منابع مقداردهی اوليه TAPI :
عملکرد درست اجزای TAPI نياز به برپاسازی محيط ارتباطی روی کامپيوتر مورد نظر دارد . مراحل اين امر عبارتند از :
۱ - نصب TAPI : زمانيکه سخت افزار و يا نرم افزار برای اولين بار به کامپيوتر اضافه می شود انجام می گيرد . جزئيات کار به سيستم عامل و نرم افزار بستگی دارد .
۲ - مقداردهی ابتدائی : ساخت اشيا و مسيرهای ارتباطی
۳ - مذاکره در مورد ورژن TAPI : برای اطمينان از اينکه اجزای TAPI قادر به تبادل داده ها باشند .
۴ - استخراج اطلاعات منابع : بدست آوردن اطلاعاتی در مورد دستگاهی که می توان از آن در برنامه TAPI مورد نظرمان استفاده نمود .
۵ - Event notification : برپاسازی سيستم اطلاع رسانی event مقداردهی اوليه TAPI در ويژوال بيسيک :
از منوی Project گزينه References را انتخاب کرده و از ليست مربوطه مورد Microsoft TAPI 3.0 Type Library را انتخاب کنيد . حال وارد بخش کد نويسی فرمتان شويد و متغير objTAPI را بصورت زير تعريف کنيد :
Dim objTapi As TAPI
سپس در بخش مربوط به Form Load شی objTAPI را بصورت زير ايجاد می کنيم :
Set objTapi = New TAPI
همانطور که در بخشهای قبلی گفته شد ، قبل از فراخوانی هر تابع TAPI ابتدا بايستی آنرا مقداردهی اوليه کنيم . برای مقداردهی اوليه کردن شی TAPI عبارت زير را بنويسيد :
Call objTapi.Initialize
انتخاب يک آدرس : کد زير نشان می دهد که چگونه می توان با استفاده از شی TAPI در ويژوال بيسيک منابع تلفنی در دسترس را برای يک آدرس که بتواند يک مجموعه مشخص از نيازها را مديريت کند ، بررسی کرد . توجه داشته باشيد که قبل از انجام اين کار بايستی عمل مقداردهی اوليه TAPI را که در بخش قبل ررسی شد ، انجام دهيد .
نکته : در کد زير عمل error checking انجام نگرفته است و برای استفاده از کد زير در برنامه های واقعی بايستی بخش بررسی خطا را به آن اضافه کنيد . ۱ - تعريف يک شی آدرس و يک شی مجموعه آدرس :
Dim gobjAddress As ITAddress Dim objCollAddresses As ITCollection
۲ - تنظيم شی objCollAddress بعنوان يک مجموعه آدرس از شی objTapi :
Set objCollAddresses = objTapi.Addresses
۳ - پيدا کردن آدرسی که بتواند از واسط مورد نظر ما پشتيبانی کند :
bFound = False For indexAddr = 1 To objCollAddresses.Count Set objCrtAddress = objCollAddresses.Item(indexAddr)x Set objMediaSupport = objCrtAddress Set objAddressCapabilities = objCrtAddress
If objMediaSupport.QueryMediaType( nSelectedType ) x bFound = True End If
Set objAddressCapabilities = Nothing Set objMediaSupport = Nothing Set objCrtAddress = Nothing
If bFound = True Then Exit For Next indexAddr
در صورتيکه آدرس مورد نظزر پيدا شود برنامه از حلقه خارج شده و gobjAddress يک آدرس قابل استفاده خواهد بود :
Set gobjAddress = objcollAddresses.Item(indexAddr)x
انجام Event Handling در TAPI :
کد زير شامل يک event handler ساده برای TAPI ، رجيستر کردن واسط event ، تنظيم فيلتر event و رجيستر کردن تمام فراخوانيهای دادن اخطار است . هدف اصلی از اين کد اينست که مطمئن شويم بخشی از TAPI که event ها را دريافت می کند پردازشی را قبل از انتقال به بخشهای ديگر انجام دهد .
تعاريفها :
Dim WithEvents gobjTapiWithEvents As TAPI Attribute gobjTapiWithEvents.VB_VarHelpID = -1 Dim glRegistrationToken As Long
Const TAPI3_CALL_EVENTS =TE_CALLMEDIA Or TE_CALLNOTIFICATION Or TE_CALLSTATE
تنظيم eventfilter بصورتيکه تمام event های تعريف شده برای TAPI را بپذيرد :
objTapi.EventFilter = TAPI3_CALL_EVENTS
رجيستر کردن event ها :
Set gobjTapiWithEvents = objTapi Dim fOwner As Boolean, fMonitor As Boolean Dim lMediaTypes As Long, lCallbackInstance As Long
fOwner = True fOwner = True fMonitor = False lMediaTypes = TAPIMEDIATYPE_AUDIO lCallbackInstance = 1
glRegistrationToken = gobjTapi.RegisterCallNotifications(gobjAddress,fMonitor, fOwner,lMediaTypes,lCallbackInstance)x
انتخاب يک ترمينال :
+ قبل از اينکه يک ترمينال را برای برقراری ارتباط انتخاب کنيد بايستی TAPI Initialization و عمل انتخاب آدرس را انجام داده باشيد .
ابتدا يک متغير از نوع ITBasicCallControl ( واسط کنترل تماس ) تعريف می کنيم :
Dim objCallControl As ITBasicCallControl Set objCallControl = gobjReceivedCallInfo
سپس يک متغير از نوع ITTerminalSupport ( کوئری از شی آدرس ) تعريف می کنيم :
Dim objTerminalSupport As ITTerminalSupport Set objTerminalSupport = gobjAddress
سپس متغير ترمينال را تعريف کرده و توسط شی objTerminalSupport يک ترمينال را برای آن استخراج می کنيم :
Dim objTerminal As ITTerminal Set objTerminal = objTerminalSupport.GetDefaultStaticTerminal(lMediaType, dir)x
در اينجا ديگر نيازی به شی objTerminalSupport نيست بنابراين آنرا آزاد می کنيم :
Set objTerminalSupport = Nothing
سپس نياز به تعريف شی objStreamControl برای کنترل ترمينال است :
Dim objStreamControl As ITStreamControl Set objStreamControl = objCallControl
در صورتيکه اين شی ايجاد شود ، به ازای استريم های موجود در ITCollection امکان ايجاد ترمينال در يک حلقه for بررسی می شود و ترمينال مناسب انتخاب می گردد :
If Not (objStreamControl Is Nothing) Then Dim objITCollStreams As ITCollection
Set objITCollStreams = objStreamControl.Streams
Dim nIndex As Long, objCrtStream As ITStream
For nIndex = 1 To objITCollStreams.Count Set objCrtStream = objITCollStreams.Item(nIndex)x If objCrtStream.MediaType = lMediaType Then If objCrtStream.Direction = dir Then Call objCrtStream.SelectTerminal(objTerminal)x End If End If Set objCrtStream = Nothing Next nIndex
Set objITCollStreams = Nothing Set objStreamControl = Nothing End If
ايجاد يک تماس ( Make a Call ) : + قبل از اين بخش بايستی مراحل TAPI Initialization و عمل انتخاب آدرس انجام شده باشد . اين بخش برای ايجاد يک شی تماس ، بررسی و مشخص کردن استريمی که با اين تماس در ارتباط است ، انتخاب و ايجاد ترمينالهای مناسب و کامل کردن ارتباط استفاده می شود . قبل TAPI Initialization و عمل انتخاب آدرس و انتخاب ترمينال انجام شده باشد . در ابتدا با استفاده از متد CreateCall يک شی تماس ساخته می شود :
Set gobjCall = gobjOrigAddress.CreateCall(strDestAddress, nSelectedType,lMediaTypes)x
سپس در اينجا بايستی کدی که در بخش اول اين درس برای انتخاب ترمينال نوشته شد آورده شود :
} Select Terminal Code {
سپس بايستی دستور Connect اجرا شود :
gobjCall.Connect (False)x
False بدين معناست که ارتباط بصورت آسنکرون برقرار می شود . دريافت يک تماس :
کد زير برای يافتن و يا ايجاد يک ترمينال مناسب برای دريافت يک تماس بکار می رود . بايستی توجه داشته باشيد که قبل از اجرای کد زير بايستی مراحل مقداردهی اوليه ، انتخاب يک آدرس و رجيسر کردن event ها را انجام دهيد . همچنين در کد زير بايستی مرحله انتخاب ترمينال را نيز انجام دهيد . توجه داشته باشيد که در کد زير متغير pEvent يک اشاره گر برای واسط ITCallNotificationEvent است که توسط TAPI به event Handler داده می شود :
If TapiEvent = TE_CALLNOTIFICATION Then Dim objCallNotificationEvent As ITCallNotificationEvent Set objCallNotificationEvent = pEvent Dim gobjReceivedCallInfo As ITCallInfo Set gobjReceivedCallInfo = objCallNotificationEvent.Call Dim objCallControl As ITBasicCallControl Set objCallControl = gobjReceivedCallInfo objCallControl.Answer End If
WWW.DEV.IR |
|
| هادی بهارلو |
سه شنبه سیزدهم فروردین 1387 |
 |
|
 |
آموزش پاسکال قسمت دوم |
|
آموزش پاسکال قسمت دوم
مثال : برنامه اي بنويسيد كه دو عدد را از ورودي دريافت و چنانچه عدد اول در بازه 0 تا 5 بود توان دوم عدد دوم را چاپ كند چنانچه 68 بود حاصلضرب دو عدد را چاپ كند و در غير اينصورت مقادير مجاز را چاپ كند.
BEGIN WRITELN('ENTER TWO NUMBER'); READLN(A,B); CASE A OF 0..5 :WRITELN(B*B); 68:WRITELN(A*B) ELSE WRITELN('ENTER 0..5 OR 68'); END; END.
- معادل برنامه بالا با دستور If :
Begin Writeln('enter 2 number'); Readln(a,b); If (a>=0)and(a<=5) then Writeln(b*b) Else If a=68 then Writeln(a*b) Else Writeln('enter 0..5 or68'); End.
تكليف : روشي براي تلفظ اعداد پيدا كنيد.
حلقه تكرار : 1- تعداد معين 2- تعداد معين Do مقدار نهايي to { مقدار شروع=: متغير for downto begin ___ ___ ___ end; توجه مهم : در برخي از حلقه ها دستورات داخل حلقه به متغير حلقه مرتبط مي باشند و در برخي موارد هيچگونه ارتباطي وجود ندارد. حلقه for براي تعداد تكرار معين به كار ميرود Downto : در مواردي به كار ميرود كه مقدار اوليه از مقدار نهايي بيشتر باشد
مثال : برنامه اي بنويسيد كه توان دوم اعداد 100 تا 200 را چاپ كند.
Begin For i:=100 to 200 do Begin Writeln(i*i); End; End.
نكته : اجازه نداريد مقدار متغير حلقه را در داخل بدنه عوض كنيد . مثال : برنامه اي بنويسيد كه حاصلجمع اعداد 100..1 را چاپ كند.
Begin Sum:=0; For i:=1 to 10 do Begin Sum:=sum+i End; Write(sum); End.
مثال : برنامه اي بنويسيد كه حاصلجمع مضارب 5 بين 0 تا 100را به دست آورد.
Begin Sum:=0; For I:=1 to 20 do Begin Sum:=sum+i*5; End; Writeln(sum); End.
مثال : برنامه اي بنويسيد كه دو عدد را از ورودي دريافت و اعداد ما بين اين دو عدد را چاپ كند (a
Begin Writeln('enter a,b'); Readln(a,b); For I:= a to b do Writeln(i); End.
مثال : برنامه اي بنويسيد كه با يك حلقه for اعداد بين100..1 و738..353و 950..940 را چاپ كند
Begin For i:=1 to 950 do Begin If ( i>=1) and (i<=100) then Writeln(i); If (i>353) and (i<=738) then Writeln(i); If (i>=940) and (i<=950) then Writeln(i); End; End.
معادل برنامه بالا با استفاده از دستور case :
Begin For i:=1 to 950 do Case I of 1..100,353..738,940..950: writeln(i); end; end.
باقيمانده mod مثال : X mod y مثال : برنامه اي بنويسيد كه مضارب 7 بين 1 تا 100 را چاپ كند
Begin For i:= 1 to 100 do Begin If I mod 7 = 0 then Writeln(i); End; End.
مثال : برنامه اي بنويسيد كه تعداد مضارب 5و7 را در بازه 231~846 چاپ كند.
Begin K:=0; C:=0; For i:=846 downto 231 do Begin If I mod 5 = 0 then C:=c+1; If I mod 7 = 0 then K:=k+1; End; Writeln('5=',c,'7=',k); End; End.
مثال : برنامه اي بنويسيد كه حقوق پايه وتعداد فرزندان 100 كارگر را از ورودي دريافت و مبلغ حقوق آنها را بر اساس فرمول زير حساب كند0 1000*تعداد فرزند + حقوق پايه = حقوق كل
Begin For i:=1 to 100 do Begin Writeln('enter salary and number of children'); readln(salary,num); kol := salary + num * 1000; writeln(kol); end; end.
مثال : برنامه اي بنويسيد كه 100 عدد را از ورودي دريافت و ميانگين و حاصلجمع آنها را به ما بدهد.
Begin Sum:=0; For i:= 1 to 100 do Begin Writeln('enter num'); Readln(num); Sum:=sum+num; End; Ave:=ave/100; Writeln(sum,ave); End.
تعداد تكرار نامعين : Do شرط while begin ___ ___ ___ end; مثال : برنامه اي بنويسيد كه اعداد 100..1 را چاپ كند
Begin I:=1; While i<=100 do Begin Write(i); I:=i+1; End;
مثال : برنامه اي بنويسيد كه تعدادي اسم را از ورودي دريافت و به ما بگويد چند بار اسم ali تكرار شده است(آخرين اسم end است).
Var S:integer; St:string; Begin Read(st); While st<> 'end' do Begin If st='ali' then S:=s+1; Read(st); End;write(s); End.
مثال : برنامه اي بنويسيد كه تعدادي عدد كه آخرين آنها صفر است را از ورودي دريافت و حاصلجمع آنها را چاپ كند.
Begin Readln(num); T:=1; While num<>0 do Begin Sum:=sum+num; Readln(num); T:=t+1; End; Writeln('s=',s,'average',s/t); End;
تكليف : براي دانش آموزان يك كلاس برنامه اي بنويسيد كه نام آنها به همراه تعداد نمرات و سپس نمرات آنها را به فرم زير از ورودي دريافت كند.تعداد دانش آموزان كلاس نامعين است ولي آخرين نفر نامش end است .برنامه ميبايستي پس از دريافت هر يك از اطلاعات پيامي به شكل زير چاپ كند.
Average: Sum: Ali Name: 3 18 20 13.5
program test; var name:string[10]; ave,sum,nomreh:real; num,i:integer; begin writeln('enter name ' ); readln(name); while name <> 'end' do begin writeln('enter num:'); readln(num); for i:=1 to num do begin writeln('enter nomreh: '); readln(nomreh); sum:=sum+nomreh; end; ave:=sum/num; writeln('name:',name,'sum:',sum,'ave:',ave); writeln('enter name '); readln(name); end; end.
تكليف : ميخواهيم براي برنامه هاي خود يك منو تهيه كنيم اين منو شامل موارد زير است 1) load 2) save 3) edit 4) exit please select a number :
program test; var num:integer; begin writeln(' 1) load'); writeln(' 2) save'); writeln(' 3) edit'); writeln(' 4) exit'); writeln(please select a number : '); readln(num); while num<>4 do begin case num of 1:writeln('loading'); 2:writeln('saving'); 3:writeln('editing'); end; end; end.
منبع : ایران دولوپر |
|
| هادی بهارلو |
سه شنبه سیزدهم فروردین 1387 |
 |
|
 |
آخرین مطالب ارسالی |
|
|
|
 |
درباره وب |
|
|
کاش همه مثل گوسفند ساده و بی آلایش بودن!! |
|
 |
آمار کاربران |
|
|
 |
لینک دوستان |
|
|
 |
بخش ویژه |
|
|
|