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

سؤال لخبراء السي

بدأه matrix007 في 9 أكتوبر 2008 · 16 رد · 1,367 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

كيف يمكنني رسم جدول بلغة السي وكيف يمكنني وضع المؤشر بداخل كل مربع فيها؟؟

وشكرا

#2

أين تريد الرسم (البرنامج ذو واجهة رسومية أم console فقط)؟

و ماذا تقصد بـ:

اقتباس
كيف يمكنني وضع المؤشر بداخل كل مربع فيها
#3

اشكرك يا اخي على الرد ... ما اقصده هو انني اريد ان ارسم جدول على ال Console باستخدام for Loop ويحدد عدد ال rows و columns عند بدء البرنامج وكل مرة تضغط فيها enter ينتقل من ال cell الاولى الى الثانية وهكذا حتى املاها بالارقام

وشكرا

#4

يمكن أن تستخدم مكتبه لgraphics وخاصه لعمل الجدول ، لأن رسم الجدول وبعدها التنقل في الخلايا يحتاج لدوال تتعامل مع الأبعاد لكي تنتقل بحريه فيها مثل داله gotoxy الموجوده في بورلاند ..

أبحث عن المكتبه graphics.h ، وعن BGI graphics Programming :

Turbo c++ graphics programming

Turbo c++ graphics Part 2

وهناك الكثير من الدروس والمقالات حول الرسم بهذه المكتبه ، وهي سهله في التعامل ،،

واذا لم ترد العمل في أصدارت تربو القديمه ، يمكنك أن تستخدم المكتبه الجديده والتي تعمل في مترجمات Gcc بلا مشاكل ، راجع درس محمد معاشر :

إحياء الـ Bgi من جديد على الـ Gcc

وهنا درس لكيفيه أستخدامها في DEV-C++:

WINBGIm Graphics

ويمكن أن تجد طرق أخرى بمكتبات ثانيه ، ربما يفيدك الشباب بشيء أخر ،،

بالتوفيق ،

تم تعديل هذه المشاركة بواسطة Wajdy Essam في 10 أكتوبر 2008 في 17:04

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#5

أخي وجدي الاقتراح الذي تتكلم عنه يطرح مشكلا

و هو التعامل مع الشاشة

استعملت نفس الطريقة من قبل مع pascal

تصبح الشاشة كلها graphic

و بالتالي إذا أردت إظهار نص فلن يتم ذلك بـ printf و إنما بدوال مخصصة لرسم النصوص

ربما الأخ يقصد استعمال ASCII

يمكن رسم جدول باستعمال الرموز التالية:

(الشكل و كود الـ ascii الخاص به)

│ 179
┤ 180
└ 192
┴ 193
┬ 194
┘ 217
┌ 218
─ 196
┼ 197
┐ 191
├ 195
┤ 180

┘ 217

و عليه يمكن إنشاء جداول بالشكل التالي:

  1.  
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. int main()
  6. {
  7.  
  8. printf("%c%c%c%c%c%c%c%c%c%cn",218 ,196, 196, 194, 196, 196, 194 ,196, 196, 191);
  9. printf("%c %c %c %c n",179,179,179,179);
  10. printf("%c%c%c%c%c%c%c%c%c%cn",195,196 ,196 ,197 ,196, 196, 197, 196, 196, 180);
  11. printf("%c %c %c %c n",179,179,179,179);
  12. printf("%c%c%c%c%c%c%c%c%c%cn",192,196 ,196 ,193 ,196, 196, 193, 196, 196, 217);
  13.  
  14.  
  15. return 0;
  16. }
  17.  

أخي matrix007

الآن لديك مثال عن كيفية إنشاء جدول

يبقى عليك الآن أن تعرف كيف تسقط هذه الأفكار على المطلوب منك

#6

فعلا ، لن تستطيع استخدام دوال الطباعه العاديه ، لأنك سوف تكون في Graphics Mode .

الجدول الذي طبعته صحيح ، لكن الأن كيف يمكن أن ترجع للخليه الأولى لكي تنتظر من المستخدم أي يدخل رقم ، ثم بعد أن يدخله يجب أن تتحرك للخانه الثانيه ، كيف يمكن ذلك ؟؟

على حد علمي لن يمكنك ذلك ، يعني بعد ما طبعت الجدول لن تستطيع الرجوع للخلايا أبدا ..

يمكن أن نستخدم طريقتك لعمل الجدول لكن On The Fly ، يعني نرسم الهيدر ، والخليه الأولى ، وبعدها ننتظر المستخدم ادخال قيمه ، ثم نرسم فاصل ، ونذهب للخانه الثانيه ، وووهكذاا ...

والله أعلم ،

http://informatic-ar.com منصة تعليمية عربية في علوم الحاسب والبرمجة

https://moalfat.com  للكتب الالكترونية والكورسات التعليمية

Everything we see now is just an engineering solution based on old science

#7

أستخدم الدالة SetConsoleCursorPosition في windows.h

تعمل نفس عمل gotoxy .

tvquran_6.gif

#8

وجدت هذه الدالة لدى بحثي على google

  1.  
  2. void gotoxy(int x, int y)
  3. {
  4. COORD c;
  5.  
  6. c.X = x - 1;
  7. c.Y = y - 1;
  8. SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
  9. }
  10.  

لتجنب تعقيدات SetConsoleCursorPosition في كل مرة ;)

#9

ncurses.h

على لينكس

http://en.wikipedia.org/wiki/Ncurses

http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/index.html

وبتشتغل على انظمه ثانيه مثل وندوز وماك ...

اضافه سريعه .. ايضا مكتبه conio.h تدعم ذلك .. نسيتها بسبب اني تركتها من زمان ههه

http://en.wikipedia.org/wiki/Conio.h

تم تعديل هذه المشاركة بواسطة openSUSE في 10 أكتوبر 2008 في 23:54

Be Happy

^_^

#11

مشكور جدا يا اخواني على تعاونكم معي زز أعتقد ان انسب حل هو حل الاخ djug ولكن مازال بعيدا عما اريد ان افعله .. فماذا لو اردت ان ارسم عدد محدد من ال rows و columns يحدده user هل هناك اي طريقة اخرى يمكن فعلها باسخدام ال Loop??

وشكرا

#12

يبدو انك لم تنتبه جيدا اخي العزيز

انت تريد رسم مثل هذه النوافذ لكي تعمل برنامجك ..

http://en.wikipedia.org/wiki/Text_user_interface

اذا ارجع للمصادر ..

اذا غير ذلك .. ابحث

Be Happy

^_^

#13

نعم اريد ان ارسم مثل هذه النوافذ ولكنها ثابتة اكنني اريدها تتحدد من البرنامج نفسه

#14

اذا ارجع للمراجع .. وابجث عن ncurses

Be Happy

^_^

#15

المشاركة رقم 5 ورقم 8 تؤدي المطلوب بالضبط فقط أستخدمها وحاول ستجد الموضوع سهل.

tvquran_6.gif

#16
اقتباس
هل هناك اي طريقة اخرى يمكن فعلها باسخدام ال Loop
اقتباس
المشاركة رقم 5 ورقم 8 تؤدي المطلوب بالضبط فقط أستخدمها وحاول ستجد الموضوع سهل.
اقتباس
أخي matrix007

الآن لديك مثال عن كيفية إنشاء جدول

يبقى عليك الآن أن تعرف كيف تسقط هذه الأفكار على المطلوب منك

أخي الفاضل لقد طرح الإخوة الأفكار الأساسية لعمل المطلوب

بقي الآن أن تجرب

جرب .. اطرح تجربتك هنا...و سنتناقش حتى نتعلم كلنا مع بعض ;)

#17

واخيرا توصلت للحل الذي اريده وهو ان يتمكن المستخدم من رسم جدول بتحديد عدد ال اعمدة والصفوف وذللك بعمل تعديل بسيط في كود الأخ djug

 
#include <stdio.h>
#include <stdlib.h>
#include<conio.h>

int main()
{
	  clrscr();
	  int n;
	  int i;
	  int y;
	  int j;
	  clrscr();
	  scanf("%d",&y);
	  scanf("%d",&n);
	getch();

	for(j=1;j<=y;j++)
	{
	for (i = 1; i <= n; i++)

	{

gotoxy(i*3,6+j*2);
printf("%c%c%c%c",218 ,196, 196, 191);
gotoxy(i*3,7+j*2);
printf("%c  %c ",179,179);
gotoxy(i*3,8+j*2);
printf("%c%c%c%c\n",192,196 ,196 ,217);
//printf("%d",i);
	}
	 }
			getch();
	return 0;
}

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