الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

لغة C مواضيع لا تتطرق اليها الكتب

بدأه VISUAL C++ في 3 أكتوبر 2009 · 11 رد · 1,933 مشاهدة · في المواضيع والدروس
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بســم الله الـرحمــن الرحيــم

غالبا ما تجد الكتب تتطرق الى الشرح القياسي للغة السي مثلا ( المتغيرات , الانواع , المصفوفات , الحلقات, .........)

ولا تتطرق الى اعمق من ذلك , مثلا عمليات البت , الكرافيك , التعامل مع منافذ الحاسب المؤشرات البعيده FAR Pointers

سابدأ إن شاء الله بشرح بسيط على قدر امكانيتي حول ما ذكرته من مواضيع لا يتم ذكرها من قبل الكتب القياسيه (العمليات على مستوى البت , الكرافيك , منافذ الحاسب , المؤشرات البعيده)

1- العمليات على مستوى البت :

* عملية AND & البتيه وهي ليست AND المنطقيه && تقوم بعملية الضرب البولياني بين البتات مثال عنها res=byte1 & byte2 يتم الضرب البولياني بين كل من البتات المتقابله بين المتغيرين.

* عملية OR وهي مثل سابقتها تختلف عن OR المنطقيه وممكن تطبيقها على المثال السابق باستبدال الرمز & بالرمز | حيث تجري عملية الجمع البولياني بين المتغيرين .

* عملية Exlusive OR تماما كسابقاتها ورمزها هو ^ تجري عملية (أو) الحصريه بين المتغيرين.

* العاكس NOT يقلب كل بت الى معكوسه من واحد الى صفر والعكس بالعكس , مثال : ;A=~A يتم قلب كل بت الى معكوسها وخزن النتيجه في المتغير A

وايضا عمليات التزحيف البتي:

وتتضمن الازاحه لليمين << والازاحه لليسار >> , طبعا التزحيف يكون بعدد مرات رقم نحن نحدده

مثال حول ذلك ;int x =2

;x>>1

لكي نحسب القيمه نحول 1 الى النظام الثنائي 00000010 وتزحف كل بت الى اليمين بمقدار 1 ويتم ادخال اصفار من جهة اليسار بمقدار 1

فيكون الناتج 00000001 وتصبح قيمة x الجديده 1

نفس الكلام ينطبق على التزحيف من جهة اليسار ولكن بشكل معاكس

اتمنى ان لايكون الموضوع مكرر , وإن شاء الله اكمل الشرح لاحقا حول الكرافيك .

تم تعديل هذه المشاركة بواسطة VISUAL C++ في 3 أكتوبر 2009 في 14:26

اللهم صل على محمد وآل محمد كما صليت على ابراهيم وآل ابراهيم في العالمين
انك حميد مجيد

#2

السلام عليكم ...

أهلاً بك أخي العزيز, و أتمنى أن تكون أخاً لنا في المنتدى.

أرى أخي أن تقوم بجولة في القسم, فهناك مواضيع كثيرة جداً منذ عام 2000 و القسم يجذب المبرمجين العرب, و حاول أن تطرح موضوعاً جديداً لتجد التفاعل.

تحياتي...

تم تعديل هذه المشاركة بواسطة Khaled.Alshaya في 3 أكتوبر 2009 في 20:48

#3

اهلا بيك اخ خالد

أخي العزيز المنتدى ما شاء الله كبير جدا ولا املك الوقت الكافي لتصفح جميع المواضيع

لكن اعتقد ان استخدام عملية البحث تاتي بنتيجه قبل ان اضع موضوعا ابحث عن كلمات مشابهه

مع اني اعتذرت مقدما ان كان هناك تكرار لموضوع سابق , ياريت اي احد يقرأ المواضيع لاي كاتب كان

لا يتردد بالرد ولو على سبيل الانتقاد , مثلا (الموضوع مكرر) ,لاحظت انه حتى الاسئله لا تلقى اهتماما يذكر

فنحن هنا للاستفاده , حتى لو كان سؤالي قد عفا عليه الدهر فاجابته من قبل الاخوه هوه ما احتاجه

نصيحتك اعتز بها وشكرا لك .

تم تعديل هذه المشاركة بواسطة VISUAL C++ في 3 أكتوبر 2009 في 22:45

اللهم صل على محمد وآل محمد كما صليت على ابراهيم وآل ابراهيم في العالمين
انك حميد مجيد

#4

شكراً على الموضوع

ولكني اعتقد ان بعض الامور التي طرحتها تعد موضيع مستقله عن ال ++C مثل الجرافيك التي هي في الاصل عالم لوحدها .

اما عن ال bit manipulation فلا اعتقد انك سترها الا في كتب الاسمبلي لانها حسابات وليست جزء من اللغه .

وال FAR Pointers لاوجود لها في ال ++C وهي من ايام ال dos وال 8086.

اما موضوع ال التعامل مع منافذ الحاسب فهو موضوع مهم وهو يحتاج ان يأخذ حقه بالمناقشه لانه حقاً موضوع مهم وله علاقه باللغه ولا كن احياناً يكون تدخل نضام التشغيل بأستخدامه لا يمكن وضع stander له على جميع منصات التشغيل على ما اعتقد

تم تعديل هذه المشاركة بواسطة Ali Al-Zyoud في 3 أكتوبر 2009 في 23:04

1
#5

عزيزي اقرأ العنوان جيدا " لغة سي القياسيه" نعم الموضوع حول نظام الدوز والـــ 8086 انا لم اذكر ++C

الموضوع قديم ,, ولن اتابع فيه ,,,, شكرا للجميع .

اللهم صل على محمد وآل محمد كما صليت على ابراهيم وآل ابراهيم في العالمين
انك حميد مجيد

#6

Ansi C does not have any notion of Far or near pointers.

#7

السلام عليكــم ورحمـة الله وبركاتــه ،،

VISUAL C++ كتب:
عزيزي اقرأ العنوان جيدا " لغة سي القياسيه" نعم الموضوع حول نظام الدوز والـــ 8086 انا لم اذكر ++C

الموضوع قديم ,, ولن اتابع فيه ,,,, شكرا للجميع .

أرى العكس، من الأفضل أن تواصل في الدرس. قد يكون تقديمك أكثر ثراء و معاير لماهو موجود أو حتى بأسلوب أفضل.

بالإضافة إلى أن هناك متابعين للموضوع.

هناك أسئلة لا تجد مجيب لأننا مازلنا في عقلية الإستهلاك و لم نتعلم بعد مشاركة غيرنا ما نعرف

اقتباس
Ansi C does not have any notion of Far or near pointers

pointers in ansi C

#8
__abstract (3)
asm (1)
auto
bool (1)
__box (3)
break
case
catch (1)
char
class (1)
const
const_cast (1)
continue
default
__delegate (3)
delete (1)
do
double
dynamic_cast (1)
else
enum
__event (3)
explicit (1)
export (1)
extern
false(1)
__fastcall (2)
__finally (3)
float
for
friend (1)
__gc (3)
goto
__identifier (3)
if
inline (1)
int
long
mutable (1)
namespace (1)
new (1)
__nogc (3)
operator (1)
__pin (3)
private (1)
__property (3)
protected (1)
public (1)
__published (2)
register
reinterpret_cast (1)
return
__sealed (3)
short
signed
sizeof
static
static_cast (1)
struct
switch
template (1)
this (1)
throw (1)
true (1)
try (1)
__try_cast (3)
typedef
typeid (1)
__typeof (3)
typename (1)
union
unsigned
using (1)
__value (3)
virtual (1)
void
volatile
wchar_t (1)
while

لا ارى far على ما يبدوا ؟؟

#9

الاخ العزيز بن العيد جزاك الله كل خير....

حقيقة يسعدني تواجدك وقرائتك للموضوع , اشكر لك ردك الراقي

وإن شاء الله لن اترك الموضوع مادام هذا هو رأيك

فعلا نحن لحد الان بعقلية المستهلك , وانا ما دفعني لتقديم الموضوع هذا او غيره

الا لكوني لا احب ان آخذ فقط , بل ارى ان اساهم على قدر امكانيتي واعتقد من العيب

ان ياتي شخص ما ليسجل في المنتدى فقط ليستفيد , :blush: وجدت احد الردود المثبطه

ماذا افعل هل من المعقول ان تكون جميع المواضيع التي تحضى بالمتابعه هي عظيمه لهذه الدرجه

فقررت ان اضع اسئله كنت ابحث لها عن اجابه ولم اجد , مادامت الامكانيات عظيمه لماذا لا استغلها

فلا الاسئله اجيبت ولا المواضيع خارقه الى هذا الحد , النتيجه النهائيه (لا اجيب اسئلتك ,و لا تضع الا المواضيع الجباره)

اللهم صل على محمد وآل محمد كما صليت على ابراهيم وآل ابراهيم في العالمين
انك حميد مجيد

#10

الكرافيك باستخدام لغة C

الكرافيك الذي سنتحدث عنه هو الكرافيك في نظام dos والمحدد بــ 16 لون لان الموضوع يتناول اساسيات لغة سي

لجنة مقاييس ومعايرة اللغات الامريكيه Ansi لم تقرر دوال الكرافيك المقدمه من مختلف الشركات مثل بورلاند والمتوفره على شكل مكتبه LIB والتي من اجل استخدامها

نحتاج ملف للتصريح عنها مثل GRAPHICS.H او SCREEN.H على العموم ان تلك المكتبات غير مقرره

لذلك ولفترة طويله بقيت اتسائل اذا لماذا لا استخدم دوال من برمجتي , قد يقول قائل انها موجوده اصلا , صحيح , لكن قلة المصادر في بلدي

جعلتني اشتقها بنفسي واعمل عليها واضعها في ملفات header.h لاستخدامها لاحقا

بقيت ابحث عن مكتبات تخص لغة سي والمبنيه داخلها اي من غير مكتبات الكرافيك المضافه

وجدت الكلمه المحجوزه داخل لغة سي وهي asm وفعلا كتبت كود للتحويل الى نمط الفيديو ثم رسم عناصر الصوره pixels وهذا هو الكود لتغيير نمط العرض ووضع pixel :

		main ()
				{
				 asm  mov ah,00   
				 asm  mov al,03		 /*  set video mode */
				 asm int 10h		 
			   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
				 asm mov ah,0ch	
				 asm mov al,10		 /*   color of pixel  */
				 asm mov bh,0		 /*	page number 0   */
				 asm mov cx,20		/*   column			 */
				 asm mov dx,20		/*	row	*/
				 asm int 10h			/*	bios interrupt	 */
				 }

inline assembler استخدام لغة الاسمبلي لمقاطعة الــــ bios 10h لغرض برمجة عنصر الصوره

غير ان هذا الاجراء غير معترف به وغير مستخدم من قبل لجنة ansi كما انه ليس مستخدم الا من بعض مترجمات سي

بعدها وجدت مكتبة dos والمعرفه في الملف dos.h وفيها دوال ممكن عمل مقاطعه للـ bios بواسطتها وهي

int86 , int86x وايضا ممكن استخدامها لرسم عنصر الصوره في الكود السابق وكالاتي :

include <dos.h>

main ()
{
  union REGS regs;

regs.h.ah = 0x00;  /* function 00h = mode set */
regs.h.al = 0x13;  /* 256-color */
int86(0x10,&regs,&regs); /* do it! */
/************************************/

union REGS regs;

regs.h.ah = 0x0C;   /* function 0Ch = pixel plot */
regs.h.al = color;
regs.x.cx = 20;	  /* x location, from 0..319  */
regs.x.dx = 20;	  /* y location, from 0..199  */
int86(0x10,&regs,&regs);
}

مكتبة دوز ايضا غير مقرره من قبل معهد المقاييس الامريكي , الحصيله النهائيه لم استطع عمل الكرافيك باستخدام مترجمات ansi بالرغم من اني اعتقد ان هنالك امكانيه لذلك لكني لم اصل اليها , غير اني تعلمت امور اساسيه في هذه اللغه ما كنت اعرفها

على العموم من دوال رسم pixels نستطيع وضع دوال رياضيه لرسم اشكال (خطوط ومنحنيات , دوائر وقطوع , مستطيلات, ..... )

ولمن يسال عن هكذا دوال إن شاء الله اساعده في ذلك .

الى لقاء مع منافذ الحاسب .

تم تعديل هذه المشاركة بواسطة VISUAL C++ في 6 أكتوبر 2009 في 16:39

اللهم صل على محمد وآل محمد كما صليت على ابراهيم وآل ابراهيم في العالمين
انك حميد مجيد

#11

منافذ الحاسب Ports

منافذ الحاسب بالنسبه لهذا الموضوع ممكن اعتبارها قطع الادخال والاخراج المرتبطه بالحاسب وهي قطع HardWare وظيفتها توصيل الجهاز بالعالم الخارجي من قراءة مدخلات و اعطاء نتائج , لكي نتمكن من الوصول لتلك المنافذ (لاعطاءها اخراجات او قراءة مدخلاتها) يجب عنونتها ولكل منفذ عنوان وحيد ولكن قد يختلف من نظام لاخر , الصيغه العامه لقراءة منفذ (x=inport (portAddress نخزن في المتغير x القيمه المقروءه من المنفذ ذي العنوان portAddress وهذه الصيغه لمجرد التوضيح

الصيغه التاليه لاخراج معطيات الى منفذ ما (outport (portAddress,Data وهذه الصيغه ايضا لمجرد التوضيح

ما يهمنا هنا كيفية عمل ذلك بلغة C , والمساله سهله جدا , الكود التالي يعطي القيمه 2 الى منفذ الطابعه :

#include <conio.h>  /*	غالبا نحتاج هذا الملف  */
#include <dos.h>	 /*   بعض المترجمات تحتاج هذا الملف  */

main ()
{   
	 outp (0x378 , 2);
}

اما بالنسبه لقراءة المعطيات من منفذ ما فالكود التالي يؤدي الغرض :

#include <conio.h>  /*	غالبا نحتاج هذا الملف			  */
#include <dos.h>	 /*   بعض المترجمات تحتاج هذا الملف  */
#include <stdio.h>   /*   لا يحتاج الى شرح					*/
main ()
{   
	 int x;
	 x=inp (0x378);
	 printf ("%d",x);   /*  طباعة القيمة المقروءه من المنفذ	*/ 
}

طبعا ليس شرطا ان يكون منفذ الطابعه , اي منفذ نرغب بالعمل عليه فالكود قادر على الادخال والاخراج اليه

والكود صحيح بالنسبه للغة ++VC الا انه في مترجمات مايكروسوفت للغة سي و سي++ نكتب بدلا من inp , outp التالي inp_ و outp_

الاكواد المذكوره اعلاه تعمل بشكل صحيح من انظمة dos ولغاية نظام Windows Me

في حالة انظمة NT و XP تظهر مشكله في التنفيذ وليس وقت بناء البرنامج

هذه المشكله هي عباره عن تصادم في موارد النظام وممكن حلها بسهوله بواسطة ملف ActiveX والمسمى hwinterface.ocx

نضعه في فولدر System الموجود داخل فولدر Windows ثم نسجله من قائمة RUN كالتالي :

regsvr32 c:\windows\system\hwinterface.ocx

بعد تسجيل الملف تتم الادخالات والاخراجات بشكل طبيعي .

اللهم صل على محمد وآل محمد كما صليت على ابراهيم وآل ابراهيم في العالمين
انك حميد مجيد

#12

المؤشرات البعيده far pointers

عذرا للاخ المشرف بن العيد اعتقد انك تعطيني العذر الان لترك الموضوع , انما لكي تعلم باني متابع ولم اهمله

واني لم احب ان اخالف رايك فاكملت الى الحد الذي رايته , ربما ليس الجانب العلمي وحده الذي نهتم فيه و يحركنا

وانا الان متأكد من ذلك .

تم تعديل هذه المشاركة بواسطة VISUAL C++ في 10 أكتوبر 2009 في 17:09

اللهم صل على محمد وآل محمد كما صليت على ابراهيم وآل ابراهيم في العالمين
انك حميد مجيد

مواضيع مشابهة