Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод слова в нужном склонении 
:(
    Опции темы
Ufyljy
  Дата 30.10.2007, 02:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 5.10.2007

Репутация: нет
Всего: 1



** Создано: 30/10/2007
     Автор: 

     Коррекции:
     Благодарности: wils0n, DjoNIK, FREEDEV, Kuvaldis, Lazin, Optimus =2, SergeCpp

Код

#include<stdio.h>
#include<conio.h>

#define br putchar('\n');

main()
{
      int a,b,i;
      for(;;)
      {
             printf("Enter a: "); scanf("%d",&a);
             if(a == -123){break;}
             do
             {
                      b=0, i=0; 

                       if(i==0)
                       {
                               if((a == 2) || (a == 4) || (a == 3))
                               {
                                  printf("%d rublya",a); b=b+1;
                               }
                               else i++;  
                       }

                       if(i==1)
                       {
                               if((a==1) || (a%20==1) || (a%30==1))
                               {
                                         printf("%d rubl",a); b=b+1;
                               }
                               else i++;
                       }
                       
                       if(i==2)
                       {
                               if((a%20==2) || (a%30==2) || (a%20==3) || (a%30==3) || (a%20==4) || (a%30==4))
                               {
                                            printf("%d rublya",a); b=b+1;
                               }
                               else {printf("%d rubley",a); b=b+1;}
                       }
                               
             }
            while(b != 1); br;
      }
      
           
      getch();
}



Суть проги - в зависимости от числа мы добавляем к нему слово "рубль"
в правильном склонении.

Вопрос следующий: можно ли эту задачу было реализовать покороче, не так
как у меня. 


Это сообщение отредактировал(а) Ufyljy - 30.10.2007, 02:10
PM MAIL   Вверх
archimed7592
Дата 30.10.2007, 05:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Ну, начнём с того, что она неправильно работает smile.
Цитата

Enter a: 213
213 rublya нужно rubley
Enter a: -123


Насчёт короче... Как-то странно(я бы даже сказал ужасно) у тебя логика сделана smile.
По сути вот это то же самое, только намного понятней любому программисту:
Код

#include<stdio.h>
#include<conio.h>
#define br putchar('\n');
main()
{
    int a;
    while(1)
    {
        printf("Enter a: "); scanf("%d",&a);
        if(a == -123)
            break;
        if((a == 2) || (a == 4) || (a == 3))
        {
            printf("%d rublya",a);
        }
        else if((a==1) || (a%20==1) || (a%30==1))
        {
            printf("%d rubl",a);
        }
        else if((a%20==2) || (a%30==2) || (a%20==3) || (a%30==3) || (a%20==4) || (a%30==4))
        {
            printf("%d rublya",a);
        }
        else
        {
            printf("%d rubley",a);
        }
        br;
    }

       
    getch();
}

Непонятно зачем нужен был вложенный do..while, зачем нужна переменная b, зачем нужно было делать управление работой через i...

Добавлено через 12 минут и 23 секунды
Код

/*
1    рубль
2    рубля
3    рубля
4    рубля
5    рублей
6    рублей
7    рублей
8    рублей
9    рублей
10    рублей
11    рублей
12    рублей
13    рублей
14    рублей
15    рублей
16    рублей
17    рублей
18    рублей
19    рублей
20    рублей
21    рубль
*/
#include<stdio.h>
#include<conio.h>
#define br putchar('\n');
main()
{
    while(1)
    {
        int a;
        printf("Enter a: "); scanf("%d",&a);
        if(a == -123)
            break;
        {
            int d = a % 10;
            int h = a % 100;
            int teen = h >= 11 && h <= 19;
            const char *w = "";
            if (d == 1 && !teen)
                w = "rubl";
            else if(d >= 2 && d <= 4 && !teen)
                w = "rublya";
            else
                w = "rubley";
            
            printf("%d %s", a, w);
            br;
        }
    }

       
    getch();
}


Код

archimed7592@PC ~/testlabs/g++
$ ./a.exe
Enter a: 213
213 rubley
Enter a: 1
1 rubl
Enter a: 2
2 rublya
Enter a: 3
3 rublya
Enter a: 4
4 rublya
Enter a: 5
5 rubley
Enter a: 6
6 rubley
Enter a: 7
7 rubley
Enter a: 8
8 rubley
Enter a: 9
9 rubley
Enter a: 10
10 rubley
Enter a: 11
11 rubley
Enter a: 12
12 rubley
Enter a: 13
13 rubley
Enter a: 14
14 rubley
Enter a: 15
15 rubley
Enter a: 16
16 rubley
Enter a: 17
17 rubley
Enter a: 18
18 rubley
Enter a: 19
19 rubley
Enter a: 20
20 rubley
Enter a: 21
21 rubl
Enter a: 22
22 rublya
Enter a: 23
23 rublya
Enter a: 24
24 rublya
Enter a: 25
25 rubley
Enter a: -123

archimed7592@PC ~/testlabs/g++
$



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Ufyljy
  Дата 30.10.2007, 09:01 (ссылка)    | (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 5.10.2007

Репутация: нет
Всего: 1



А у меня логики нету, зато классно.. вопрос стиля
За прогу огромное спасибо.

> По сути вот это то же самое, только намного понятней любому программисту
Нет, не надо утрировать)) я поимел ввиду то, что способ реализации этой проги совершенно другой, а 
не просто подкорректить всякие b=b+1;


Это сообщение отредактировал(а) Ufyljy - 30.10.2007, 09:06
PM MAIL   Вверх
archimed7592
Дата 30.10.2007, 09:05 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Ufyljy @  30.10.2007,  09:01 Найти цитируемый пост)
А у меня логики нету, зато классно.. вопрос стиля

Я думаю, что это плохой стиль. Учись писать программы, понятные не одному тебе.

Цитата(Ufyljy @  30.10.2007,  09:01 Найти цитируемый пост)
я поимел ввиду то, что способ реализации этой проги совершенно другой, а 
не просто подкорректить всякие b=b+1;

Я бы сказал, что у меня способ реализации понятный, а у тебя, чтобы враг не догадался(если бы там было около тысячи подобных строк, то точно никто не догадается "как ЭТО может работать").



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Ufyljy
Дата 30.10.2007, 09:09 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 5.10.2007

Репутация: нет
Всего: 1



Я и не спорю, что у тя все гуд.

Нет-нет, смысл в том, чтобы задача была реализована другим спосом.
Например, через символьный тип, другой подход к задаче.
PM MAIL   Вверх
Ufyljy
  Дата 30.10.2007, 09:39 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 5.10.2007

Репутация: нет
Всего: 1



Вгляделся в твой исходный код, и понял, что я мало чего понял в этом коде.

1) int teen = h >= 11 && h <= 19; - вообще такую конструкцию я вижу впервые; ты переменной teen  присваиваешь значение переменной h, которая в диапазоне от 11 до 19? Другими словами, переменной teen присваиваются те значения h, которые входят в промежуток от 11 до 19?

2) const char *w=""; - непонятно const перед char, и указатель перед w
3) while(1) - это "бесконечное пока"? Можешь объяснить это типа фокус, фишка?
PM MAIL   Вверх
MAKCim
Дата 30.10.2007, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Ufyljy, 
 smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
archimed7592
Дата 30.10.2007, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Ufyljy @  30.10.2007,  09:09 Найти цитируемый пост)
Например, через символьный тип, другой подход к задаче. 

У меня такой же подход, как и у тебя, только короче и понятнее.


Цитата(Ufyljy @  30.10.2007,  09:39 Найти цитируемый пост)
 int teen = h >= 11 && h <= 19; - вообще такую конструкцию я вижу впервые; ты переменной teen  присваиваешь значение переменной h, которая в диапазоне от 11 до 19? Другими словами, переменной teen присваиваются те значения h, которые входят в промежуток от 11 до 19?

Нет. Равносильно следующему:
Код

int teen;
if (h >= 11 && h <= 19)
    teen = 1;
else
   teen = 0;

Или этому:
Код

int teen = (h >= 11 && h <= 19 ? 1 : 0);

Или этому(в твоём стиле smile)
Код

int teen;
do
{
    int i = 0;
    if (i == 0 && h >= 11 && h <= 19)
        teen = 1;
    else
        i++;
    if (i == 1)
        teen = 0;
    
} while(0);

Ну и где понятней? smile

Цитата(Ufyljy @  30.10.2007,  09:39 Найти цитируемый пост)
2) const char *w=""; - непонятно const перед char, и указатель перед w

Если язык Си, то IIRC, const будет выдавать только предупреждения.
В С++ попытка изменить значение по указателю на константу приведёт к ошибке компиляции:
Код

const char *s = "123";
s[2] = '5'; // ошибка компиляции



Цитата(Ufyljy @  30.10.2007,  09:39 Найти цитируемый пост)
while(1) - это "бесконечное пока"? Можешь объяснить это типа фокус, фишка? 

А for(;;) - это что фокус, фишка? Вот while(1) - то же самое.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Ufyljy
Дата 30.10.2007, 11:37 (ссылка)    | (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 5.10.2007

Репутация: нет
Всего: 1



2 MAKCim: Че?
2 Архимед: что за оператор "?"
и 1 - здесь истина, 0 - ложно?
PM MAIL   Вверх
archimed7592
Дата 30.10.2007, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Ufyljy @  30.10.2007,  11:37 Найти цитируемый пост)
2 MAKCim: Че?

Через плечо. RTFM!

Цитата(Ufyljy @  30.10.2007,  11:37 Найти цитируемый пост)
что за оператор "?"

Тринарный условный оператор. Тебе помог мой ответ? Нет? Тогда RTFM!

Цитата(Ufyljy @  30.10.2007,  11:37 Найти цитируемый пост)
1 - здесь истина, 0 - ложно? 

0 - ложь.
НЕ 0 - истина.
Не помогло? RTFM!


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Lazin
Дата 30.10.2007, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



Ufyljy, если будешь задавать вопросы вроде 
Цитата(Ufyljy @  30.10.2007,  11:37 Найти цитируемый пост)
что за оператор "?"

тебя самого склонять будут  smile 
PM MAIL Skype GTalk   Вверх
FREEDEV
Дата 30.10.2007, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 6.3.2007
Где: Украина->Одесс а

Репутация: нет
Всего: 3



опять все закончилось RTFMом  smile 
Ufyljy, это все концепции С++, которые очень полезно знать, они действительно сделают твой код более читабельным.
Пока можешь особо не заморачиваться, главное чтоб в итоге твои программы работали, со временем все поймешь. Ну, и нужно больше читать уже готовых исходников.

--------------------
Microsoft Windows Visla ©
PM MAIL   Вверх
archimed7592
Дата 30.10.2007, 15:12 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



FREEDEV, не смеши мои тапочки. Тут нет ни одной концепции(как в общем, так и С++ в частности). Тут есть базовые(очень базовые) основы языка Си. Человек, задающий подобные вопросы с тем же успехом мог бы спросить "а что такое число?" "а кто я?" "а где я?" "а что я здесь делаю?" "а как зовут мою кошку?" и т.д.
А насчёт "можешь не заморачиваться" - нет, ну конечно можно не заморачиваться, но, боюсь, что с таким алгоритмическим стилем программист из него не получится, а если и получится, то такой, который проверяет булеву переменную на истину в лучших традициях индусов(БОР)
if (b.toString().Length < 5)


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
FREEDEV
Дата 31.10.2007, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 6.3.2007
Где: Украина->Одесс а

Репутация: нет
Всего: 3



Цитата(archimed7592 @  30.10.2007,  15:12 Найти цитируемый пост)
базовые(очень базовые) основы языка Си

Может так оно и есть, но каждый с чего-то начинал. Нельзя сесть и начать писать "правильно", к этому нужно прийти. Ну не знает он оператора "?",  - познакомиться позже, главное было б желание.


Цитата(archimed7592 @  30.10.2007,  15:12 Найти цитируемый пост)
в лучших традициях индусов(БОР)if (b.toString().Length < 5)
 так надо еще постараться smile

--------------------
Microsoft Windows Visla ©
PM MAIL   Вверх
Ufyljy
Дата 31.10.2007, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 5.10.2007

Репутация: нет
Всего: 1



Нет, мне не понятно, что от меня хотел MAKCim.
(он даже модератор, что меня очень страшит с его злым смайликом; если я задаю тупые вопросы - это пройдет, поверьте, без причины я не стану спрашивать)

К сожалению у меня в методичке нету оператора "?",
поэтому и спрашиваю

> Человек, задающий подобные вопросы с тем же успехом мог бы спросить "а что такое число?" "а кто я?" "а где я?" "а что я здесь делаю?" "а как зовут мою кошку?" и т.д.

Люди, поймите, все относительно. Везде разные системы отчета.

> Тринарный условный оператор
А чем отличается унарный оператор от тринарного?

PM MAIL   Вверх
archimed7592
Дата 31.10.2007, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Ufyljy @  31.10.2007,  10:13 Найти цитируемый пост)
Нет, мне не понятно, что от меня хотел MAKCim.

Он тебе нарисовал смайлик под названием "RTFM". Это равносильно тому, что сказать, иди ка ты, мальчик, книжку почитай.


Цитата(Ufyljy @  31.10.2007,  10:13 Найти цитируемый пост)
К сожалению у меня в методичке нету оператора "?",
поэтому и спрашиваю

Значит он тебе не нужен.


Цитата(Ufyljy @  31.10.2007,  10:13 Найти цитируемый пост)
Люди, поймите, все относительно. Везде разные системы отчета.

Что за чушь? Почти любой человек, приходящий на этот форум либо имеет определённую подготовку в вопросе, либо вопросов не задаёт, либо отправляется читать книгу. Здесь не центр обучения программированию... Разве это не понятно?


Цитата(Ufyljy @  31.10.2007,  10:13 Найти цитируемый пост)
А чем отличается унарный оператор от тринарного?

Количеством операндов.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
zkv
Дата 31.10.2007, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(Ufyljy @  31.10.2007,  10:13 Найти цитируемый пост)
А чем отличается унарный оператор от тринарного?

количеством операндов:
унарные: ++x; !y; *z;
бинарные: x+y; y-z; z[x];
тернарный (почему то у нас так называли) в с++ только один: x ? y : z;

Цитата(Ufyljy @  31.10.2007,  10:13 Найти цитируемый пост)
Нет, мне не понятно, что от меня хотел MAKCim.

он сказал rtfm, и правильно сделал, в VS ответ на твой вопрос можно получить поставив курсор на знак вопроса (в тернарной операции) и нажав F1, или забить в гугле "операции в с++" или еще куева туча вариантов, а ты просишь здесь перепечатать тебе учебник. Вообщем создается впечатление, что кое кому здесь просто влом читать мануалы - отсюда такая реакция.  
Цитата(Ufyljy @  31.10.2007,  10:13 Найти цитируемый пост)
К сожалению у меня в методичке нету оператора "?",

у тебя гугл есть, можно выкинуть методичку  smile 
PM MAIL   Вверх
Ufyljy
Дата 31.10.2007, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 5.10.2007

Репутация: нет
Всего: 1



* ушел учить стандарт С++

> Что за чушь?
Это не чушь


Это сообщение отредактировал(а) Ufyljy - 31.10.2007, 16:09
PM MAIL   Вверх
FiMa1
Дата 31.10.2007, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 23.9.2006

Репутация: 5
Всего: 6



Цитата
> Тринарный условный оператор
А чем отличается унарный оператор от тринарного?

Ufyljy, это неизвестно никому, даже archimed7592. Он просто очепяталсо. Речь шла о тернарном операторе. Вот что о нем написали Керган и Ритчи:
Цитата
Инструкции 
Код
if (a > b)
    z = a;
else 
    z = b;

пересылают в z большее из двух значений a и b. Условное выражение, написанное с помощью тернарного (т. е. имеющего три операнда) оператора "? : ", представляет собой другой способ записи этой и подобных ей конструкций. В выражении 
Код
выр1 ? выр2 : выр3

первым вычисляется выражение выр1. Если его значение не нуль (истина), то вычисляется выражение выр2, и значение этого выражения становится значением всего условного выражения. В противном случае вычисляется выражение выр3 и его значение становится значением условного выражения. Следует отметить, что из выражений выр2 и выр3 вычисляется только одно из них. Таким образом, чтобы установить в z большее из a и b, можно написать 
Код
z = (a > b) ? a : b; /* z = max(a, b) */

А что бы не приходилось вот так копипастить классиков, тебя и отослали читать доки.
Цитата
ушел учить стандарт С++

Не стоит, начни с обычного самоучителя, а сомнительную свою методичку, в которой даже нет упоминания про этот оператор, употреби по назначению (надеюсь бумага достаточно мягкая).

Это сообщение отредактировал(а) FiMa1 - 31.10.2007, 16:25
PM   Вверх
MAKCim
Дата 31.10.2007, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата(Ufyljy @  31.10.2007,  10:13 Найти цитируемый пост)
Нет, мне не понятно, что от меня хотел MAKCim.

ответы на ваши вопросы есть в любых учебниках по С
вот я и направил вас читать эти учебники

Добавлено через 1 минуту и 16 секунд



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
archimed7592
Дата 31.10.2007, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(Ufyljy @  31.10.2007,  15:58 Найти цитируемый пост)
* ушел учить стандарт С++

Вот даже как... Так это С++ был smile.

Ты бы сначала с языком ознакомился, а потом уже за Стандарт брался.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Ufyljy
Дата 1.11.2007, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 5.10.2007

Репутация: нет
Всего: 1



Благодарности: wils0n, DjoNIK, FREEDEV, Kuvaldis, Lazin, Optimus =2, SergeCpp, archimed7592 =5, FiMa1 =2, zkv, bsa, Ln78

Код

#include<stdio.h>
#include<conio.h>

#define br putchar('\n'); 
main()
{
      while(1)
      {
              int a;
              
              printf("Enter a: "); scanf("%d",&a);
              if(a == -500) break;
              int d = a % 10; int e = a % 100;
      
              int f = e >= 11 && e <= 19; 
              int g = e <= -11 && e >= -19;
              
              if((d == 1 && !f) or (d == -1 && !g))
              {
                      printf("%d rubl",a);
              }
      
              else if((d >= 2 && d <= 4 && !f) or (d <= -2 && d >= -4 && !g))
              {
                   printf("%d rublya",a);
              }
              
              else printf("%d rubley",a);
              
              br;
      }       
                       
getch();
}


Теперь и склоняет отрицательные значения, это кому надо. 

Вообще очень благодарен вам всем за то, что откликнулисьсь
Хоть и кто-то( может стебаться, юродстововать, утрировать надо мной скоко угодно, мне пох, главное научиться)  smile  

PM MAIL   Вверх
FiMa1
Дата 1.11.2007, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 23.9.2006

Репутация: 5
Всего: 6



Цитата(Ufyljy @ 1.11.2007,  09:43)
Код

#include<stdio.h>
#include<conio.h>

#define br putchar('\n'); 
main()
{
      while(1)
      {
              int a;
              
              printf("Enter a: "); scanf("%d",&a);
              if(a == -500) break;
              int d = a % 10; int e = a % 100;
      
              int f = e >= 11 && e <= 19; 
              int g = e <= -11 && e >= -19;
              
              if((d == 1 && !f) or (d == -1 && !g))
              {
                      printf("%d rubl",a);
              }
      
              else if((d >= 2 && d <= 4 && !f) or (d <= -2 && d >= -4 && !g))
              {
                   printf("%d rublya",a);
              }
              
              else printf("%d rubley",a);
              
              br;
      }       
                       
getch();
}

Позвольте несколько уточняющих вопросов и небольших замечаний...
  • Как конечный пользователь узнает про магическое число -500 - ключ завершения работы программы?
    Код
    printf("Enter a (input -500 to exit): ");

  • Где-то переопределен оператор or?
  • Нет проверки ввода (программа упадет при вводе символьных данных).


Это сообщение отредактировал(а) FiMa1 - 1.11.2007, 10:27
PM   Вверх
Ufyljy
  Дата 1.11.2007, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 61
Регистрация: 5.10.2007

Репутация: нет
Всего: 1



> Как конечный пользователь узнает про магическое число -500 - ключ завершения работы программы?
Да. 
Конечный пользователь не узнает, вообще-то народ интересуют исходники, я думаю, в принципе ясно.

> Где-то переопределен оператор or?
В смысле п е р е о п р е д е л е н?

> Нет проверки ввода (программа упадет при вводе символьных данных).
Хорошо, я этим займусь немедленно

Это сообщение отредактировал(а) Ufyljy - 1.11.2007, 11:17
PM MAIL   Вверх
FiMa1
Дата 1.11.2007, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 23.9.2006

Репутация: 5
Всего: 6



Цитата(Ufyljy @ 1.11.2007,  11:16)
> Где-то переопределен оператор or?
В смысле п е р е о п р е д е л е н?

Я чего-то туплю или в Си действительно есть оператор or?
Цитата
Следующие идентификаторы зарезервированы в качестве ключевых слов и в другом смысле использоваться не могут: 
auto break char case char const continue default do double else enum extern float for goto if int long register return short signed sizeof static struct switch typedef union unsigned void volatile while

Цитата
Оператор логического ИЛИ
логическое-ИЛИ-выражение:
    логическое-И-выражение
    логическое-ИЛИ-выражение || логическое-И-выражение

Операторы || выполняются слева направо. Оператор || выдает 1, если по крайней мере один из операндов не равен нулю, и 0 в противном случае. В отличие от |, оператор || гарантирует, что вычисления будут проводиться слева направо: вычисляется первый операнд, включая все побочные эффекты; если он не равен 0, то значение выражения есть 1. В противном случае вычисляется правый операнд, и если он не равен 0, то значение выражения есть 1, в противном случае оно равно 0.

Операнды могут принадлежать разным типам, но операнд должен иметь либо арифметический тип, либо быть указателем. Тип результата - int.

Нет если, конечно, сделать так:
Код
#define or ||

Вот я и говорю где-то переопределен оператор or или я морально устарел...
PM   Вверх
zkv
Дата 1.11.2007, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 26
Всего: 92



Цитата(FiMa1 @  1.11.2007,  12:47 Найти цитируемый пост)
в Си действительно есть оператор or

есть, это синонимы, только в Си или С++ не знаю, совсем недавно где-то упоминали.
PM MAIL   Вверх
Lazin
Дата 1.11.2007, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



PM MAIL Skype GTalk   Вверх
FiMa1
Дата 1.11.2007, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 408
Регистрация: 23.9.2006

Репутация: 5
Всего: 6



Цитата(Lazin @ 1.11.2007,  13:29)
топик

Большое спасибо! Вопрос снят. 
Цитата
Цитата(Ufyljy @  22.10.2007,  03:39 ) 
Насколько я знаю оператор && можно заменить на AND, оператор || на OR 
лучше ненадо, читать потом невозможно будет

Согласен, коробит, но это зависит от того с чего человек начал привыкать. А, вообще, для обычных людей OR вещь более информативная чем ||, так что определенные плюсы есть  smile .
[оффтоп:] Я вот на днях узнал, занимаясь, по просьбе, написанием макроса для MS Excel, что в VB индексация массивов начинается с 1, много плакал...
PM   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1384 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.