دوباره كووووووووومك

Mona Mona

New Member
مي خوام يه برنامه بنويسم كه يه حرف كوچيك لاتين رو دريافت كنه و بدون استفاده از if اونو به حرف بزرگ تبديل كنه و بالعكس.
:green::)
 

the_king

مدیرکل انجمن
مي خوام يه برنامه بنويسم كه يه حرف كوچيك لاتين رو دريافت كنه و بدون استفاده از if اونو به حرف بزرگ تبديل كنه و بالعكس.
:green::)

لطفا قوانین مجید آنلاین را رعایت کنید :
B1 - هر مبحث باید عنوانی داشته باشد که خلاصه ای از موضوع آن مبحث باشد، از عناوین مبهم و کلی استفاده نکنید.

B2 - در عنوان مبحث از بکارگیری عبارات اضافی همانند کمک فوری، تو رو خدا کمک کنید و ... خودداری کنید.  

در ضمن زبان برنامه نویسی رو مشخص نکردید.

کد:
#include <iostream.h>
#include <stdio.h>
#include <conio.h>

int main()
{
    char ch;
    cout << "Please enter a character : " << endl;
    cin >> ch;
[B][COLOR="Blue"]    ch = 65 + (ch - 65) % 32 + ((ch / 97 + 1) % 2) * 32;[/COLOR][/B]
    cout << endl << ch << endl;
    getch();
    return 0;
}

کد:
#include <iostream.h>
#include <stdio.h>
#include <conio.h>

int main()
{
    char ch;
    cout << "Please enter a character : " << endl;
    cin >> ch;
[B][COLOR="Blue"]    ch = (ch >= 97) ? (ch - 32) : (ch + 32);[/COLOR][/B]
    cout << endl << ch << endl;
    getch();
    return 0;
}

کد:
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
[B][COLOR="Blue"]#include <ctype.h>[/COLOR][/B]

int main()
{
    char ch;
    cout << "Please enter a character : " << endl;
    cin >> ch;
[B][COLOR="Blue"]    ch = toupper(ch) + ((ch / 97 + 1) % 2) * 32;[/COLOR][/B]
    cout << endl << ch << endl;
    getch();
    return 0;
}
 

Mona Mona

New Member
از جوابتون ممنون ،من برنامه ي اولي رو نوشتم جواب هم گرفتم . ميدونم 65 كد حرف A ‌و 97 كد حرف a است ولي از جمع و تفريق و تقسيم ها چيزي نفهميدم. اگه توضيح بدين خيلي ممنون ميشم. :-?
 

the_king

مدیرکل انجمن
از جوابتون ممنون ،من برنامه ي اولي رو نوشتم جواب هم گرفتم . ميدونم 65 كد حرف A ‌و 97 كد حرف a است ولي از جمع و تفريق و تقسيم ها چيزي نفهميدم. اگه توضيح بدين خيلي ممنون ميشم. :-?
باید به کد حروف بزرگ 32 واحد اضافه کرده و از کد حروف کوچک 32 واحد کسر کنیم. چون این عملیات در یک
فرمول انجام می شود به معادله ای نیاز داریم که بین حروف کوچک و بزرگ تفاوت قائل شود، بهترین نوع تفاوت هم
این است که برای یک گروه (حروف کوچک یا بزرگ) عدد 0 و برای گروه دیگر عدد 1 را محاسبه نماید.
می توانیم این عدد 0 و 1 را در هر فرمولی ضرب کنیم تا آن فرمول برای یک گروه اجرا نشود (نتیجه در 0 ضرب شود)
یا اجرا شود (در 1 ضرب شود).

گروه اول را حروف بزرگ (کد های 65 الی 90) و گروه دوم را حروف کوچک (کد های 97 الی 122) فرض می کنیم.
اگر حاصل تقسیم صحیح (بدون اعشار) کد کاراکتر ورودی بر 97 را محاسبه کنیم برای گروه اول 0 و برای گروه دوم
1 خواهد بود، چون کد های گروه اول از 97 کوچکتر اند :
کد:
ch / 97
فرمول بالا برای زمانی مناسب است که بخواهیم عبارتی فقط برای گروه دوم موثر باشد و برای گروه اول ضریب 0 باشد.
اما اگر بخواهیم برعکس باشد باید تغییرش دهیم. اگر این مقدار را با 1 جمع کرده و باقیمانده تقسیم اش را
بر 2 محاسبه کنیم نتیجه معکوس می شود، برای گروه اول 1 و برای گروه دوم 0 می شود :
کد:
[B][COLOR="Blue"](ch / 97 + 1) % 2[/COLOR][/B]

حالا با استفاده از این دو فرمول می توانیم عبارتی را بنویسیم که مقدار یک گروه را کسر کرده و مقدار گروه دیگر
را افزایش دهد.

در ضمن اگر کد کاراکتر ورودی را از 65 کسر کنیم برای گروه اول عددی بین 0 الی 25 و برای گروه دوم 32 + 0 الی
32 + 25 خواهد شد. اگر باقیمانده تقسیم اش را بر 32 محاسبه کنیم همواره 0 الی 25 خواهد بود، چه جزو گروه
اول باشد و چه گروه دوم :
کد:
(ch - 65) % 32
در نتیجه این فرمول زیر کاراکتر را به حروف بزرگ تبدیل می کند :
کد:
ch = 65 + (ch - 65) % 32;

فرمول بالا برای تبدیل کردن گروه دوم به اول کافی است اما باید برای تبدیل کردن گروه اول به دوم تکمیل اش کنیم.
ما عبارتی به آن اضافه می کنیم که اگر ورودی جزو گروه اول بود 1 * 32 و اگر جزو گروه دوم بود 0 * 32 به آن اضافه شود :
کد:
 + [B][COLOR="Blue"]((ch / 97 + 1) % 2)[/COLOR][/B] * 32
 

جدیدترین ارسال ها

بالا