Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Stallone
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 46
#1

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

09.12.2012, 23:04. Просмотров 1258. Ответов 4
Метки нет (Все метки)

Доброго времени суток.

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

Создайте класс с именем 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2012, 23:04
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вложенные операторы if. Без else (C++):

Вложенные операторы - C++
Всем форумчанинан и форумчанкам привет, нужно помощь с кодом, есть проблемы с оператором if (mathchoose=='cons') и if (mathchoose=='func')...

Вложенные операторы С++ - C++
вывести числа в виде таблицы 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...

С++.Операторы в С++: условные операторы, операторы break и continue - C++
Выяснить, пересекаются ли параболы у=аx2+bx+с и у=dx2+ex + f. При положительном ответе найти точки пересечения.

Вложенные циклы. Определить суму цифр заданного числа без использования операций целочисленного деления - C++
Помогите решить задачку)) Дано натуральное число n. Определить суму цифр заданного числа без использования операций целочисленного...

Определить и вывести количество дней между двумя датами (логические операторы и операторы ветвлений) - C++
Задачка Пользователь вводит две даты (день, месяц, год в виде целых чисел). Необходимо определить и вывести количество дней между этими...

«Языки и технологии программирования» «Операторы цикла. Условные операторы» - C++
Не получается сделать что бы программа выводила все значения в промежутке, она выводит только одно. условия | ((z^3)+sin...

4
DU
1485 / 1131 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
10.12.2012, 01:40 #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;
  }
}
1
Stallone
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 46
10.12.2012, 11:59  [ТС] #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;
             }
          }
0
DU
1485 / 1131 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
10.12.2012, 20:57 #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;
      }
  }
}
1
Stallone
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 46
10.12.2012, 21:32  [ТС] #5
Да так в разы лучше, спасибо большое.
А то у меня расписано на 20 с лишним строк
Блин почему я не додумался сразу присвоить 1, а потом уже отбирать числа в диапазоне 1-12.
Взял и впаял еще 2 if чтобы отсеивая не нужные числа присвоить 1.
Вот ламер то
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.12.2012, 21:32
Привет! Вот еще темы с ответами:

Операторы присваивания, ввода- вывода. Операторы ветвления, выбора - C++
Даны два ненулевых числа. Найти их сумму, разность, произведение, частное, остаток и целую часть от деления. Добавлено через 8 часов...

Операторы языка С++: операторы цикла (исправьте программу) - C++
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;cmath&gt; using namespace std; int main() { int a,n; float y,x; cout&lt;&lt;...

Операторы цикла и операторы передачи управления - C++
Вычислить сумму ряда S с погрешностью эпсилон, задаваемой с клавиатуры. Вывести количество итераций, сделанных при вычислении. Если...

Операторы принятия решения и операторы цикла. - C++
Пожалуйста, помогите. Нужно срочно сделать задания: 1)Ввести с клавиатуры три символа sym1, sym2, sym3. Поменять их значения таким...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru