Форум программистов, компьютерный форум CyberForum.ru

Вложенные операторы if. Без else - C++

Восстановить пароль Регистрация
 
Stallone
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 46
09.12.2012, 23:04     Вложенные операторы if. Без else #1
Доброго времени суток.

Задание:
Кликните здесь для просмотра всего текста

Создайте класс с именем Date, включающий в качестве элементов данных три информационных пункта месяц (тип int), день месяца (тип int) и год(тип int).
Ваш класс должен иметь конструктор с тремя параметрами для инициализации этих элементов данных. Для целей этого упражнения предположите, что данные для года и дня правильные, но проверьте, что значение месяца находится в диапазоне 1-12; если нет, устанавливайте месяц равным 1. Предусмотрите set и get функции для каждого элемента данных. Предусмотрите элемент-функцию displayDate, которая выводит месясц, день и год, разделенные дробной чертой (/). Напишите готовую программу, демонстрирующую возможности класса Date.

Проблема:
Кликните здесь для просмотра всего текста

При попытке выставить месяц (день/месяц/год) меньше 1 или больше 12, вместо того что бы установить месяц на 1, устанавливается случайное число. Также если при помощи аргумента объекта установить число месяца которое больше 12 либо меньше 1, то снова устанавливается случайное число.

Оператора else еще не было.

Как можно сделать такую фильтрацию только с помощью вложенных if.



Код C++.
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <iostream>
using namespace std;
 
class Date
{
public:
       Date( int day, int month, int year )
       {
          setDay( day );
          setMonth( month );
          setYear( year );
          }
       void setDay( int sDay )
       {
          day = sDay;
          }
       void setMonth( int sMonth )
       {
          if( sMonth >= 1 )
          {  
             if( sMonth <= 12 )
             {
                month = sMonth;
                }
             }
          if( sMonth < 1 )
          {
             if( sMonth > 12 )
             {
                month = 1;
                }
             }
          } 
       void setYear( int sYear )
       {
          year = sYear;
          }
       int getDay()
       {
          return day;
          }
       int getMonth()
       { 
          return month;
          }
       int getYear()
       {
          return year;
          }
       void displayDate()
       {
          cout << getDay() << "/" << getMonth() << "/" << getYear() << "\n" << endl;
          }
private:
        int day;
        int month;
        int year;
};
 
int main()
{
   Date date( 0, 0, 0 );
   int day;
   int month;
   int year;
   
   date.displayDate();
   
   cout << "Enter date: ";
   cin >> day >> month >> year;
   
   date.setDay( day );
   date.setMonth( month );
   date.setYear( year );
   
   date.displayDate();
   
   system("PAUSE");
   return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2012, 23:04     Вложенные операторы if. Без else
Посмотрите здесь:

Условные операторы.Операторы цикла C++
Вложенные операторы С++ C++
Операторы отношений и логические операторы C++
Операторы выбора. Даны три различных числа. Среднее поделить на меньшее, меньшее возвести в куб, большее оставить без изменения C++
C++ Вложенные циклы. Определить суму цифр заданного числа без использования операций целочисленного деления
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
10.12.2012, 01:40     Вложенные операторы if. Без else #2
C++
1
2
3
4
5
6
7
8
  if( sMonth < 1 )
          {
             if( sMonth > 12 ) // это бред. если выполнение дошло до сюда, то sMonth < 1 и нет смысла делать эту проверку
             {
                month = 1;
                }
             }
          }

первое что приходит в голову:
C++
1
2
3
4
5
6
7
8
void setMonth( int sMonth )
{
  month = 1;
  if (1 <= sMonth && sMonth <= 12)
  {
      month = sMonth;
  }
}
Stallone
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 46
10.12.2012, 11:59  [ТС]     Вложенные операторы if. Без else #3
Спасибо за помощь, но решить задание надо используя только if, без всяких примочек.
Я потом чуть позже додумался как это сделать.
Я немножко не правильно написал наверное, не обязательно, использовать ТОЛЬКО вложенные if, главное использовать их без того что не было пройдено.
В итоге я использовал для отсеивания 2 вложенных друг в друга if, и два одиночных.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void setMonth( int sMonth )
       {
          if( sMonth >= 1 )
          {  
             month = sMonth;
             if( month <= 12 )
             {
                month = sMonth;
                }
             }
 
          if( sMonth > 12 )
          {
             month = 1;
             }
 
          if( sMonth < 1 )
          {
             month = 1;
             }
          }
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
10.12.2012, 20:57     Вложенные операторы if. Без else #4
ну если && - это примочка, то вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
void setMonth( int sMonth )
{
  month = 1;
  if (sMonth >= 1)
  {
      if (sMonth <= 12)
      {
         month = sMonth;
      }
  }
}
Stallone
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 46
10.12.2012, 21:32  [ТС]     Вложенные операторы if. Без else #5
Да так в разы лучше, спасибо большое.
А то у меня расписано на 20 с лишним строк
Блин почему я не додумался сразу присвоить 1, а потом уже отбирать числа в диапазоне 1-12.
Взял и впаял еще 2 if чтобы отсеивая не нужные числа присвоить 1.
Вот ламер то
Yandex
Объявления
10.12.2012, 21:32     Вложенные операторы if. Без else
Ответ Создать тему
Опции темы

Текущее время: 03:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru