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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [c++]Struct 
V
    Опции темы
Goth
Дата 18.5.2007, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот такая вот задача стоит предо мной:

описать структуру с именем MARSH, содержащую поля: 
•    BEGST – название начального пункта маршрута;
•    TERM – название конечного пункта маршрута;
•    NUMER –  номер маршрута.    
Написать программу, выполняющую следующие действия:
•    ввод из файла данных в массив TRAFFIC, состоящий из десяти структур типа MARSH; записи должны быть упорядочены по номерам маршрутов;
•    вывод на дисплей информации о маршрутах, которые начинаются или кончаются в пункте, введенном с клавиатуры;
•    если таких маршрутов нет, вывести соответствующее сообщение.

Кто осилит?:)

PM MAIL   Вверх
Xenon
Дата 18.5.2007, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Непонятка - бинарный файл со структруми уже есть? Если да, то :
Код

#include <iostream>
#include <string>
#include <fstream>

const int SIZE = 10;

struct MARSH
{
    std::string BEGST;
    std::string TERM;
    int NUMER;
    MARSH():BEGST("N/A"), TERM("N/A"), NUMER(0){}
};

void sort(MARSH arr[SIZE])
{
    for (int j = 1, i = 0; j < SIZE; ++j)
    {
        MARSH buf = arr[j];
        for (i = j - 1; i >= 0 && arr[i].NUMER > buf.NUMER; --i)
            arr[i + 1] = arr[i];
        arr[i + 1] = buf;
    }
}

int main(int argc, char* argv[])
{
    MARSH TRAFFIC[SIZE];
    std::string path;
    std::cout << "Enter path to file: ";
    std::getline(std::cin, path);
    std::ifstream file(path.c_str());
    if ( !file.is_open() )
    {
        std::cout << "Could not open file";
        std::cin.get();
        return -1;
    }
    for (int i = 0; !file.eof() && i < SIZE; ++i) file.read(reinterpret_cast<char*>(&TRAFFIC[i]), sizeof(TRAFFIC));
    sort(TRAFFIC);
    std::string BEGST;
    std::string TERM;
    std::cout << "Enter BEGST: ";
    std::getline(std::cin, BEGST);
    std::cout << "Enter TERM: ";
    std::getline(std::cin, TERM);
    bool are_found = false;
    for (int i = 0; i < SIZE; ++i)
    {
        if (TRAFFIC[i].BEGST == BEGST && TRAFFIC[i].TERM == TERM)
        {
            std::cout << i + 1 << " the number of route: " << TRAFFIC[i].NUMER << std::endl;
            are_found = true;
        }
    }
    if (!are_found) std::cout << "There are no such routes";
    std::cin.sync();
    std::cin.get();
    return 0;
}


Если нет - файл нужно сначала чем-то заполнить ... Как-нибудь вот так:
Код

std::ofstream file_out("d:\\autobusi.dat");
for (int i = 0; i < SIZE; ++i)
{
    MARSH buf;
    std::cout << "NUMBER: ";
    std::cin >> buf.NUMER;
    std::cout << "BEGST: ";
    std::cin >> buf.BEGST;
    std::cout << "TERM: ";
    std::cin >> buf.TERM;
    file_out.write(reinterpret_cast<char*>(&buf), sizeof(MARSH));
}
file_out.close();



--------------------
user posted image  
PM MAIL   Вверх
Goth
Дата 19.5.2007, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вместо "std::" нужно что-то подставить или что? Иначе компиллятор отказывается переваривать эту программу=)
PM MAIL   Вверх
zkv
Дата 19.5.2007, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(Goth @  19.5.2007,  10:08 Найти цитируемый пост)
Вместо "std::" нужно что-то подставить или что? Иначе компиллятор отказывается переваривать эту программу=) 

в следующий раз указывайте компилятор. std:: просто убрать (это пространство имен такое, если что smile ), а это:
Код

#include <iostream>
#include <string>
#include <fstream>

заменить на:
Код

#include <iostream.h>
#include <string.h>
#include <fstream.h>


Это сообщение отредактировал(а) zkv - 19.5.2007, 14:00
PM MAIL   Вверх
Xenon
Дата 19.5.2007, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



zkv, когда же наконец-то в институты/универы поставят нормальные компиляторы ... спасибо за поправку smile


--------------------
user posted image  
PM MAIL   Вверх
zkv
Дата 19.5.2007, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(Xenon @  19.5.2007,  14:14 Найти цитируемый пост)
zkv, когда же наконец-то в институты/универы поставят нормальные компиляторы 

наверное, сначала в них (в институтах) должны появиться преподаватели, которые этих компиляторов (нормальных) сами не будут бояться  smile  
PM MAIL   Вверх
Goth
Дата 19.5.2007, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Самое смешное, что дело удалением "std::" не закончилось. Компиллятор выдал целый букет ошибок;))) Ну, к примеру, Borland не признает тип string и тд. Может есть возможность у тов. Xenon'a переделать прогу под Borland C++ 3.1? А то остальные ошибки вообще не понятны=)) Буду оч благодарен)

З.Ы. а про универы верно подмечено;))

Это сообщение отредактировал(а) Goth - 19.5.2007, 18:57
PM MAIL   Вверх
Alexeis
Дата 19.5.2007, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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



Хм.. насколько я знаю в Borland C++ 3.1 нет поддержки STL. Так что работать не будет  smile 


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Goth
Дата 19.5.2007, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот я и говорю, что много непонятных мне и компиллятору "ошибок". Поэтому взываю к добрым людям;))
PM MAIL   Вверх
Xenon
Дата 19.5.2007, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Не дай бог у меня в универе будет борланд smile
Код

#include <iostream.h>
#include <string.h>
#include <fstream.h>

const int SIZE = 10;
const int MAX = 20;

struct MARSH
{
    char BEGST[MAX];
    char TERM[MAX];
    int NUMER;
    MARSH():NUMER(0)
};

void sort(MARSH arr[SIZE])
{
    for (int j = 1, i = 0; j < SIZE; ++j)
    {
        MARSH buf = arr[j];
        for (i = j - 1; i >= 0 && arr[i].NUMER > buf.NUMER; --i)
            arr[i + 1] = arr[i];
        arr[i + 1] = buf;
    }
}

int main(int argc, char* argv[])
{
    MARSH TRAFFIC[SIZE];
    char path[256] = { '\0' };
    cout << "Enter path to file: ";
    cin.getline(path, 256);
    ifstream file(path);
    if ( !file.is_open() )
    {
        cout << "Could not open file";
        cin.get();
        return -1;
    }
    for (int i = 0; !file.eof() && i < SIZE; ++i) file.read(reinterpret_cast<char*>(&TRAFFIC[i]), sizeof(TRAFFIC));
    sort(TRAFFIC);
    char BEGST[MAX] = { '\0' };
    char TERM[MAX] = { '\0' };
    cout << "Enter BEGST: ";
    cin.getline(BEGST, MAX);
    cout << "Enter TERM: ";
    cin.getline(TERM, MAX);
    bool are_found = false;
    for (int i = 0; i < SIZE; ++i)
    {
        if ( !( strcmp(TRAFFIC[i].BEGST, BEGST) || strcmp(TRAFFIC[i].TERM, TERM) ) )
        {
            cout << i + 1 << " the number of route: " << TRAFFIC[i].NUMER << endl;
            are_found = true;
        }
    }
    if (!are_found) cout << "There are no such routes";
    cin.sync();
    cin.get();
    return 0;
}



--------------------
user posted image  
PM MAIL   Вверх
Goth
Дата 19.5.2007, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



И опять компиллятор выдает море ошибок. Сейчас посмотрим, что там....
PM MAIL   Вверх
zkv
Дата 19.5.2007, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



вот прога Xenon'a, которая точно(нашел даже этот раритет smile) запускается в борланде, но не знаю насколько корректно работает, проверяй:
Код

#include <iostream.h>
#include <string.h>
#include <fstream.h>
//using namespace std;

const int SIZE = 10;
const int STRINGSIZE = 20;

struct MARSH
{
    char BEGST[STRINGSIZE];
    char TERM[STRINGSIZE];
    int NUMER;
    MARSH()
    {
        strcpy( BEGST, "N/A" );
        strcpy( TERM, "N/A" );
        NUMER = 0;    
    }
};
void sort(MARSH arr[SIZE])
{
    for (int j = 1, i = 0; j < SIZE; ++j)
    {
        MARSH buf = arr[j];
        for (i = j - 1; i >= 0 && arr[i].NUMER > buf.NUMER; --i)
            arr[i + 1] = arr[i];
        arr[i + 1] = buf;
    }
}
int main(int argc, char* argv[])
{
    MARSH TRAFFIC[SIZE];
    char path[STRINGSIZE];
    cout << "Enter path to file: ";
    cin.getline( path, STRINGSIZE );
    ifstream file( path );
    if ( !file )
    {
        cout << "Could not open file";
        cin.get();
    return -1;
    }
    for (int i = 0; !file.eof() && i < SIZE; ++i) file.read( (char*)(&TRAFFIC[i]), sizeof(TRAFFIC));
    sort(TRAFFIC);
    char BEGST[STRINGSIZE];
    char TERM[STRINGSIZE];
//    string TERM;
    cout << "Enter BEGST: ";
    cin.getline(BEGST, STRINGSIZE);
    cout << "Enter TERM: ";
    cin.getline(TERM, STRINGSIZE);
    int are_found = 0;
    for (i = 0; i < SIZE; ++i)
    {
    if (TRAFFIC[i].BEGST == BEGST && TRAFFIC[i].TERM == TERM)
    {
        cout << i + 1 << " the number of route: " << TRAFFIC[i].NUMER << endl;
        are_found = 1;
    }
    }
    if (!are_found) cout << "There are no such routes";
//    std::cin.sync();
    cin.get();
    return 0;
}


Это сообщение отредактировал(а) zkv - 19.5.2007, 21:42
PM MAIL   Вверх
Goth
Дата 19.5.2007, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Эта программа ничуть не лучше=) Может я, конечно, чего-то недопонимаю, но компиллятор опять же выводит несуразные замечание (хотч их всего 2!), а именно "undefined symbols ..." ... Даже не знаю, что с этим можно сделать ;)
PM MAIL   Вверх
zkv
Дата 19.5.2007, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Goth, этот код я проверял на Borland C++ Version 3.1, он только два ворнинга выдает несущественных (обеспокоен тем что не пользуемся argc и argv). Так что показывай на какие выдает ошибки, и в каких строках.
PM MAIL   Вверх
Goth
Дата 20.5.2007, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Компилится нормально, но .EXE файл не линкуется... Привожу точный текст ошибки "Linker error: Undefined symbol _vector_new_(void far*, unsigned int, unsigned long, unsigned int,...) in module <имя файла с текстом программы>.CPP" 
И вот эта: "Linker error: Undefined istream::getline(char far*, int, unsigned char) in module <имя файла с текстом программы>.CPP"
Никогда с таким не сталкивался. Может я что-то не так делаю? :)
PM MAIL   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

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


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

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

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

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


 




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


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

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