Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ функции для работы с датой

Автор: Mishan33 5.11.2007 0:46

дана массив структур, в каждой из которых есть элемент bday[3] - массив из 3-х элементов целого типа:
1-й элемент - это день
2-й - месяц
3-й - год


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



Вопрос: есть ли какая-нибудь функция сравнения времени (кроме как тупо условиями по каждому элементу), или функция, которая преобразовает дату в одно число (помнится в делфи была такая)

Автор: volvo 5.11.2007 0:54

Есть dostounix(), которая преобразует дату/время в число секунд, прошедших с полуночи 1 Января 1970 но для этого надо пользоваться типами struct date и struct time, а не самодельными велосипедами...

Автор: Mishan33 5.11.2007 0:56

ок,спасибо большое, сейчас попробую!

Автор: Mishan33 5.11.2007 5:35

вообщем забил я на эту функцию и сделал тупо условиями, но вот только почему то результат оставляет желать лучшего, никак не поддается, помогите найти ошибку...
ах да, собсна сама задача:

Описать структуру с именем 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 7.11.2007 4:31

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

А "спагетти"... Не хочется разбираться в нем, ибо для тебя это все равно, сдать и забыть...