|
11.05.2006, 18:06
|
#1
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Курса4 с перового курса. Решение не о4ень изящное - ибо в лом было выпендриваться ( и так делал под win и прочими самопридуманными усложнениями -т.к. в первоначальном варианте зада4ка просто школьная)
Задание - преобразования числа в его кириллическу запись (123=сто двадцать три). Верхний предел оговорён (в задаче - просто), у меня - по модулю.
//функция генерации строки по переданному в аргументе
//x трёхзначному числу разряда n.
//Возвращаемая строка передаётся как аргумент char out[]
bool decod3(int x,int n,char out[]){
int a23=x%100;//последние 2 цифры
int a1=x/100;//первая цифра
//выбор названия первой цифры
switch(a1){
*case 1: {strcat(out,"сто ");break;}
*case 2: {strcat(out,"двести ");break;}
*case 3: {strcat(out,"триста ");break;}
*case 4: {strcat(out,"четыреста ");break;}
*case 5: {strcat(out,"пятьсот ");break;}
*case 6: {strcat(out,"шестьсот ");break;}
*case 7: {strcat(out,"семьсот ");break;}
*case 8: {strcat(out,"восемьсот ");break;}
*case 9: {strcat(out,"девятьсот ");break;}
*default: break;
}
//выбор названия оставшихся 2ух
//так как числительные от 10 до 19 включительно имеют
//собственные названия не соответствующие алгоритму
//кол-во десяток + кол-во единиц,
//их обрабатываем отдельно
if((a23>9)&&(a23<20)){
*switch(a23){
* case 10: {strcat(out,"десять ");break;}
* case 11: {strcat(out,"одиннадцать ");break;}
* case 12: {strcat(out,"двенадцать ");break;}
* case 13: {strcat(out,"тринадцать ");break;}
* case 14: {strcat(out,"четырнадцать ");break;}
* case 15: {strcat(out,"пятнадцать ");break;}
* case 16: {strcat(out,"шестнадцать ");break;}
* case 17: {strcat(out,"семнадцать ");break;}
* case 18: {strcat(out,"восемнадцать ");break;}
* case 19: {strcat(out,"девятнадцать ");break;}
* default: break;
*}
*//если разряд тысяч, то конкатенируем к строке слово
*//"тысяч"
*if(n==1)strcat(out,"тысяч ");
}
//если числа не лежат в [10;19], то:
else{
*//если число>10 (и >19 так как это обработано выше),
*//то определяем название десятка
*if(a23>10){
* switch(a23/10){
* *case 2: {strcat(out,"двадцать ");break;}
* *case 3: {strcat(out,"тридцать ");break;}
* *case 4: {strcat(out,"сорок ");break;}
* *case 5: {strcat(out,"пятьдесят ");break;}
* *case 6: {strcat(out,"шестьдесят ");break;}
* *case 7: {strcat(out,"семьдесят ");break;}
* *case 8: {strcat(out,"восемьдесят ");break;}
* *case 9: {strcat(out,"девяносто ");break;}
* *default: break;
* }
* a23%=10;//получаем последнюю цифру - число единиц
*}
*//после выполнения предыдущего блока в переменной a23
*//хранится число единиц - младшая цифра, так как
*//если число было больше 10, то его десяток был обработан
*//а от самого числа взят остаток от деления на 10
*//т.е. число<10 - младшая цифра;
*//если же число было меньше 10 то предыдущий
*//условный блок не выполняется - десяток числа не обрабатывается
*//за его отсутствием
*switch(a23){
* //случай: 0 единиц
* //добавляем название разряда
* case 0: {
* *if(n==1)strcat(out,"тысяч ");
* *break;}
* //случай: 1 единица
* //добавляем числительное и, в зависимости от
* //разряда, название разряда
* case 1: {
* *if(n==0)strcat(out,"один ");
* *else if(n==1)strcat(out,"одна тысяча ");
* *break;}
* //аналогично...
* case 2: { * *
* *if(n==0)strcat(out,"два ");
* *else if(n==1)strcat(out,"две тысячи ");
* *break;}
* case 3: { * *
* *if(n==0)strcat(out,"три ");
* *else if(n==1)strcat(out,"три тысячи ");
* *break;}
* case 4: { * *
* *if(n==0)strcat(out,"четыре ");
* *else if(n==1)strcat(out,"четыре тысячи ");
* *break;}
* case 5: { * *
* *if(n==0)strcat(out,"пять ");
* *else if(n==1)strcat(out,"пять тысяч ");
* *break;}
* case 6: { * *
* *if(n==0)strcat(out,"шесть ");
* *else if(n==1)strcat(out,"шесть тысяч ");
* *break;}
* case 7: { * *
* *if(n==0)strcat(out,"семь ");
* *else if(n==1)strcat(out,"семь тысяч ");
* *break;}
* case 8: { * *
* *if(n==0)strcat(out,"восемь ");
* *else if(n==1)strcat(out,"восемь тысяч ");
* *break;}
* case 9: { * *
* *if(n==0)strcat(out,"девять ");
* *else if(n==1)strcat(out,"девять тысяч ");
* *break;}
* default: break;
*}
}
//Если функция завершила свою работу без ошибок
return true;//вернуть ИСТИНУ
}
//функция перевода стоки input[], содержащей число,
//в строку output[], содержащую числительные
bool translate(char input[],char output[]){
*//обнуление массива output путём присвоения первому байту
*//нулевого значения
*output[0]=0;
*//получения числа из строки
*long x=atoi(input);
*//если число превышает указанные в задачи пределы,
*//то вернуть ЛОЖЬ
*if(abs(x)>999999){return false;}
*//если число равно 0, то записать "ноль" в строку
*//output и выйти из функции с ИСТИНОЙ
*if(x==0){strcat(output,"ноль ");return true;}
*//если число меньше нуля, то скопировать слово "минус"
*//в строку output, а само число умножить на -1
*if(x<0){strcat(output,"минус ");x*=-1;}
*//если число превышает 999, то обработать первые
*//3 цифры как разряд тысяч и записать в переменную
*//3 последних цифры
*if(x>999){decod3(x/1000,1,output);x%=1000;}
*//обработать число (<1000)
*decod3(x,0,output);
*//вернуть ИСТИНУ
*return true;
}
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
11.05.2006, 18:20
|
#2
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Сама прога - юзание строго с моего разрешения!
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
11.05.2006, 18:22
|
#3
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Необходимые (если у вас не установлен Вижуал Студио) библиотеки
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
12.05.2006, 00:23
|
#5
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Originally posted by jimon@11.5.2006, 22:19
интерисно что за dll юзает такая "большая" прога ?
|
MFC
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
12.05.2006, 19:39
|
#6
|
|
imho MFC = зло
как никрути
win32api != зло
|
|
|
12.05.2006, 20:54
|
#7
|
Гигант индустрии
Регистрация: 14.12.2005
Сообщений: 2,785
Написано 1,183 полезных сообщений (для 4,437 пользователей)
|
Originally posted by jimon@12.5.2006, 17:39
imho MFC = зло
как никрути
win32api != зло
|
флуд тоже зло
__________________
|
(Offline)
|
|
12.05.2006, 23:46
|
#8
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
2jimon:
продолжая аналогию:
win api =зло
любой_язык_и_интерфейс=зло
ассемблер=зло
да но то пошло - и машинный код =зло, т.к. вариативность ПК как такогого ограничена.
И вообще юзать гвотовые компьютеры - ламерство! Надо свои собирать...да... Кстати - юзать готовые матери/винты/видяхи - недальновидность и зло... кстати паять их паяльниками(не произведёнными самостоятельно) - тоже зло, т.к. заводские паяльники не обладают необходимой вариатностью и придуманы ламерами.
Короче jimon - ты нарвёшься...
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
13.05.2006, 22:36
|
#9
|
|
в моем посте было хорошее и правильное слово : imho
а в твоем нет
делай выводы я никого нихочу переубедить - просто я так щитаю, и имею право выразить свою точку зрения
|
|
|
13.05.2006, 23:54
|
#10
|
Дэвелопер
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений (для 110 пользователей)
|
Originally posted by jimon@13.5.2006, 19:36
имею право выразить свою точку зрения
|
... по теме или в Болтовне.
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 07:57.
|