Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/75: Рейтинг темы: голосов - 75, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 18.07.2012
Сообщений: 15
1

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

25.09.2013, 14:13. Показов 13541. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, товарищи! В данный момент занимаюсь самостоятельным изучением языка С++. После написания программы-калькулятор, пришла в голову мысль написать программу, которая высчитывает сколько тебе лет. Однако написать получилось только самый простенький код, который считает года без месяцев, вот он:
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. Ну Вы поняли, к чему я веду. Помогите с программой пожалуйста.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.09.2013, 14:13
Ответы с готовыми решениями:

Составить программу, которая вводит с клавиатуры имя и год рождения лица и выводит на экран "Привет Имя, тебе Р лет:).
Буду благодарен. =(( 1. Составить программу, которая вводит с клавиатуры имя и год рождения лица и...

Разработать класс в BlueJ, который считает сколько полных лет, месяцев и дней прожил человек
товарищи, программисты, спасите личинку программиста от неминуемой гибели на последнем экзамене) в...

Функция, которая считает, сколько раз в строке встречается данный элемент
Создать функцию,которая считает сколько раз в строке встречается данный элемент.

Написать программу, которая считает сколько спит человек за всю жизнь
Средний возраст человека 75 лет. Написать программу, которая по указанному продолжительностью сна...

14
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
25.09.2013, 14:25 2
Thrash, вам надо или написать свой собственный тип для работы с датами где реализовать всю логику вычислений дат или воспользоваться уже чем то готовым - например Boost.Date_Time.

Добавлено через 1 минуту
Ну, можно еще и пару простеньких функций насочинять для такой простой программы.
0
0 / 0 / 0
Регистрация: 18.07.2012
Сообщений: 15
25.09.2013, 14:34  [ТС] 3
Не знаю, что выбрать там
0
159 / 98 / 25
Регистрация: 07.03.2013
Сообщений: 513
Записей в блоге: 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;
0
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 минуты
и у Вас там ошибка, Вы забыли указать переменную результата, а так все отлично работает, но я не пойму к чему столько действий
0
147 / 82 / 10
Регистрация: 04.09.2013
Сообщений: 261
25.09.2013, 16:15 6
Thrash, у вас кажется тоже ошибочка вышла
может вместо
if (month1 == month, day == day1)
подразумевалось
C++
1
if ((month1 == month) && (day >= day1))||(month>month1)
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,907
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");
}
1
HedgehogLu
25.09.2013, 16:31
  #8

Не по теме:

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

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

#define bezyshodnost
#define age DeathCame

0
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;
}
почему не работает? (
0
147 / 82 / 10
Регистрация: 04.09.2013
Сообщений: 261
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
1
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;
}
0
147 / 82 / 10
Регистрация: 04.09.2013
Сообщений: 261
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);
...
0
159 / 98 / 25
Регистрация: 07.03.2013
Сообщений: 513
Записей в блоге: 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
0
147 / 82 / 10
Регистрация: 04.09.2013
Сообщений: 261
26.09.2013, 15:12 14
Цитата Сообщение от Algoritmer Посмотреть сообщение
Я ж тебе сразу код привел, как сделать по нормальному. Смотри моё сообщение выше
Жесть но зачем так сложно?
Смысл считывать символы и потом достаточно грубо без проверки на допустимый диапазон переводить в числа, когда можно использовать стандартные функции ввода которые изначально уже считывают данные в нужном формате, да и ошибки отслеживать там проще.

Хотя код действительно рабочий и в чем-то даже наглядный
0
159 / 98 / 25
Регистрация: 07.03.2013
Сообщений: 513
Записей в блоге: 1
26.09.2013, 16:11 15
Цитата Сообщение от HedgehogLu Посмотреть сообщение
Жесть но зачем так сложно?
Смысл считывать символы и потом достаточно грубо без проверки на допустимый диапазон переводить в числа, когда можно использовать стандартные функции ввода которые изначально уже считывают данные в нужном формате, да и ошибки отслеживать там проще.

Хотя код действительно рабочий и в чем-то даже наглядный
Ну добавь if(isdigit(dt[i])) ,будет проверка на вводимые данные
0
26.09.2013, 16:11
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.09.2013, 16:11
Помогаю со студенческими работами здесь

Написать программу, которая считает, сколько раз повторяется буква в строке
Помагите, надо написать програму каторая считает сколька раз повтараетса бкви в строке

Программа считает сколько раз нажал ctrl+y
Всем доброго времени суток! :) Может кто нибудь написать программку которая будет считать...

подпрограмма (программа, которая считает интеграл)
#include &quot;dialog.h&quot; #include &quot;ui_dialog.h&quot; Dialog::Dialog(QWidget *parent) : QDialog(parent),...

Программа, которая считает количество битов.
Привет всем, нужно написать функцию, которая возвращает количество битов с значением '1' в числе...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru