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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Сортировка структуры по дате, (масс. 3-х элементов) 
:(
    Опции темы
skaizer
Дата 18.4.2007, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте! Помогите, пожалуйста, с задачей.
Сама задача:
Описать структуру с именем NOTE, содержащую следующие поля:
фамилия, имя;
номер телефона;
дата рождения (массив из трех чисел).
Написать программу, выполняющую следующие действия:
ввод с клавиатуры данных в массив, состоящий из восьми элементов типа NOTE; записи должны быть упорядочены по датам рождения;
вывод на экран информации о человеке, номер телефона которого введен с клавиатуры;
если такого нет, выдать на дисплей соответствующее сообщение.

Вся задача написана за исключение сортировки по дате. Необходимо вывести содержимое структуры на экран, в упорядоченном ( по дате рождения- массиву из трех элементов) виде.
Вот код, который реализует ввод данных, и выборку по номеру телефона:
Код

#include<conio.h>
#include<iostream.h>
#include<iomanip.h>
#define N 3
struct NOTE
{
    char FIO[100];
    char phone[50];
    int date[3];
} info[3];

int main(void){
int i, j;
char phone[50];
//Ввод данных
for( i=0; i<N; ++i )
{
    clrscr();
    cout << "\n\t---- " << i+1 << " ---\nF.I.O. :";
    cin.ignore();
    cin.get( info[ i ].FIO, 100 );
    cout << "Nomer telefona :";
    cin.ignore();
    cin.get( info[ i ].phone, 50 );
    cout << "Data :\nChislo >> ";
    cin >> info[ i ].date[ 0 ];
    cout << "Mesyac >> ";
    cin >> info[ i ].date[ 1 ];
    cout << "God >> ";
    cin >> info[ i ].date[ 2 ];
}
//Вывод на экран.
clrscr();
for( i=0; i<N; ++i){
   cout << "\n----------------------------------------------\n";
    cout << "F.I.O. : " << setw(20) << info[i].FIO << endl
        << "Telefon: " << setw(20) << info[i].phone << endl
        << "Data rojdenya :" << endl
        << setw(30) << "Den'  >> " << info[i].date[0] << endl
        << setw(30) << "Mesyac >> " << info[i].date[1] << endl
        << setw(30) << "Dog   >> " << info[i].date[2] << endl;
}
//Выбор по номеру телефона.
cout << "Vvedite nomer telefona :";
cin.ignore();
cin.get(phone, 50);
for(i=0, j=0; i<N; i++)
    if(strcmp( info[ i ].phone, phone )==0)
        ++j;
if(j>0){
        clrscr();
        cout << "\n----------------------------------------------\n";
    for( i=0; i<N; ++i){
        if(strcmp(info[i].phone, phone )==0){
            cout << "F.I.O. " << setw(20) << info[i].FIO << endl
                 << "Data rojdenya :" << endl
                 << setw(30) << "Den'  >> " << info[i].date[0] << endl
                 << setw(30) << "Mesyac >> " << info[i].date[1] << endl
                 << setw(30) << "Dog   >> " << info[i].date[2] << endl;
            }
        else continue;
        cout << endl;
        }
}else
       cout << "Nomer " << phone << " otsutstvuet v spiske\n";
cout << "Press any key\n";
getch();
return 0;

Если не трудно, добавьте, пожалуйста, вывод в отсортированном виде.
Спасибо всем огромное, кто поможет с задачей.

Это сообщение отредактировал(а) Alexeis - 19.4.2007, 10:24
PM MAIL   Вверх
Anikmar
Дата 19.4.2007, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Попробоавл так:
Код

#include<conio.h>
#include<iostream.h>
#include<iomanip.h>
#define N 3
struct NOTE
{
    char FIO[100];
    char phone[50];
    int date[3];
} info[N];

void Sort(void)
{
    int i,k,BigDate1,BigDate2;
    k = N-1;
    bool fs = true;


    while (fs)
    {
        fs = false;
        for (i=0;i<k;i++)
        {
            BigDate1 = info[i].date[2]*10000 + info[i].date[1]*100 + info[i].date[0];
            BigDate2 = info[i+1].date[2]*10000 + info[i+1].date[1]*100 + info[i+1].date[0];
            if (BigDate1 < BigDate2)
            {
                struct NOTE Tmp;
                Tmp = info[i];
                info[i] = info[i+1];
                info[i+1] = Tmp;
                fs = true;
            }
        }
        k--;
        if (k<0) fs = false;
    }
}

int main(void){
int i, j;
char phone[50];
//Ввод данных
for( i=0; i<N; ++i )
{
    clrscr();
    cout << "\n\t---- " << i+1 << " ---\nF.I.O. :";
    cin.ignore();
    cin.get( info[ i ].FIO, 100 );
    cout << "Nomer telefona :";
    cin.ignore();
    cin.get( info[ i ].phone, 50 );
    cout << "Data :\nChislo >> ";
    cin >> info[ i ].date[ 0 ];
    cout << "Mesyac >> ";
    cin >> info[ i ].date[ 1 ];
    cout << "God >> ";
    cin >> info[ i ].date[ 2 ];
}
// Сортировка
Sort();
//Вывод на экран.
clrscr();
for( i=0; i<N; ++i){
   cout << "\n----------------------------------------------\n";
    cout << "F.I.O. : " << setw(20) << info[i].FIO << endl
        << "Telefon: " << setw(20) << info[i].phone << endl
        << "Data rojdenya :" << endl
        << setw(30) << "Den'  >> " << info[i].date[0] << endl
        << setw(30) << "Mesyac >> " << info[i].date[1] << endl
        << setw(30) << "Dog   >> " << info[i].date[2] << endl;
}
//Выбор по номеру телефона.
cout << "Vvedite nomer telefona :";
cin.ignore();
cin.get(phone, 50);
for(i=0, j=0; i<N; i++)
    if(strcmp( info[ i ].phone, phone )==0)
        ++j;
if(j>0){
        clrscr();
        cout << "\n----------------------------------------------\n";
    for( i=0; i<N; ++i){
        if(strcmp(info[i].phone, phone )==0){
            cout << "F.I.O. " << setw(20) << info[i].FIO << endl
                 << "Data rojdenya :" << endl
                 << setw(30) << "Den'  >> " << info[i].date[0] << endl
                 << setw(30) << "Mesyac >> " << info[i].date[1] << endl
                 << setw(30) << "Dog   >> " << info[i].date[2] << endl;
            }
        else continue;
        cout << endl;
        }
}else
       cout << "Nomer " << phone << " otsutstvuet v spiske\n";
cout << "Press any key\n";
getch();
return 0;
}

PM MAIL ICQ   Вверх
skaizer
Дата 20.4.2007, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо за помощь smile
PM MAIL   Вверх
Anikmar
Дата 20.4.2007, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

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



Не во что  smile 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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