از جوابتون ممنون ،من برنامه ي اولي رو نوشتم جواب هم گرفتم . ميدونم 65 كد حرف A و 97 كد حرف a است ولي از جمع و تفريق و تقسيم ها چيزي نفهميدم. اگه توضيح بدين خيلي ممنون ميشم.
باید به کد حروف بزرگ 32 واحد اضافه کرده و از کد حروف کوچک 32 واحد کسر کنیم. چون این عملیات در یک
فرمول انجام می شود به معادله ای نیاز داریم که بین حروف کوچک و بزرگ تفاوت قائل شود، بهترین نوع تفاوت هم
این است که برای یک گروه (حروف کوچک یا بزرگ) عدد 0 و برای گروه دیگر عدد 1 را محاسبه نماید.
می توانیم این عدد 0 و 1 را در هر فرمولی ضرب کنیم تا آن فرمول برای یک گروه اجرا نشود (نتیجه در 0 ضرب شود)
یا اجرا شود (در 1 ضرب شود).
گروه اول را حروف بزرگ (کد های 65 الی 90) و گروه دوم را حروف کوچک (کد های 97 الی 122) فرض می کنیم.
اگر حاصل تقسیم صحیح (بدون اعشار) کد کاراکتر ورودی بر 97 را محاسبه کنیم برای گروه اول 0 و برای گروه دوم
1 خواهد بود، چون کد های گروه اول از 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 + (ch - 65) % 32;
فرمول بالا برای تبدیل کردن گروه دوم به اول کافی است اما باید برای تبدیل کردن گروه اول به دوم تکمیل اش کنیم.
ما عبارتی به آن اضافه می کنیم که اگر ورودی جزو گروه اول بود 1 * 32 و اگر جزو گروه دوم بود 0 * 32 به آن اضافه شود :
کد:
+ [B][COLOR="Blue"]((ch / 97 + 1) % 2)[/COLOR][/B] * 32