مسألة برمجية : نظام جداول البيانات

فى نظام من نظم جداول البيانات مثل اكسل على سبيل المثال يتم استخدام الترقيم التالي فى الأعمدة 

       26  وهكذا حتى العمود  B  والعمود الثانى له الترتيب  A العمود الاول له الترتيب 
  والعمود 28  AA بعد ذلك يتم استخدام خانتين من الحروف فالعمود 27 يعبر عنه ب   Z له الترتيب 
 . . .يستخدم ثلاثة خانات وهكذا ZZ  و بعد  AZ والعمود 52 يعبر عنه ب AA
 
  الاعمدة يعبر عنها بالارقام الصحية التى تبدء من 1  فيعبر عن موقع الخلية بدمج
الصفوف + الاعمدة 
 : على سبيل المثال 
BC23 
يعبر عن العمود 55 و الصف 23
 
 فى بعض الاحيان يستخدم طريقة اخري على سبيل المثال 
R23C55 
تعنى الصف 23 و العمود 55 
 
المطلوب 
 
تصميم برنامج والذي يقوم بقراءة المدخلات وتحويلها الى نظام اخري
 
المدخلات
 
 اول سطر يحتوي عدد المدخلات التى ستيدخلها المستخدم وهو عدد صحيح 
   بعد ذلك يتم ادخال كل سطر يحتوي على نظام
 
 
مثال 
 
الدخل
 
BC23
R23C55
 
الخرج
 
2
R23C55
BC23
 
 
البرنامج
 
حاول حل البرنامج بنفسك اولًا
 
CPP بلغة 
#include <cstdio>
#include <cstring>
#include <cctype>

int main()
{
    int n;
    char ch[20];
    scanf("%d", &n);
    while (n--)
    {
        scanf("%s", ch);
        size_t m = strlen(ch);
        size_t C = 1;
        while (C < m && isdigit(ch[C]))
        {
            ++C;
        }

        if (C > 1 && C < m)
        {
            int col(0);
            for (size_t i = C + 1; i < m; ++i)
            {
                col = col * 10 + (ch[i] - '0');
            }

            int pow(26);
            while (col > pow)
            {
                col -= pow;
                pow *= 26;
            }

            col -= 1;
            while (pow != 1)
            {
                pow /= 26;
                printf("%c", col / pow + 'A');
                col %= pow;
            }

            ch[C] = 0;
            printf("%sn", ch + 1);
        }
        else
        {
            int col(0), val(0), pow = (1);
            size_t i = 0;
            while (isalpha(ch[i]))
            {
                col += pow;
                pow *= 26;
                val = val * 26 + ch[i] - 'A';
                i += 1;
            }
            col += val;
            printf("R%sC%dn", ch + i, col);
        }
    }
    return 0;

}

اشترك فى القائمة البريدية

عن الكاتب

شارك على وسائل التواصل

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *

5 × 3 =