الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مسابقة شهر رمضان المبارك - السؤال الرابع

مغلق
بدأه Snack3r في 2 أغسطس 2012 · 12 رد · 1,374 مشاهدة · في مشاريع ومسابقات القسم
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

مرحبا بكم في السؤال الرابع من أسئلة هذه المسابقة الرمضانية :)

سؤال اليوم يتعلق بــ Checking for Palindromes :

post-219439-032954300 1343903427_thumb.g

تجدون التفاصيل في ملف PDF في المرفقات.

أرجو لكم التوفيق.

Q4.pdf

المرفقات
palindrome.gif

تم تعديل هذه المشاركة بواسطة أحمد الشنقيطي في 2 أغسطس 2012 في 13:39 — السبب: تحديث المشاركة.

#2

هذه المشاركة مخصصة للرد على استفسارات الأعضاء حول هذا السؤل.

:: تعديل ::

لاتوجد أسئلة.

تم تعديل هذه المشاركة بواسطة أحمد الشنقيطي في 7 أغسطس 2012 في 13:47 — السبب: تحديث المشاركة.

#3

هذه المشاركة ستحتوي على أسماء المترشحين.

:: تعديل ::

أسماء المشاركين :

the inventor habib

تم تعديل هذه المشاركة بواسطة أحمد الشنقيطي في 7 أغسطس 2012 في 13:47 — السبب: تحديث المشاركة.

#4

هذه المشاركة مخصصة لعرض عدد نقاط المشاركين و محاولاتهم بعد انتهاء مدة السؤال.

:: تعديل ::

post-219439-029851400%201343471415.gif

ملاحظات على محاولة العضو TheInventorHabib : لا توجد.

النقاط التي حصلها عليها العضو TheInventorHabib :


  1. المرحلة الأولى (3/3) :
    • تُكتب الدوال في ملف رأسي مستقل (Header file), عدد النقاط : (1/1)
    • يُمنع استخدام الدوال الموجودة في الملف string.h, عدد النقاط : (1/1)
    • يتم التحقق بغض النظر عن مسألة الحروف الصغيرة و الكبيرة, عدد النقاط : (1/1)

[*]المرحلة الثانية (2/6):

  • مُراعاة حساسية الأحرف, عدد النقاط : (2/2)
  • دعم الحروف الفرنسية الخاصة (é,è,ê,ç,à,â,ô,î,û), عدد النقاط : (0/2)
  • إمكانية استيراد الجمل من ملف نصي و التحقق منها, عدد النقاط : (0/2)

[*]المرحلة الثالثة (0/21)

[*]كتابة ملف خاص بتوثيق اللعبة (0/2).

مجموع النقاط التي حصل عليها العضو TheInventorHabib يساوي 05/30

post-219439-029851400%201343471415.gif

تجدون محاولة العضو في المرفقات.

post-219439-029851400%201343471415.gif

نتمنى حظ أوفر للأخ TheInventorHabib في بقية الأسئلة.

CP.zip

تم تعديل هذه المشاركة بواسطة أحمد الشنقيطي في 7 أغسطس 2012 في 14:08 — السبب: تحديث المشاركة.

#5

دعم الحروف العربية

أخي هل سنستعمل GUI؟

#6

لا !, البرنامج يُكتب في بيئة الــ Console فقط :)

و هنا تكمن صعوبة السؤال لذا وضعته على 21 نقطة.

#7

تم حل الsؤال الأول لا أعرف كيف أتعامل مع UNICODE بال Console.

ولدلك قمت بحل المرحلة الأولي فقط.

تم وضع رابط التحميل كتعليق لديك أخي أحمد.

#8
اقتباس
تم وضع رابط التحميل كتعليق لديك أخي أحمد.

تم استقبال المحاولة.

اقتباس
لا أعرف كيف أتعامل مع UNICODE بال Console.

اللغة العربية من اللغات التي تُكتب من اليمين الي اليسار وهي ليست مُفعلة في شفره الآسكي (ASCII) وللكتابة بها و إخراج أحرفها على الشاشه بالترميز المطلوب لابد من إجراء الآتي:

  1. تغيير وضع المؤشر ليكون مهيأ للكتابة من اليمين لليسار.
  2. تغيير شفره الترميز الي unicode وهي مخصصه للغات التي تكتب من اليمين الي اليسار مثل العربية.
  3. تغيير نوع الخط ليتلائم مع الترميز الجديد.

إليك الكود:

#include<iostream>
using namespace std;
#include<windows.h>
#ifdef WIN32
#endif
#define _WIN32_WINNT_WIN7 0x0601 
typedef struct _CONSOLE_FONT_INFOEX
{
  ULONG cbSize;
  DWORD nFont;
  COORD dwFontSize;
  UINT  FontFamily;
  UINT  FontWeight;
  WCHAR FaceName[LF_FACESIZE];
}CONSOLE_FONT_INFOEX, *PCONSOLE_FONT_INFOEX;
PCONSOLE_FONT_INFOEX testFont;
int main()
{
         HANDLE hstdo;
         hstdo = GetStdHandle(STD_OUTPUT_HANDLE);
         SetConsoleTextAttribute(hstdo, FOREGROUND_GREEN|FOREGROUND_INTENSITY|BACKGROUND_BLUE);
         HANDLE OutputH;
     OutputH = GetStdHandle(STD_OUTPUT_HANDLE);
     testFont->dwFontSize.X = 10;
     testFont->dwFontSize.Y = 20;
     SetCurrentConsoleFontEx(OutputH, TRUE, testFont);
         UINT  a=864;
         if ((SetConsoleOutputCP(a)==0))
     cout<<"CP not changed."<<endl;
         else
         cout<<"CP changed to الفريق العربي للبرمجة"<<a<<endl;
         cout<< GetConsoleOutputCP() <<"\n";
     system("PAUSE");
     return 0;
}

الكود يقوم بتغيير :

  • لون النص.
  • حجم النص.
  • ترميز النص.
  • خط الكتابة.

تم تضمين هذا السطر:

#define _WIN32_WINNT 0x0601

من أجل التعرف على نظام التشغيل الخاص بك وضم بعض الملفات الخاصه به :

Setting WINVER or _WIN32_WINNT

WIN32_WINNT_VERSION

بالنسبة للدالة SetCurrentConsoleFontEx فهي موجودة في أنظمة الــ windows ابتداء من الــ vista فما فوق فقط.

مراجع مفيدة :

  1. يمكنك قراءة هذا المقال, سيفيدك بالتأكيد : دعم العربية
  2. توجد فئة اسمها arabic console قام بتطويرها المبرمج تركى العسيرى تجدها فى موقعه.

راجع أيضا :

لا يمكنني أن أفيدك أكثر من هذا, لا تنسى أننا في مسابقة :)

أرجو لك التوفيق.

تم تعديل هذه المشاركة بواسطة أحمد الشنقيطي في 3 أغسطس 2012 في 01:07 — السبب: ننسيق المشاركة.

#9

شكرا أخي أحمد أضن أني هده هي الفرصة لأتعلم التعامل مع العربية بالConsole.

#10

بالنسبة للدالة

SetCurrentConsoleFontEx فهي موجودة في أنظمة الــ windows ابتداء من الــ vista فما فوق فقط.

غير معرفة لدي.blush.gifwindows 7 .

#11

إذا لم تعمل معك الدالة SetCurrentConsoleFontEx فيمكنك استخدام الدالة SetConsoleFont لتغيير حجم الخط :

#include <windows.h>
#include <tchar.h>
#include <iostream>
using namespace std;

typedef struct _CONSOLE_FONT {
	DWORD index;
	COORD dim;
} CONSOLE_FONT;

BOOL WINAPI SetConsoleFont(HANDLE hOutput, DWORD fontIndex) {
	typedef BOOL (WINAPI *PSetConsoleFont)(HANDLE, DWORD);
	static PSetConsoleFont pSetConsoleFont = NULL;

	if(pSetConsoleFont == NULL)
		pSetConsoleFont = (PSetConsoleFont)::GetProcAddress(::GetModuleHandle(_T("kernel32")), "SetConsoleFont");
	if(pSetConsoleFont == NULL) return FALSE;

	return pSetConsoleFont(hOutput, fontIndex);
}

BOOL WINAPI GetConsoleFontInfo(HANDLE hOutput, BOOL bMaximize, DWORD fontIndex, CONSOLE_FONT* info) {
	typedef BOOL (WINAPI *PGetConsoleFontInfo)(HANDLE, BOOL, DWORD, CONSOLE_FONT*);
	static PGetConsoleFontInfo pGetConsoleFontInfo = NULL;
	if(pGetConsoleFontInfo == NULL)
		pGetConsoleFontInfo = (PGetConsoleFontInfo)::GetProcAddress(::GetModuleHandle(_T("kernel32")), "GetConsoleFontInfo");
	if(pGetConsoleFontInfo == NULL) return FALSE;

	return pGetConsoleFontInfo(hOutput, bMaximize, fontIndex, info);
}

DWORD WINAPI GetNumberOfConsoleFonts() {
	typedef DWORD (WINAPI *PGetNumberOfConsoleFonts)();
	static PGetNumberOfConsoleFonts pGetNumberOfConsoleFonts = NULL;
	if(pGetNumberOfConsoleFonts == NULL)
		pGetNumberOfConsoleFonts = (PGetNumberOfConsoleFonts)::GetProcAddress(::GetModuleHandle(_T("kernel32")), "GetNumberOfConsoleFonts");
	if(pGetNumberOfConsoleFonts == NULL) return 0;
	return pGetNumberOfConsoleFonts();
}

BOOL WINAPI SetConsoleIcon(HICON hIcon) {
	typedef BOOL (WINAPI *PSetConsoleIcon)(HICON);
	static PSetConsoleIcon pSetConsoleIcon = NULL;
	if(pSetConsoleIcon == NULL)
		pSetConsoleIcon = (PSetConsoleIcon)::GetProcAddress(::GetModuleHandle(_T("kernel32")), "SetConsoleIcon");
	if(pSetConsoleIcon == NULL) return FALSE;
	return pSetConsoleIcon(hIcon);
}

int main(int argc, char *argv[])
{
    HANDLE h=GetStdHandle(STD_OUTPUT_HANDLE);
    cout <<" \n\n/\n\n";
    SetConsoleFont(h, 1);
    system("PAUSE");
    return EXIT_SUCCESS;
}

  • لا تتوقع أن تجد مني الإجابة في كل مرة, نحن في مسابقة :)
  • التعامل مع اليونيكود في الكونصول أمر ممتع جدا لكن يحتاج إلى الكثير من البحث و الصبر ...!
  • شمر عن ساعديك :wink:
#12

انتهت فترة تسليم المحاولات.

تم تعديل هذه المشاركة بواسطة أحمد الشنقيطي في 7 أغسطس 2012 في 14:12 — السبب: تحديث المشاركة.

هذا الموضوع مغلق.

مواضيع مشابهة