Помощь - Поиск - Пользователи - Календарь
Полная версия: функции для работы с датой
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
Mishan33
дана массив структур, в каждой из которых есть элемент bday[3] - массив из 3-х элементов целого типа:
1-й элемент - это день
2-й - месяц
3-й - год


struct note {
char name[30];
unsigned long int tele;
unsigned int bday[3];
};
note blocknote[7];



Вопрос: есть ли какая-нибудь функция сравнения времени (кроме как тупо условиями по каждому элементу), или функция, которая преобразовает дату в одно число (помнится в делфи была такая)
volvo
Есть dostounix(), которая преобразует дату/время в число секунд, прошедших с полуночи 1 Января 1970 но для этого надо пользоваться типами struct date и struct time, а не самодельными велосипедами...
Mishan33
ок,спасибо большое, сейчас попробую!
Mishan33
вообщем забил я на эту функцию и сделал тупо условиями, но вот только почему то результат оставляет желать лучшего, никак не поддается, помогите найти ошибку...
ах да, собсна сама задача:

Описать структуру с именем Note, содержащую следующие поля: name-фамилия и имя, tele- номер телефона, bday-день рождения (массив из 3 чисел). Написать программу, выполняющую ввод с клавиатуры данных в массив Blocknote, состоящий из 8 элементов типа Note. Записи должны быть упорядочены по датам дней рождения. Вывести на экран полученный результат.

а вот мое решение (Dev C++):

#include <cstdlib>
#include <iostream>

using namespace std;

struct note {
char name[30];
unsigned long int tele;
int b_day[3];
};
const int msize=2;
note blocknote[msize];
char *tmp;
int minc,minn,mmounth,mday,myear,mtele;
char mname[30];
int main(int argc, char *argv[])
{
for(int i=0;i<msize+1;i++)
{
cout<<"\nEnter name "<<" ["<<i+1<<"]\n";
cin>>blocknote[i].name;
strcat(blocknote[i].name,"\0");
cout<<"Enter tel\n";
cin>>blocknote[i].tele;
cout<<"Enter day of bd\n";
cin>>blocknote[i].b_day[0];
cout<<"Enter mounth of bd\n";
cin>>blocknote[i].b_day[1];
cout<<"Enter year of bd\n";
cin>>blocknote[i].b_day[2];
}

for (int i=0;i<msize+1;i++)
{
mday=blocknote[i].b_day[0];
mmounth=blocknote[i].b_day[1];
myear=blocknote[i].b_day[2];
mtele=blocknote[i].tele;
strcpy(mname,blocknote[i].name);
minn=i;
for(int j=i+1;j<msize+1;j++)
{
if (blocknote[j].b_day[2]<myear)
{
mday=blocknote[j].b_day[0];
mmounth=blocknote[j].b_day[1];
myear=blocknote[j].b_day[2];
mtele=blocknote[j].tele;
strcpy(mname,blocknote[j].name);
minn=j;
}

if (blocknote[j].b_day[2]=myear)
{
if (blocknote[j].b_day[1]<mmounth)
{ mday=blocknote[j].b_day[0];
mmounth=blocknote[j].b_day[1];
myear=blocknote[j].b_day[2];
mtele=blocknote[j].tele;
strcpy(mname,blocknote[j].name);
minn=j;
}
if (blocknote[j].b_day[1]=mmounth)
{
if (blocknote[j].b_day[0]<mday)
{ mday=blocknote[j].b_day[0];
mmounth=blocknote[j].b_day[1];
myear=blocknote[j].b_day[2];
mtele=blocknote[j].tele;
strcpy(mname,blocknote[j].name);
minn=j;
}
}
}
}
blocknote[minn].b_day[2]=blocknote[i].b_day[2];
blocknote[minn].b_day[1]=blocknote[i].b_day[1];
blocknote[minn].b_day[0]=blocknote[i].b_day[0];
blocknote[minn].tele=blocknote[i].tele;
strcpy(blocknote[minn].name,blocknote[i].name);

blocknote[i].b_day[2]=myear;
blocknote[i].b_day[1]=mmounth;
blocknote[i].b_day[0]=mday;
blocknote[i].tele=mtele;
strcpy(blocknote[i].name,mname);
}
for(int i=0;i<msize+1;i++)
{
cout<<blocknote[i].name<<" "<<blocknote[i].tele<<" "<<blocknote[i].b_day[0]<<"/"<<blocknote[i].b_day[1]<<"/"<<blocknote[i].b_day[2]<<"\n";
}

system("PAUSE");
return EXIT_SUCCESS;
}
volvo
Цитата
сделал тупо условиями
Вот расскажи мне, ты на каком языке вообще пишешь программу? На С++, или на С, но с использованием плюсовых (почему-то) потоков? Если на С, то делай на С все, а не часть. Если на С++, то опиши класс TMyTime, для которого определи операции сравнения и вывода в поток, и будешь работать с этим классом как с любым другим встроенным типом.

А "спагетти"... Не хочется разбираться в нем, ибо для тебя это все равно, сдать и забыть...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.