برچسب: دلفی

معرفی دو کتاب آموزش برنامه‌نویسی سیستمی در Delphi

اگر به خاطر داشته باشید در گذشته، مطلبی در مورد کتاب The Tomes of Delphi™ Algorithms and Data Structures نوشته بودم.
امروز هم قصد دارم تا دو مورد از بهترین کتابهای آموزش برنامه‌نویسی سیستمی در Windows را که از همین مجموعه منتشر شده‌اند، معرفی کنم.
دو کتاب زیر:
– برنامه نویسی توابع API پوسته ویندوز: Tomes of Delphi: WIn32 Shell API
فهرست:
Chapter 1 Delphi and the Windows API
Chapter 2 Window Movement Functions
Chapter 3 Window Information Functions
Chapter 4 File Input/Output Functions
Chapter 5 Input Functions
Chapter 6 String and Atom Functions
Chapter 7 Clipboard Manipulation Functions
Chapter 8 System Information Functions
Chapter 9 Icon, Cursor, and Caret Functions
Chapter 10 Help Functions
Chapter 11 Shell File Functions
Chapter 12 Shell Folder Functions
Chapter 13 Shell Extension Functions
Chapter 14 Specialized Shell Functions
– برنامه نویسی توابع API هسته ویندوز: Tomes of Delphi: Win32 Core API
فهرست:
Chapter 1 Delphi and the Windows API
Chapter 2 Window Creation Functions
Chapter 3 Message Processing Functions
Chapter 4 Memory Management Functions
Chapter 5 Dynamic-Link Library Functions
Chapter 6 Process and Thread Functions
Chapter 7 Timer Functions
Chapter 8 Error Functions
Chapter 9 Graphical Device Interface Functions
Chapter 10 Painting and Drawing Functions
Chapter 11 Region and Path Functions
Chapter 12 Bitmap and Metafile Functions
Chapter 13 Text Output Functions
قطعا جزء بهترین مراجع آموزش کار با توابع API در سیستم عامل ویندوز و برنامه‌نویسی سیستمی هستند. هر چند که در حال حاضر مدت زمان زیادی از انتشار آنها گذشته و آشنایی بنده با این دو کتاب هم مربوط به همان دوران است (شاید بیش از 4 سال پیش)، اما از آنجا که کتابهای ارزشمندی بوده و هنوز هم می‌توانند مورد استفاده برنامه‌نویسان علاقمند به کارهای سیستمی باشند، این مطلب را به آنها اختصاص دادم. (دلیل دوم هم این بود که دیروز مجددا به طور اتفاقی آنها را دیدم)
به نظر بنده، به طور کلی تسلط بر کار با توابع API یکی مهمترین مهارت‌هایی است که هر برنامه‌نویسی که در رابطه با محیط‌های توسعه Native فعالیت می‌کند، باید داشته باشد.
البته از یک برنامه‌نویس یا توسعه دهنده نرم‌افزارهای دات نت، نباید چنین انتظاری داشت، چرا که غالبا در این زمینه نیاز چندانی به تعامل مستقیم با توابع API یا Dll های سیستم، احساس نمی‌شود. (البته نه همیشه)
اما اگر برنامه‌نویسی ادعای تسلط در محیطهای توسعه‌ای مانند Delphi یا VC++ را داشته و در استفاده از API های سیستم (در زمینه‌های مختلف) مهارت نداشته باشد، یک بی سواد است.
پ.ن 1: مطمئنا بهترین مرجع برنامه نویسی در تمام فصول، MSDN بوده و خواهد بود.
پ.ن 2: اگر به برنامه نویسی سیستم علاقه دارید، مطالعه کتاب The Undocumented Functions از NTinterlnals.net را هم فراموش نکنید.

مجموعه کامپوننت پایگاه داده InfoPower برای Delphi

مجموعه کامپوننتهای InfoPower که در گذشته با نام IP معروف بودند، جزء کاملترین مجموعه کنترل‌های Data-Aware ای هستند که تا کنون برای محیط RAD Studio ارائه شده و از تمامی نسخه‌های دلفی از D5 تا D2010 پشتیبانی می‌نمایند.

اگر از برنامه‌نویسان با سابقه و قدیمی دلفی بوده باشید، احتمالا تا کنون نام wwDBGrid یا wwLookup را شنیده‌اید. (هر دو، از کامپوننتهای معروف مجموعه InfoPower هستند.) خاطره استفاده از Grid های درختی و فوق‌العاده پیشرفته آن در زمان دلفی 6، برای اکثر برنامه‌نویسان دلفی دلچسب است.

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

– تقریبا هر نوع کامپوننتی را به سادگی می‌توان در Grid های InfoPower منتقل کرده و نمایش داد مانند انواع لیست، کومبو، تصویر، دکمه رادیویی، چک باکس و غیره.
– می‌توان ظاهر آنها را به صفحات Html شبیه کرد و داده‌های موجود در آن را دسته‌بندی نمود.
– دارای انواع مرتب سازی و فیلتر خودکار داده‌ها.
– امکان تغییر، حذف و دسته‌بندی ستونهای Grid به صورت پویا و در زمان اجرا، تنها با راست کلیک بر روی Grid و یا استفاده از TitleMenu در Grid. (این قابلیت در کامپوننت فوق‌العاده MasterpieceGrid به چشم می‌آید)
– امکان نمایش داده‌های Master/Detail به طور همزمان در یک Grid منفرد (به صورت expand/collapse) و امکان ویرایش آنها.
– امکان ایجاد انواع و اقسام Header و Footer برای Grid ها.
– دارای Lookup های پیشرفته با امکان نمایش کل جدول به عنوان پیش نمایش آن.
– پشتیبانی کامل از Unicode و XML.
– سازگاری و پشتیبانی از Gesture ها.
– پشتیبانی از RegEx ها برای تشخیص صحت داده‌های ورودی.
– دارای Print Preview.
– قابلیتهای بصری و نمایشی جالب توجه.

همچنین این مجموعه به همراه یک راهنمای کامل برای کار با اجزاء آن و تعداد زیادی Demo (حدودا 30 تا) از قابلیتهای مختلف آن ارائه می‌شود.


تخمین نقاط منحنی درجه N به روش نیوتن (Newton)

در پست قبل، روش تخمین نقاط با استفاده از متد لاگرانژ را نشان دادم. در این مطلب، به پیاده‌سازی متد نیوتن می‌پردازم. (پیشنهاد می‌کنم جهت پی بردن به نبوغ و پشتکار بیش از حد نیوتن، کمی در مورد متدهایی که به نام او ثبت شده‌اند جستجو کنید. ظاهرا ایشان در تمام زمینه‌های ریاضی و فیزیک، صاحب نظر بوده‌اند)

program NewtonInterpolation; 
{Recursive Newton Function  By: Mohammad Shams}
{$APPTYPE CONSOLE}

uses SysUtils;

type
ByteArray = array of byte;
DynamicArray = array [0 .. 1] of array of real;
{ Dimension 0=X Dimension 1=Y }
FR = (Front, Rear);

var
v: DynamicArray;
b: ByteArray; // buffer of Xi variables
x: real;
deg: byte;
i: integer;

function DivDif(bf: ByteArray; f, r: byte): real;
// divided difference
begin
if f = r then
result := v[1, bf[f]] // [Y0]=Y0
else
result := (DivDif(bf, f + 1, r) - DivDif(bf, f, r - 1)) /
(v[0, bf[r]] - v[0, bf[f]]);
end;

function Mult(n: byte; x: real): real;
begin
if n = 0 then
result := x - v[0, 0]
else
result := (x - v[0, n]) * Mult(n - 1, x);
end;

function Newton(const buf: ByteArray; f, r, n: byte): real;
// f=front r=rear
begin
if n = 0 then
result := v[1, 0]
else
result := DivDif(buf, f, r) * Mult(n - 1, x) +
Newton(buf, f, r - 1, n - 1);
end;

begin
try
write('Enter Degree:');
readln(deg);
write('Enter X=');
readln(x);

setlength(b, deg + 1);
setlength(v[0], deg + 1);
setlength(v[1], deg + 1);

for i := 0 to deg do { input Xi,Yi }
begin
b[i] := i;
write('Enter X', i, ':');
readln(v[0, i]);
write('Enter Y', i, ':');
readln(v[1, i]);
end;

writeln('X=', x:0:6, ' Newton=', Newton(b, 0, deg, deg):0:6);

except
on E: Exception do
writeln(E.Classname, ': ', E.Message);
end;
readln;

end.


تخمین نقاط منحنی درجه N به روش لاگرانژ (lagrange)

مجموعه روشهای تخمین نقاط واقع بر منحنی درجه N که اصطلاحاً به آنها Interpolation/Extrapolation (برونیابی/درونیابی) گفته می‌شود، روشهایی هستند که با دریافت مختصات چند نقطه معلوم (به تعداد درجه معادله) و ترسیم منحنی، می‌توانند مختصات یک نقطه دلخواه را با دریافت X یا Y آن تخمین بزنند.

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

دو روش بسیار معروف در این زمینه، روشهای لاگرانژ و نیوتن هستند. از آنجا که این روشها، درجه N هستند، برای پیاده‌سازی آنها می‌بایست از آرایه‌های داینامیک و توابع بازگشتی استفاده کرد.

در زیر طریقه پیاده‌سازی روش لاگرانژ را مشاهده می‌فرمایید:

program Lagrang; { * Recursive Lagrange Function  By: Mohammad Shams * }
{$APPTYPE CONSOLE}

uses SysUtils;

type
DynamicArray = array [0 .. 1] of array of real;
{ Dimension 0=X Dimension 1=Y }

var
v: DynamicArray;
x: real;
deg: byte;
i: integer;
// With dynamic array we can calculate Lagrange degree of N

function Mult(buf: DynamicArray; n, j, k: byte; x: real): real;
begin
if k > n then
result := 1
else if k = j then
result := Mult(buf, n, j, k + 1, x)
else
result := (x - buf[0, k]) / (buf[0, j] - buf[0, k]) * Mult(buf, n, j, k + 1, x);
end;

function Lagrange(buf: DynamicArray; n, j: byte; x: real): real;
begin
if j <= n then
begin
result := Mult(buf, n, j, 0, x) * buf[1, j] + Lagrange(buf, n, j + 1, x);
end
else
result := 0;
end;

begin
try
write('Enter Degree:');
readln(deg);
write('Enter X=');
readln(x);

setlength(v[0], deg + 1);
setlength(v[1], deg + 1);

for i := 0 to deg do { input Xi,Yi }
begin
write('Enter X', i, ':');
readln(v[0, i]);
write('Enter Y', i, ':');
readln(v[1, i]);
end;

writeln('X=', x:0:8, ' Lagrange=', Lagrange(v, deg, 0, x):0:8);

except
on E: Exception do
writeln(E.Classname, ': ', E.Message);
end;
readln;

end.


معرفی کتاب آموزش ساختمان داده‌ها در Delphi

کتاب The Tomes of Delphi™ Algorithms and Data Structures نوشته شده توسط Julian Bucknall و از انتشارات Wordware Publishing، یک کتاب فوق‌العاده جالب است که کلیه مباحث درس ساختمان داده‌ها (Data Structures) را در Delphi پیاده‌سازی کرده است. (کلاً مجموعه کتابهای “The Tomes of Delphi”، موضوعات بسیار نابی دارند)

این کتاب در 12 فصل تهیه شده و از مباحث ساده و پیش پا افتاده ساختمان داده‌ها مانند آرایه، صف و پشته، گرفته تا مباحث پیشرفته‌ای مانند الگوریتمهای مولد اعداد تصادفی، Hash Table ها، فشرده‌سازی داده‌ها و صفوف اولویت را پوشش داده است. (حتی بخشهایی از کتب طراحی الگوریتم را نیز پوشش می‌دهد)

data structure in delphi

سرفصلهایی که بیشتر مورد توجه من قرار گرفت:

– روشهای مرتب سازی Shell Sort و Comb Sort از فصل 5
– پیاده‌سازی Heap و عملیات در آن از فصل 9
– مبحث Bit Streams و روشهای فشرده‌سازی از فصل 11

لیست فصلهای این کتاب:

  • Chapter 1 What is an Algorithm
  • Chapter 2 Arrays
  • Chapter 3 Linked Lists, Stacks, and Queues
  • Chapter 4 Searching
  • Chapter 5 Sorting
  • Chapter 6 Randomized Algorithms
  • Chapter 7 Hashing and Hash Tables
  • Chapter 8 Binary Trees
  • Chapter 9 Priority Queues and Heapsort
  • Chapter 10 State Machines and Regular Expressions
  • Chapter 11 Data Compression
  • Chapter 12 Advanced Topics


  • آرشیو:

  • .
    Copyright (c) 2010 www.mshams.ir