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

Программа, которая считает сколько тебе лет - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.88
Thrash
0 / 0 / 0
Регистрация: 18.07.2012
Сообщений: 15
25.09.2013, 14:13     Программа, которая считает сколько тебе лет #1
Добрый день, товарищи! В данный момент занимаюсь самостоятельным изучением языка С++. После написания программы-калькулятор, пришла в голову мысль написать программу, которая высчитывает сколько тебе лет. Однако написать получилось только самый простенький код, который считает года без месяцев, вот он:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
int main ()
    
{
    setlocale (LC_ALL, "Russian");
    double d1,b1;
    double res; //result
 
    cout << "Введите сегодняшний год:";
    cin >> d1;
    cout << "Введите год вашего рожденья:";
    cin >> b1;
    res = d1-b1;
    
    cout << "Вам " << res <<" лет" << endl;
 
    return 0;
}
При таком раскладе результат будет не всегда точным, ибо для точности нужно вводить полностью дату. Допустим, в 2013 году Вам должно исполниться 20 лет, но месяц, в котором у Вас день рожденье, еще не настал. Программа напишет, что Вам 20 лет, хотя в действительности Вам 19. Ну Вы поняли, к чему я веду. Помогите с программой пожалуйста.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.09.2013, 14:13     Программа, которая считает сколько тебе лет
Посмотрите здесь:

C++ Программа , которая считает английский текст из файла и выводит на экран слова, начинающиеся с гласных букв
C++ Составить программу, которая вводит с клавиатуры имя и год рождения лица и выводит на экран "Привет Имя, тебе Р лет:).
Программа, которая считает количество битов. C++
C++ С помощью классов,создать программу, которая считает сколько часов вы прожили
программа, которая считает и печатает произведение нечетных целых от 1 до 15 C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
25.09.2013, 14:25     Программа, которая считает сколько тебе лет #2
Thrash, вам надо или написать свой собственный тип для работы с датами где реализовать всю логику вычислений дат или воспользоваться уже чем то готовым - например Boost.Date_Time.

Добавлено через 1 минуту
Ну, можно еще и пару простеньких функций насочинять для такой простой программы.
Thrash
0 / 0 / 0
Регистрация: 18.07.2012
Сообщений: 15
25.09.2013, 14:34  [ТС]     Программа, которая считает сколько тебе лет #3
Не знаю, что выбрать там
Algoritmer
 Аватар для Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 477
Записей в блоге: 1
25.09.2013, 14:39     Программа, которая считает сколько тебе лет #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int dd1,mm1,gggg1,dd2,mm2,gggg2;
cout << "Введите сегодняшний год:";
char dt1[10];
    cin >> dt1;
dd1=(dt1[0]-48)*10+(dt1[1]-48);
mm1=(dt1[3]-48)*10+(dt1[4]-48);
gggg1=(dt1[6]-48)*1000+(dt1[7]-48)*100+(dt1[8]-48)*10+(dt1[9]-48);
    cout << "Введите год вашего рожденья:"; //вводим в формате 25.09.2013
char dt2[10];
    cin >> dt2;
dd2=(dt2[0]-48)*10+(dt2[1]-48);
mm2=(dt2[3]-48)*10+(dt2[4]-48);
gggg2=(dt2[6]-48)*1000+(dt2[7]-48)*100+(dt2[8]-48)*10+(dt2[9]-48);
if(dd1<dd2) mm1--;
if(mm1<mm2) gggg1--;
res=gggg1-gggg2;    
    cout << "Вам " << res <<" лет" << endl;
Thrash
0 / 0 / 0
Регистрация: 18.07.2012
Сообщений: 15
25.09.2013, 16:02  [ТС]     Программа, которая считает сколько тебе лет #5
А можете объяснить что к чему? Не пойму, что за цифры...

Добавлено через 2 минуты
Вот написал программу, все точно считает, но дату, месяц и число вводит только по отдельности
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
#include <iostream>
using namespace std;
 
int main ()
    
{
    setlocale (LC_ALL, "Russian");
    double year, month, day;
    double year1, month1, day1;
    double res; //result
 
    cout << "Введите сегодняшний год:";
    cin >> year;
    cout << "Введите сегодняшний месяц:";
    cin >> month;
    cout << "Введите сегодняшний день:";
    cin >> day;
    cout << "Введите год:";
    cin >> year1;
    cout << "Введите месяц:";
    cin >> month1;
    cout << "Введите день:";
    cin >> day1;
    
    if (month1 == month, day == day1)
        res = year-year1;
    else if (month < month1, day < day1)
    res = year-year1-1;
    
    cout << "Вам " << res <<" лет" << endl;
 
    return 0;
}
Добавлено через 4 минуты
и у Вас там ошибка, Вы забыли указать переменную результата, а так все отлично работает, но я не пойму к чему столько действий
HedgehogLu
 Аватар для HedgehogLu
146 / 67 / 1
Регистрация: 04.09.2013
Сообщений: 250
25.09.2013, 16:15     Программа, которая считает сколько тебе лет #6
Thrash, у вас кажется тоже ошибочка вышла
может вместо
if (month1 == month, day == day1)
подразумевалось
C++
1
if ((month1 == month) && (day >= day1))||(month>month1)
SatanaXIII
Супер-модератор
Эксперт С++
 Аватар для SatanaXIII
5547 / 2561 / 233
Регистрация: 01.11.2011
Сообщений: 6,330
Завершенные тесты: 1
25.09.2013, 16:28     Программа, которая считает сколько тебе лет #7
Цитата Сообщение от Thrash Посмотреть сообщение
Программа, которая считает сколько тебе лет
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
#include <iostream.h>
//#include <tlen.h>
#define bezyshodnost
#define age DeathCame
 
void main()
{
int YearCount = 0, age;
char ch;
srand(time(NULL));
age = rand()%100;
cout << "Congratulations. You are born." << endl;
while(YearCount < age)
  {
  cout << "You have lived another year? (y/n): ";
  cin >> ch;
  if(tolower(ch)=='y')
    {
    cout << "You " << ++YearCount << " years. ...Already." << endl;
    }
  else continue;
  }
 
cout << "Sorry. You are dead.";
system("PAUSE >> NULL");
}
HedgehogLu
25.09.2013, 16:31
  #8

Не по теме:

SatanaXIII, тут не то что считает, а даже живет "и пока смерть ..."

очень улыбнуло

#define bezyshodnost
#define age DeathCame

Thrash
0 / 0 / 0
Регистрация: 18.07.2012
Сообщений: 15
25.09.2013, 17:29  [ТС]     Программа, которая считает сколько тебе лет #9
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
#include <iostream>
using namespace std;
 
int main ()
    
{
    setlocale (LC_ALL, "Russian");
    double year, month, day;
    double year1, month1, day1;
    double res; //result
 
    cout << "Введите сегодняшний год:";
    cin >> year;
    cout << "Введите сегодняшний месяц:";
    cin >> month;
    cout << "Введите сегодняшний день:";
    cin >> day;
    cout << "Введите год:";
    cin >> year1;
    cout << "Введите месяц:";
    cin >> month1;
    cout << "Введите день:";
    cin >> day1;
    
    if ((month1 == month) && (day == day1))
       res = year-year1;
    else if ((month1 < month) && (day < day1))
       res = year-year1-1;
    
    cout << "Вам " << res <<" лет" << endl;
 
    return 0;
}
почему не работает? (
HedgehogLu
 Аватар для HedgehogLu
146 / 67 / 1
Регистрация: 04.09.2013
Сообщений: 250
25.09.2013, 17:43     Программа, которая считает сколько тебе лет #10
Thrash, потому как ифы не правильные
Цитата Сообщение от Thrash Посмотреть сообщение
if ((month1 == month) && (day == day1)) res = year-year1;//сработает только в день рождения
else if ((month1 < month) && (day < day1)) res = year-year1-1;//сработает только когда не только месяц но и день рождения меньше текущего . те. при дате рождения 31 марта 2012 года вообще не посчитает на сегодняшнюю дату т.е рез останется вообще не инициализированным



надобно так
C++
1
2
if ((month1<month)||((month1=month)&&(day1<=day)) res=year-year1;
else  res=year-year1-1
Thrash
0 / 0 / 0
Регистрация: 18.07.2012
Сообщений: 15
26.09.2013, 01:16  [ТС]     Программа, которая считает сколько тебе лет #11
спасибо, я понял, но как сделать так, чтобы дату вводит с первого раза по типу: 25.09.2013?

Добавлено через 7 часов 11 минут
Получилось сделать так, чтобы писать дату в один ряд, только записывается она не 25.09.2013, а 25 09 2013, как сделать по нормальному?
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
#include <iostream>
using namespace std;
 
int main ()
    
{
    setlocale (LC_ALL, "Russian");
    double year, month, day;
    double year1, month1, day1;
    double res; //result
 
    cout << "Введите сегодняшнюю дату:";
    cin >> day >> month >> year;
    cout << "Введите дату своего дня рождения:";
    cin >> day1>> month1>> year1;
    
    if ((month1<month)||((month1=month)&&(day1<=day)))
         res=year-year1;
else  res=year-year1-1;
    
    cout << "Вам " << res <<" лет" << endl;
 
    return 0;
}
HedgehogLu
 Аватар для HedgehogLu
146 / 67 / 1
Регистрация: 04.09.2013
Сообщений: 250
26.09.2013, 12:05     Программа, которая считает сколько тебе лет #12
ну если сильно не переделывая код вставь считывание символа char между числами
а вообще попробуй использовать для ввода вместо
C++
1
cin
функцию
C++
1
scanf
в частности для считывания даты думается надо будет
C++
1
2
3
4
#include <stdio.h>
...
scanf("%d%*c%d%*c%d",&year,&month,&day);
...
Algoritmer
 Аватар для Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 477
Записей в блоге: 1
26.09.2013, 14:05     Программа, которая считает сколько тебе лет #13
Цитата Сообщение от Thrash Посмотреть сообщение
спасибо, я понял, но как сделать так, чтобы дату вводит с первого раза по типу: 25.09.2013?
Я ж тебе сразу код привел, как сделать по нормальному. Смотри моё сообщение выше

Добавлено через 8 минут
Я ж тебе сразу код привел, как сделать по нормальному. Смотри моё сообщение выше. Если не понятны какие-то конкретные строки, спрашивай.
В целом всё происходит так:
1) вводится два char массива
2) В каждом из них считываются соответствующие позиции. Считается, что позиции [0],[1] - это число, далле пропускаем точку (разделитель дня и месяца); позиции [3],[4] - это месяц; позиции [6],[7],[8],[9] - это год
Следовательно: dd=(dt[0]-48)*10+(dt[1]-48), и так далее.
48 - это аски код нуля. Соответственно 49 - 1 ... Чтобы из кода получить цифру, нужно вычесть 48
HedgehogLu
 Аватар для HedgehogLu
146 / 67 / 1
Регистрация: 04.09.2013
Сообщений: 250
26.09.2013, 15:12     Программа, которая считает сколько тебе лет #14
Цитата Сообщение от Algoritmer Посмотреть сообщение
Я ж тебе сразу код привел, как сделать по нормальному. Смотри моё сообщение выше
Жесть но зачем так сложно?
Смысл считывать символы и потом достаточно грубо без проверки на допустимый диапазон переводить в числа, когда можно использовать стандартные функции ввода которые изначально уже считывают данные в нужном формате, да и ошибки отслеживать там проще.

Хотя код действительно рабочий и в чем-то даже наглядный
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2013, 16:11     Программа, которая считает сколько тебе лет
Еще ссылки по теме:

Программа должна писать сколько лет, месяцев, дней, часов, минут, секунд прожил человек C++
Программа, которая считает количество пробелов в строке C++
C++ Программа, которая считает количество парных(встречающихся 2 раза) символов в строке

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

Или воспользуйтесь поиском по форуму:
Algoritmer
 Аватар для Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 477
Записей в блоге: 1
26.09.2013, 16:11     Программа, которая считает сколько тебе лет #15
Цитата Сообщение от HedgehogLu Посмотреть сообщение
Жесть но зачем так сложно?
Смысл считывать символы и потом достаточно грубо без проверки на допустимый диапазон переводить в числа, когда можно использовать стандартные функции ввода которые изначально уже считывают данные в нужном формате, да и ошибки отслеживать там проще.

Хотя код действительно рабочий и в чем-то даже наглядный
Ну добавь if(isdigit(dt[i])) ,будет проверка на вводимые данные
Yandex
Объявления
26.09.2013, 16:11     Программа, которая считает сколько тебе лет
Ответ Создать тему
Опции темы

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