-
المساهمات
92 -
تاريخ الانضمام
-
تاريخ آخر زيارة
آخر الزوار
لوحة آخر الزوار معطلة ولن تظهر للأعضاء
إنجازات Abdelrehman Elsied
عضو نشيط (3/3)
147
السمعة بالموقع
-
سلام عليكم. هل يمكن لأحد أن يعطيني فكرة لمسائل برمجية بلغة البايثون ثم يقيمها لي.
- 2 اجابة
-
- 2
-
-
هل فكرة عمل كود مشترك تعمل دالتين أو أكثر به هي الوراثة في اللغات كائنية التوجه. الاحظ في بعض الألعاب (القديمة مثل IGI 2000) أن أكثر من شخصية من شخصيات الأعداء تتشارك نفس الصوت و نفس ال(animation) عندما تقتل. هل يضطر المبرمجين لكتابة نفس الأكواد لكلا الشخصيتين المختلفتين.
- 3 اجابة
-
- 1
-
-
السلام عليكم. في الكود التالي: #include <stdio.h> #include <stdlib.h> #include <stdbool.h> // global variables & constants #define NEXT 2 // represent a tree typedef struct node { int number; struct node* next[NEXT]; // [0] for left subtree and [1] for the one on right } node; // functions prototypes node* allocate_node(int number); node* find_parent(node* tree, int number); bool check(node* tree, int number); int main(void) { // tree: the root of tree - n: to allocate new memory for nodes node* tree = NULL; node* n = NULL; // array to insert const int SIZE = 7; const int numbers[SIZE] = {5, 7, 2, 6, 8, 2, 4}; // insert items automatically for (int i = 0; i < SIZE; i++) { n = allocate_node(numbers[i]); // n is the root if tree empty if (!tree) { tree = n; } else { // temp holds the address of the right parent of n node* temp = find_parent(tree, numbers[i]); // insert right or left if (numbers[i] > temp->number) { temp->next[1] = n; } else { temp->next[0] = n; } } } // try checking x int x = 50; printf("%sFound\n", check(tree, x) ? "" : "Not "); // well done! return 1; } // func1: allocating new memory node* allocate_node(int number) { node* new = NULL; new = malloc(sizeof(node)); if (!new) { exit(0); } new->number = number; for (int i = 0; i < NEXT; i++) { new->next[i] = NULL; } return new; } // func2: find the parent of a node node* find_parent(node* tree, int number) { if (!tree) { return NULL; } node* temp = tree; while (temp->next[0] || temp->next[1]) { if (number > (temp->number)) { if (temp->next[1]) { temp = temp->next[1]; continue; } return temp; } else { if (temp->next[0]) { temp = temp->next[0]; continue; } return temp; } } return temp; } // func3: search in BST bool check(node* tree, int number) { // iterative for goes through the tree for (node* temp = tree; temp; ) { // found? if (number == temp->number) { // yeah :) return true; } // go right if target greater than temp->number else if (number > (temp->number)) { temp = temp->next[1]; continue; } // go left if not temp = temp->next[0]; } // not found :( return false; } كلا دالتي البحث و إيجاد الأب للعقد الجديدة متشابهين لحد كبير. هل يمكن بطريقة أو بأخري تقليل عدد أسطر الكود. أو بمعني اَخر, هل يمكن تخزين الأسطر المتشابهة بين الدالتين في مكان ما ثم أستدعاء تلك الأسطر في كلا الدالتين أو شيئ من هذا القبيل.
- 3 اجابة
-
- 1
-
-
لفهم ال Hash Table أو كي أطلق علي نفسي أني أفهمه, هل يجب أن أخترع (أو أفكر/أبتكر دعنا نقول) خوارمية تجزئة/توزيع العناصر علي ال Hash Table. فمثلا خوارزمية مثل djb2 أفهما و أفهم كيف توزع العناصر علي الجدول لكن حتي الاَن لا يمكنني إبتكار خوارزمية لتوزيع العناصر (أو دعنا نقول خوارزمية توزع العناصر بشكل جيد علي الجدول). لفهم ال Hash Table أو كي أطلق علي نفسي أني أفهمه, هل يجب أن أخترع (أو أفكر/أبتكر دعنا نقول) خوارمية تجزئة/توزيع العناصر علي ال Hash Table. فمثلا خوارزمية مثل djb2 أفهما و أفهم كيف توزع العناصر علي الجدول لكن حتي الاَن لا يمكنني إبتكار خوارزمية لتوزيع العناصر (أو دعنا نقول خوارزمية توزع العناصر بشكل جيد علي الجدول). لماذا لا نجعل الدلو شجرة بدلا من قائمة مترابطة. فهذا سيسرع البحث كثيرا خصوصا إن كانت الدلو يحوي عدد كبير نسبيا من الكلمات. أم أن هذا لا يعتبر أنسب حل في مثل هذه الحالات لأنه بطبيعة الحال, العقدة في الشجرة تحمل مؤشرين مما سيزيد من الذاكرة المستهلكة.
-
Abdelrehman Elsied بدأ بمتابعة استفسار بخصوص Hash Table
-
سلام عليكم. لدي أستفسار بخصوص ال Hash Table: إذا كان لدينا قاموس ضخم (فلنأخذ قاموس اللغة الأنجليزية كمثال) فإن أنسب هيكل بيانات لتخزين القاموس هو ال Hash Table لما يوفر من سرعة ثابتة علي حساب الذاكرة. كالمثال التالي: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <cs50.h> #include <ctype.h> // Global variables #define ALPHABETS 26 #define MAX 35 // Struct node typedef struct node { string word; struct node* next; } node; // Functions prototypes void EXIT(string msg); node* find_tail(node* head); void insert_node(node** head, string word); void print_linked_list(node* head); void free_linked_list(node* head); int main(int argc, string argv[]) { if (argc != 2) { EXIT("Usage: ./dictionary [N of words]\n"); } short n_of_words = atoi(argv[1]); if (!strcmp(argv[1], "0")) { EXIT("No words added\n"); } else if (!n_of_words) { EXIT("Invalid input\n"); } else if (n_of_words > MAX) { printf("%i ", MAX); EXIT("is the max number\n"); } // Hash table starts here node* dictionary[ALPHABETS] = {NULL}; // Take vocabularies & insert them for (int i = 0; i < n_of_words; i++) { string vocabulary = get_string("Word: "); short hash = toupper(vocabulary[0]) - 'A'; insert_node(&dictionary[hash], vocabulary); } // Print & Free dictionary for (int i = 0; i < ALPHABETS; i++) { printf("%c: ", i + 'A'); if (dictionary[i]) { // print current bucket print_linked_list(dictionary[i]); printf("\n"); // free current bucket free_linked_list(dictionary[i]); } else { printf("\n"); } } } // func1: Exit program function void EXIT(string msg) { printf("%s", msg); exit(0); } // func2: To find the tail of a linked list node* find_tail(node* head) { if (!head) { return NULL; } node* temp = head; while (temp->next) { temp = temp->next; } return temp; } // func3: To insert a node to a linked list void insert_node(node** head, string vocabulary) { node* n = malloc(sizeof(node)); if (!n) { return; } n->word = vocabulary; n->next = NULL; if (!*head) { *head = n; return; } find_tail(*head)->next = n; } // func4: To print linked list items void print_linked_list(node* head) { for (node* temp = head; temp; temp = temp->next) { printf("%s ", temp->word); } } // func4: To free linked list void free_linked_list(node* head) { while (head) { node* temp = head->next; free(head); head = temp; } } أعرف أنها طريقة سيئة لتخزين الكلمات؛ إذ أردنا البحث عن كلمة ما في القاموس, فنعم سنختصر الكثير من الوقت لأننا نعلم في أي Bucket سنبحث, لكن ما زال البحث بطئ (أو حتي بنفس البطئ) لأن البرنامج سيضطر للمرور علي عناصر ال Linked List واحدة تلو الأخري. لذلك قاموا بتوسيع الجدول كي تتقسم العناصر أكثر و أكثر (كل هذا علي حساب الذاكرة). هل يمكن لأحدكم أن يشرح لي هذا التقسيم (في مثال القاموس تحديدا). كما أن هناك عملية تتم علي الكلمات كي نجد ال Bucket بنفس الوقت, ما هي هذه العملية.
- 3 اجابة
-
- 1
-
-
- 3 اجابة
-
- 1
-
-
هل يمكن لأحد أن يعطيني خريطة مفصله للأشياء الواجب معرفتها لعمل صفحه أسئله مثل التي نراها في أي موقع دورات.
- 3 اجابة
-
- 1
-
-
شكرا لك. لدي فقط سؤال أخير. لا يمكن مقارنه string ب string اخر لأن كلاهما مؤشران يحملان قيم مميزه. لكن أنظر لهاتين الصورتين. كود طبع same و اخر different.
- 3 اجابة
-
- 1
-
-
السلام عليكم. لدي بعض الأسئله بخصوص ال pointers: 1. بما أن ال pointer هو فقط رمز أو عنوان يميز المتغيرات في الرام, فما فائده أسماء المتغيرات. فهي أيضا تقوم بنفس الوظيفة. و اللغه لا تسمح بتكرار تلك الاسماء. فما فائده ال pointers هنا. 2. ال pointer يحمل رقم hexa يشير لمكان ما أو رقم خانة (بايت) في الذاكرة. فمثلا لو 0x63dfaa380004 فهو يشير للبايت رقم 109812284653572 أي يشير لبايت واحد فقط. لكن المتغيرات من النوع int او short او غيره تخزن في أكثر من واحد بايت. فكيف يصل للقيمة رغم تأشيره علي بايت واحد من الأربعه أو الثمانيه. 3. في الكود التالي: #include <stdio.h> #include <cs50.h> int main(void) { string s = "HI!, hello"; // s[0]='H' s[1]='I' s[2]='!' s[3]='\0' printf("size of s[0]: %lu\n", sizeof(s[0])); // char is stored 1 byte printf("size of HI!: %lu\n", sizeof(s)); // size of s should be 4 bytes. but why and how 8 bytes } حجم ال s[0] واحد بايت. اليس من المفترض ان يكون حجم ال string اربعه بايت. الكود يخرج 8 دائما. جربته علي compiler اخر و اخرج 32 ايضا دائما. أرجو التوضيح لأنني لا أفهم. و شكرا علي مجهودكم.
- 3 اجابة
-
- 1
-
-
سلام عليكم. حاولت تطبيق خوارزميه ال Bubble Sort بلغه ال C++. #include <iostream> using namespace std; #define LEN 7 int main() { int numbers[] = { 1, 2, 5, 4, 7, 9, 3 }; int tmp; int check; for (int i = LEN-1; i >= 0; i--) { check = 1; for (int j = 0; j < i; j++) { if (numbers[j] > numbers[j + 1]) { check = 0; // swap numbers[j] & numbers[j+1] tmp = numbers[j]; numbers[j] = numbers[j+1]; numbers[j + 1] = tmp; } } if (check == 1) break; } for (int i = 0; i < LEN; i++) { cout<<numbers[i]<<"\n"; } } هل هذا الكود صحيح.
- 4 اجابة
-
- 1
-
-
اسف السؤال يتعلق بالخوارزميات و ليس الdata structure. أعذرني من فضلك. السؤال عن خوارزميه الselection sort. في هذا الكود, لماذا لا يظهر الرقم 7: #include <cs50.h> #include <stdio.h> int main(void) { int numbers[] = {4, 7, 2, 6, 3, 1, 2}; int max, LEN = 7, tmp; for (int i = LEN - 1; i >= 0; i--) { max = 0; for (int j = 0; j <= i; j++) { if (numbers[max] < numbers[j]) max = j; } // now I have the max index. swap it now. // swap between numbers[max] & numbers[LEN - 1] tmp = numbers[max]; // tmp 6 numbers[max] = numbers[LEN - 1]; // 2 numbers[LEN - 1] = tmp; LEN --; } for (int i = 0; i < 6; i++) { printf("%d ", numbers[i]); } printf("\n"); } و سؤال اخر, من فضلك. ما الوقت الذي يستغرقه دراسه خوارزميه مثل selection sort. لأنني أشعر انني اخذ وقتا اكثر من اللازم في فهم و تطبيق تلك الخوارزميات. و شكرا علي مجهودكم الطيب.
-
هل يمكنني سؤال أسئله في الData Structure في لغه السي.
- 3 اجابة
-
- 1
-
-
سلام عليكم في الكود التالي: let questions = [ ['Find X if 2X + 4 = 10', ['4', '3', '1', '5'], '3'], ['Find X if 5X + 4 = 24', ['4', '3', '1', '5'], '4'], [`What's the value of 12*3+4*2`, ['80', '168', '132', '20'], '20'], ['IF Y = 2X and X+Y = 6 Find X-Y', ['0', '4', '-2', '2'], '-2'], ['IF the area of square = 16 What is the length of its chord', ['4.33', '3.5', '5.65', '5.1'], '5.65'] ] function main(){ let userAnswer, userRes = 0; for(let i in questions){ do{ userAnswer = prompt(showQuestions(questions[i][0], Number(i)+1)); if(userAnswer === null){ if(confirm('Exit Quiz')){ if(confirm('Show Your Result')) alert(`You Got ${userRes}/${questions.length}`); return null; } else continue; }else if(userAnswer === ""){ continue;} else if(userAnswer === "h" || userAnswer === "H"){ // IDK } }while(isValidAnswer(userAnswer)); if(userAnswer == questions[i][2]){ alert("Right"); userRes++; continue; }alert("Wrong"); } alert(`You Got ${userRes}/${questions.length}`); } function showQuestions(ques, quesNum){ // let display = ''; // display += `${ques}\n`; // for(let i=1; i<=4; i++){ // display += `- ${answers[i-1]}\n`; // } return (`${quesNum}) ${ques}\n Enter h for help`); } function isValidAnswer(usrAns){ if(isNaN(Number(usrAns))){ alert("VALID INPUT") return 1; }return 0; } main(); أريد أن يظهر اجابات الأربعه الموجوده في الindex الثاني لكل سؤال اذا أدخل المستخدم h او H اختصارا ل help. حاولت لكن فشلت. و به خطأ لا أستطيع تنقيحه و هو أن المستخدم اذا أدخل نص فارغ عند الأجابه علي السؤال, يحتسبها خطأ بأعتبار أن undefined لا تساوي الindex الثالث للسؤال في المصفوفه.
- 1 جواب
-
- 1
-
-
السلام عليكم. في المسئله الشهيره Fibonacci و التي هي عباره عن تسلسل للأعداد بنائا علي الرقمين السابقيين حيث الرقم الحالي (أو المدخل) يجب أن يساوي مجموع الرقمين السابقين. هذه المسئله أعرف خطوات حلها. و هي كالتالي: قم بتعريف متغيريين. واحد يحمل القيمه السابقه(n1) و الثاني يحمل القيمه التي تسبقها(n2). قم بأخد عدد مرات الأرقام المدخله. أنشئ حلقه تسأل المستخدم عن الرقم بنفس عدد تلك المرات (n) اذا كانت القيمه لا تساوي مجموع الرقمين السابقين, أسأله مره أخري. و اذا كانت صحيحه بالفعل: أجعل القيمه السابقه n1 مساويه للرقم المدخل. أجعل القيمه التي تليها n2 مساويه للقيمه n1. لكن لم أستطيع تمثيلها ككود. و أحيانا كثيره تأتيني أفكار أو أبحث عن مسائل و أعرف طرق الحل ولا أستطيع حلها (ككود). أين المشكله هنا. و هذا هو حلي. // Fibonacci let n = 5; // number of input numbers let n1 = 0; let n2 = 1; for(let i=0; i<n; i++){ do{ input = prompt(`${n1} - ${n2}`); }while(input !== n1+n2); n1 = n2; n2 = input; } و شكرا علي مجهودكم.
- 1 جواب
-
- 3
-
