پیدا کردن نام ستون اکسل برای یک شماره ستون — راهنمای کاربردی
ستونهای نرمافزار اداری اکسل (Excel) دارای الگوی نامگذاری به صورت AAB ،AAA ، ZZ ،… ،BB ،BA ،AZ ،… ،AC، AB ،AA ،Z ،… ،C ،B ،A و به همین ترتیب است. به بیان دیگر، ستون ۱ با عنوان «A» و ستون ۲ با عنوان «B» و بهمین ترتیب نامگذاری شده است و مثلا، ستون شماره ۲۷ با عنوان «AA» نام گذاری شده است. اکنون مسئه این است که برای یک شماره ستون داده شده، عنوان ستون متناظر با آن، بازگردانده شود. در ادامه، مثالهایی در این راستا ارائه شده است.
Input Output
۲۶ Z
۵۱ AY
۵۲ AZ
۸۰ CB
۶۷۶ YZ
۷۰۲ ZZ
۷۰۵ AAC
روش اول برای پیدا کردن نام ستون اکسل برای یک شماره ستون
فرض میشود که عدد n و برای مثال، عدد ۲۸، موجود است. اکنون، نیاز است تا نام متناظر با ستون شماره ۲۸ چاپ شود. در این راستا، یک روش در ادامه بیان شده است.
باید باقیمانده عدد n که در اینجا ۲۸ است، در تقسیم بر عدد ۲۶، محاسبه شود.
در صورتی که باقیمانده عدد n بر ۲۶ برابر با ۰ باشد (برای اعدادی مانند ۲۶، ۵۲ و به همین ترتیب)، رشته Z در خروجی چاپ میشود و n جدید برابر با n/26 -1 خواهد بود. زیرا در اینجا فرض شده که ستون شماره ۲۶ همان ستون Z است، در حالی که با احتساب A، خانه شماره ۲۵ میشود.
در صورتی که خروجی عددی غیر صفر باشد، (اعدادی مانند ۱، ۲، ۳ و به همین ترتیب)، نیاز به درج کاراکتری مطابق با رشته و انجام عمل n = n/26 است. در نهایت، رشته معکوس و چاپ میشود. برای درک بهتر مطلب، مثال زیر قابل توجه است.
n = ۷۰۰
باقیمانده تقسیم n بر ۲۶ (یعنی n%26)، برابر با ۲۴ است. بنابراین، کاراکتر x در رشته خروجی قرار مگیرد و n برابر با n/26 قرار میگیرد که در حاصل آن، ۲۶ است.باقیمانده n جدید بر ۲۶ (یعنی ۲۶%۲۶) برابر با ۰ است. بنابراین، Z در رشته خروجی قرار میگیرد و n برابر با n/26 -1 است که حاصل آن، ۰ میشود. در ادامه، پیادهسازی روش بیان شده در زبانهای برنامهنویسی ++C، جاوا (Java)، پایتون (Python) و سیشارپ (#C) ارائه شده است.
پیادهسازی در C++
// C++ program to find Excel
// column name from a given
// column number
#include <bits/stdc++.h>
#define MAX 50
using namespace std;
// Function to print Excel column name for a given column number
void printString(int n)
{
char str[MAX]; // To store result (Excel column name)
int i = 0; // To store current index in str which is result
while (n > 0) {
// Find remainder
int rem = n % 26;
// If remainder is 0, then a 'Z' must be there in output
if (rem == 0) {
str[i++] = 'Z';
n = (n / 26) - 1;
}
else // If remainder is non-zero
{
str[i++] = (rem - 1) + 'A';
n = n / 26;
}
}
str[i] = '\0';
// Reverse the string and print result
reverse(str, str + strlen(str));
cout << str << endl;
return;
}
// Driver program to test above function
int main()
{
printString(26);
printString(51);
printString(52);
printString(80);
printString(676);
printString(702);
printString(705);
return 0;
}
پیادهسازی در جاوا
// Java program to find Excel
// column name from a given
// column number
public class ExcelColumnTitle {
// Function to print Excel column
// name for a given column number
private static void printString(int columnNumber)
{
// To store result (Excel column name)
StringBuilder columnName = new StringBuilder();
while (columnNumber > 0) {
// Find remainder
int rem = columnNumber % 26;
// If remainder is 0, then a
// 'Z' must be there in output
if (rem == 0) {
columnName.append("Z");
columnNumber = (columnNumber / 26) - 1;
}
else // If remainder is non-zero
{
columnName.append((char)((rem - 1) + 'A'));
columnNumber = columnNumber / 26;
}
}
// Reverse the string and print result
System.out.println(columnName.reverse());
}
// Driver program to test above function
public static void main(String[] args)
{
printString(26);
printString(51);
printString(52);
printString(80);
printString(676);
printString(702);
printString(705);
}
}
// This code is contributed by Harikrishnan Rajan
پیادهسازی در پایتون
# Python program to find Excel column name from a
# given column number
MAX = 50
# Function to print Excel column name
# for a given column number
def printString(n):
# To store result (Excel column name)
string = ["\0"] * MAX
# To store current index in str which is result
i = 0
while n > 0:
# Find remainder
rem = n % 26
# if remainder is 0, then a
# 'Z' must be there in output
if rem == 0:
string[i] = 'Z'
i += 1
n = (n / 26) - 1
else:
string[i] = chr((rem - 1) + ord('A'))
i += 1
n = n / 26
string[i] = '\0'
# Reverse the string and print result
string = string[::-1]
print "".join(string)
# Driver program to test the above Function
printString(26)
printString(51)
printString(52)
printString(80)
printString(676)
printString(702)
printString(705)
# This code is contributed by BHAVYA JAIN
پیادهسازی در C#
// C# program to find Excel
// column name from a given
// column number
using System;
class GFG{
static String reverse(String input)
{
char[] reversedString = input.ToCharArray();
Array.Reverse(reversedString);
return new String(reversedString);
}
// Function to print Excel column
// name for a given column number
private static void printString(int columnNumber)
{
// To store result (Excel column name)
String columnName = "";
while (columnNumber > 0)
{
// Find remainder
int rem = columnNumber % 26;
// If remainder is 0, then a
// 'Z' must be there in output
if (rem == 0)
{
columnName += "Z";
columnNumber = (columnNumber / 26) - 1;
}
// If remainder is non-zero
else
{
columnName += (char)((rem - 1) + 'A');
columnNumber = columnNumber / 26;
}
}
// Reverse the string
columnName = reverse(columnName);
// Print result
Console.WriteLine(columnName.ToString());
}
// Driver code
public static void Main(String[] args)
{
printString(26);
printString(51);
printString(52);
printString(80);
printString(676);
printString(702);
printString(705);
}
}
// This code is contributed by amal kumar choubey
خروجی قطعه کد بالا، به صورت زیر است.
Z
AY
AZ
CB
YZ
ZZ
AAC
روش دوم برای پیدا کردن نام ستون اکسل برای یک شماره ستون
مسئله، مشابه با تبدیل یک عدد اعشاری به ارائه دودویی آن است. اما به جای یکس یستم مبنای دو که در آن تنها دو رقم ۰ و ۱ وجود دارد، در اینجا ۲۶ کاراکتر از A تا Z وجود دارد. بنابراین، به جای مبنای ۲، با مبنای ۲۶ کار میشود. باید توجه داشت که در این سیستم عددی، ۰ وجود ندارد و ستون شماره ۱ برابر با A، ستون B برابر با ۲ و به همین ترتیب، Z برابر با ۲۶ است. برای آنکه مسئله به خوبی قابل درک باشد، مسئله در دو گام مورد بررسی قرار میگیرد. این دو گام در ادامه بیان شدهاند.
- با تبدیل عدد به مبنای ۲۶، عدد ۰ نیز در سیستم وجود خواهد داشت.
- ارائه عدد را به یک بدون داشتن ۰ در آن سیتسم، تبدیل کنید.
گام اول:
فرض میشود که عدد ۶۷۶ وجود دارد. چطور میتوان آن را در سیستم مبنای ۲۶ نشان داد؟ راهکار مشابهی برای سیستم دودویی وجود دارد ولی در آن، به جای تسیم و باقیمانده بر ۲، تقسیم و باقیمانده بر ۲۶ محاسبه میشود.
Base 26 representation of 676 is : 100
گام دوم:
اکنون و چنانکه پیش از این نیز به آن اشاره شد، صفر در این ارائه وجود ندارد. زیرا که صفر بشی از سیستم عددی مورد استفاده نیست. پرسشی که در این وهله مطرح میشود این است که چطور میتوان صفرها را از میان برداشت؟ این کار ساده است، اما پیش از انجام آن و در ادامه، یک ترفند ریاضی جالب که برای این کار قابل استفاده است، بیان شده است.
در تفریق اگر برای مثال هدف محاسبه ۹ – ۵۰۰۰ باشد، چطور باید ۹ را از ۰ کم کرد؟ در این حالت، از رقم کناری، قرض گرفته میشود.
- در سیستم اعداد اعشاری، برای کار کردن با صفر، یک دهتایی از عدد بعدی قرض گرفته میشود و یک (۱) از آن عدد (عدد بعدی) کم میشود.
- در سیستم مبنای ۲۶، برای کار کردن با صفر، ۲۶ قرض گرفته میشود و ۱ از عدد بعدی کم میشود.
بنابراین، باید ۱۰۰۲۶ به سیستم عددی تبدیل شود که ۰ ندارد. خروجی، یک ارائه نمادین به صورت ۲۶(۲۵ ۲۶) است که در واقع، معادل با رشته YZ است. در ادامه، پیادهسازی روش بیان شده در بالا، در زبانهای برنامهنویسی ++C، جاوا، پایتون و C# انجام شده است.
پیادهسازی در C++
#include <iostream>
using namespace std;
void printString(int n)
{
int arr[10000];
int i = 0;
// Step 1: Converting to number assuming
// ۰ in number system
while (n) {
arr[i] = n % 26;
n = n / 26;
i++;
}
// Step 2: Getting rid of 0, as 0 is
// not part of number system
for (int j = 0; j < i - 1; j++) {
if (arr[j] <= 0) {
arr[j] += 26;
arr[j + 1] = arr[j + 1] - 1;
}
}
for (int j = i; j >= 0; j--) {
if (arr[j] > 0)
cout << char('A' + arr[j] - 1);
}
cout << endl;
}
// Driver program to test above function
int main()
{
printString(26);
printString(51);
printString(52);
printString(80);
printString(676);
printString(702);
printString(705);
return 0;
}
// This code is contributed by Ankur Goel
پیادهسازی در جاوا
import java.util.*;
class GFG{
static void printString(int n)
{
int []arr = new int[10000];
int i = 0;
// Step 1: Converting to number
// assuming 0 in number system
while (n > 0)
{
arr[i] = n % 26;
n = n / 26;
i++;
}
// Step 2: Getting rid of 0, as 0 is
// not part of number system
for(int j = 0; j < i - 1; j++)
{
if (arr[j] <= 0)
{
arr[j] += 26;
arr[j + 1] = arr[j + 1] - 1;
}
}
for(int j = i; j >= 0; j--)
{
if (arr[j] > 0)
System.out.print(
(char)('A' + arr[j] - 1));
}
System.out.println();
}
// Driver code
public static void main(String[] args)
{
printString(26);
printString(51);
printString(52);
printString(80);
printString(676);
printString(702);
printString(705);
}
}
// This code is contributed by amal kumar choubey
پیادهسازی در پایتون
def printString(n):
arr = [0] * 10000
i = 0
# Step 1: Converting to number
# assuming 0 in number system
while (n > 0):
arr[i] = n % 26
n = int(n // 26)
i += 1
#Step 2: Getting rid of 0, as 0 is
# not part of number system
for j in range(0, i - 1):
if (arr[j] <= 0):
arr[j] += 26
arr[j + 1] = arr[j + 1] - 1
for j in range(i, -1, -1):
if (arr[j] > 0):
print(chr(ord('A') +
(arr[j] - 1)), end = "");
print();
# Driver code
if __name__ == '__main__':
printString(26);
printString(51);
printString(52);
printString(80);
printString(676);
printString(702);
printString(705);
# This code is contributed by Princi Singh
پیادهسازی در C#
using System;
class GFG{
static void printString(int n)
{
int []arr = new int[10000];
int i = 0;
// Step 1: Converting to
// number assuming 0 in
// number system
while (n > 0)
{
arr[i] = n % 26;
n = n / 26;
i++;
}
// Step 2: Getting rid of 0,
// as 0 is not part of number
// system
for(int j = 0; j < i - 1; j++)
{
if (arr[j] <= 0)
{
arr[j] += 26;
arr[j + 1] = arr[j + 1] - 1;
}
}
for(int j = i; j >= 0; j--)
{
if (arr[j] > 0)
Console.Write((char)('A' +
arr[j] - 1));
}
Console.WriteLine();
}
// Driver code
public static void Main(String[] args)
{
printString(26);
printString(51);
printString(52);
printString(80);
printString(676);
printString(702);
printString(705);
}
}
// This code is contributed by 29AjayKumar
خروجی قطعه کد بالا به صورت زیر است.
Z
AY
AZ
CB
YZ
ZZ
AAC
اگر این مطلب برای شما مفید بوده است، آموزشها و مطالب زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای برنامه نویسی پایتون
- آموزش پایتون (Python) | برنامه نویسی پایتون مقدماتی
- مجموعه آموزشهای برنامهنویسی
- آموزش پایتون (Python) — مجموعه مقالات جامع وبلاگ فرادرس
- زبان برنامه نویسی پایتون (Python) — از صفر تا صد
- آموزش اینترنت اشیا با پایتون (Python IoT) | گام به گام و به زبان ساده
- ۲۰ سایت آموزش آنلاین پایتون | راهنمای شروع یادگیری
منبع [+]
مجموعه: برنامه نویسی برچسب ها: اسم ستون اکسل, اکسل, برنامه نویسی, برنامه نویسی برای اکسل, پیدا کردن اسم ستون, ستون اکسل