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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.88
Thrash
0 / 0 / 0
Регистрация: 18.07.2012
Сообщений: 15
#1

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

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

Добрый день, товарищи! В данный момент занимаюсь самостоятельным изучением языка С++. После написания программы-калькулятор, пришла в голову мысль написать программу, которая высчитывает сколько тебе лет. Однако написать получилось только самый простенький код, который считает года без месяцев, вот он:
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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.09.2013, 14:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программа, которая считает сколько тебе лет (C++):

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

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

Программа, которая считает количество пробелов в строке - C++
Вот программа которая считает количество символов в строке. Помогите сделать так, чтобы она считала еще количество пробелов: ...

программа, которая считает и печатает произведение нечетных целых от 1 до 15 - C++
Напишите программу, которая считает и печатает произведение нечетных целых от 1 до 15.

Программа, которая считает количество парных(встречающихся 2 раза) символов в строке - C++
Напишите программу, которая считает количество парных символов в строке. Вот программа которая считает длину строки, количество пробелов и...

Определить, через сколько лет средняя продолжительность жизни превысит 60 лет - C++
Средняя продолжительность жизни населения региона равна А лет. Ожидается ее ежегодный рост на р % вследствие улучшения медицинского ...

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

Добавлено через 1 минуту
Ну, можно еще и пару простеньких функций насочинять для такой простой программы.
0
Thrash
0 / 0 / 0
Регистрация: 18.07.2012
Сообщений: 15
25.09.2013, 14:34  [ТС] #3
Не знаю, что выбрать там
0
Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 480
Записей в блоге: 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
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 минуты
и у Вас там ошибка, Вы забыли указать переменную результата, а так все отлично работает, но я не пойму к чему столько действий
0
HedgehogLu
147 / 68 / 1
Регистрация: 04.09.2013
Сообщений: 260
25.09.2013, 16:15 #6
Thrash, у вас кажется тоже ошибочка вышла
может вместо
if (month1 == month, day == day1)
подразумевалось
C++
1
if ((month1 == month) && (day >= day1))||(month>month1)
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 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");
}
1
HedgehogLu
25.09.2013, 16:31
  #8

Не по теме:

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

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

#define bezyshodnost
#define age DeathCame

0
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;
}
почему не работает? (
0
HedgehogLu
147 / 68 / 1
Регистрация: 04.09.2013
Сообщений: 260
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
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;
}
0
HedgehogLu
147 / 68 / 1
Регистрация: 04.09.2013
Сообщений: 260
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
Algoritmer
155 / 95 / 13
Регистрация: 07.03.2013
Сообщений: 480
Записей в блоге: 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
HedgehogLu
147 / 68 / 1
Регистрация: 04.09.2013
Сообщений: 260
26.09.2013, 15:12 #14
Цитата Сообщение от Algoritmer Посмотреть сообщение
Я ж тебе сразу код привел, как сделать по нормальному. Смотри моё сообщение выше
Жесть но зачем так сложно?
Смысл считывать символы и потом достаточно грубо без проверки на допустимый диапазон переводить в числа, когда можно использовать стандартные функции ввода которые изначально уже считывают данные в нужном формате, да и ошибки отслеживать там проще.

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

Хотя код действительно рабочий и в чем-то даже наглядный
Ну добавь if(isdigit(dt[i])) ,будет проверка на вводимые данные
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2013, 16:11
Привет! Вот еще темы с ответами:

Программа должна писать сколько лет, месяцев, дней, часов, минут, секунд прожил человек - C++
Программа должна писать сколько лет,месяцев,дней,часов,минут,секунд прожил человек Вводится только число,год и месяц. Только точно, а не...

Составить программу, которая по дате рождения человека (день, месяц, год в числовой форме) вычисляет, сколько лет, недель и дней прожил человек - C++
Составить программу, которая по дате рождения человека (день, месяц, год в числовой форме) вычисляет, сколько лет, недель и дней прожил...

Составить программу которая при введеном количестве лет выдает сообщени вам n лет,вам n год или года - C++
Составить программу которая при введеном количестве лет выдает сообщение вам n лет,вам n год или года

Как сделать на С++ программу который водишь любую букву она показывает тебе сколько болших и маленьких букв - C++
Как сделать на С++ программу который водишь любую букву она показывает тебе сколько болших и маленьких букв Добавлено через 55 секунд ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.09.2013, 16:11
Ответ Создать тему
Опции темы

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