البرنامج مرفق ومعه ثلاث ملفات مساعده
نرجوا المساعده
بسم الله الرحمن الرحيم،
أخي الكريم يبدو أنك لم تقرأ قواعد المشاركة في المنتدى جيداً
لا يمكن بحال من الأحوال مساعدتك في وظيفة إن لم تقم بعرض محاولاتك أولاً وبشكل جدي
المنتدى لا يقدم خدمة حل الوظائف.
هذا هو التنبيه الأول، برجاء مراجعة قواعد المشاركة في المنتدى لتجنب إغلاق الموضوع.
بالتوفيق
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
لا يوجد فيه خطأ برمجياً حتى الجزء المتعلق بقراءة الملف.
قومي بزيادة حجم الـ buffer حتى 110 مثلاً ان كان حجم القراءة أقل.
ان كان الملف يحوي نص ربما يحاول ان يضيف null terminating
حاولي
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
ارجوو افادتي بأقرب وقت
تعديلات بسيطة:
1. لا تنسي وضع
.code start: ..... ..... end start
قد لا تؤثر على عمل البرنامج لكن من الأفضل وضعها (ليست سبب المشكلة).
2. سبب المشكلة هو استخدام المسارات الطويلة الخاصة بالويندوز مع بيئة 16بت, غير مقبول
مسار الملف للقراءة وحتى الفتح يجب ان يكون حسب الشكل القديم.
التعديل الطفيف:
FileName DB "C:\Docume~1\data.txt$" ; file to be opened
أو وضع الملف في نفس مجلد البرنامج بدون مسار أي فقط اسم الملف، وهذا الأفضل.
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
بعد تعديل الاخطاء تم القراءه من الملف
لكن
ظهر لي سطرين بلغه غريبه تحت محتويات الملف اللي تم قراءته
وهل هناك طلب في السؤال غير القراءه من الملف
ضعي الملف الذي تستخدمينه
اقتباسb.If the file exists, your program should open it and:i.Compare the name in it to your name and display a message saying if it is the same or not.
ii.Calculate the average of the numbers in the file.
iii.Display the average in red letters.
iv.Close the file and exit.
هناك نقاط أخرى يجب تنفيذها,
1. طلب الاسم من المستخدم ومقارنته بالاسم في الملف.
2. قراءة الارقام الموجودة في الاسطر ال 10 الباقية (اسمعي نصيحتي واستخدمي الأرقام بالشكل 00.. 01.. 09 خصوصا التي بين 0-9 حتى تقرأي رقمين دوماً من السطر دون الحاجة لفحص وجود الـ CR "carriage return")
3. جمع هذه الأرقام أي جمعها في المسجلات بصيغة نظامية فهي ستكون بقيم عشرية والمسجلات لا تفهم سوى hex أي يجب التحويل لـ hex.
4. طباعة المتوسط بلون أحمر، المتوسط يجب تحويله ضمن المسجلات من hex إلى decimal لطباعته بالشكل الصحيح.
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
ممكن توضح لي اكثر
اطلب من المستخدم اي اسم يعني واقارنه بالاسماء اللي كتبتها انا بالملف
وثمن كيف اجمعها الارقام اللي كتبتها بالملف في السجلات
وكيف احول من HEXA الى DEC
انتهي من الاجزاء جزء فجزء.
في البداية ضعي الملف الذي تستخدمينه مع الشفرة بآخر تعديل لها.
من المفترض ان تطلبي من المستخدم اسم وتقومي بمقارنته بالاسم الموجود في الملف (هذا واضح من نص الواجب المطلوب)
راجعي هذا الموضوع القديم:
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
الشفره بتركها لاخر شي
الان المفترض الملف يكون كم اسم وكم رقم
وين اضع النص اللي يطلب من المستخدم ادخال اسم
وكيف بتتم المقارنه هل استخدم كود معين
ودنا نستعجل شوي لانو مافي وقت
تم تعديل هذه المشاركة بواسطة Nadooe في 22 أغسطس 2008 في 18:57
أختي الكريمة,
اقرأي نص الواجب المطلوب!
الملف يجب أن يحوي على 11 سطر
في السطر الأول اسمك
في السطور ال 10 الباقية أرقام في المجال [0-100]
رقم على كل سطر من هذا المجال.
النص الذي سيطلب من المستخدم إدخال اسم سيوضع في برنامجك طبعاً!
كرسالة تظهر للمستخدم على الشاشة مثل أي رسالة أخرى من ثم في سطر جديد يقوم المستخدم بإدخال اسم ما.
المقارنة ستتم من خلال حساب طول الاسم المدخل ومقارنته مع طول الاسم الموجود في الملف.
ان تطابق الطول يتم المتابعة مع مقارنة حرف بحرف من كل اسم
أي حرف يفشل في مطابقته يخرج من العملية ولا يتم حساب المتوسط. والعكس صحيح.
اي حساب المتوسط مرتبط بتطابق الاسمين, حسبما اذكر من الواجب.
رجاء قراءة الواجب مرة أخرى، بدأت أشك ان الشفرة التي وضعتيها من صنع يدك.
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
كل اللي سويته استاذي مساعده من اناس اخرين
لأني لم ادرس الفايل ,, ولا افهمه
لكن سأحاول تطبيق ماذكرت
المقارنه cmp هل لها كوود معين ويفي بالغرض
تم تعديل هذه المشاركة بواسطة Nadooe في 22 أغسطس 2008 في 20:18
لحساب الطول أقوم بما يلي:
lea dx,givenName xor cx,cx @@: cmp byte ptr [dx+cx],0 je @F inc cx jmp @B @@: dec cx ; CX now holds the length
يعني اقوم بمقارنة البايت الحالي مع الصفر
وأزيد عداد حتى أصل إلى نهاية الاسم فأحدد الطول من خلال العداد.
ثم باعتبار ان قيمة CX تحوي على الطول المتوافق
نقوم بفحص التطابق من خلال العملية التالية
lea di,givenName lea si,fileName repe cmps byte ptr [di],byte ptr [si] cmp cx,0 jne not_equal ; otherwise equal
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
شكرا لك اخوي على جهدك معي لكن المشكله مني انا
تأخرت في الحل وما استوعبت كلامك بشكل كامل
الوقت قرب على الانتهاء ولا فيه مجال اني اكمل واشكرك مره اخرى
مثال عن اختبار تطابق سلسلتي محارف في بيئة 32بت.. لا يوجد اختلاف عن 16بت سوى في أسماء المسجلات, esi > si, edi > di وهكذا..
.586 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\kernel32.inc includelib \masm32\lib\kernel32.lib .data givenName db "this is a test",0 fileName db "this is a t!st",0 lenGiven dd 0 lenFile dd 0 .code start: ; a method to compare ; match the length first mov esi,offset givenName mov edi,offset fileName ; calc given name length xor ecx,ecx @@: cmp byte ptr [esi+ecx],0 je @F inc ecx jmp @B @@: mov lenGiven,ecx ; calc name in file length xor ecx,ecx @@: cmp byte ptr [edi+ecx],0 je @F inc ecx jmp @B @@: mov lenFile,ecx mov eax,lenGiven mov ebx,lenFile cmp eax,ebx jne not_match ; compare if same or not mov ecx,lenGiven ; doesnt matter if lenGiven or lenFile because they match repe cmps byte ptr [edi],byte ptr [esi] cmp ecx,0 jne not_match ; other wise, they match because ECX becomes zero not_match: invoke ExitProcess,0 end start
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…