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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Описание структуры рейсов, Описание структуры рейсов 
V
    Опции темы
deadlegolas
Дата 11.3.2009, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Собственно задачка на структуры:
Цитата

Описать структуру с именем AEROFLOT, что содержит следующие поля:  
- Название пункта назначения рейса;  
- Номер рейса;  
- Тип самолета.  
Написать программу, что выполняет следующие действия:  
- Введение из клавиатуры данных в массив, что состоит из семи элементов типа AEROFLOT; записи должны быть упорядочены по росту номера рейса;  
- Выведение на экран номеров рейсов и типов самолетов, которые вылетают в пункт назначения, название которого совпало с названием, введенным из клавиатуры;  
- Если таких рейсов нет, тогда выдать на дисплей соответствующее сообщение.  


Описал структуру.. но возникли проблемы с сортировкой по рейсу и проверка на совпадание рейса с введенным с клавиатуры..
Прошу помочь. Буду очень благодарен )

PM MAIL   Вверх
zim22
Дата 11.3.2009, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

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



код в студию


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


depict1
****


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

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



не дождался кода smile

Код
// 396.cpp : Defines the entry point for the console application.
//

#include <string>
#include <iostream>
#include <algorithm>

enum PlaneType {Kukuruznik, Boing, Shuttle};

std::string dest;

struct AEROFLOT
{
    std::string destination_name;
    int flight_number;
    PlaneType plane; 
};

bool flight_pred(const AEROFLOT &one, const AEROFLOT &two)
{
    return one.flight_number < two.flight_number;
}

bool dest_check(const AEROFLOT &val)
{
    return val.destination_name == dest;
}
int main(int argc, char *argv[])
{
    const size_t size = 7;
    AEROFLOT arr[size];
    
    for (size_t i = 0; i != size; ++i)
    {
        std::cout << "Input data of plane number " << i + 1 << std::endl;
        std::cout << "Destination: ";
        std::cin >> arr[i].destination_name;

        std::cout << "Flight number: ";
        std::cin >> arr[i].flight_number;

        std::cout << "Plane type (0 - Kukuruznik, 1 - Boing, 2 - Shattle): ";    
        int n = 0;
        std::cin >> n;
        switch (n)
        {        
        case 0: arr[i].plane = Kukuruznik; break;
        case 1: arr[i].plane = Boing; break;
        case 2: arr[i].plane = Shuttle; break;
        default: std::cout << "PAIN! I feel PAIN! How could you...\n"; return -1;
        }    
        std::cout << std::endl;
    }

    std::sort(arr, arr + size, flight_pred);
        
    std::cout << "Input destination: ";        
    std::cin >> dest;

    AEROFLOT *it = arr;
    size_t cnt = 0;
    while ((it = std::find_if(it, arr + size, dest_check)) != arr + size)
    {
        std::cout << "Flight number: " << it->flight_number << std::endl;
        std::cout << "Plane type (0 - Kukuruznik, 1 - Boing, 2 - Shattle): " << it->plane << std::endl;
        ++it;
        ++cnt;
    }
    if (!cnt)    
        std::cout << std::endl << "Reisov.NET" << std::endl;

    return 0;
}



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


Эксперт
***


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

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



deadlegolas, 
сортировка делается стандартной библиотечной функцией sort.
Код
struct AEROFLOT
{
    int flight;
    // ...
};

bool flights_cmp(const AEROFLOT& a1, const AEROFLOT& a2)
{ return a1.flight < a2.flght; }

AEROFLOT arr[7];
std::sort(arr, arr+7, flighs_cmp);

PM MAIL   Вверх
deadlegolas
Дата 11.3.2009, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



спасибо.. но можно чуть-чуть попроще? а то я только недавно начал С++ изучать.. ваш код не совсем мне понятен))

вот мой код, сортировку уже сделал, а как определить совпадает ли введенный адрес с адресами в структуре не знаю как сделать...

Код

#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#define KST 3
int main(void) {
clrscr();
struct aeroflot {
char name[35];
char tip[10];
long reis;
} starr[KST],tmp,*pst,*pst1,*pst2;
int k,kst;

long inreis;

printf("Kolichestvo reisov -");
scanf("%d",&kst);   getchar();
puts("\tDani:");

for(k=0;k<kst;k++) {
    printf("\n%2d. Name: ",k+1);
    gets(starr[k].name);
    printf("tip:");
    gets((starr+k)->tip);
    printf("reis:");
    scanf("%ld",&inreis); getchar();
    (starr+k)->reis=inreis;
}
for(k=0;k<kst;k++) {
    pst1=starr; pst2=starr+1;
        for(;pst2<starr+kst-k; pst1++,pst2++) {
            if(pst1->reis<pst2->reis) {
            tmp=*pst1;
            *pst1=*pst2;
            *pst2=tmp;}
        }
}
puts("\n\t Spisok:");
for(k=0, pst=starr; k<kst; k++,pst++)
    printf("%2d.  %-30.27s%-8s%8ld\n", k+1, pst->name,
    pst->tip,pst->reis);
getch();
return 0;
}

PM MAIL   Вверх
zim22
Дата 11.3.2009, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

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



ты на С пишешь, а не на С++
хотя в описании темы что написано?

Код

#include <cstring>

struct aeroflot 
{
    char name[35];
    char tip[10];
    long reis;
};

int main()
{
    aeroflot a;
    strcpy(a.name, "Buevo");
    char *q = "Buevo";
    int i = strcmp(a.name, q);
    return 0;
}

Обрати внимание на функцию strcmp
http://www.cplusplus.com/reference/clibrar...ing/strcmp.html


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


Шустрый
*


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

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



Блин! Это же проще простого)) что-то я затупил, уже все сделал,всем спасибо)

Код

printf("Vvedite nujnoe nazvanie- ");
    scanf("%s",&namenash,"\n");
    puts("\n\t Spisok: ");
    for (k=0, pst=starr; k<kst; k++, pst++)  {
        if (pst->name > namenash){ t=1;
           printf("%2d.  %-30.27s%-8s%8ld\n", k+1, pst->name,
            pst->tip, pst->reis);}        }
if(t==0) {
puts("NETU");}


Добавлено через 54 секунды
Цитата(zim22 @  11.3.2009,  16:03 Найти цитируемый пост)
ты на С пишешь, а не на С++
хотя в описании темы что написано?

Ой. буду знать)
Спасибо
PM MAIL   Вверх
zim22
Дата 11.3.2009, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


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

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



Цитата(deadlegolas @  11.3.2009,  16:03 Найти цитируемый пост)
pst->name > namenash

очень интересно. я не думаю, что в С определён оператор > для стравнения С-строк.


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


Шустрый
*


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

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



мм.. да. я уже увидел)

пробую так,но выводит какую-то кашу из символов.. не могу понять в чем проблема.

Код

printf("Vvedite nujnoe nazvanie- ");
    scanf("%s",&namenash,"\n");
    puts("\n\t Spisok: ");
    for (k=0, pst=starr; k<kst; k++, pst++)
     i=strcmp(pst->name,namenash);  {
        if (i==0){ 
           printf("%2d.  %-30.27s%-8s%-8s\n", k+1, pst->name,
            pst->tip, pst->reis);}        }
if(i!=0) {
puts("LOOSER");}

getch();
return 0;
}


Добавлено через 5 минут и 55 секунд
Нашел баг, сравнивал строки между for() и {}  smile 
все.всем спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

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


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

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

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

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


 




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


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

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