1

Тема: Програма з місяцями,числами,датами

Добрий день всім!!!Допоможіть написати програму, при якій ти вводиш дату (день,місяць,рік), а програма має вивести дату яка була тиждень тому!!!Або трохи інша ти вводиш час(години,хвилини,секунди),а вона має вивести час ,який буде після 10 секунд!!!В чому заключається взагалі принцип ось таких програм!!!Хоча б одну наприкладі щоб я зміг зрозуміти суть!!

2

Re: Програма з місяцями,числами,датами

Істина ховається десь тут.

3

Re: Програма з місяцями,числами,датами

а можна на прикладі якусь!!там через різноманітні функції, проте я думаю можна зробити і без них!!!!

4

Re: Програма з місяцями,числами,датами

і ще!!можеш нагадати як наприклад є число поміняти місцями 1 і останю цифру!!!в коді!!

5

Re: Програма з місяцями,числами,датами

sardar2222 написав:

а можна на прикладі якусь!!там через різноманітні функції, проте я думаю можна зробити і без них!!!!

У цій статті є приклад конвертування дати й часу.
Як правило, взаємне конвертування здійснюється так:
tm -> mktime()
localtime() -> tm.

Звісно, можна і без них: моделі велосипедів з довгими сідими бородами допускаються. :)

sardar2222 написав:

і ще!!можеш нагадати як наприклад є число поміняти місцями 1 і останю цифру!!!в коді!!

Прошу - звідки я це маю пригадати?

6

Re: Програма з місяцями,числами,датами

мені потрібно наприклад я вводжу 09.05.2013, а програма має мені вивести 02.05.2013. Тобто дату яка була тиждень назад!так само із секундами!

Re: Програма з місяцями,числами,датами

sardar2222 написав:

мені потрібно наприклад я вводжу 09.05.2013, а програма має мені вивести 02.05.2013. Тобто дату яка була тиждень назад!так само із секундами!

Ви з конструкціями if..else знайомі ?
Якщо так, то таку програму можна побудувати за допомогою декількох таких конструкцій.

8

Re: Програма з місяцями,числами,датами

#include <stdio.h>

int day_of_year(int year, int month, int day, int leap);
void month_day(int year, int yearday, int leap);

static char daytab[2][13] = {
    {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
    {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};

int main(int argc, char *argv[])
{
    int c, leap, y, m, d, yearday; 
    // c - correct flag
    // leap - leap year flag
    // y - year, m - month, d - day
    input:
    scanf("%d %d %d", &y, &m, &d);
    c = 0;
    if(y < 0){
        printf("Year couldn't be negative\n");
        c = 1;
    }
    if(m <= 0 || m >= 12){
        printf("Month got to be 1-12\n");
        c = 1;
    }
    leap = y%4 == 0 && y%100 != 0 || y%400 == 0;
    if(d > daytab[leap][m] || d <= 0){
        printf("Day got to be more than 0 and not exceed days per month maximum\n");
        c = 1;
    }
    if(c == 1)
        goto input;
    yearday = day_of_year(y, m, d, leap);
    month_day(y, yearday, leap);
    return 0;
}

int day_of_year(int year, int month, int day, int leap){
    int i;
    printf("%d.", day);
    for(i = 1; i < month; i++)
        day += daytab[leap][i];
    printf("%d is the %d's day of %d year\n", month, day, year);
    return day;
}

void month_day(int year, int yearday, int leap){
    int i, m, d;
    
    for(i = 1; yearday > daytab[leap][i]; i++)
        yearday -= daytab[leap][i];
    m = i;
    d = yearday;
    printf("Full date: %d/%d/%d\n", m, d, year);
}

Розберіть та редагуйте цей код.

9 Востаннє редагувалося User 298 (10.02.2013 13:12:36)

Re: Програма з місяцями,числами,датами

#include <ctime>
#include <iostream>

using namespace std;

int main()
{
    tm s;
    s.tm_year = 112;
    s.tm_mon = 11;
    s.tm_mday = 2;
    s.tm_hour = 0;
    s.tm_min = 0;
    s.tm_sec = 0;
    
    cout<<"START: "<<mktime(&s)<<"; "<<s.tm_mday<<endl;
    
    s.tm_mday--;
    
    cout<<"PREV: "<<mktime(&s)<<"; "<<s.tm_mday<<endl;
    
    s.tm_mday--; /* zero! */
    
    cout<<"PREV 2: "<<mktime(&s)<<"; "<<s.tm_mday<<endl;
    
    return 0;
}

Приклад доводить, що mktime() коректно обробляє "некоректні" параметри структури tm (і записує коректні до переданої структури, що плутає мозок іноді), інакше замість величезних чисел видало би (-1). Отримати з timestamp-значення структуру tm можна, використовуючи функцію localtime().

З.І: а ліпше і правда розберіть код від keithfay: корисніше буде.