-
المساهمات
3552 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
34
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو سمير عبود
-
مرحباً ... حل هذا السؤال موجود في هذا الرابط و خوارزمية الترتيب المُستخدمة هي خوارزمية الترتيب بالتحديد و هناك العديد من خوارزميات الترتيب يُمكنك الإطلاع عليها و قراءة الشرح الخاص بها من هنا: خوارزميات الترتيب على موسوعة حسوب و هنا نفس المثال السابق لكن بإستعمال خوارزمية الترتيب بالإدراج #include <iostream> using namespace std; // تعريف الكلاس class Name_pairs { // تعريف خصائص الكلاس public: int size; string *names; int *age; // constructor public: Name_pairs(int size) { cout <<"Constructor is called" <<endl; this->size = size; this->names = new string[size]; this->age = new int [size]; } // destructor public: ~Name_pairs() { cout <<"\nDestructor is called" <<endl; delete []names; delete []age; } // تعريف الميثود المسؤولة عن قراءة الأسماء void read_names() { for (int i = 0; i < this->size; i++) { cout << "Enter name " << (i+1) << ": "<<endl; cin >> this->names[i]; } } // تعريف الميثود المسؤولة عن قراءة الأعمار void read_ages() { for (int i = 0; i < this->size; i++) { cout << "Enter age " << (i+1) << ": "<<endl; cin >> this->age[i]; } } // طباعة السجلات void print() { for (int i = 0; i < this->size; i++) { cout << "record " << (i+1) << ": (" << this->names[i] << ", " << this->age[i] << ")"<<endl; } } // تطبيق خوارزمية الترتيب بالإدراج void sort() { int i; for(i = 1; i < this->size; i++) { string key = this->names[i]; int tmp_age = this->age[i]; int j = i - 1; while (j >= 0 && this->names[j][0] > key[0]) { this->names[j + 1] = this->names[j]; this->age[j + 1] = this->age[j]; j = j - 1; } this->names[j + 1] = key; this->age[j + 1] = tmp_age; } } }; int main() { // create instance from Name_paires class Name_pairs obj(5); obj.read_names(); // read names obj.read_ages(); // read ages cout << "\nRecords Before Sorting: " << endl; obj.print(); // print records before sorting obj.sort(); // call sort method cout << "\nRecords After Sorting: " << endl; obj.print(); // print records after sorting } لتجربة البرنامج: إضغط هنا بالتوفيق
- 4 اجابة
-
- 1
-
مرحباً محمود للتعرف على عالم الاوراكل أنصحك بالإطلاع على هذا الفيديو و أيضا ستجد معلومات مفيدة عن هذا المجال في هذا النقاش على مجتمع حسوب : ما هي نقطة البداية للدخول الى عالم اوراكل وما هي الشهادة الاكثر طلباً بالتوفيق
- 5 اجابة
-
- 1
-
مرحباً بك .. لعمل الصنف موظف نستخدم الأكواد التالية class Employee { protected: string name; int number; public: Employee() {} public: Employee(string name, int number) { this->name = name; this->number = number; } void getData() { cout << "Enter Employee Name " << endl; cin >> this->name; cout << "\nEnter Employee Number " << endl; cin >> this->number; } void putData() { cout << "Employee Name: " << this->name << ", Employee Number: " << this->number << endl; } }; و هنا برنامج لإستخدام و تجربة هذه الأكواد : إضغط هنا لعمل هذا الجزء الذي يُعتبر تطبيق لمفهوم الوراثة في البرمجة الكائنية بلغة c++ نستعمل هذه الأكواد class Manager : public Employee { protected: string title; public: Manager() {} Manager(string name, int number, string title) : Employee(name, number) { this->title = title; } void getData() { Employee::getData(); cout << "Enter Manager Title " << endl; cin >> this->title; } void putData() { Employee::putData(); cout << "Manager Title: " << this->title << endl; } }; class Scientist : public Employee { protected: int numberOfPublications; public: Scientist() {} Scientist(string name, int number, int numberOfPublications) : Employee(name, number) { this->numberOfPublications = numberOfPublications; } void getData() { Employee::getData(); cout << "Enter Scientist Number Of Publications " << endl; cin >> this->numberOfPublications; } void putData() { Employee::putData(); cout << "Scientist Number Of Publications: " << this->numberOfPublications << endl; } }; و يُمكنك تجربة مثال بسيط لهذه الأكواد من خلال هذا : الرابط لعمل هذا الجزء نحتاج إلى إضافة خاصية الوزن للصنف موظف ثم نضيف الإقتران bool isOverweight() { return this->weight > 90; } يمكنك تجربة هذا المثال بعد إضافة هذه الخاصية: إضغط هنا في هذه الحالة إذا كانت الدالة putData pure virtual سيتم إستعمال الدالة الموجودة في الكلاس الإبن أما إن كان العكس فسيستعمل الدالة الموجودة في الكلاس الأب لذلك سنُغير الدالة putData في الكلاس Employee إلى pure virtual بهذا الشكل virtual void putData() { cout << "Employee Name: " << this->name << ", Employee Number: " << this->number << ", Employee Weight:" << this->weight << endl; } فإذا إستعملنا هذا المثال int main() { Manager *m = new Manager("Samir", 1, 85, "CTO"); Scientist *s = new Scientist("Ahmed", 2, 95, 23); Employee *employess[2] = {m, s}; for (int i = 0; i < 2; ++i) { employess[i]->putData(); } } ستكون النتيجة بهذا الشكل أما في حالة لم تكن الدالة pure virtual ستكون النتيجة بهذا الشكل يمكنك تجربة البرنامج إنطلاقاً من هذا : الرابط بالتوفيق
- 3 اجابة
-
- 2
-
مرحباً أحمد .. يُمكنك إستخدام هذه ال extension : إضغط هنا و قم بتحميل ما يُناسب النظام الذي تستخدمه سواء 64 أو 32 فإن كان النظام 64 تقوم بتحميل هذا الملف svg_see_x64.exe وإن كان 32 تقوم بتحميل هذا الملف svg_see_x86.exe بعد التحميل ستقوم بتنصيبه كأي برنامج و هنا طريقة التحميل و التنصيب بعد التنصيب بشكل صحيح ستظهر الأيقونات بهذا الشكل: تأكد من أن طريقة العرض تكون medium أو large أو extra large بالتوفيق
- 4 اجابة
-
- 1
-
مرحباً @Elsayed Elsayed بما أنك قمت بالتسجيل فيُمكنك البدأ في مشاهدة الدروس. بمجرد شرائك لدورة ما سترسل لك التفاصيل عبر البريد الالكتروني إن كان لديك حساب مسجل في أكاديمية حسوب فستضاف هذه الدورة لحسابك أو سينشئ لك حساب جديد. لكن إذا كنت تواجه أية مشكلة فنرجو منك التوجه إلى مركز المساعدة و فتح تذكرة للمشكلة التي تواجهها وسيتم الرد عليك في أقرب وقت و توجيهك بشكل جيد. بالتوفيق
-
مرحباً محمد ... للحصول على أول عمل في مواقع العمل الحر ليس فقط فريلانسر بل جميع المنصات التي توفر هذه الخدمة عليك ب: إختيار مجال واحد و تطوير نفسك في هذا المجال بناء معرض أعمالك في هذا المجال حتى تُبين للعملاء أنه لديك خبرة و تكسب ثقتهم التواجد بكثرة على منصات العمل الحر و تقديم العروض على المشاريع لحظة نزولها على المنصة أولاً بأول لأن العميل ليس لديه وقت لمشاهدة جميع العروض و إذا لم تقدم عرضك في البداية لن يراه العميل لأن المنافسة شديدة. قد يشاهد العميل عرضك و يريد التواصل معك فإذا لم يجد حسابك نشط في ذلك الوقت سيتواصل مع غيرك لا تتصنع في تقديم العروض. حاول إقناع العميل بأنك قادر على تنفيذ المشروع و لا تُقدم عروض على مشاريع ليست لديك قُدرة على تنفيذها عليك بالصبر لأن هذه المرحلة تحتاج صبر كبير وأخيراً فالمسألة مسألة أرزاق قد تحصل على أول عمل بدون أي جهد و قد تبذل جهد كبير و لن تحصل على عمل. عليك بوضع عرض في المتوسط. فلا تُخفض السعر كثيراً و لا ترفعه كثيراً عند الحصول على أول عمل لك عليك كسب العميل و إذا طلب منك تعديلات لن تحتاج منك وقت كثير فقم بعملها . و إذا استطعت تقديم بعض الخدمات الإضافية مجانا فهذا جيد و سيُعجب العميل إضافة إلى أن أي عمل مُستقبلي لهذا العميل سيكون عن طريقك كُن لطيفا في تعاملك مع صاحب المشروع هذه بعض من النصائح و هناك العديد من المقالات في الأكاديمية لو قرأت بعضها فستستفيد جدا: إضغط هنا أيضا أدعوك لمشاهدة هذه السلسلة فستجد فيها بعض النصائح المٌفيدة لك: إضغط هنا بالتوفيق
-
مرحباً ... يُمكنك عمل البرنامج بهذا الشكل و موجود أيضا الشرح في التعليقات: #include <iostream> using namespace std; // تعريف الصنف مصفوفة class Matrix { // تعريف المتغيرات الأعضاء public: int row_size, col_size; public: int **array2d; // constructor 1 public: Matrix() { cout << "Constructor 1 is called" << endl; this->row_size = 3; this->col_size = 3; this->array2d = new int *[this->row_size]; for (int i = 0; i < this->row_size; i++) { this->array2d[i] = new int[this->col_size]; } } // constructor 2 public: Matrix(int row_size, int col_size) { cout << "Constructor 2 is called" << endl; this->row_size = row_size; this->col_size = col_size; this->array2d = new int *[this->row_size]; for (int i = 0; i < this->row_size; i++) { this->array2d[i] = new int[this->col_size]; } } // destructor public: ~Matrix() { cout << "\nDestructor is called" << endl; for (int i = 0; i < this->row_size; ++i) delete[] this->array2d[i]; delete[] this->array2d; } // دالة مساعدة لقراءة عناصر المصفوفة من المستخدم void read_els() { for (int i = 0; i < this->row_size; ++i) { for (int j = 0; j < this->col_size; ++j) { cout << "Enter El: [" << i << "][" << j << "]: " << endl; cin >> this->array2d[i][j]; } } } // دالة مساعدة لطباعة عناصر المصفوفة void print_els() { for (int i = 0; i < this->row_size; ++i) { for (int j = 0; j < this->col_size; ++j) { printf("%d ", this->array2d[i][j]); } printf("\n"); } }; // دالة لجمع مصفوفتين و ترجع الناتج في مصفوفة Matrix add(Matrix *mat) { Matrix m(this->row_size, this->col_size); for (int i = 0; i < m.row_size; ++i) { for (int j = 0; j < m.col_size; ++j) { m.array2d[i][j] = this->array2d[i][j] + mat->array2d[i][j]; } } return m; } // دالة لطرح مصفوفتين و ترجع الناتج في مصفوفة Matrix sub(Matrix *mat) { Matrix m(this->row_size, this->col_size); for (int i = 0; i < m.row_size; ++i) { for (int j = 0; j < m.col_size; ++j) { m.array2d[i][j] = this->array2d[i][j] - mat->array2d[i][j]; } } return m; } // دالة لضرب مصفوفتين و ترجع الناتج في مصفوفة Matrix mul(Matrix *mat) { Matrix m(this->row_size, mat->col_size); int tmp = 0; for(int i = 0; i < m.row_size; ++i) { for (int j = 0; j < m.col_size; ++j) { tmp = 0; for (int k = 0; k < this->col_size; ++k) { tmp += this->array2d[i][k] * mat->array2d[k][j]; } m.array2d[i][j] = tmp; } } return m; } // دالة لضرب مصفوفة في مُعامل سنستعملها في المضاعفة أو التكعيب أو اي كان و ترجع الناتج في مصفوفة Matrix mul_k(int k) { Matrix m(this->row_size, this->col_size); for (int i = 0; i < m.row_size; ++i) { for (int j = 0; j < m.col_size; ++j) { m.array2d[i][j] = k * this->array2d[i][j]; } } return m; } }; int main() { // تعريف مؤشرين لمصفوفتين Matrix *m1 = new Matrix(2, 2); Matrix *m2 = new Matrix(2, 2); cout << "Enter m1 elements: " << endl; m1->read_els(); // قراءة عناصر المصفوفة الأولى cout << "Enter m2 elements: " << endl; m2->read_els(); // قراءة عناصر المصفوفة الثانية if (m1->row_size != m2->row_size || m1->col_size != m2->col_size) { // في حالة عدم تساوي حجم المصفوفتين لا يُمكننا عمل عمليتي الجمع و الطرح cout << "can not make addition or subtraction"; } else { cout << "m1 + m2 = " << endl; m1->add(m2).print_els(); // القيام بعملية الجمع ثم عرض الناتج cout << "m1 - m2 = " << endl; m1->sub(m2).print_els(); // القيام بعملية الطرح ثم عرض الناتج } if (m1->col_size != m2->row_size) { // عرض رسالة في حالة عدم إمكانية عمل عملية الضرب cout << "Error! column of first matrix not equal to row of second."; } else { cout << "m1 X m2 = " << endl; m1->mul(m2).print_els(); // القيام بعملية الضرب ثم عرض الناتج } cout << "2 X m1 = " << endl; m1->mul_k(2).print_els(); // القيام بعملية المضاعفة ثم عرض الناتج delete m1; // إستدعاء المدمر لتنظيف الذاكرة و مسح الحيز المحجوز من طرف المؤشر الأول delete m2; // إستدعاء المدمر لتنظيف الذاكرة و مسح الحيز المحجوز من طرف المؤشر الثاني } يُمكنك أيضا تجربة البرنامج من خلال هذا الرابط أيضا أنصحك بمتابعة سلسلة تعلم سي بلس بلس للمحترفين على أكاديمية حسوب فهي مفيدة و مُستمرة خاصة هذا الدرس عن المؤشرات الدرس 19: المؤشرات (Pointers) في Cpp بالتوفيق
- 1 جواب
-
- 2
-
مرحباً أخي ... لعمل نظام تسجيل الدخول نقوم أولا بإنشاء جدول للمستخدمين ثم نقوم بعمل صفحة و لتكن مثلا login_pdo.php <?php session_start(); $host = "localhost"; $username = "root"; $password = ""; $database = "testing"; $message = ""; try { $connect = new PDO("mysql:host=$host; dbname=$database", $username, $password); $connect->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); if(isset($_POST["login"])) { if(empty($_POST["username"]) || empty($_POST["password"])) // في حالة عدم إدخال البيانات { $message = '<label>All fields are required</label>'; } else { $query = "SELECT * FROM users WHERE username = :username AND password = :password"; $statement = $connect->prepare($query); $statement->execute( array( 'username' => $_POST["username"], 'password' => $_POST["password"] ) ); $count = $statement->rowCount(); if($count > 0) // إذا وجدنا البيانات مسجلة في جدول المستخدمين { $_SESSION["username"] = $_POST["username"]; // نحفظ إسم المستخدم ضمن الجلسة header("location:dashboard.php"); // ونقوم بتحويل المستخدم إلى لوحة التحكم } else { $message = '<label>Wrong Data</label>'; // في حالة عدم وجود البيانات نرجع الرسالة } } } } catch(PDOException $error) { $message = $error->getMessage(); // في حالة حدوث خطأ في الإتصال مع قاعدة البيانات } ?> ملف dashboard.php يكون بهذا الشكل : <?php session_start(); if(isset($_SESSION["username"])) // بمعنى إذا كان إسم المستخدم موجود في الجلسة هذا يعني أن هناك مستخدم قام بتسجيل الدخول { echo '<h3>Login Success, Welcome - '.$_SESSION["username"].'</h3>'; // رسالة ترحيبية فقط echo '<br /><br /><a href="logout.php">Logout</a>'; // رابط لتسجيل الخروج } else // في حالة عدم وجود شخص مسجل دخوله نمنع الوصول إلى لوحة التحكم { header("location:login_pdo.php"); // نقوم بتحويل المستخدم إلى صفحة تسجيل الدخول } ?> و ملف ال logout.php يكون بهذا الشكل <?php session_start(); session_destroy(); // تحطيم الجلسة header("location:login_pdo.php"); // التحويل إلى صفحة تسجيل الدخول ?> و هذا نظام بسيط لتسجيل الدخول أرفقت لك الملفات. login_pdo.zip بالتوفيق
- 4 اجابة
-
- 1
-
مرحباً ... ماهو المشكل أو الخطأ الذي يظهر الآن . فطريقة العرض الآن صحيحة. بقي الإتصال مع قاعدة البيانات و جلب البيانات بشكل صحيح . إذا لم تصل إلى الحل يُرجى إرفاق مجلد المشروع كاملا بالإضافة إلى قاعدة البيانات حتى نُعاين المُشكلة
- 5 اجابة
-
- 1
-
و عليكم السلام أظن أنه يشير إلى كاتب المقال لأنه لما بحثت في مدونة مستقل أو مدونة خمسات وجدت أسفل المقال بطاقة لصاحب المقال أو الذي كتبه بالإضافة إلى رابط الحساب الشخصي كما هو موضح في الصور أدناه : يُمكنك الإستفسار حول الموضوع من خلال مركز المساعدة بفتح تذكرة لتساؤلاتك أو إستفسارك و سيقوم فريق الدعم بالإجابة عليها في أقرب وقت بالتوفيق
-
و عليكم السلام نعم فهذه مشكلة خصوصا إذا كان التغيير من الإيجاب إلى السلب و كانت الفترة طويلة أي بعد مرور مدة على إنتهاء المشروع و إستلامه من طرف العميل يأتي ليُعيد تقييم المُستقل سلباً و هذا الشيء يُعيق المستقل بدرجة كبيرة و يُخفض من حظوظه في قبول العروض التي يُقدمها على المشاريع. سبق و أن أعاد أحد العملاء تقييمي على منصة مُستقل لكن التقييم كان إيجابيا .أظن أنه من الأحسن أن تضع الإدارة إجراءات إضافية بخصوص هذا الأمر. أيضا أتمنى من الإدارة أن تُتيح للمستقلين تقييم أصحاب المشاريع حتى تُصبحَ لديهم سُمعة داخل المنصة يخافون عليها و ليس فقط وضع رد على تقييم صاحب المشروع. لقد بحثت بخصوص موضوع إعادة التقييم في الأسئلة الشائعة و في شروط الإستخدام و لم أجد شيئا يتعلق بهذا الأمر. و أظن أنه يُمكن الرجوع إلى الإدارة و الدعم الفني في حالة أعاد العميل تقييم المُستقل سلباً للنظر في الأمر و حل المُشكلة . لكن من الأحسن من البداية عدم السماح للعميل بهذا الشيء. بالتوفيق
- 4 اجابة
-
- 2
-
مرحباً @Sid Ahmed4 أكواد عرض مقطع الفيديو ليست بها أخطاء فلعرض فيديو نستعمل وسم video بالشكل التالي مثلا : <video width="320" height="240" controls> <source src="video_src.mp4" type="video/mp4"> Your browser does not support the video tag. </video> لكن أظن أنك أخطأت في الشرط فلمقارنة سلسلتين نصيتين نستعمل "==" و ليس "=" أو نستعمل الدالة strcmp بهذا الشكل : <?php $ipath = pathinfo($value['pofl'], PATHINFO_EXTENSION); if ($ipath == 'jpg'){ // أكواد العرض في حالة اللاحقة jpg }elseif ($ipath == 'mp4') { // أكواد العرض في حالة اللاحقة mp4 } أو <?php $ipath = pathinfo($value['pofl'], PATHINFO_EXTENSION); if (strcmp($ipath, "jpg") == 0){ // أكواد العرض في حالة اللاحقة jpg }elseif (strcmp($ipath, "mp4") == 0) { // أكواد العرض في حالة اللاحقة mp4 } تأكد جيداً من مسار الفيديو "src" الذي تريد عرضه. بالتوفيق
- 5 اجابة
-
- 1
-
مرحباً محمد .. يُمكنك عمل البرنامج بهذا الشكل : #include <iostream> using namespace std; // دالة مساعدة لطباعة عناصر مصفوفة عددية void printArray(int arr[], int size) { for (int i = 0; i < size; i++) { printf("%d ", arr[i]); } printf("\n"); } // دالة مساعدة لمعرفة إذا كان العدد أولي أو لا bool isPrime(int num) { bool flag = false; for(int i = 2; i <= num/2; ++i) { if(num % i == 0) { flag = true; break; } } return !flag; } // دالة تستقبل مصفوفة أعداد و ترجع أصغر عدد أولي إن كان موجودا int min_prime(int arr[], int size) { int min = arr[0]; for (int i = 0; i < size; ++i) { if (min > arr[i] && isPrime(arr[i])) min = arr[i]; } return min; } int main() { // تعريف مصفوفة int arr[] = {31, 12, 11, 6, 22, 8, 89, 76, 91, 111}; // حساب عدد القيم التي تحتويها المصفوفة int n = sizeof(arr) / sizeof(arr[0]); // طباعة عناصر المصفوفة printArray(arr, n); int min = min_prime(arr, n); if (isPrime(min)) cout << "Min Prime is: " << min; else cout << "Array does not contain any prime number"; } بعد تشغيل البرنامج ستظهر النتيجة بهذا الشكل : يُمكنك تجربة البرنامج من خلال هذا : الرابط من خلال البرنامج و الشرح يُمكنك عمل التقرير و شرح البرنامج بالرسم الذي تريده بالتوفيق
-
مرحباً يونس .. أنا لم أفهم جيداً ماذا تقصد ؟ هل تقصد أن المطلوب هو البحث عن أطول عنصر في المصفوفة مكون من العدد 1 مثلا لو عندنا المصفوفة التالية [11,000,11111,111] يعطيك البرنامج العدد 11111. أم أن المطلوب مثلا يكون عندك مصفوفة بهذا الشكل [0, 1, 1, 0, 0, 1, 1, 1, 0] و يعطيك البرنامج السلسلة 111 و هذا ما فهمته من السؤال إذا كان هذا هو المطلوب يُمكنك كتابة البرنامج بالشكل التالي : #include <iostream> using namespace std; // دالة مساعدة لطباعة عناصر مصفوفة عددية void printArray(int arr[], int size) { for (int i = 0; i < size; i++) { printf("%d ", arr[i]); } printf("\n"); } // دالة تستقبل مصفوفة أعداد و ترجع سلسلة نصية مكونة من أطول سلسلة وحدات string max_series(int arr[], int size) { // تعريف المتغيرات المستعملة string l, tmp; int j, i = 0; // القيام بحلقة على عناصر المصفوفة while (i < size) { // إذا كان العنصر يساوي 1 if (arr[i] == 1) { j = i; // القيام بحلقة مادامت العناصر القادمة تساوي 1 while (arr[j] == 1) { // تركيب سلسلة الوحدات tmp += to_string(arr[j]); j++; } // شرط إذا كانت سلسلة الوحدات الحالية أطول من السلسلة المخزنة السابقة if (tmp.length() > l.length()) { l = tmp; // تغيير السلسلة السابقة بالسلسلة الحالية tmp = ""; // إفراغ السلسلة الحالية } i = j; // تغيير فهرس الحلقة } else { i++; } } return l; } int main() { // تعريف مصفوفة int arr[] = {0, 1, 1, 0, 0, 1, 1, 1, 1, 0}; // حساب عدد القيم التي تحتويها المصفوفة int n = sizeof(arr) / sizeof(arr[0]); // طباعة عناصر المصفوفة printArray(arr, n); // إستدعاء الإقتران string l = max_series(arr, n); if (l.length() <= 0) cout << "array does not contains any 1"; else cout << "serie: " << l << " ==> size: " << l.length(); } و عند تشغيل البرنامج سيعطيك النتيجة التالية: يُمكنك تجربة البرنامج من خلال هذا: الرابط بالتوفيق
-
مرحباً أحمد .. هناك العديد من الخيارات لبرمجة تطبيقات الهاتف : بناء تطبيقات أصيلة ( native ) بإستخدام اللغات الأصلية فمثلا للأندرويد جافا أو كوتلن و لل iOS سويفت أو أوبجكتيف سي بناء تطبيقات أصيلة بإستعمال أحد الأطر او ( frameworks ) مثل : React Native أو Flutter أو Xamarin بحيث ستقوم بكتابة الأكواد باللغة التي بُني عليها الإطار فمثلا React Native ستستخدم JavaScript و Futter لغة Dart و Xamarin لغة c# بحيث عند عملية البناء ستستخدم أدوات المنصة لتصدير التطبيق و سيتم تحويل الأكواد إلى أكواد أصيلة ( نتيف ) و لهذا يُسمى هذا النوع من التطبيقات ب ( compiled app ) و أهم ميزة لهذا النوع هو الحصول على تطبيقات بنفس أداء التطبيقات الأصيلة تقريباً و تكون متعددة المنصة أي للأندرويد و ال iOS أي cross platform إنطلاقا من كتابة كود واحد بناء تطبيقات هجينة بإستخدام منصة Cordova أو Ionic و هذه المنصات هي منصات cross platform أي ستقوم بكتابة كود واحد و هذا الكود يعمل على أنظمة متعددة سواء أندرويد أو iOS . لكن التطبيقات التي يتم بناؤها تكون عبارة عن تطبيق ويب أي أن التطبيق في الأخير سيعمل على الهاتف و كأنه تطبيق هاتف عادي لكن في الحقيقة هو عبارة عن صفحات ويب أو تطبيق ويب يعمل على المتصفح . و إن صح التعبير فمنصة cordova تقوم بتغليف تطبيق الويب بطبقة تُسمى (WebView) حتى يعمل على الهاتف و كأنه تطبيق عادي. العيب في هذه التطبيقات أنها أبطأ مقارنةً بالنوعين السابقين خصوصا في التطبيقات التي تحتاج إلى التعامل مع موارد و مُحسسات الهاتف لكن ما يٌميزها أنك لن تحتاج إلى تعلم لغات أخرى فقط html5 و CSS و جافاسكربت بالإضافة إلى كيفية التعامل مع منصة Cordova أنصحك بالإطلاع على كافة الخيارات الموجودة و دراستها و الإطلاع على الفروق بينها ثم تختار ما يُناسبك و تقوم بتعلمه و هذا الدرس لمعرفة الفرق بين التطبيقات الأصيلة و التطبيقات الهجينة و أيضا الإطلاع على هذا الفيديو باللغة الإنجليزية و أيضا إبحث في الإنترنت عن بعض الشروحات و المقالات لتصل إلى الإختيار الأفضل بالنسبة لك . بخصوص كم يستغرق من وقت تعلم تقنية ما ؟ فلنكن واضحين مع بعض إحتراف الشخص لتقنية ما يأتي بالممارسة و التطبيق العملي و القيام بالمشاريع و أنصحك أنك طالما إخترت هذا المجال لا تسأل هذا السؤال ثانيةً لأنك كل ما تعمقت فيه أكثر كل ما تعلمت أشياء جديدة كل ما ظهرت أشياء جديدة لتتعلمها. أما عن تعلم الأساسيات فهذا الأمر راجع للشخص نفسه . بخصوص برمجة تطبيقات الأندرويد بلغة جافا أو كوتلن فإن أفضل منصة هي أندرويد ستوديو . بالتوفيق
-
مرحباً عبد العزيز .. لا شك أن لغة الجافا سكربت لغة عميقة و مجالاتها عديدة و إحترافها ليس شيئاً سهلاً. قناة الزيرو قناة غنية و محتواها مفيد جداً و دورات الجافا سكربت التي يقدمها الأخ أسامة إبتداءً من أساسيات اللغة إلى DOM ثم ال BOM كافية للبناء المعرفي للغة لكن تطبيق المفاهيم و دمجها مع بعض لحل المشاكل أو التمارين التي تواجهك هذه مهارة أخرى تكتسبها مع الوقت لأن كل شخص و كيف يُفكر و المشكلة لديها عدة حلول برمجية أي هناك عدة طرق للوصول إلى الحل . في بداية الأمر قد لا يستطيع الشخص توظيف ما تعلمه من مفاهيم لحل مشكلة ما و هذا شيء طبيعي لكن بالممارسة أكثر و رؤية حلول كثيرة و بالبحث سيُكون الشخص هذه المهارة . ما عليك فعلهه هو مشاهدة الدروس و التطبيق عليها . إبحث عن مشاكل. لحلها تحتاج فقط المفاهيم التي درستها و ليس مفاهيم متقدمة لم تدرسها بعد حاول توظيف ما تعلمته لحل هذه المشاكل إن لم تستطع حلها بنفسك إبحث عن كيفية توظيف ما تعلمته مثلا لحل هذه المشكلة لا تشاهد الحل مباشرة بعد القيام بهذه المراحل إذا لم تجد حل أو لم تستطع إيجاد كيفية الحل قم بمشاهدة الحل لأن هذا الشيء سيُعلمك و مستواك سيتطور أكثر بعد تعلم أساسيات اللغة و ال DOM بالإضافة إلى ال BOM و التطبيق عليها إنتقل إلى تعلم الإصدارات الحديثة من جافاسكربت es6 و مافوق و ستجد قائمة لها في قناة الزيرو و بعدها إنتقل إلى البرمجة الكائنية أو غرضية التوجه بلغة الجافا سكريبت و بهذا تكون قد قطعت شوطا كبيراً يُنصح كثيرا بتعلم مكتبة jQuery قبل تعلم es6 و أخيراً أنصحك بتعلم أحد أطر عمل اللغة ك React.js Vue.js Angular بالتوفيق
- 3 اجابة
-
- 1
-
مرحباً ... هذا الموضوع يندرج ضمن جزء المصادقة و الإستيثاق ( authentication ) بحيث يتم حماية الموجهات أو الروابط أو الصفحات التي تقوم ببعض الأمور الحساسة و التي لا يُسمح لأي كان الوصول إليها . و المصادقة تتم عبر نظام تسجيل دخول و بعد إدخال المعلومات الصحيحة يمكن للمستخدم عرض هذه الصفحات لكن ماذا لو كنا نريد أن نسمح للمستخدم الدخول للوحة التحكم بعد تسجيل الدخول و منعه من الوصول إلى بعض الصفحات المهمة كأن نقوم بعمل نظام موظفين مثلا بحيث نقسم النظام إلى مجموعات و كل شخص له صلاحيات محددة ضمن النظام . هذا الأمر يندرج ضمن جزء التراخيص و الصلاحيات ( authorization and permissions ) و إذا كنت تستخدم أحد أطر العمل المشهورة فستجد أن هذه الأمور تم تبسيطها و تسهيلها كثيراً على المُطور. بالتوفيق
-
و عليكم السلام .. الدروس الأولى نظرية تُعرفك بلغة الجافاسكربت و ماهي إستعمالاتها و بعدها يأتي مسار أساسيات اللغة و في هذا المسار من الأحسن تطبيق ما يقوم به المدرب حتى تُعود نفسك على كتابة الأكواد . الدورة تبدأ معك خطوة بخطوة و بعد كل مسار هناك تطبيق عملي لما تعلمته خلال المسار لترسيخ المفاهيم. يُفضل أن يكون عندك معرفة عن كيفية التعامل مع جهاز الحاسوب . إذا لم تستطعْ فهم درس ما من الأحسن إعادة الدرس و عدم الإستعجال في إنهاء الدروس لأن هدفك الأول هو تعلم البرمجة و تحقيق أكبر إستفادة لهذا تُوفر الأكاديمية فريق من المدربين جاهزين للرد على إستفسارات الطلاب في أي وقت لذلك إذا واجهتك أي عوائق بخصوص الدروس لا تتردد في طرحها أسفل الدرس في جزء التعليقات لا شك أن البداية ستكون صعبة قليلا لكن هذا الشعور طبيعي و بالفهم الجيد للمفاهيم و الدروس سيتلاشى هذا الهاجس الذي أمامك أهم شيء هو حبك للمجال بالتوفيق
- 5 اجابة
-
- 1
-
هذا لأن الزوم مطبق على العنصر body و الأزرار تنتمي إلى الbody فإذا أردنا تطبيق خاصية الزوم فقط على البوكس فإننا نغير كود الجافاسكربت بهذا الشكل مثلاً var zoom = 1; $('.zoom').on('click', function(){ zoom += 0.1; $('.box').css('zoom', zoom); }); يمكنك إلقاء نظرة على نفس الرابط السابق لتجربة النتيجة و لرؤية الكود كامل إضغط من فوق على زر change view ثم editor view و سيتغير المظهر للأكواد بالتوفيق
-
مرحباً محمد .. يمكنك عمل هذا عن طريق إضافة 3 أزرار بهذا الشكل مثلاً <a class="btn zoom"><i class="fas fa-search-plus"></i></a> <a class="btn zoom-out"><i class="fas fa-search-minus"></i></a> <a class="btn zoom-init"><i class="fas fa-recycle"></i></a> <!-- إضافة بوكس لرؤية نتيجة التكبير و التصغيير --> <div class="box"> <h3>Title</h3> <p> Lorem ipsum dolor sit amet, consectetur adipiscing elit. Cras a ligula dictum, elementum arcu quis, scelerisque lacus. Donec ut semper nunc, sed ultricies velit. Donec id malesuada metus </p> </div> يُرجى إضافة مكتبة fontawesome من أجل الأيقونات بعدها إضافة بعض التنسيقات للعناصر بهذا الشكل مثلاً body { margin: 30px; } .box { background: linear-gradient(25deg, #3a6186, #89253e); color: white; font-size: 25px; padding: 40px; width: 50%; margin: auto; } .btn { width: 30px; height: 30px; background: #FFF; border: 1px solid #005bac; border-radius: 50%; color: #005bac; padding: 15px 10px 5px; position: fixed; text-align: center; transition: all 0.3s ease; } .btn:hover { background: #eef; } .zoom { bottom: 190px; } .zoom-out { bottom: 120px; } .zoom-init { bottom: 50px; } و الآن نأتي إلى إستعمال جافاسكربت عند الضغط على الأزرار نقوم بالتكبير والتصغير إعتماداً على خاصية الCss أي: "zoom" var zoom = 1; $('.zoom').on('click', function(){ zoom += 0.1; $('body').css('zoom', zoom); }); $('.zoom-init').on('click', function(){ zoom = 1; $('body').css('zoom', zoom); }); $('.zoom-out').on('click', function(){ zoom -= 0.1; $('body').css('zoom', zoom); }); لقد قمت بإستعمال مكتبة جيكويري بإمكانك تجربة الأكواد على codepen من خلال هذا الرابط: إضغط هنا بالتوفيق
- 4 اجابة
-
- 1
-
مرحبا ... لفهم أي درس أولا تقوم بمشاهدة الفيديو و تقوم بتطبيق المفاهيم التي تم شرحها و إذا لم تفهم تقوم بإعادة مشاهدة أكثر من مرة إذا لم تفهم أيضا إنتقل إلى مصدر آخر يشرح نفس الخاصية أو المفهوم سواء مقاطع فيديو أو مقالات مكتوبة عليك أن تُطور مهارة البحث لديك و تتعلم من المصادر التي تراها مناسبة لك يمكنك طرح سؤالك هنا و لن يبخل عليك الإخوة بشيء توجد أيضا موسوعة حسوب فهي تشرح معظم لغات و تقنيات البرمجة و الخوارزميات بشكل سلس و مرتب و باللغة العربية يمكنك البحث فيها و الإستفادة منها. ( رابط موسوعة حسوب ) هناك مقالات عديدة في الأكاديمية و تقدم محتوى جيد و سهل للفهم فإذا وجدت عندك لُبس بخصوص شيء ما إبحث عنه فممكن تجد مقال يمكنك الفهم من خلاله أنصحك البدأ في التعلم و لا تبقى تشتت في نفسك من لغة إلى لغة أخرى و تضيع وقتك فرحلة تعلم البرمجة ليست سهلة و ليست صعبة أيضاً لكن تحتاج منك صبر و تحتاج أن تُحب المجال الذي اخترته ضع هدف لنفسك و إختر المجال الذي تريد تعلمه و نحن هنا لمساعدتك إذا ما احتجت. بالتوفيق
- 3 اجابة
-
- 1
-
مرحباً مروان .. لم أفهم بشكل جيد لكن بطبيعة الحال سيظهر لك هذا الخطأ لأن الدالة أو الإقتران createSession ينتظر منك تمرير 3 parameters و أنت قمت بتمرير parameter واحد فقط و الحل إما تمرير كافة القيم بجلبها من sharedPreferences و تمريرها إلى الدالة و تغيير فقط قيمة الإسم أو إنشاء دالة جديدة ب parameter واحد بهذا الشكل : public void createSession(String name){ editor.putString(NAME, name); editor.apply(); } و قُم بإستعمالها. بالتوفيق
- 4 اجابة
-
- 1
-
مرحباً مروان أظن أنك تريد جعل تطبيقك متعدد اللغات و في هذه الحالة أنصحك بمتابعة هذا الفيديو فقد تم شرح الطريقة فيه بالتوفيق
- 4 اجابة
-
- 1
-
مرحباً مروان للحماية من الهندسة العكسية يتم تشفير الملفات و الكلاسات و لأخذ فكرة شاملة عن الموضوع أنصحك بقراءة هذا المقال: إضغط هنا كما يوجد في التوثيق الخاص بأندرويد صفحة تشرح عن كيفية حماية تطبيقات الأندرويد : إضغط هنا لحماية ملفات PHP فإننا نقوم بعمل واجهة برمجية ( restful API ) و نقوم بعمل حماية لها عن طريق (JWT ( JSON Web Tokens او OAuth 2.0 أنصحك بالإطلاع على هذا الموضوع وقراءة مقالات عنه أو مشاهدة مقاطع أو دروس تشرح عنه. و لأخذ فكرة عن معمارية rest أدعوك لمشاهدة هذا المقطع بالتوفيق
-
مرحباً عبد العزيز ليس بالضرورة تعلمهما بترتيب معين فكِلاهما مجالين مختلفين فقاعدة البيانات أو المعطيات هي مجموعة من البيانات و المعلومات مخزنة بترتيب معين و بشكل منظم في ملف ضخم حيث يمكن إسترجاع هذه البيانات و التعديل عليها و حتى حذف جزء منها في أي وقت. تنقسم قواعد البيانات من حيث طبيعة التركيب إلى عدة أنواع من بينها قواعد البيانات العلائقية و سُميت بهذا الشكل نظراً لتواجد علاقة بين السجلات و البيانات. حتى نستطيع التعامل مع قواعد البيانات العلائقية نحتاج إلى إستعمال نظام إدارة أو ما يُسمى ب RDBMS و هو إختصار ل ( Relational Database Management System ) أي نظام إدارة قواعد البيانات العلائقية و يوجد العديد من هذه النُظم أذكر منها ( MySQL ، mSQL ، PostgresSQL ، Oracle و غيرها ..) هذا النظام حتى يتعامل مع قواعد البيانات يعتمد على لغة و هذه اللغة إسمها SQL و هي إختصار ل Structured Query Language وهى عبارة عن لغة تُستخدم في معالجة البيانات المخزنة و التعامل معها. هذا بإختصار عن قواعد البيانات العلائقية لأن مجال قواعد البيانات كبير أما بخصوص لغة البرمجة بغض النظر عن ماهية اللغة سواء كانت جافا , Php , بايثون , روبي .. فعند تعلمك لأساسيات اللغة لن تحتاج إلى قواعد البيانات أما إذا أردت إنشاء برنامج و أحتجت فيه إلى التعامل مع قاعدة بيانات ستجد أن مطورين اللغة قد وَفروا لك مكتبات و كلاسات أو حزم جاهزة و عند إستعمالك لهذه المكتبات ستقوم بكتابة إستعلامات و هذه الإستعلامات هي نفسها المكتوبة بلغة SQL ففي هذا الجزء تحتاج معرفة عن كيفية كتابة الإستعلامات أما بخصوص أساسيات اللغة فأثناء تعلمها لا تحتاج معرفة بهذا الجزء بالتوفيق
- 6 اجابة
-
- 1