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

Поиск:

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



****


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

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



Goth, к либ файлам в директориях пути нормально прописаны? Посмотри в файловом менеджере (проводнике например) сначала, где папка с файлами у тебя с расширениями lib, по идее она LIB должна называться, потом пропиши путь к этим файлам в Directories, если не получится,  то тебе не повезло  smile
PM MAIL   Вверх
Goth
Дата 20.5.2007, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Папка с .lib файлами так и называется. В Directories путь прописан к этой папке. Все остальные проги нормально компиллятся. Ничего не понимаю...
PM MAIL   Вверх
dizzy1984
Дата 23.5.2007, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Options->Linker->Libraries->Standart Run-time Libraries вместо None поставить Static

Цитата(Alexeis @  19.5.2007,  21:13 Найти цитируемый пост)
Хм.. насколько я знаю в Borland C++ 3.1 нет поддержки STL. Так что работать не будет   

Такой, какой мы ее знаем на текущий день нет - но было некое подобие.
Были все потоковые классы - fstream, iostream.
Существовали контейнерные классы - Array(теперь vector), Queue, List, правда они не были шаблонными.

Различия по примеру Xenona.
std нет, т.к нет концепции о пространстве имен.
Типа string нет, зато есть тип String, правда с другими методами.
Нет типа bool и ключевых слов false и true
reinterpret_cast и иже с ним также отсутствуют

Все остальное портабельно


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


Новичок



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

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



так, действительно запускается (видимо уж совсем устарел мой С++, скачал с бОльшим кол-вом библиотек). Но вот что должен из себя представлять файл для считывания? Какова должна быть структура записи информации в нем?  Перепробовал уже множество вариантов. И как можно вывести на экран уже отсортированный массив структур?

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


Эксперт
***


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

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



Goth, я уже приводил функцию формированию файла на основе данных. Иначе никак, ведь формат данных бинарен, поэтому ручками не получится.
Вот та самая функция:
Код

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


Вывод? Везде, где угодно после функции sort():
Код

for (int i = 0; i < SIZE; ++i)
{
    cout << "BEGST: " << TRAFFIC[i].BEGST << endl;
    cout << "TERM: " << TRAFFIC[i].TERM << endl;
    cout << "NUMBER: " << TRAFFIC[i].NUMER << endl;
}



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


Новичок



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

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



Понятно. Только проблема вот в чем: мой компиллятор не признает 11ую строку первого кода (что не удивительно). Чем можно заменить её в Borland?
PM MAIL   Вверх
zkv
Дата 24.5.2007, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(Goth @  24.5.2007,  14:10 Найти цитируемый пост)
Понятно. Только проблема вот в чем: мой компиллятор не признает 11ую строку первого кода (что не удивительно). Чем можно заменить её в Borland?

reinterpret_cast - это не понимает? меняй 
Код

reinterpret_cast<char*>(&buf)

на
Код

(char *)&buf

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


Новичок



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

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



Всё равно не то... Но уже хотя бы запускается. Файл создается криво, далее не читается. А я уж думал сегодня отмечу задачу " как решенную" =))
PM MAIL   Вверх
Xenon
Дата 24.5.2007, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Не знаю как ты делал, но у меня все работает:
Код

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

const int SIZE = 2;
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[])
{
    ofstream file_out("d:\\autobusi.dat");
    int i = 0;
    for (i = 0; i < SIZE; ++i)
    {
        MARSH buf;
        cout << "NUMBER: ";
        cin >> buf.NUMER;
        cout << "BEGST: ";
        cin >> buf.BEGST;
        cout << "TERM: ";
        cin >> buf.TERM;
        file_out.write((char*)&buf, sizeof(MARSH));
    }
    file_out.close();
    cin.ignore();
    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 (i = 0; !file.eof() && i < SIZE; ++i) file.read( (char*)(&TRAFFIC[i]), sizeof(TRAFFIC));
    sort(TRAFFIC);
    char BEGST[STRINGSIZE];
    char TERM[STRINGSIZE];
    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\n";
    cout << "All routes:\n";
    for (i = 0; i < SIZE; ++i)
    {
        cout << "BEGST: " << TRAFFIC[i].BEGST << endl;
        cout << "TERM: " << TRAFFIC[i].TERM << endl;
        cout << "NUMBER: " << TRAFFIC[i].NUMER << endl;
    }
    cin.get();
    return 0;
}



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


Новичок



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

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



Ну чтож, могу отчитаться. Немного поразмыслив над всеми представленными кодами, я добавил кое-что в последний код тов. Xenon (а именно сделал поиск номера маршрута по начальному или конечному пути, т.к. предоставленный код отказывался всё это осуществлять), и в результате получилось нечто следующее:
Код

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

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()
{
    ofstream file_out("d:\\autobusi.dat");
    int i, BEGIN(1), TERMIN(1);
    for (i = 0; i < SIZE; ++i)
    {
        MARSH buf;
        cout << "\n NUMBER: ";
        cin >> buf.NUMER;
        cout << "BEGST: ";
        cin >> buf.BEGST;
        cout << "TERM: ";
        cin >> buf.TERM;
        file_out.write((char*)&buf, sizeof(MARSH));
    }
    file_out.close();
    cin.ignore();
    MARSH TRAFFIC[SIZE];
    char path[STRINGSIZE];
    cout << "\n Enter path to file: ";
    cin.getline( path, STRINGSIZE );
    ifstream file( path );
    if ( !file )
    {
        cout << "\n Could not open file";
        cin.get();
    }
    for (i = 0; !file.eof() && i < SIZE; ++i)
    file.read( (char*)(&TRAFFIC[i]), sizeof(TRAFFIC));
    sort(TRAFFIC);
    char BEGST[STRINGSIZE];
    char TERM[STRINGSIZE];
    cout << "\nEnter BEGST: ";
    cin.getline(BEGST, STRINGSIZE);
    cout << "Enter TERM: ";
    cin.getline(TERM, STRINGSIZE);
    for (i=0; i<SIZE; ++i)
    {
        BEGIN=strcmpi(BEGST, TRAFFIC[i].BEGST);
        TERMIN=strcmpi(TERM, TRAFFIC[i].TERM);
        if (BEGIN==0 )
        {
            cout << "\nThe number of route with beginning in " << BEGST << " is " << TRAFFIC[i].NUMER << endl;
        }
        if(TERMIN==0)
        {
            cout << "The number of route with termination in " << TERM << " is " << TRAFFIC[i].NUMER << endl;
        }
    }
    cout << "\nThere are no more such routes";
    for (i = 0; i < SIZE; ++i)
    {
        cout << "\n NUMBER: " << TRAFFIC[i].NUMER << endl;
        cout << "BEGST: " << TRAFFIC[i].BEGST << endl;
        cout << "TERM: " << TRAFFIC[i].TERM << endl;
    }
    cin.get();
    return 0;
}



В связи с этим выражаю благодарность следующим личностям: Xenon, zkv.  =)))
PM MAIL   Вверх
Xenon
Дата 26.5.2007, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Goth, 
Код

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

const int SIZE = 2;
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[])
{
    ofstream file_out("d:\\autobusi.dat");
    int i = 0;
    for (i = 0; i < SIZE; ++i)
    {
        MARSH buf;
        cout << "NUMBER: ";
        cin >> buf.NUMER;
        cout << "BEGST: ";
        cin >> buf.BEGST;
        cout << "TERM: ";
        cin >> buf.TERM;
        file_out.write((char*)&buf, sizeof(MARSH));
    }
    file_out.close();
    cin.ignore();
    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 (i = 0; !file.eof() && i < SIZE; ++i) file.read( (char*)(&TRAFFIC[i]), sizeof(TRAFFIC));
    sort(TRAFFIC);
    char BEGST[STRINGSIZE];
    char TERM[STRINGSIZE];
    cout << "Enter BEGST: ";
    cin.getline(BEGST, STRINGSIZE);
    cout << "Enter TERM: ";
    cin.getline(TERM, STRINGSIZE);
    int are_found = 0;
    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 = 1;
        }
    }
    if (!are_found) cout << "There are no such routes\n";
    cout << "All routes:\n";
    for (i = 0; i < SIZE; ++i)
    {
        cout << "BEGST: " << TRAFFIC[i].BEGST << endl;
        cout << "TERM: " << TRAFFIC[i].TERM << endl;
        cout << "NUMBER: " << TRAFFIC[i].NUMER << endl;
    }
    cin.get();
    return 0;
}


Так работает?


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


Новичок



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

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



Это чисто из спортивного интереса?smile К слову, код, приведенный мной, еще меня не разочаровал=)

З.Ы. Xenon, опять хромает поиск номера маршрута по началу и концу пути...

Это сообщение отредактировал(а) Goth - 26.5.2007, 15:03
PM MAIL   Вверх
Xenon
Дата 26.5.2007, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Goth, чего- то у меня даже в голове не укладывается ... вроде же правильно все: если результат первого или второго сравнения равно -1 или 1, то уже автоматом выражение в скобках принимает true, а операцией инверсии '!' получается false. А если и то и другое сравнение вернуло 0, значит и та и другая строка равны, в скобках получится false, а из-за '!' получится true ... Ну правильно кажись все.


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


Новичок



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

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



У меня была похожая задача
1. Структура с именем MARSH содержит следующие поля:
-    название начального пункта маршрута;
-    название конечного пункта маршрута;
-    номер маршрута.
2. Условие поиска – вывод на экран информации о маршруте, номер которого введен с клавиатуры.

вот решение
а под твой вариант переделать элементарно

Код

#include <iostream.h>
#include <stdlib.h>  // exit()
#include <iomanip.h> // setw()
#include <string.h>  // strcmp()
#define NM 20
#define KM 20
#define Num 20

//------------------------------------------------------------------------

struct MARSH
{
char nachalo [NM];
char kon [KM];
char nomer [Num];
};

//-------------------------------------------------------------------------

// прототипы функций
void vvod ();
void prosmotr ();
void tabl();
void poisk () ;
//-------------------------------------------------------------------------

const Kol =10;
MARSH array[Kol]; //массив

//------------------------------------------------------------------------

void main ()
{
  vvod (); // Заполняем данные о маршрутах
  cout << "Информация о всех маршрутах:\n";
  tabl();  // выводим шапку
  prosmotr (); // Выводим все данные на экран
  poisk () ;
  
}


//------------------------------------------------------------------------
// Определение функции ввода данных
void vvod ()  
{  
  cout <<"Ввод информации о 10 маршрутах:\n";
   
    for( int i=0; i<Kol; i++ )
    {
      cout << "Заполните массив [ " << i << " ].\n" ;
      cout << "\nВведите название начального пункта маршрута: " ;
      cin >> array[ i ].nachalo ;
      cout << "\nВведите название конечного пункта маршрута: " ; 
      cin >> array[ i ].kon ;
      cout << "\nВведите номер маршрута: " ; 
      cin >> array[ i ].nomer ;
      cout << "\n\n"; 
   }
} 


//------------------------------------------------------------------------ 

// Определение функции вывода на экран
void prosmotr ()
{ 
  
  for( int i=0; i<Kol; i++ )
  { 
    cout.setf(ios::left); // Выравниваем по левому краю
    cout <<"|"<<setw(22)<<array[ i ].nachalo<<"|"<<setw(22)<<array[i].kon<<"|";
    cout.setf(ios::right);// Выравниваем по правому краю
    cout<<setw(22)<<array[i].nomer<<"|\n";
    cout << "|--------------------------------------------------------------------|\n";   
  }
   
}

  
 //------------------------------------------------------------------------
// определение функции вывода на экран шапки таблицы
void tabl()
{
  cout <<"|--------------------------------------------------------------------|\n";
  cout <<"|  Начало маршрута     |   Конец маршрута     |    Номер маршрута    |\n";
  cout <<"|----------------------|----------------------|----------------------|\n";
} 


//--------------------------------------------------------------------------
// Определение функции поиска
void poisk ()
{
  char nomer[Num];
  
  cout << "\nВведите номер маршрута: " ;
  cin >> nomer ;
  cout<<"\nВывод информации об искомом маршруте: \n";
  
     for( int i=0; i<Kol; i++ )
     {
       if (strcmp(array[i].nomer , nomer) == 0)
       {
         tabl();  // вывод на экран шапки таблицы 
     cout.setf(ios::left); // Выравниваем по левому краю
         cout <<"|"<<setw(22)<<array[ i ].nachalo<<"|"<<setw(22)<<array[i].kon<<"|";
         cout.setf(ios::right);// Выравниваем по правому краю
         cout<<setw(22)<<array[i].nomer<<"|\n";   
         cout << "|--------------------------------------------------------------------|\n";  
         cin.sync();
         cin.get();
         exit(0);
       } 
     }
  cout << "Нет такого маршрута!" << endl;
  cin.sync();
  cin.get();
}




 smile 
PM MAIL ICQ   Вверх
Goth
Дата 27.5.2007, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Xenon, насколько я понял, сравнить начало и конец пути можно только с помощью strcmpi, точную формулировку не помню, но вроде как в таком случае не учитывается "как" мы записывали поля структуры в файл (что-то там с двоичной системой связано). А вот насчет strcmp, которую используешь, не уверен. 

Irad, вся проблема заключалась как раз в записи в файл и считывании с файла полей структуры, а остальное не так уж проблемно=)))
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

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


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

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

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

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


 




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


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

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