• 0
khaled_prg

اسأل ونحن نجيبك

سؤال

السلام عليكم

سعيا منا في إعادة نشاط هذا القسم (الذي يشهد هذه الأيام حالة من النوم العميق) قمنا بطرح هذا الموضوع الذي نطمح من خلاله إلى التواصل مع كل من يملك سؤالاً و يريد أن يجد له جواباً شافيا كافياً :)

حتى يكون الموضوع منظم سنضع سوية مجموعة قوانين و وقواعد نلتزم بها حفاظا على موضوعية النقاش :

  • هذا الموضوع ليس لحل الواجبات .. على الإطلاق !
  • إذا كان لديك "تمرين" تود مناقشته معنا فقم بإدراج محاولتك أنت أولا.
  • يُمنع كتابة الأسئلة بغير العربية.
  • لدى إضافتك لأي سؤال تأكد أنه لم يطرح من قبل.
  • قبل أن تضع سؤالك تأكد أنه تمت الإجابة على السؤال السابق.
  • يُمنع إضافة أكثر من سؤال في نفس الوقت.
  • إذا مضت على أحد الأسئلة 3 أيام دون وجود إجابة, سيتم تعليق السؤال إلى إشعار آخر.
  • أي مشاركة تُخالف إحدى هذه القواعد سيتم حذفها دون سابق إنذار و إذا تكررت المخالفة سيتم إنذار العضو.
نبدأ الآن مع أول سؤال, على بركة الله :)


فهرس الأسئلة (قيد التحديث)


تم تعديل بواسطه محمد عودة
أضافة فهرس للمجموعة
2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

42 إجابة على هذا السؤال .

  • 0

لدي عدة مُحاولات لكن لم أصل بعد إلى محاكاة الشكل الحقيقي للفئة string.

و أنت ؟

خالد أنا لا أقصد محاكاة او غيره أنا أقصد انك تستخدم اعادة حجز للمصفوفة المحلية local فى فئتك فى البانى constructor الذى يستقبل مصفوفة حرفية *char

انظر الكود التالى



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

char * string_in()
{
char c = 0;
char * tmp = NULL;
int length = 100;
int size = -1;
tmp = (char *) calloc(sizeof(char), length);

while((c = getchar()) != '\n')
{
if(size++ == length) length += length,tmp = (char *) realloc(tmp, sizeof(char) * length);
if(tmp == NULL)
{
printf("No free memory for string!\n");
exit(-1);
}

tmp[size] = c;
}

tmp = (char *) realloc(tmp, sizeof(char) * size);
if(tmp == NULL)
{
printf("No free memory for string!\n");
exit(-1);
}

return tmp;
}

int main(int argc, char ** argv)
{
char * str = NULL;
printf("Your text :\n");

str = string_in();

printf("Your Text : %s \nSize = %d \n", str, strlen(str));
free(str);
return 0;
}


هذا لايعنى ان C هى ++C او Java ولكن اخفاء الخطوات الداخلية عن ال end user لا يعنى انه اختراع :)

تحياتى

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الحجز و التحرير اليدوي باستخدام المؤشرات مفيد جداً و لكن له كوارثه الخاصة ..

فمثلا عند إدخال نص كبير جداً ستحدث عمليات حجز و تحرير بالآلاف أما في الــ GC فالأمر يكون أسرع و غير مكلف أيضاً لأن الحجز يتم على مستوى الــ memory blocks.

يقوم الــ GC بالحجز و التحرير عن طريق القيام بالــ processing blocks و بالتالي إذا تم إنشاء/هدم 1000 كائن فإن الــ GC سيحجز و يحرر بضع مرات فقط, في هذه الحالة سيكون الأمر أفضل بكثير من حجز و تحرير الذاكرة بشكل يدوي.

مثلا, لو أردنا تنفيذ الكود التالي :

for (int i=0; i<1000; i++) {
Object temp = new Object[1024];
}

إذا تم الحجز بصفة يدوية سنحصل على 1000 عملية حجز/تحرير أما في الــ GC فسيتم تجميع عمليات الحجز و بالتالي ستكون التكلفة أقل.

لو قمنا بتنفيذ الكود السابق باستخدام الخيار -verbose:gc الذي يُظهر عمليات الحجز التي يقوم بها الــ GC ستكون النتيجة :

[GC 892K->105K(5056K), 0.0016256 secs]
[GC 998K->105K(5056K), 0.0005996 secs]
[GC 999K->105K(5056K), 0.0002923 secs]
[GC 1001K->105K(5056K), 0.0001104 secs]

تحياتي.

تم تعديل بواسطه khaled_prg
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم اخي العزيز

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

لكن بدل من اطلب منه ان يدخل رقم الخيار كما في الصورة

LRlY1.png

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

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

سوال اتمنى اجابته

ابى شوركم

ابى ادخل دوره برمجه

لدي خبر بسيطة بالاكسس

وحاب اطور نفسي

بس ايت الافضل للمستقبل الوظيفي والتطوري

علم باني موظف بقسم تقنية المعلومات شغالين على asp.net و الاركل

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

يُمكنك فعل الأمر باستخدام دوال الــ API, هذا مثال كتبتُه لك ع السريع :

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

void Display() {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
puts("\n\t\t\tConsole Menu BY khaled_prg :)");
puts("\n");
}

void colorItem(int numOfItem) {
switch (numOfItem) {
case 1:
{
system("cls");
Display();
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15 << 4);
puts("1. Reading array");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
puts("2. Printing array");
puts("3. Exit");
};
break;
case 2:
{
system("cls");
Display();
puts("1. Reading array");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15 << 4);
puts("2. Printing array");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
puts("3. Exit");
};
break;
case 3:
{
system("cls");
Display();
puts("1. Reading array");
puts("2. Printing array");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15 << 4);
puts("3. Exit");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
};
break;
}
}

void displayChoice(int numOfChoise) {
switch (numOfChoise) {
case 1: puts("\n\t----- Reading array -----");
break;
case 2: puts("\n\t----- Printing array -----");
break;
case 3: puts("\n\t----- Exit Program -----");
break;
}
}

int main() {
system("title Console Menu by Kahled");
Display();
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);

puts("1. Reading array");
puts("2. Printing array");
puts("3. Exit");

int key1, key2, count = 0;

while ((key1 = getch()) != '\r') {
if (key1 == 224) {
key2 = getch();
if (key2 == 72 && count > 1) {
count--;
colorItem(count);
}
if (key2 == 80 && count < 3) {
count++;
colorItem(count);
}
}
}
displayChoice(count);

system("pause");
return 0;
}

صورة لتنفيذ البرنامج (انظر المرفقات).

يُمكنك تطوير المثال حسب ما يتوافق مع حاجاتك.

ابى ادخل دوره برمجه

لدي خبر بسيطة بالاكسس

وحاب اطور نفسي

بس ايت الافضل للمستقبل الوظيفي والتطوري

علم باني موظف بقسم تقنية المعلومات شغالين على asp.net و الاركل

تعلُّم السي و السي++ سيفيدك جداً من ناحية تطوير عقلية التفكير لديك.

ابدأ ببيئة الــ console ثم انتقل بعد ذلك إلى إحدى بيئات الـــ GUI.

أما بالنسبة لسوق العمل فالأكثر رواجاً في عالمنا العربي هو منتجات Microsoft.

تحياتي.

post-225348-022467300 1351096859_thumb.p

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

شكراً جزيلاً لك استاذ خالد وكل عام وانت بخير

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لا شكر على واجب عزيزي :happy:

قمتُ بتطوير الكود السابق على عجالة من أجل محاكاة القائمة التي تظهر في اسطوانة Hirens Boot :

post-225348-012691300 1351166286_thumb.p

و هذه قائمة الاسطوانة الأصلية :

post-225348-043741700 1351165582_thumb.j

الكود الجديد :

#include<stdio.h>
#include<conio.h>
#include<windows.h>
#define rows 9
#define color 11
#define bgcolor 7

void Display() {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color);
puts("\n\t\t\tConsole Menu BY khaled_prg :)");
puts("\n Hiren's All in 1 BootCD v 7.9 Menu");
puts("\n");
}

void colorItem(char **liste, int numOfItem) {
system("cls");
Display();

for (int i = 0; i < numOfItem; i++) {
printf(" %s\n", liste[i]);
}

printf(" ");
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), bgcolor << 4);
printf("%s\n", liste[numOfItem]);

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color);
for (int i = numOfItem + 1; i < rows; i++) {
printf(" %s\n", liste[i]);
}
}

void displayChoice(char **liste, int numOfChoise) {
printf("\n\n\t\t------- %s -------\n", liste[numOfChoise]);
}

int main() {
char *liste[rows] = {"1. Disk Partition Tools...", "2. Disk Clone Tools...",
"3. Antivirus Tools...", "4. Recovery Tools...", "5. Testing Tools...", "6. Hard Disk Tools...",
"7. System Info Tools...", "8. File Managers...", "9. Next..."};

system("title Console Menu by Kahled");
Display();
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color);

for (int i = 0; i < rows; i++)
printf(" %s\n", liste[i]);

int key1, key2, count = 0;

while ((key1 = getch()) != '\r') {
if (key1 == 224) {
key2 = getch();
if (key2 == 72 && count > 0) {
count--;
colorItem(liste, count);
printf("\nEnter a choice : %d", count + 1);
}
if (key2 == 80 && count < rows - 1) {
count++;
colorItem(liste, count);
printf("\nEnter a choice : %d", count + 1);
}
}
}
displayChoice(liste, count);

system("pause");
return 0;
}

البرنامج التنفيذي في المرفقات.

في خدمتكم دائما :)

Hirens Boot.rar

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

حسنا, هذه المرة سأطرح أنا سؤلاً و عليكم أنتم إيجاد حل منطقي له :)

السؤال بسيط جداً : ما هي مُخرجات الكود التالي بدون استخدام الــ Compiler (مع التعليل) :

#include<stdio.h>
int main() {
int a = 0, b = 0;
!!!a+++b++ ? printf("%d", ~(a | b)) : puts("");
return 0;
}

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

حسنا, هذه المرة سأطرح أنا سؤلاً و عليكم أنتم إيجاد حل منطقي له :)

السؤال بسيط جداً : ما هي مُخرجات الكود التالي بدون استخدام الــ Compiler (مع التعليل) :

#include<stdio.h>
int main() {
int a = 0, b = 0;
!!!a+++b++ ? printf("%d", ~(a | b)) : puts("");
return 0;
}

وعليكم السلام أخي خالد

قبل كل شيء نبارك لك هذا المجهود الرائع لتنشيط هذا القسم و إحياءه من جديدsmile.gif

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

a++; ==> 1
b++; ==> 1

X=a++;
Y=b++;

!!! a+++b++ ==> !!!X+Y ==> !X+Y ==> !1+1 ==1

!!!a+++b++ ? ==> !X+Y ? ==> 1? ==> if(1)

if(1) ==> printf("%d", ~(a | b)); ==> printf("%d", ~(1 | 1)); ==> printf("%d", ~1);

في الأخير سيصبح الكود هكذا

#include<stdio.h>
int main() {
1? printf("%d", ~1):puts("");
return 0;
}

تحياتي

تم تعديل بواسطه مومو (momo)
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

إجابة صحيحة أخي مومو, بارك الله فيك :)

الكود يطبع على الشاشة العدد -2 و السبب في ذلك هو أن ~1 تُعطي :

1111111111111111111111111111111111111111111111111111111111111110

و هُو ما يُساوي -2 في النظام العشري.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم ورحمه الله..

كل عام وانتم بخيير

ابغى اسالكم كيفيه تنفيذ for \if اذا كان فيه اكثر)nested( من for \if

واكثر من بلوك ؟؟

2) كيفيه الزياده والنقصان في برنامج؟؟

مثل:

int a,b,i,j;

i=j=3;

a=i++*5;

b=j++*5;

ولوسمحتوو ابغى رابط تحميل c++ 2006؟

ومشكوورين

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

ابغى اسالكم كيفيه تنفيذ for-if اذا كان فيه اكثر nested من for-if

واكثر من بلوك ؟؟

في حالة وجود أكثر من for loop, لنفترض 3 مثلا. سيتم تنفيذ جميع دورات الحلقة الثانية عند كل دخول إلى الحلقة الأولى و كذلك تنفيذ جميع دورات الحلقلة الثالثة عند كل دخول إلى الحلقة الثانية و هكذا دواليك ..

فمثلا لطباعة جدول الضرب للأعداد من 1 إلى 9 نكتب :

#include<stdio.h>

int main() {
int i, j;
for (i = 1; i < 10; i++) {
for (j = 1; j < 10; j++)
printf("%d * %d = %d\n", i, j, i * j);
printf("\n");
}
return 0;
}

لفهم الكود, خذي ورقة و قلم و حاولي محاكاة تنفيذ البرنامج من خلال مراقبة القيم التي تأخذها i و j أيضاً و في كل مرة اكتبي ناتج الجداء على الورقة و ستلاحظين أنك تحصلين على جدول ضرب عدد معين عند نهاية كل حلقة لأنه في كل مرة يتم تثبيت قيمة i و تأخذ j قيمها من 0 و حتى 9 و يتم حساب نتيجة الضرب و إظهارها على الشاىشة.

بعد ذلك, حاولي محاكاة تنفيذ الكود التالي :

#include<stdio.h>

int main() {
int i, j, x = 1;
for (i = 0; i != 10; i++) {
if (i % 2 == 0)
for (j = 9; j > 5; j--)
if (j - ++x > 6 || !(i - j < 1))
printf("i = %d, j = %d, x = %d\n----OoO----\n\n", i, j, x);
}
return 0;
}

الكود لا يحمل أي معنى, مجرد تطبيق عملي على تداخل الــ for-if أو ما يُسمى بالــ Nested loop.

كيفيه الزياده والنقصان في برنامج؟؟

مثل:

int a,b,i,j;
i=j=3;
a=i++*5;
b=j++*5;

الكتابة a=i++*5 تحوي داحلها أمرين في نفس الوقت, الأمر الأول هو إسناد القيمة i++*5 إلى المتغير a و الأمر الثاني هو زيادة i بواحد. طيب أي الأمرين سيُنفذ أولاً ؟ :)

هنا نعود إلى أولوية تنفيذ المؤثرات الحسابية لنجد أن مؤثر الضرب له الأولولة على مؤثر الزيادة البعدية و بالتالي يُمكننا تفكيك الكتابة السابقة إلى :

a = i * 5;
i = i + 1;

و النتيجة تكون :

a = 3 * 5 = 15
i = 3 + 1 = 4

نفس الشيء يحدث مع b.

الآن, لو سـألتك ما هي نتيجة العبارة a=++i*5 ؟

كيف سيكون جوابك ؟ :)

ولوسمحتوو ابغى رابط تحميل c++ 2006؟

تقصدين VC++ 6.0, الفيجوال ليس هو السي++, الأول عبارة عن IDE و الثانية عبارة عن لغة برمجة :)

تفضلي : Download Microsoft Visual C++ 6.0 (Full Version)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

أممممم .. ما رأيكم بالقليل من المزاح مع "المؤشرات" ؟ :)

حسناً, ما هي مُخرجات الكود التالي ؟ مع التعليل :

#include <stdio.h>

int main() {
char *str = "ENAC";

putchar(str[3]);
putchar(*(str + 3));
putchar(*(3 + str));
putchar(3[str]);

putchar("ENAC"[3]);
putchar(*("ENAC" + 3));
putchar(*(3 + "ENAC"));
putchar(3["ENAC"]);

return 0;
}

لا يُسمح باستخدام الــ Compiler :happy:

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مشكوووور اخوي

الله يعطييك العافيه

لوسمحت اذا ماعليك امر ابغاك تشرحلي البرنامج الثاني..

ولو سـألتك ما هي نتيجة العبارة a=++i*5 ؟

راح تزيد i قبل عمليه الضرب وتصبح 4

والناتج 20

:)

ان شاء الله صح :unsure:

تم تعديل بواسطه صعب تكراري
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لوسمحت اذا ماعليك امر ابغاك تشرحلي البرنامج الثاني..

الكود الثاني بسيط جداً, ضعي محاولتك لفهمه و أنا أصحهها لك.

راح تزيد i قبل عمليه الضرب وتصبح 4

والناتج 20

نعم, صحيح :)

بارك الله فيك.

ملاحظة :

تم تحديث المشاركة الأولى لتحتوي على فهرس الأسئلة مع الإجابات المقترحة و سيكون التحديث مستمر إن شاء الله.

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

أخوي عندي سؤال بسيط

هل يوجد للغة c++ بيئة برمجة مرئية متعددة المنصات مثل الــ Visual

وهل مكتبة windows.h لاتعمل إلى على الويندوز

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

هل يوجد للغة c++ بيئة برمجة مرئية متعددة المنصات مثل الــ Visual

السي++ "القياسية" لا تحتوي على مكتبات GUI لكن توجد عدة بيئات أو منصات مستقلة (تخضع لمعايير اللغة نفسها + أغلبها متعدد المنصات) سبق و أن تحدث عنها الأخ أحمد الشنقيطي في هذا الموضوع.

بالمناسبة, إن كنت تقصد MSVC++ فهو ليس متعدد المنصات بطبيعة الحال :)

وهل مكتبة windows.h لاتعمل إلى على الويندوز

مكتبة Windows.h تحتوي على دوال الــ API التابعة لنظام الويندوز و بالتالي لا يمكنها العمل على أي نظام آخر, هذا من جهة.

من جهة أخرى يمكنك استخدام Wine في Linux حيث تُقدم implémentation لــ windows.h.

تم تعديل بواسطه khaled_prg
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .