-
المساهمات
2064 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
13
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Chihab Hedidi
-
مكتبة pandas تعطيك تحكم سلس في ملفات اكسل، يمكنك القيام بذلك من خلال الكود التالي: import pandas as pd # قراءة ملف Excel df = pd.read_excel('اسم_الملف.xlsx', header=None) # اختيار عمود واحد selected_column_1 = df.iloc[:, 0] # اختيار العمود الأول # اختيار عمودين selected_columns_2 = df.iloc[:, [1, 3]] # اختيار العمود الثاني والرابع # إنشاء DataFrame باستخدام العمود المحدد df_selected_1 = pd.DataFrame(selected_column_1, columns=['اسم_العمود_الأول']) df_selected_2 = pd.DataFrame(selected_columns_2, columns=['اسم_العمود_الثاني', 'اسم_العمود_الرابع']) # طباعة النتائج print(df_selected_1) print(df_selected_2)
- 4 اجابة
-
- 1
-
إذا كنت تريد استخدام الصفوف بشكل فردي (الصف 5، الصف 7، الصف 9)، يمكنك استخدام المؤشرات indexing لتحديد الصفوف التي تريدها. import pandas as pd # قراءة ملف Excel df = pd.read_excel('اسم_الملف.xlsx', header=None) # استخدام المؤشرات لاختيار الصفوف selected_rows = df.iloc[4::2] # إعادة تعيين مؤشرات الصفوف selected_rows.reset_index(drop=True, inplace=True) # طباعة النتيجة print(selected_rows) في المثال الذي أرفقته يقوم بقراءة الملف Excel، ثم يستخدم المؤشرات iloc لاختيار الصفوف بدءا من الصف 5 ومن ثم يختار كل صف ثاني (5، 7، 9، ..). يتم إعادة تعيين مؤشرات الصفوف لتبدأ من الصفر مرة أخرى باستخدام reset_index، في الأخير تحصل على DataFrame تحتوي على البيانات التي تريدها.
- 4 اجابة
-
- 1
-
يمكنك القيام بذلك ستحتاج أولا لإستدعاء الملف للحصول على أسماء أوراق العمل، بعدها تعرضها للمستخدم من أجل اختيار الورقة المناسبة، و في الأخير نجري التغييرات و نسجلها في الملف الجديد: import os from openpyxl import load_workbook import pandas as pd def display_sheet_names(file_path): # استدعاء الملف DB = load_workbook(file_path) # الحصول على أسماء أوراق العمل sheet_names = DB.sheetnames print("أسماء أوراق العمل:") for i, sheet_name in enumerate(sheet_names, start=1): print(f"{i}. {sheet_name}") # اختيار ورقة العمل sheet_choice = int(input("الرجاء اختيار رقم الورقة: ")) selected_sheet_name = sheet_names[sheet_choice - 1] return DB[selected_sheet_name] def main(): # إدخال اسم الملف file_name = input("الرجاء إدخال اسم الملف: ") file_path = os.path.join(os.getcwd(), file_name) # عرض أسماء أوراق العمل واختيار ورقة العمل DS = display_sheet_names(file_path) # تحويل بيانات ورقة العمل إلى DataFrame data = DS.values columns = [cell.value for cell in next(data)] df = pd.DataFrame(data, columns=columns) # يمكنك هنا إجراء العمليات التي تحتاجها على DataFrame # إنشاء ملف Excel جديد وحفظ DataFrame فيه new_file_name = input("الرجاء إدخال اسم ملف الحفظ: ") new_file_path = os.path.join(os.getcwd(), new_file_name) df.to_excel(new_file_path, index=False) print(f"تم حفظ البيانات في ملف {new_file_name}") if __name__ == "__main__": main()
- 5 اجابة
-
- 1
-
يمكنك القيام بذلك سواء بمكتبة openpyxl او pandas: بالطريقة التالية: from openpyxl import Workbook, load_workbook # استدعاء الملف وورقة العمل DB = load_workbook("اسم الملف.xlsx") DS = DB["اسم ورقة العمل"] # قم بتنفيذ العمليات التي تحتاج إليها على ورقة العمل # إنشاء ملف Excel جديد new_workbook = Workbook() new_sheet = new_workbook.active # نسخ البيانات من ورقة العمل الأصلية إلى ورقة العمل الجديدة for row in DS.iter_rows(values_only=True): new_sheet.append(row) # حفظ ملف Excel الجديد new_workbook.save("اسم ملف الحفظ.xlsx") اذا كنت تريد استخدام مكتبة pandas قم بالأمر التالي: import pandas as pd from openpyxl import load_workbook # استدعاء الملف وورقة العمل DB = load_workbook("اسم الملف.xlsx") DS = DB["اسم ورقة العمل"] # تحويل بيانات ورقة العمل إلى DataFrame data = DS.values columns = [cell.value for cell in next(data)] df = pd.DataFrame(data, columns=columns) # قم بتنفيذ العمليات التي تحتاج إليها على DataFrame # إنشاء ملف Excel جديد وحفظ DataFrame فيه df.to_excel("اسم ملف الحفظ.xlsx", index=False)
- 5 اجابة
-
- 1
-
يمكنك القيام بذلك باستخدام مكتبة Tesseract OCR، لكن في بعض الأحيام قد تكون هناك حاجة إلى معالجة الصورة قبل استخدام Tesseract لتحسين النتائج. يجب عليك اولا تثبيت مكتبة Tesseract OCR و Pillow لمعالجة الصور باستخدام الأمر التالي: pip install pytesseract Pillow و هذا كود بسيط، يمكنك التعديل عليه على حسب احتياجاتك : from PIL import Image import pytesseract # تحديد مسار ملف Tesseract OCR إذا لزم الأمر # pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' def extract_text_from_image(image_path): # فتح الصورة image = Image.open(image_path) # استخراج النص من الصورة باستخدام Tesseract OCR text = pytesseract.image_to_string(image) return text # تحديد مسار الصورة image_path = 'path/to/your/image.png' # استخراج النص وطباعته result_text = extract_text_from_image(image_path) print(result_text) لا تنسى تغير image_path إلى مسار الصورة التي تريد استخراج النص منها.
- 4 اجابة
-
- 1
-
اطلعت على الموقع و وجدت انه تحميل هذا الكتاب غير متوفر في الموقع، يعني لا تستطيع تحميله حتى لو استخدمت الكود الخاص بك، يجب اول شيء وضع الرابط المباشر لتحميل الكتاب و ليس رابط صفحة الكتاب، كما انه يوجد خطأ في الكود في سطر: if responste.status_code == 20: الرمز الصحيح الذي يدل على أن الصفحة تم تحميلها بنجاح هو 200 يعني تكون بالشكل التالي: if responste.status_code == 200:
- 2 اجابة
-
- 2
-
سأفترض أنك تستخدم axios لإرسال الطلبات HTTP، و أيضا لديك حالة في Redux لتخزين الـ token. // في ملف authSlice.js import { createSlice, createAsyncThunk } from '@reduxjs/toolkit'; import axios from 'axios'; // استخدمنا createAsyncThunk لتحويل الطلبات الى حالات متقدمة (pending, fulfilled, rejected) export const fetchToken = createAsyncThunk('auth/fetchToken', async (_, thunkAPI) => { try { // هنا يمكنك استخدام thunkAPI.getState() للوصول إلى حالة Redux const state = thunkAPI.getState(); // استخدم state.auth.token كطريقة للوصول إلى الـ token const response = await axios.post('url/to/token/endpoint', { username: state.auth.username, password: state.auth.password }); // قم بإرجاع البيانات التي تم استلامها من الطلب كقيمة معادة الوعد return response.data.token; } catch (error) { // في حالة وجود أي خطأ، قم بإرجاع الخطأ return thunkAPI.rejectWithValue(error.response.data); } }); // الجزء الخاص بتحديث الحالة بناءً على حالة الطلب const authSlice = createSlice({ name: 'auth', initialState: { token: null, }, reducers: { // يمكنك إضافة reducers إضافية هنا }, extraReducers: (builder) => { // اتبع createAsyncThunk لتحديث الحالة بناءً على حالة الطلب builder.addCase(fetchToken.fulfilled, (state, action) => { state.token = action.payload; }); builder.addCase(fetchToken.rejected, (state, action) => { // يمكنك تحديد كيف تتعامل مع حالة الرفض هنا، مثلاً قم بتحديث حالة الخطأ }); }, }); // تصدير action و reducer export const { /* أي reducers إضافية تريد تصديرها */ } = authSlice.actions; export default authSlice.reducer; في الكود الذي ارفقته استخدمت createAsyncThunk لإنشاء fetchToken واستخدمنا getState الخاصة ب thunkAPI للوصول إلى حالة Redux و ايضا استخدمنا state.auth.token كقيمة للـ token.
- 2 اجابة
-
- 1
-
اختيار القيمة يعتمد على السياق الخاص بتطبيقك ومتطلباته null يستخدم عادة عندما يكون الحالة غير معرفة أو غير محددة، مثلا إذا كنت تتوقع تحميل بيانات من الخادم أو إذا كانت القيمة تحتاج إلى حالة ابتدائية لا تشير إلى شيء معين، فإن null هو الخيار الأفضل. const [userData, setUserData] = useState(null); useEffect(() => { // يتم تحميل البيانات من الخادم fetchData() .then((data) => setUserData(data)) .catch((error) => console.error("حدث خطأ في تحميل البيانات", error)); }, []); "" أو السلسلة الفارغة يمكن استخدامها إذا كانت الحالة تمثل سلسلة نصية والقيمة الابتدائية هي سلسلة فارغة، هذا يمكن أن يكون مناسبا عند بدء العمل بقيمة نصية تكون فارغة ويتم تحديثها فيما بعد. const [inputText, setInputText] = useState(""); const handleInputChange = (event) => { // يتم تحديث قيمة النص عند تغيير المدخلات setInputText(event.target.value); }; return ( <input type="text" value={inputText} onChange={handleInputChange} placeholder="أدخل نص هنا" /> );
- 2 اجابة
-
- 1
-
نقوم بإستخدام الـ state لتخزين حالة محددة لمكون (component)، وتتغير هذه الحالة مع مرور الوقت بسبب التفاعلات مع المستخدم أو بسبب التغييرات في البيانات. يمكنك تعريف حالة state في مكون React عن طريق استخدام الدالة useState التي تأخذ قيمة افتراضية وترجع مصفوفة تحتوي على قيمة الحالة ودالة لتحديث الحالة، مثل const [loading, setLoading] = useState(false); في هذا المثال، تم إنشاء حالة loading بقيمة افتراضية false، وتم تعيين الدالة setLoading لتحديث حالة loading عند الحاجة. عندما تقوم بتحديث الحالة باستخدام الدالة المرفقة (مثل setLoading(true) أو setLoading(false))، يعيد React رسم المكون بناء على القيمة الجديدة للحالة. هذا يسمح لك بإعادة رسم المكون بشكل ديناميكي استنادا إلى التغييرات في الحالة. بخصوص السؤال حول userAnswer('hi')، يظهر أن هذا قد يكون استخداما لدالة لتحديث حالة userAnswer،مثلا، إذا كنت قد قمت بتعريف setUserAnswer باستخدام useState، يمكنك استخدامها لتحديث قيمة userAnswer: const [userAnswer, setUserAnswer] = useState(""); // عندما يحدث حدث ما مثل إدخال المستخدم لإجابة setUserAnswer('hi'); بمجرد أن تتغير قيمة userAnswer، سيتم إعادة رسم المكون بناء على هذا التغيير.
-
بخصوص أداة ال image labling يمكنك استخدام الأداة الخاص بموقع Roboflow، تضيف الصور هناك و بعدها تقوم بتحديد العنصر في الصور بشكل بسيط و سهل. بعد الانتهاء يمكنك استخدام الموقع مباشرة لتجربة النتائج او الحصول على كود تقوم بإستخدامه عن طريق google collab و ذلك لأنك ستستخدم gpu الخاص بقوقل و ستكون النتائج سريعة. و اخر مرحلة تقوم بتحميل ملف النتيجة و استخدامه في كودك على بيثون.
-
يمكنك تعلم الذكاء الاصطناعي كمبرمج من خلال مصادر متعددة على الإنترنت، سواء كانت دورات أو كتب. أول مرحلة هي انو يجب عليك تعلم أساسيات علوم الحاسوب ولغة البرمجة بايثون، لأنها اللغة الأكثر شيوعا في هذا المجال، حاول تعلم الرياضيات المطبقة، خاصة الجبر الخطي والتفاضل والتكامل، والتي تساعدك على فهم الخوارزميات والنماذج المستخدمة في الذكاء الاصطناعي. مجالات الذكاء الإصطناعي كثيرة يمكنك مثل البدأ بمجال تعلم الآلة ، وهو الفرع الرئيسي من الذكاء الاصطناعي الذي يمكن الآلات من التعلم من البيانات والتنبؤ بالنتائج، و يوجد ايضا مجال التعلم العميق او Deep Learning، وهو الفرع الأكثر تقدما من تعلم الآلة الذي يستخدم الشبكات العصبية الاصطناعية Artificial Neural Networks لحل المشكلات المعقدة. كبداية اختر كورس سهل تتعلم منه الأساسيات في هذا المجال، يوجد العديد من الكورسات على الإنترنت، بعدها حاول التعمق في احد المجالات التي ذكرتها لك لتدخل في هذا المجال بشكل افضل. يمكنك إلقاء نظرة على قسم الذكاء الإصطناعي في حسوب، و يمكنك الإطلاع على هذه المقالة بحيث تحتوي على معلومات قيمة بخصوص هذا المجال:
-
بالطبع يمكنك ذلك، يجب أن تكون على دراية بأن لغات مثل Python تعتبر شائعة جدا في مجال تعلم الآلة، وذلك بسبب وجود العديد من المكتبات والأدوات المتاحة التي تدعم هذا المجال مثل TensorFlow وPyTorch. بالنسبة للغات التي ذكرتها تحتاجها لتطوير واجهة المستخدم لتطبيقك، و من الجيد أيضا أن تكون على دراية بالعمل مع APIs إذا كنت ترغب في ربط تطبيق تعلم الآلة بالخدمات الخارجية أو تحميل البيانات. إذا كنت ترغب في تطبيق تعلم الآلة بشكل كامل داخل المتصفح، فإن TensorFlow.js هي إحدى الخيارات التي قد تهمك، بحيث تمكنك من تدريب نماذج تعلم الآلة وتشغيلها مباشرة في المتصفح باستخدام JavaScript. يعني بصفة عامة الاعتماد على لغات مثل Python في مشروع تعلم الآلة أكثر شيوعا، لكن استخدام تقنيات الويب يمكن أن يكون له فائدته في توفير تجربة مستخدم أفضل وتكامل مع الواجهة الرسومية.
- 4 اجابة
-
- 1
-
المشكل الذي ظهرلك بخصوص استعمال ال powershell بحيث يكون استعمالها في بعض الأحيان محدود بسبب الأمان، و بصفة عامة و في استخدامات ال vs code لا يوجد فرق بينها و بين ال cmd يمكنك تغيير ال terminal الإفتراضي الى cmd يالطريقة التالية: تضغط على Terminal ثم New Terminal في الأسفل على اليمين تجد علامة + مع سهم للأسفل اضغط على السهم بعدها select default profile و من ثم اختر ال cmd. بعد تنفيذ كل هذه المراحل قم بإنشاء terminal جديد و اشتغل عليه. يوجد حل اخر و هو انو نتخطى حماية ال powershell بالطريقة التالية: قم بالضغط على ctrl+shift+p و في خانة البحث اكتب settings.json، بعد دخولك للملف ابحث عن و غيرها للقيمة التالية: "terminal.integrated.profiles.windows": { "PowerShell": { "source": "PowerShell", "icon": "terminal-powershell", "args": ["-ExecutionPolicy", "Bypass"] } }, "terminal.integrated.defaultProfile.windows": "PowerShell", و اخيرا قم بحفظ التغييرات و إعادة تشغيل ال vs code من جديد.
- 4 اجابة
-
- 1
-
اذا كانت لديك خبرة في البايثون قليلا يمكنك القيام بذلك، ستحتاجين لتعلم اساسيات الأتمتة. اول شيء تطلعي على بنية الموقع او structure الخاصة بكل عنصر هناك، بعدها يمكنك التحكم فيه عن طريق البيبثون، المكتبات التي ستستخدمينها بصفة عامة هي Selenuim. فكرة البرمجة تقوم بإحضار ال path الخاص بكل عنصر و بعدها تتحكم فيه بالبرمجة، بعد الإنتهاء من كل المراحل سيصبح السكريت الخاص بك جاهز. بخصوص مكتبة ال selenuim تحدثت عنها في هذا المقال: أتمتة المهام باستخدام مكتبة Selenium ولغة البايثون اما بخصوص تخطي الكابتشا يوجد مكتبة مدفوعة بإسم 2captcha يمكنك الإطلاع عليها و دمجها في الكود الخاص بك.
-
يمكنك فعل ذلك سواء باستخدام Access أو Excel، ولكن يعتمد الاختيار على احتياجات ومتطلبات المشروع الخاص بك، بحيث يجب أن تأخذ العديد من العوامل بعين الإعتبار إذا كان لديك كمية كبيرة من البيانات وتحتاج إلى علاقات معقدة بينها، فإن Access يمكن أن يكون خيارا أفضل لإدارة قاعدة البيانات، كما أن Access يمكن أن يوفر مستويات أمان أعلى بالنسبة لقاعدة البيانات، مما يجعله أفضل في بعض الحالات حينما يكون الوصول إلى البيانات حساسا، او إذا كان لديك حاجة إلى التكامل مع تطبيقات أخرى، فإنه قد يكون أسهل في هذا الصدد. في حالة إذا كنت بحاجة إلى إمكانيات تحليل بيانات متقدمة وإنشاء تقارير معقدة، يمكن أن يكون Excel أكثر فعالية في هذا الصدد، كما انه سهل في تصميم واجهة سهلة الاستخدام وتحتاج إلى أن تكون العمليات بسيطة.
-
جرب ايضا استخدام useEffect لتحديث buttonColor بناءً على قيمة likes و userId، وتأكد من وجود useEffect` خارج نطاق الدالة handleLikeImage. useEffect(() => { setButtonColor(likes.some((item) => item.user === userId)); }, [likes, userId]); و تحقق من القيم بعد تحديث likes، ضع console.log لقيم likes و userId بعد استدعاء handleLikeImage`للتحقق من أن القيم لا تتغير بشكل غير متوقع. const handleLikeImage = async (id) => { if (!user) { navigate("/login"); return; } try { const res = await axios.put(`/api/images/like/${id}`, like, { headers: { "Content-Type": "application/json", "x-auth-token": user.data.token, }, }); setLike(res.data); setNumLikes(res.data.likes.length); } catch (err) { setError(err.response.data.msg); setTimeout(() => { setError(null); }, 1500); } }; useEffect(() => { setButtonColor(likes.some((item) => item.user === userId)); }, [likes, userId]);
-
الأمر صعب كثيرا و يحتاج الى خبراء في المجال و يختلف من لابتوب لآخر، و مؤخرا اي في الأجهزة الجديدة اصبحت الكاميرا موصولة بالفلاش مباشرة حيت يتم تغذية الفلاش من كهرباء الكاميرا، فإذا لم تشتغل الكاميرا لن يشتغل الفلاش. يعني بصفة عامة أراه أمر خاطئ اذا كنت تريد مراقبة إبنك يمكنك استخدام احد برامج مراقبة الأجهزة و ليس الكاميرا، هذه الطريقة أفضل اعتقد.
-
الدالة هي مجموعة من الأوامر التي تقوم بتنفيذ مهمة معينة، تأخذ الدالة معاملا (arguments) وتقوم بإرجاع قيمة (أو لا تقوم بإرجاع شيء). و يمكنك تعريف دالة باستخدام كلمة مفتاحية function. المعلومات التي يتم تمريرها إلى الدالة تعرف باسم المعاملات، و يتم تحديد مكان المعلومات في تعريف الدالة. على سبيل المثال: (message) في تعريف الدالة getChatCompletion. تقوم الدوال بالعمل على المعلومات التي تمرر إليها كمعاملات، مثلا في تعريف الدالة getChatCompletion، يتم استخدام message كجزء من جسم الطلب الذي يتم إرساله إلى "/api/create-chat-completion". بخصوص تمرير البيانات كمعامل يتم بالطريقة التالية: const res = await fetch("/api/create-chat-completion", options) حيث يتم إرسال البيانات الموجودة في options إلى "/api/create-chat-completion". ام بخصوص Messages فهي خاصية (property) في الكائن options، ويتم تعيين قيمتها إلى message، و تستخدم هذه الخاصية لتحديد محتوى الرسالة التي سترسل إلى الخادم.
-
هذا هو المسار الصحيح ل cmd بحيث عن تشغيله اول مرة يكون في مسار مستخدم الكمبيوتر، اذا اردت تغيير المسار يمكنك استخدام امر cd اي اختصار لكلمة change direction اما اذا اردت أسهل طريقة هي الدخول للملف و كتابة كلمة cmd في مسار الملف و الضغط على enter و بهذه الطريقة تفتح لك cmd في نفس مسار الملف، مثل الصورة:
-
على حسب تحليلي للكود أعتقد أن المشكلة تكمن في كيفية تحديث قيمة buttonColor بعد استدعاء handleLikeImage. أي السطر الذي يحدث فيه المشكل هو : setButtonColor(!buttonColor); المشكلة المحتملة هي أن buttonColor قد لا يتم تحديثها بشكل صحيح عند استدعاء هذا السطر، رغم أن: likes.some((item) => item.user === userId) قد تعود بقيمة false. حاول تغيير الدالة للتأكد من أن التحديث يتم بناء على القيمة السابقة بشكل صحيح. setButtonColor(prevButtonColor => !prevButtonColor); اما في حالة إذا كنت تقوم بتحديث likes بشكل غير مباشر (على سبيل المثال، استجابة لطلب HTTP)، فقد يكون من المفيد استخدام useEffect للتأكد من أن buttonColor يتم تحديثه بشكل صحيح بعد تحديث likes: useEffect(() => { setButtonColor(likes.some((item) => item.user === userId)); }, [likes, userId]); بحيث يجب عليك استدعاء هذا الكود خارج نطاق الدالة handleLikeImage.
- 3 اجابة
-
- 1
-
مرحبا اخي، بخصوص المشكلة اللي عندك اسبابها كثيرة و لكن أكثر سبب منتشر وجدته هو ان نسخة البيثون التي عندك غير مدعمة من طرف هذه المكتبة. حيث بعد اطلاعي على الموقع الخاص بالمكتبة تبين ان النسخة المدعمة للبيثون هي التي بين 3.7 - 3.11 و هذا بخصوص نسخة Kivy 2.2.1 يمكنك التأكد اولا من النسخة ثم محاولة التجربة مرة أخرى اذا كانت عندك النسخة المدعمة يمكنك اعادة التجربة بهذه الأوامر: >> py -3.10 --version >> pip install virtualenv >> py -3.10 venv .venv >> .venv\Scripts\activate >> pip install kivy او هذين الأمرين اللذان يسمحان لك بالتحميل مباشرة من موقع المكتبة: python -m pip install kivy --pre --no-deps --index-url https://kivy.org/downloads/simple/ python -m pip install "kivy[base]" --pre --extra-index-url https://kivy.org/downloads/simple/
-
مرحبا أخي كريم، جميل جدا انك اختر هذا المجال الذي اصبح حاليا من أكثر المجالات المطلوبة، حيث يتداخل مجال الإعلام الآلي في كل المجالات الأخرى. يمكنك و قبل كل شيء ان تتعلم اساسيات الحاسوب حتى تكون لديك فكرة كاملة على المجال الذي انت فيه و كيف ستتعامل معه، أنصحك بالبدأ بالكورس الموجود هنا في أكاديمية حسوب حيث يغطي الكورس اساسيات هذا المجال بالإضافة الى مدخل لبعض لغات البرمجة مثل ال javascript يمكنك الإطلاع على المزيد من التفاصيل من هنا: بعد تعلمك لهذه الأساسيات اختر طريق معين لتكمل فيه دراستك، و هذا اهم شيء لأي مبرمج حاليا، حيث اذا كنت تنتقل من مجال لآخر ستضيع العديد من الوقت و تجد نفسك تعرف أساسيات كل المجالات و لكن لا تحترف اي واحد منهم. المجالات كثيرة جدا مثل :تطوير المواقع الإلكترونية، تطوير تطبيقات الهاتف، تطوير تطبيقات سطح المكتب، الذكاء الإصطناعي و تعلم الآلة، برمجة الروبوتات و غيرها. يوجد هنا كورسات ايضا لتعلم بعض هذه المجالات فبعد انتهائك من الكورس و اختيارك للمجال الذي وجدت اهتمامك فيه، يمكنك الإطلاع على الكورسات الأخرى لتتقدم أكثر في مسارك.
-
حل الأسئلة الإختبارية ممنوع و لكن سأقدم لك شرح لتفهم طريقة الحل، لدينا جدول يمثل عمليات مختلفة، ونحن نريد حساب متوسط وقت الانتظار لكل من ثلاثة خوارزميات جدولة مختلفة، الجدول يحتوي على معلومات مثل وقت الوصول، وقت الانفجار ، وقت الدورة، ووقت الانتظار لكل عملية. بخصوص شرح كل خوازمية لدينا : Round Robin (RR): يتم تقسيم الوقت بين العمليات بحيث تحصل كل عملية على قطعة محددة من الوقت ثم تتحول العملية إلى العملية التالية. يتم حساب وقت الانتظار كفارق بين وقت الدورة ووقت الانفجار. Shortest Remaining Time First (SRTF): تقوم بتشغيل العملية ذات الوقت المتبقي الأقل أولا. في كل مرة يتم تغيير العملية إذا كانت هناك عملية جديدة تصبح بأقل وقت متبقي. Priority Scheduling: تعطى الأولوية لكل عملية وتبدأ بتشغيل العملية ذات أعلى أولوية. يتم حساب وقت الانتظار بناء على الفرق بين وقت الدورة ووقت الانفجار. اعتقد ان هذا الشرح كافي لتقوم بحساب متوسط الوقت لكل واحدة، اذا كان لديك سؤال آخر لا تترد في طرحه.
-
يجب عليك توفير رابط المشكلة لنفهم اكثر لكن في رأيي و حسب فهمي للأمثلة التي طرحتها فإن حل المشكلة هو اكبر substring من دون ان يتكرر الحرف فيه. في المثال الاول الامر واضح اكبر substring هو abc نفس الشيء في المثال الثاني لاننا لا نحتسب تكرار الحروف. اما في المثال الأخير فيوجد اثنين substrigs يوجد wp و wke و بما ان الثاني اطول من الأول فالحل هو wke.
- 4 اجابة
-
- 1
-
يوجد بعض البرامج التي توفر هذه الخاصية و تتجنب عناء التجربة في كل المتصفحات، احد هذه البرامج المعروفة هو برنامج browserstack حيث يقدم بيئات اختبار افتراضية لتحقيق توافق موقع الويب أو التطبيق عبر مجموعة واسعة من المتصفحات والأنظمة، و حتى يمكنك اختبار تطبيقات الهواتف الذكية على متصفحات مختلفة وأنظمة تشغيل مثل iOS وAndroid. و لكن هذا البرنامج مدفوع و يقدم مهلة مجانيو لتجربته، اذا كان لديك حساب جامعي في github يمكنك الحصول على حزمة المبرمجين في github و من بين الامتيازات تحصل على مدة تجربة اكثر لبرنامج browserstack. اما اذا كانت تبحث عن برامج مشابهة و مجانية يمكنك البحث في قوقل على free cross browser testing و ستجد أمثلة مشابهة لذلك.