Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите исправить программу с датой и временем 
:(
    Опции темы
Truegirl
Дата 13.1.2009, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 20.11.2008

Репутация: нет
Всего: нет



у меня еще проблема, вот чуть-чуть переделанный 
Код

#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 50
#define K 6

main()

{int i,j,n,error,max,imax,min=0,imin=0;
int a[N][K],b[N][K];
long c[N],r;

do
     {error=0;
        printf("Vvedite kol-vo raznih dat: ");
        scanf("%d",&n);
        if(n<1 || n>N)
            {printf("\nVi vveli kol-vo elementov massiva men'she 2 ili bol'she 50!\nPovtorite vvod!\n\n");
             error=1;
            }
     }
while (error);

    printf("\nDati v formate GG MM DD cc mm ss:\n");

    for(i=0;i<n;i++)
     {do a[i][0]=rand()%2008; while(a[i][0]<1970);
        do a[i][1]=rand()%13; while(a[i][1]<1);
        do a[i][2]=rand()%32; while(a[i][2]<1);
             a[i][3]=rand()%24;
             a[i][4]=rand()%60;
             a[i][5]=rand()%60;
             printf("\nData %d:",i+1);
             for (j=0;j<K;j++)
                printf(" %.2d",a[i][j]);
        }
max=0;
for(i=0;i<n;i++)
    if (a[i][0]>max)
     {
        max=a[i][0];
        imax=i;
     }
min=a[0][0];
for(i=0;i<n;i++)
    if (a[i][0]<min)
     {
        min=a[i][0];
        imin=i;
     }
for(i=0;i<2;i++)
{
    for(j=0;j<K;j++)
     {
        b[i][j]=a[imax][j];
     }
    imax=imin;
}
for(i=0;i<2;i++)
{
printf("\n");
for(j=0;j<K;j++)
    printf(" b[%d,%d]=%d",i,j,b[i][j]);
}
for(i=0;i<2;++i)
     {
        c[i]=(b[i][0]-1971)*31536000;
        c[i]+=b[i][2]*86400;
        c[i]+=b[i][3]*3600;
        c[i]+=b[i][4]*60;
        c[i]+=b[i][5]-86400;
        c[i]+=((b[i][0]-69)/4)*86400;

        if(b[i][1]>12)
            c[i]+=31*86400;
        if(b[i][1]>11)
            c[i]+=30*86400;
        if(b[i][1]>10)
            c[i]+=31*86400;
        if(b[i][1]>9)
            c[i]+=30*86400;
        if(b[i][1]>8)
            c[i]+=31*86400;
        if(b[i][1]>7)
            c[i]+=31*86400;
        if(b[i][1]>6)
            c[i]+=30*86400;
        if(b[i][1]>5)
            c[i]+=31*86400;
        if(b[i][1]>4)
            c[i]+=30*86400;
        if(b[i][1]>3)
            c[i]+=31*86400;
        if(b[i][1]>2)
            c[i]+=28*86400;
        if(b[i][1]>1)
            c[i]+=31*86400;
        if(((b[i][1]==2 && b[i][2]==29) || b[i][1]>2) && b[i][1]>1 && b[i][0]%4==0 && b[i][0]%100!=0 || b[i][0]%400==0)
         c[i]+=151936;
     }
printf("\n\nDati v formate vremennoi metki UNIX:\n\n");
for(i=0;i<2;i++)
     {printf("Data %d: %ld\n",i+1,c[i]);
     }
      r=c[0]-c[1];
printf("raznost minimalnogo i maximalnogo = %ld",r);
getch();
return 0;
}

но он неправельно считает день и месяц, как исправить?

Это сообщение отредактировал(а) Truegirl - 13.1.2009, 23:52
PM MAIL   Вверх
mes
Дата 14.1.2009, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



ну и код.. глаза поломаешь... расскажи словами расскажи что требуется smile


--------------------
PM MAIL WWW   Вверх
Truegirl
Дата 14.1.2009, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 20.11.2008

Репутация: нет
Всего: нет



В общем задание такое:В массиве, содержащем случайные значения в формате ГГ-ММ-ДД ЧЧ:ММ:СС, определить максимальное и минимальное значения даты и времени и количество дней, месяцев и лет между этими датами. 
Код неправельно считает день и месяц, а я не пойму почему
Помогите пожалуйста, очень срочно надо

Это сообщение отредактировал(а) Truegirl - 14.1.2009, 00:50
PM MAIL   Вверх
mes
Дата 14.1.2009, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 79
Всего: 250



Код

#define DateTimeArraySize 50

struct MyDate
{
   int Year;
   int Month;
   int Day;
};

struct MyTime
{
    int Hour;
    int Minute;
    int Secоnd;
};

struct MyDateTime
{
   MyDate Date;
   MyTime Time;
};

bool IsLeapYear (int year)

   return (year%4) ? false : true;
}

int GetDaysInMonth (int month, bool leap)
{
  const int * days = { 31, 0, 31, 30, 31,30, 31,31,30,31,30,31 };
  if (month>=12) return 0;
  if (month ==1) return  (leap)? 29 : 28;
  return days[month];
}

void SetRandomDate (MyDate& date)
{
     date.Year  = rand()%(2008-1970)+1970;
     date.Month = rand%12;
     date.Day   = rand%GetDaysInMonth(date.Month, IsLeapYear(date.Year));
}
void SetRandomTime (MyTime& time)
{
     time.Hour   = rand()%24;
     time.Minute = rand()%60;
     time.Secоnd = rand()%60;
}

int CmpDate (const MyDate& date1, const MyDate& date2) 
//  -1     date1  меньше  date2
//   0     date1  равно   date2
//   1     date1  больше  date2
{
  if (date1.Year!=date2.Year)   return (date1.Year<date2.Year)?   -1 : 1;
  if (date1.Month!=date2.Month) return (date1.Month<date2.Month)? -1 : 1;
  if (date1.Day!=date2.Day)     return (date1.Day<date2.Day)?     -1 : 1;
  return 0; 

}
int CmpTime (const MyTime& time1, const MyTime& time2)
{
// составить по аналогии с CmpDate
 //..
   return 0;
 
}

int CmpDateTime (const MyDateTime& dt1, const MyDateTime& dt2)
{
   int res =CmpDate(dt1.Date, dt2.Date);
   if (res==0) return CmpTime (dt1.Time, dt2.Time);
   return res;
}

int main () 
{
   MyDateTime dt[DateTimeArraySize];

   for (int i=0; i<DateTimeArraySize; ++i)
   {
         SetRandomDate(dt[i].Date);
         SetRandomTime(dt[i].Time);
   }
   
   int min =0;
   int max =0;

   for (int i=1; i<DateTimeArraySize; ++i)
   {
       if ( CmpDateTime (dt[min], dt[i]) >0)  // if (dt[min] >dt[i])
          min=i;

       if ( CmpDateTime (dt[max], dt[i]) <0)  // if (dt[max] <dt[i])
          max=i;
   }
      
   printf ("min datetime is: %d-%d-%d %d:%d:%d  \n"
                         , dt[min].Date.Year
                         , dt[min].Date.Month
                         , dt[min].Date.Day
                         , dt[min].Time.Hour
                         , dt[min].Minute
                         , dt[min].Second
             );  // можно выделить как функцию

   printf ("mах datetime is: %d-%d-%d %d:%d:%d  \n"
                         , dt[mах].Date.Year
                         , dt[mах].Date.Month
                         , dt[mах].Date.Day
                         , dt[mах].Time.Hour
                         , dt[mах].Minute
                         , dt[mах].Second
             );  // можно выделить как функцию


    return 0;
}


вот половинка, надеюсь что правильно ..
осталось только DateTimeSpan() написать. smile


Это сообщение отредактировал(а) mes - 15.1.2009, 10:23


--------------------
PM MAIL WWW   Вверх
Truegirl
Дата 14.1.2009, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 20.11.2008

Репутация: нет
Всего: нет



спасибол огромное
PM MAIL   Вверх
Truegirl
Дата 15.1.2009, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 72
Регистрация: 20.11.2008

Репутация: нет
Всего: нет



а что должна делать функция DateTimeSpan() ?
PM MAIL   Вверх
jonie
Дата 15.1.2009, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



считать разницу между датами надо пологать


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0835 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.