بایگانی دسته‌ها: برنامه‌نویسی

آیا فلانی هم مشترک فید من هست؟ (فرندفید-پایتون)

آیا فلانی هم مشترک فید من هست؟ (فرندفید-پایتون)

پیش نیازها:
این برنامه به درد کسایی می‌خوره که ۱: با فرفر آشنایی داشته باشن ۲: پایتون رو سیستمشون نصب باشه ۳: جواب سوال بالا براشون مهم باشه

توضیح:
می‌خوایم بدونیم آیا آقا یا خانوم ایکس مشترک صفحه‌ی فرندفید ما هستند یا نه.
البته اگه آقا یا خانوم ایکس تعداد محدودی اشتراک داشته باشن (مثلا ۳۰-۴۰تا)، پیدا کردن این موضوع کار سختی نیست، به راحتی میشه بریم به صفحه‌ی شخصی ایشون (http://friendfeed.com/X) و اونجا روی لینک subscriptions در بالای صفحه کلیک کنیم و ببینیم اسم ما هم اونجا هست یا نه.
اما مسئله اینه که آقا یا خانوم ایکس ممکنه ۷۰۰-۸۰۰تا اشتراک داشته باشه، اونوقته که پیدا کردن اسمتون میون اون همه اسم، کمی حوصله می‌خواد.
خوب، اون جور کارهای حوصله-سر-بر خوراک کامپیوترهاست. مثلا برنامه‌ی پایتون زیر می‌تونه بهتون بگه آیا آقا یا خانوم ایکس مشترک فید شما هستن یا نه:

import urllib2
#Get these information from: https://friendfeed.com/account/api
FF_NICKNAME='Username'
FF_REMOTE_KEY='Remote_Key'

usr=raw_input('Username? (not name)\n')
url='http://friendfeed-api.com/v2/feedinfo/'+usr

passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, url, FF_NICKNAME, FF_REMOTE_KEY)
authhandler = urllib2.HTTPBasicAuthHandler(passman)
opener = urllib2.build_opener(authhandler)
urllib2.install_opener(opener)

feedinfo = urllib2.urlopen(url)

feedinfo = feedinfo.read()
#true is used in feedinfo but is not defined for python,
#   so we should define it first:
true = True
feedinfo = eval(feedinfo)

found = False
for ei in feedinfo['subscriptions']:
	if ei['id']==FF_NICKNAME:
		print usr + " is subscribed to " + FF_NICKNAME
		found=True
		break
if found == False:
    print usr + " is NOT subscribed to " + FF_NICKNAME
raw_input()

روش کار:
۱- از اینجا «نام کاربری» و «کلید راه دور» حساب فرندفید خودمون رو پیدا می‌کنیم.
۲- خطوط بالا رو توی یک فایل متنی می‌ریزیم و با پسوند .py ذخیره می‌کنیم.
۳- اجراش می‌کنیم.
۴- برنامه نام کاربری فرد مورد نظر رو از ما می‌پرسه
۵- بعد از وارد کردن نام کاربری آقا یا خانوم ایکس، برنامه به ما میگه که آیا ایشون مشترک صفحه‌ی ما هستن یا نه.

برای دفعات بعدی، از مرحله‌ی ۳ شروع می‌کنیم :دی
(خوبی این کد اینه که با کمی تغییر میشه خیلی اطلاعات مفید دیگه هم بدست آورد)

کد تبدیل تاریخ میلادی به شمسی در ویژوال بیسیک

کد تبدیل تاریخ میلادی به شمسی در ویژوال بیسیک

برای این کار یک سری کد روی اینترنت وجود داره، مثل این، این و این.

یه روشم من اینجا معرفی می‌کنم که فکر نکنم تا حالا تو سطح وب منتشر شده باشه:

Public Function Fdat(da As String)
 Dim y, m, d, sy, sd, sm As Integer
 d = Val(Mid(da, 9, 2))
 m = Val(Mid(da, 6, 2))
 y = Val(Mid(da, 1, 4))

 If (m = 1 Or m = 2) Then
   sy = y - 622
 ElseIf (m = 3) Then
   If ((y Mod 4) = 0) Then
     If (d >= 1 And d <= 19) Then
       sy = y - 622
     Else
       sy = y - 621
     End If
   Else
     If (d >= 1 And d <= 20) Then
        sy = y - 622
     Else
        sy = y - 621
     End If
   End If
 ElseIf (m > 3 And m <= 12) Then
   sy = y - 621
 Else
   sy = 0
 End If

 
 If ((y Mod 4) = 0) Then
  If m = 3 Then
    If (d >= 20 And d <= 31) Then
      sm = 1
      sd = d - 19
    ElseIf (d >= 1 And d < 20) Then
      sm = 12
      sd = d + 10
    Else
      sm = 0
      sd = 0
    End If
  ElseIf m = 4 Then
    If (d >= 20 And d <= 30) Then
      sm = 2
      sd = d - 19
    ElseIf (d >= 1 And d < 20) Then
      sm = 1
      sd = d + 12
    Else
      sm = 0
      sd = 0
    End If
  ElseIf m = 5 Then
    If (d >= 21 And d <= 31) Then
      sm = 3
      sd = d - 20
    ElseIf (d >= 1 And d < 21) Then
      sm = 2
      sd = d + 11
    Else
      sm = 0
      sd = 0
    End If
  ElseIf m = 6 Then
    If (d >= 21 And d <= 30) Then
      sm = 4
      sd = d - 20
    ElseIf (d >= 1 And d < 21) Then
      sm = 3
      sd = d + 11
    Else
      sm = 0
      sd = 0
    End If
  ElseIf m = 7 Then
    If (d >= 22 And d <= 31) Then
      sm = 5
      sd = d - 21
    ElseIf (d >= 1 And d < 22) Then
      sm = 4
      sd = d + 10
    Else
      sm = 0
      sd = 0
    End If
  ElseIf m = 8 Then
    If (d >= 22 And d <= 31) Then
      sm = 6
      sd = d - 21
    ElseIf (d >= 1 And d < 22) Then
      sm = 5
      sd = d + 10
    Else
      sm = 0
      sd = 0
    End If
  ElseIf m = 9 Then
    If (d >= 22 And d <= 30) Then
      sm = 7
      sd = d - 21
    ElseIf (d >= 1 And d < 22) Then
      sm = 6
      sd = d + 10
    Else
      sm = 0
      sd = 0
    End If
  ElseIf m = 10 Then
    If (d >= 22 And d <= 31) Then
      sm = 8
      sd = d - 21
    ElseIf (d >= 1 And d < 22) Then
      sm = 7
      sd = d + 9
    Else
      sm = 0
      sd = 0
    End If
  ElseIf m = 11 Then
    If (d >= 21 And d <= 30) Then
      sm = 9
      sd = d - 20
    ElseIf (d >= 1 And d < 21) Then
      sm = 8
      sd = d + 10
    Else
      sm = 0
      sd = 0
    End If
  ElseIf m = 12 Then
    If (d >= 21 And d <= 31) Then
      sm = 10
      sd = d - 20
    ElseIf (d >= 1 And d < 21) Then
      sm = 9
      sd = d + 10
    Else
      sm = 0
      sd = 0
    End If
  ElseIf m = 1 Then
    If (d >= 21 And d <= 31) Then
      sm = 11
      sd = d - 20
    ElseIf (d >= 1 And d < 21) Then
      sm = 10
      sd = d + 10
    Else
      sm = 0
      sd = 0
    End If
  ElseIf m = 2 Then
    If (d >= 20 And d <= 29) Then
      sm = 12
      sd = d - 19
    ElseIf (d >= 1 And d < 20) Then
      sm = 11
      sd = d + 11
    Else
      sm = 0
      sd = 0
    End If
  End If
 ElseIf ((y Mod 4) = 1) And (m = 1 Or m = 2 Or m = 3) Then

  If m = 1 Then
    If (d >= 20 And d <= 31) Then
      sm = 11
      sd = d - 19
    ElseIf (d >= 1 And d < 20) Then
      sm = 10
      sd = d + 11
    Else
      sm = 0
      sd = 0
    End If
  ElseIf m = 2 Then
    If (d >= 19 And d <= 28) Then
      sm = 12
      sd = d - 18
    ElseIf (d >= 1 And d < 19) Then
      sm = 11
      sd = d + 12
    Else
      sm = 0
      sd = 0
    End If
  ElseIf m = 3 Then
    If (d >= 21 And d <= 31) Then
      sm = 1
      sd = d - 20
    ElseIf (d >= 1 And d < 21) Then
      sm = 12
      sd = d + 10
    End If
  End If

 Else
  If m = 3 Then
    If (d >= 21 And d <= 31) Then
      sm = 1
      sd = d - 20
    ElseIf (d >= 1 And d < 21) Then
      sm = 12
      sd = d + 9
    Else
      sm = 0
      sd = 0
    End If
  ElseIf m = 4 Then
    If (d >= 21 And d <= 30) Then
      sm = 2
      sd = d - 20
    ElseIf (d >= 1 And d < 21) Then
      sm = 1
      sd = d + 11
    Else
      sm = 0
      sd = 0
    End If
  ElseIf m = 5 Then
    If (d >= 22 And d <= 31) Then
      sm = 3
      sd = d - 21
    ElseIf (d >= 1 And d < 22) Then
      sm = 2
      sd = d + 10
    Else
      sm = 0
      sd = 0
    End If
  ElseIf m = 6 Then
    If (d >= 22 And d <= 30) Then
      sm = 4
      sd = d - 21
    ElseIf (d >= 1 And d < 22) Then
      sm = 3
      sd = d + 10
    Else
      sm = 0
      sd = 0
    End If
  ElseIf m = 7 Then
    If (d >= 23 And d <= 31) Then
      sm = 5
      sd = d - 22
    ElseIf (d >= 1 And d < 23) Then
      sm = 4
      sd = d + 9
    Else
      sm = 0
      sd = 0
    End If
  ElseIf m = 8 Then
    If (d >= 23 And d <= 31) Then
      sm = 6
      sd = d - 22
    ElseIf (d >= 1 And d < 23) Then
      sm = 5
      sd = d + 9
    Else
      sm = 0
      sd = 0
    End If
  ElseIf m = 9 Then
    If (d >= 23 And d <= 30) Then
      sm = 7
      sd = d - 22
    ElseIf (d >= 1 And d < 23) Then
      sm = 6
      sd = d + 9
    Else
      sm = 0
      sd = 0
    End If
  ElseIf m = 10 Then
    If (d >= 23 And d <= 31) Then
      sm = 8
      sd = d - 22
    ElseIf (d >= 1 And d < 23) Then
      sm = 7
      sd = d + 8
    Else
      sm = 0
      sd = 0
    End If
  ElseIf m = 11 Then
    If (d >= 22 And d <= 30) Then
      sm = 9
      sd = d - 21
    ElseIf (d >= 1 And d < 22) Then
      sm = 8
      sd = d + 9
    Else
      sm = 0
      sd = 0
    End If
  ElseIf m = 12 Then
    If (d >= 22 And d <= 31) Then
      sm = 10
      sd = d - 21
    ElseIf (d >= 1 And d < 22) Then
      sm = 9
      sd = d + 9
    Else
      sm = 0
      sd = 0
    End If
  ElseIf m = 1 Then
    If (d >= 21 And d <= 31) Then
      sm = 11
      sd = d - 20
    ElseIf (d >= 1 And d < 21) Then
      sm = 10
      sd = d + 10
    Else
      sm = 0
      sd = 0
    End If
  ElseIf m = 2 Then
    If (d >= 20 And d <= 28) Then
      sm = 12
      sd = d - 19
    ElseIf (d >= 1 And d < 20) Then
      sm = 11
      sd = d + 11
    Else
      sm = 0
      sd = 0
    End If
  End If

 End If
 Fdat = Format$(sy, "0000") & "/" & Format$(sm, "00") & "/" & Format$(sd, "00")

End Function

برای استفاده کافیه پس از ذخیره کردن کد بالا در یک ماژول، تابع رو به صورت زیر فراخوانی کنیم:

fdat(Date())

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

دانیل رابینز (پایه‌گذار جنتو لینوکس)

دانیل رابینز (پایه‌گذار جنتو لینوکس)

امروز یه مقاله‌ی تازه تو ویکی‌پدیا به نام دنیل رابینز ایجاد کردم. البته قرار بود این مقاله یکی از نوشته‌های وب‌نوشتم باشه، اما با وجود اینکه معتقد بودم چندان برای ویکی‌پدیا مناسب نیست و بعضی قسمت‌هاش باید به مقاله‌ی جنتو لینوکس منتقل بشه، اما باز هم تصمیم گرفتم بزارمش رو ویکی‌پدیا تا بقیه هم بتونن تو بهتر شدنش کمک کنن. (فوقش پاکش می‌کنن دیگه)

این مطلبم اینجا نوشتم تا وبلاگ بی‌مطلب نمونه :دی

ضعیف یا قوی؟ استاتیک یا دینامیک؟ (تایپ‌سیستم‌های برنامه‌نویسی)

ضعیف یا قوی؟ استاتیک یا دینامیک؟ (تایپ‌سیستم‌های برنامه‌نویسی)

(وقتی می‌رین سراغ یک زبان برنامه‌نویسی جدید، معمولا چنتا اصطلاح هست که باهاش رو به رو می‌شین…)

زبان برنامه‌نویسی strongly typed در مقابل weakly typed

تو یه زبان strongly typed اجازه نداریم عملیاتی انجام بدیم که با نوع داده‌های ما همخوانی نداشته باشه و در صورت انجام مفسر یا کامپایلر به ما خطا نشون می‌ده، اما در یک زبان weakly typed، مفسر یا کامپایلر خودش به صورت خودکار یک سری عملیات روی داده‌های ما انجام میده (معمولا یکی از داده‌ها رو به نوع اون یکی داده تبدیل می‌کنه) و نهایتا بدون دادن خطا به جواب می‌رسه.

مثال:

فرض کنیم بخوایم مقدار رشته‌ای «5″ رو با مقدار عددی 7 جمع کنیم، تو زبان‌هایی که نوع داده محکم تعریف شده (strongly typed)، با خطا رو به رو می‌شیم و قبلش باید خودمون با استفاده از توابعی که در دسترس داریم یکی از داده‌ها رو به نوع دیگه تبدیل کنیم؛ اما در زبانی که نوع داده ضعیف تعریف شده (weakly typed)، ممکنه به جواب «57″ یا 12 برسیم.

کدوم بهتره؟

هر چند ممکنه در نگاه اول دوست داشته باشیم کامپایلر/مفسر خودش همه‌ی کارها رو بکنه، اما بیشتر برنامه نویسا اعتقاد دارن زبانی که داده‌هاش رو محکم تعریف کنه بهتره، چون در صورت بروز خطا همون محلی که خطا رخ داده با پیغام type error رو به رو می‌شین،  در حالی که اگه نوع داده‌ها ضعیف تعریف بشه، معمولا خطا در قسمت دیگه‌ای از برنامه خودش رو نشون میده، و پیدا کردن محل خطا سخته (گاهی خیلی سخته!)، اینم در نظر بگیرین که باید قوانین مربوطه به تبدیل انواع هنگام برخورد به این موارد رو یاد بگیرین. مثلا بدونین در چه مواردی جواب «57″ میشه و در چه مواردی 12…

زبان برنامه نویسی static typed در مقابل dynamic typed

یکی از تعاریف ساده‌ای که در این مورد شنیدم اینه که در یک زبان static typed نوع داده در طرف متغیر تعریف میشه در حالی که در یک زبان dynamic typed نوع داده به وسیله‌ی مقدارش مشخص میشه.

نتیجه اینکه شما در یک زبانی که نوع داده استاتیکی مشخص شده، باید هنگام تعریف متغیر، نوع داده‌ای که قراره بگیره رو مشخص کنین، و بعد از اینکه نوع داده رو مشخص کردین دیگه نمی‌تونین داده‌ای از نوع دیگه بهش بدین (مثلا اگه بهش گفتین این متغیر یک مقدار رشته‌ایه، دیگه نمی‌تونین بهش عدد اعشاری بدین)؛‌ اما زبانی که نوع داده‌هاش دینامیکی تعریف می‌شن دقیقا برعکسه، یعنی اولا شما لازم نیست هنگام تعریف متغیر نوع داده‌تون رو مشخص کنین، ثانیا می‌تونین به متغیری که قبلا یک مقدار رشته‌ای داشته، حالا یک مقدار عددی بدین (بدون اینکه هیچ خطایی دریافت کنین)

کدوم بهتره؟

از همین الآن بگم، اتفاق نظر در این زمینه وجود نداره، هر کدوم مزایا و معایب دارن…

پیش از هر چیز باید اضافه کنم اینه که تو بعضی از زبان‌های استاتیکی، کامپایلر/مفسر بدون اینکه لازم باشه شما ابتدا متغیر رو تعریف کنین، میاد و با استفاده از نوع داده‌ای که به متغیر اختصاص می‌دین، نوع متغیر رو تعیین می‌کنه. (یعنی می‌نویسین x=5 و مفسر خودش میاد و x رو از نوع integer تعریف می‌کنه). بنابراین در زبانی که متغیرهاش استاتیکی باشن الزاما لازم نیست ابتدا متغیرها رو تعریف کنین یا قسمتی از وقتتون رو صرف به خاطر سپردن روش انجام این کارها بکنین.

از یک طرف تعریف نوع داده‌ها به صورت پویا (dynamic typing)، کار رو آسون می‌کنه، چون دیگه لازم نیست نوع متغیر‌ها رو برای برنامه تعریف کنیم و در ضمن هنگام تغییر نوع مقادیر متغیرها با خطا رو به رو نمی‌شیم، از اون طرف تشخیص خطا در زبان‌هایی که به صورت استاتیک نوع داده رو مشخص می‌کنن سریعتر و راحت‌تر صورت می‌گیره و احتمال خطا در برنامه‌ی نهایی کمتره، هر چند درصد وقوع این خطاها ممکنه ناچیز باشه.

برنامه نویسانی که از زبان‌های دینامیکی استفاده می‌کنن، برای گرفتن خطاهای احتمالی دست به دامن نوشتن برنامه‌های خطایاب می‌شن که هم این خطاها و خطاهای دیگه‌ی احتمالی برنامه رو می‌گیره و بهش می‌گن test suites یا unit tests.

+ در زبانهایی که داده‌ها دینامیکی تعریف می‌شن، بررسی‌های لازم هنگام اجرای برنامه پیچیده‌تر می‌شن و باید با هر بار اجرای برنامه تکرار بشن و این یعنی برنامه‌های زبانهایی که داده‌های استاتیکی دارن معمولا سریعتر هستن. البته زمانی که صرف کامپایل برنامه میشه درست برعکسه و در زبان‌های نوع دینامیکی این زمان کمتره و می‌تونه باعث کاهش زمان چرخه‌ی «ویرایش-کامپایل-آزمایش-اشکال‌زدایی» بشه. (این چرخه‌ایه که یک برنامه نویس مدام باید تکرارش کنه)

و باید گفت در زبان‌هایی که نوع متغیرها دینامیک تعریف می‌شن، یک سری کارها میشه کرد که تو زبان‌های استاتیک تعریف شده نمیشه. مثلا در یک زبانی که داده‌ها دینامیکی هستن، میشه یک داده‌ی ورودی رو به مانند یک خط از کدهای اون برنامه اجرا کرد (تابع eval) اما این کار در زبان نوع استاتیکی به این سادگی نیست. و چند امتیاز دیگه برای زبان‌های نوع دینامیکی…

اینم یه جدول برای مقایسه زبان‌های مختلف از نظر تایپ‌سیستم اونها:

نام زبان برنامه نویسی Strong Typed Weak Typed Dynamic Typed Static Typed
C × ×
Python × ×
Visual Basic × ×
PHP × ×
Java × ×
Java Script × ×
C Sharp × × ×
Object Pascal × × ×
Pascal × ×
Ruby × ×

منابع:

کتاب برنامه‌نویسی به زبان سی، تالیف مهندس جعفرنژاد قمی

کتاب برنامه‌نویسی به زبان سی، تالیف مهندس جعفرنژاد قمی

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

برنامه‌نویسی به زبان سی

طرح جلد کتاب برنامه‌نویسی به زبان سی تالیف مهندس عین‌الله جعفرنژاد قمی (ویرایست سوم)

سرفصل‌های کتاب:

- پیشگفتار

- فصل اول : مقدمات زبان C

  • انواع داده‌ها
  • متغیر‌ها
    • تعریف متغیر‌ها
    • مقدار دادن به متغیرها
  • تعریف ثوابت
  • عملگرها
    • عملگرهای محاسباتی
      • عبارات محاسباتی
    • تقدم عملگرها
    • عملگرهای رابطه‌ای
    • عملگرهای منطقی
    • عملگرهای ترکیبی
    • عملگرهای بیتی
    • عملگرهای & و *
    • عملگر ?
    • عملگر کاما (,)
    • عملگر sizeof
    • عملگر ()
    • تقدم عملگرها در حالت کلی
  • تبدیل انواع
  • روش ایجاد برنامه
    • تعیین نیازمندی‌های مسئله
    • تحلیل مسئله
    • طراحی الگوریتم
  • تست برنامه
  • نگهداری برنامه
    • فرآیند آماده‌سازی و اجرای برنامه
  • تمرینات

- فصل دوم : ساختار برنامه C و ورودی و خروجی

  • ورودی-خروجی داده‌ها
    • چاپ اطلاعات با تابع printf()
    • مشاهده‌ی صفحه‌ی خروجی برنامه
    • پاک کردن صفحه‌ی خروجی
    • انتقال مکان‌نما در صفحه‌ی خروجی
    • چاپ اعداد نوع short و long
    • تعیین طول میدان در تابع printf()
    • ورود اطلاعات توسط تابع scanf()
  • ورودی و خروجی کاراکترها
    • خواندن کاراکتر با توابع getch() و getche()
    • خواندن کاراکتر با تابع getchar()
    • نوشتن کاراکتر با تابع putch() و putchar()
  • تمرینات

- فصل سوم : حلقه های تکرار و ساختار های تصمیم

  • ساختارهای تکرار
    • ساختار تکرار for
  • حلقه‌های تکرار تودرتو
  • عملگر کاما و حلقه‌ی for
  • ساختار تکرار while
    • ساختار تکرار while…do
  • از کدام حلقه‌ی تکرار استفاده کنیم؟
  • ساختارهای تصمیم
    • ساختار تصمیم if
    • ساختار تصمیم if…else
    • انتقال کنترل غیرشرطی
      • دستور break
      • دستور continue
      • دستور goto
    • ساختار تصمیم switch
  • تمرینات

- فصل چهارم : توابع و کلاس های حافظه

  • توابع و برنامه‌سازی ساخت‌یافته
  • نوشتن توابع
    • نکاتی در مورد نوشتن توابع
    • تابع چگونه کار می‌کند
  • روش‌های ارسال پارامترها به توابع
    • توابعی که هیچ مقداری را برنمی‌گردانند
  • متغیرهای محلی و عمومی
    • متغیرهای محلی همنام با متغیرهای عمومی
  • بازگشتی
    • حالت بازگشتی و توقف در محاسبه‌ی فاکتوریل
  • کلاس حافظه و حوزه‌ی متغیرها
    • کلاس حافظه اتوماتیک
    • کلاس حافظه ثبات
    • کلاس حافظه استاتیک
      • متغیرهای استاتیک محلی
      • متغیرهای استاتیک عمومی
    • کلاس حافظه خارجی
      • تفاوت کلاس حافظه خارجی و کلاس حافظه استاتیک عمومی
  • نکته‌ای راجع به الگوی تابع
  • تمرینات

- فصل پنجم : آرایه ها و رشته ها

  • آرایه‌های یک بعدی
  • آرایه‌های یک‌بعدی به عنوان آرگومان تابع
  • مرتب‌سازی آرایه‌ها
    • مرتب‌سازی حبابی
  • جستجو در آرایه
    • جستجوی ترتیبی
    • جستجوی دودویی
  • آرایه‌های چندبعدی
  • آرایه‌های دوبعدی به عنوان آرگومان تابع
    • مقدار اولیه‌ی آرایه‌ها
  • نکته‌ای راجع به آرایه‌ها
  • رشته‌ها
    • مقدار اولیه دادن به رشته‌ها
  • ورودی-خروجی رشته‌ها
  • خواندن رشته با تابع gets()
    • تفاوت gets() و scanf() در خواندن رشته‌ها
  • چاپ رشته با تابع puts()
  • رشته به عنوان آرگومان تابع
  • انتساب رشته‌ها (کپی کردن رشته در رشته‌ی دیگر)
    • مقایسه‌ی رشته‌ها
  • الحاق دو رشته
  • آرایه‌ای از رشته‌ها
  • تمرینات

- فصل ششم : اشاره‌گرها

  • متغیرهای اشاره‌گر
  • عملگرهای اشاره‌گر
  • اشاره‌گرها و انواع متغیرها
  • اعمال روی اشاره‌گرها
    • انتساب اشاره‌گرها به یکدیگر
    • اعمال محاسباتی روی اشاره‌گرها
    • مقایسه اشاره‌گرها
  • متغیرهای پویا
    • تخصیص حافظه پویا
    • برگرداندن حافظه به سیستم
  • اشاره‌گرها و توابع
    • اجرای تابع با استفاده از آدرس آن
  • اشاره‌گرها و آرایه‌ها
  • آرایه پویا
  • اشاره‌گرها و رشته‌ها
  • ارزش‌دهی اولیه به اشاره‌گرها
  • اشاره‌گر به اشاره‌گر
  • نکاتی در مورد اشاره‌گرها
  • آرگومان‌های تابع main()
  • تمرینات

- فصل هفتم : ساختمان ها

  • تعریف نوع ساختمان
  • تعریف متغیر نوع ساختمان
  • دسترسی به عناصر ساختمان
  • ارزش‌دهی اولیه به ساختمان
    • انتساب ساختمان‌ها به یکدیگر
  • آرایه‌ای از ساختمان‌ها
  • تعریف ساختمان‌ها به صورت لانه‌ای
  • ساختمان‌ها به عنوان آرگومان تابع
    • انتقال عناصر ساختمان به توابع
    • انتقال ساختمان‌ها به توابع
  • اشاره‌گرهای ساختمان
  • ساختمان بیتی
  • یونیونها
  • ساختمانی از یونیون
  • تغییرنام انواع داده‌ها با typedef
  • انواع داده شمارشی
  • تمرینات

- فصل هشتم : فایل‌ها

  • انواع فایل از نظر نوع اطلاعات
  • سازمان فایل
    • بازکردن فایل
    • بستن فایل
  • ورودی-خروجی کاراکترها
  • ورودی-خروجی رشته‌ها
  • فایل به عنوان وسیله ورودی-خروجی
  • عیب‌یابی در ورودی-خروجی فایل
  • حذف فایل
  • بافر
  • ورودی و خروجی همراه با فرمت
  • ورودی-خروجی رکورد
  • حل یک مسئله از طریق فایل‌های ترتیبی
  • دسترسی تصادفی به فایل (ورودی-خروجی تصادفی)
  • حل یک مسئله از طریق فایل‌های تصادفی
  • دستگاه‌های ورودی-خروجی استاندارد
  • تمرینات

- فصل نهم : توابع کتابخانه‌ای

  • توابع ریاضی
  • توابع کاراکتری
  • توابع رشته‌ای
  • توابع تخصیص حافظه پویا
  • توابعی در مورد فایل‌ها و فهرست‌ها

- فصل دهم : صف، پشته، لیست پیوندی و درخت

  • صف
  • پشته
  • لیست پیوندی
  • مشخصات گره‌های لیست
  • تعریف گره لیست پیوندی
  • تعریف اشاره‌گرهای خارجی
    • ایجاد گره لیست پیوندی
    • پیوند دادن گره‌های لیست پیوندی
    • درج گره‌ای در لیست پیوندی
    • حذف گره از لیست پیوندی
    • پیمایش لیست پیوندی
  • لیست حلقوی
  • لیست دوپیوندی
    • تعریف گره لیست دوپیوندی
    • پیوند دادن گره‌های لیست دوپیوندی
    • درج گره‌ای در لیست دو پیوندی
    • حذف گره از لیست دوپیوندی
  • درخت‌ها
  • درخت دودویی
  • ساختار گره درخت دودویی
    • تعریف گره درخت
    • ایجاد گره درخت
  • پیمایش درخت
    • پیمایش inorder درخت دودویی
    • پیمایش preorder
    • پیمایش postorder
  • تمرینات

- فصل یازدهم : روشهای مرتب سازی و جستجو

  • روش‌های مرتب‌سازی
  • مقایسه‌ی الگوریتم‌های مرتب‌سازی
  • نمونه‌ای از یک روش مرتب‌سازی تعویضی
  • روش مرتب‌سازی انتخابی
  • مرتب‌سازی به روش درجی
  • چند روش مرتب‌سازی خوب
    • الگوریتم مرتب‌سازی shellsort
    • الگوریتم مرتب‌سازی quicksort
  • مرتب‌سازی رشته‌ها
  • مرتب‌سازی ساختمان‌ها
  • مرتب‌سازی فایل‌های تصادفی
  • روش‌های جستجو
  • تمرینات

- فصل دوازدهم : ساختمان کامپیوتر و وقفه ها

  • ساختمان کامپیوتر
  • ثبات‌های پردازنده‌های ۱۶ بیتی
    • ثبات‌های عمومی
    • سگمنت‌ها
    • ثبات‌های سگمنت
    • ثبات‌های ایندکس
    • ثبات‌های وضعیت و کنترلی
      • فلگ‌های کنترلی
      • فلگ‌های وضعیت
  • ثبات‌های ۳۲ بیتی
  • مفهوم آدرس‌دهی
  • مقدمه‌ای بر وقفه‌ها
  • انواع وقفه‌ها
    • وقفه‌های بایوس
    • معرفی توابع چندوقفه
  • اجرای وقفه‌ها درC
    • توابع DOS

- فصل سیزدهم : مدل های حافظه و مدیریت صفحه کلید

  • صفحه‌کلید
  • مدل حافظه‌ی tiny
  • مدل حافظه‌ی small
  • مدل حافظه‌ی medium
  • مدل حافظه‌ی compact
  • مدل حافظه‌ی large
  • مدل حافظه‌ی huge
  • انتخاب مدل حافظه‌ی مناسب
  • معرفی یک مدل حافظه به کامپایلر
  • آدرس‌دهی به خارج از یک سگمنت حافظه
    • کلمه‌ی کلیدی far
    • کلمه‌ی کلیدی huge
    • کلمه‌ی کلیدی near
  • تشخیص کلید‌های صفحه‌کلید
  • صفات کاراکتر و تغییر آنها

- فصل چهاردهم : رمزگذاری و فشرده‌سازی متن‌ها

  • انواع رمزگذاری
  • رمزگذاری جانشینی
  • رمزگذاری جابجایی
  • رمزگذاری به روش دستکاری بیت‌ها
  • فشرده‌سازی داده‌ها
    • ذخیره‌سازی ۸ کاراکتر در ۷ بایت (فشرده‌سازی بیتی)
  • فشرده‌سازی از طریق حذف کاراکترها
  • کشف رمز متن‌های رمزی

- فصل پانزدهم : توابع کتابخانه‌ای

  • توابع گرافیکی
  • توابع غیرگرافیکی صفحه‌ی نمایش

- فصل شانزدهم : گرافیک

  • تولید رنگ
  • از کجا شروع کنیم؟
  • نوشتن پیکسل‌ها
  • رسم خط
  • رسم مستطیل و پرکردن آن
  • رسم دایره و بیضی و پرکردن آنها
  • ذخیره و بازیابی گرافیک
  • کپی و انتقال گرافیک از نقطه‌ای به نقطه‌ی دیگر
  • چرخش اشکال گرافیکی

- فصل هفدهم : مهندسی نرم افزار به کمک C

  • طراحی برنامه
  • انتخاب یک ساختمان داده
  • پنهان‌سازی اطلاعات و کد
  • برنامه‌های متشکل از چند فایل
  • ایجاد کتابخانه
    • مشاهده محتویات فایل کتابخانه
  • برنامه‌ی GREP

- فصل هجدهم : طراحی مفسر زبان های برنامه سازی

  • عبارات
  • نشانه‌ها (tokens)
  • چگونگی تولید عبارات
  • مفسر زبان بیسیک
  • دستور انتساب
  • دستور PRINT
  • دستور INPUT
  • دستور GPTO
  • دستور IF
  • دستور FOR
  • دستور GOSUB
  • برنامه‌ی کامل مفسر بیسیک

- فصل نوزدهم : توابع کتابخانه‌ای

  • توابعی در مورد تاریخ، زمان و دیگر توابع سیستم
  • توابع تخصیص حافظه‌ی پویا
  • توابع کنترلی
  • توابع ورودی-خروجی
  • توابع متفرقه

- فصل بیستم : مدیریت منوها

  • ذخیره و بازیابی قسمتی از صفحه‌ی نمایش
  • ایجاد منوی popup
  • ایجاد منوی popup بدون وقفه‌ی بایوس
  • ایجاد منوی pulldown

- فصل بیست و یکم : ارتباط زبان C با اسمبلی

  • دستورات اسمبلی در زبان سی
  • استفاده از زیربرنامه‌های اسمبلی در برنامه‌ی سی
  • کوچک و بزرگ‌بودن حروف و متغیرها
  • پیش‌فرض سگمنت
  • ارتباط شناسه‌های extern و public در توربو سی و توربو اسمبلر
  • ترجمه‌ی چند فایل سی و اسمبلی
  • تبادل پارامترها بین اسمبلی و TC
  • ارسال پارامترها از برنامه C به اسمبلی
  • استفاده از پشته‌ها برای انتقال پارامترها
  • بازگرداندن مقادیر از اسمبلی به C

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

  • تعریف ماکرو
  • ضمیمه کردن فایل‌ها
  • دستورات پیش‌پردازنده‌ی شرطی
  • حذف ماکروی تعریف شده
  • اسامی ماکروهای از پیش تعریف‌شده
  • دستور پیش‌پردازنده‌ی #line
  • دستور پیش‌پردازنده‌ی #error

- پیوست ۱: چند نکته‌ی برنامه نویسی

- پیوست ۲: ارتباط با دستگاه‌های جانبی

- منابع و ماخذ

- ایندکس

مشخصات کتاب و بارگیری:

  • نام کتاب: برنامه‌نویسی به زبان C
  • نویسنده: مهندس عین‌الله جعفرنژاد قمی
  • ویرایش: سوم، ۱۳۸۱
  • انتشارات: علوم رایانه (در صورت تمایل به خرید کتاب می‌توانید از همین وب‌گاه استفاده کنید)
  • شابک: ۵−۲۹−۶۸۶۴−۹۶۴
  • کیفیت: اسکن شده با کیفیت بالا
  • تعداد صفحات: ۶۶۴ صفحه
  • حجم: ۲۱٫۴ مگابایت
  • پیوند مستقیم برای بارگیری (روی این پیوند کلیک راست نموده و گزینه‌ی save target as یا save link as را انتخاب نمایید)
  • ام‌دی۵: db199ca4498bcfbd355acc1cfa20a61f

مطالب مرتبط: