Форум программистов, компьютерный форум CyberForum.ru

структуру AEROFLOT - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.79
mr_aleks
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 118
09.04.2012, 18:59     структуру AEROFLOT #1
Сформировать структуру AEROFLOT для хранения следующей информации:

· номер рейса;

· название пункта назначения рейса;

· тип самолета;

· цена билета.



Ввести с клавиатуры информацию для нескольких рейсов (к-во заранее не определено) и сохранить ее в бинарном файле "5.dat".

Подготовьте файл, в котором будет не менее 20 корректных записей.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <stdio.h>
#include <iomanip>
using namespace std;
void main(void)
{
    struct AEROFLOT
    {
        int reis; char punkt[100];
        char tip[100]; int cena;
    }*px;
    int size;
    char punkt[100];
    cout << "Vvedite kolichestvo struktur: ";
    cin >> size; cout << "--------------------" << endl;
    AEROFLOT *pxas=new AEROFLOT[size]; px=&pxas[0];
    int i; FILE *f1;
    f1=fopen("5.dat","wb");
    for ( i=0; i<size; i++)
    {
        cin.ignore();
        cout << "Vvedite dannye: " << i+1 << endl;
        cout << "Nazvanie punkta naznachenija rejsa: "; gets(px[i].punkt); 
        cout << "Tip samoleta: "; gets(px[i].tip); 
        cout << "Nomer rejsa: "; cin >> px[i].reis;
        cout << "Cena bileta: ";  cin >> px[i].cena;
        cout << "--------------------" << endl;
        fwrite(&px[i],sizeof(AEROFLOT),1,f1);
    } fclose(f1);
    system("PAUSE");
}
Но она не правильно по мойму... т.к. не правильно выводит записи из файла в след. проге
Толи что то в обьявлении типов или еще где (
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mr_aleks
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 118
11.04.2012, 02:24  [ТС]     структуру AEROFLOT #41
Нет конечно там 5 записей я сделал,
Из за дания вот так звучит
Подготовьте массив указателей на AEROFLOT на 50 элементов.

Считайте все записи из файла "5.dat" .

Kuzia domovenok, да да! так что там не так?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
p_r_a_g_m_a
 Аватар для p_r_a_g_m_a
108 / 60 / 17
Регистрация: 08.03.2012
Сообщений: 208
Завершенные тесты: 1
11.04.2012, 02:26     структуру AEROFLOT #42
Да просто в заголовке файла сохранять кол-во записываемых структур.

Цитата Сообщение от mr_aleks Посмотреть сообщение
cout << "Vvedite kolichestvo struktur: ";
* * cin >> size; cout << "--------------------" << endl;
fwrite(&size, 4, 1, file);
Цитата Сообщение от mr_aleks Посмотреть сообщение
fwrite(&px[i],sizeof(AEROFLOT),1,f1);
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
11.04.2012, 02:29     структуру AEROFLOT #43
можно считывать, пока не EOF

не уверен, но кажется это так
C
1
while(fread(arr[0]+i, sizeof(struct aeroflot), size, f)!=EOF)i++;
p_r_a_g_m_a
 Аватар для p_r_a_g_m_a
108 / 60 / 17
Регистрация: 08.03.2012
Сообщений: 208
Завершенные тесты: 1
11.04.2012, 02:33     структуру AEROFLOT #44
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
можно считывать, пока не EOF
Перед тем как прочитать структуры, нужно выделить память под них. Если все время выделять 50, то это может быть нерациональное использование памяти. Просто при создании файла нужно записать сколько структур в него было занесено. Ведь все-равно программа в начале это запрашивает.
mr_aleks
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 118
11.04.2012, 02:38  [ТС]     структуру AEROFLOT #45
p_r_a_g_m_a, не понимаю записи
Цитата Сообщение от p_r_a_g_m_a Посмотреть сообщение
* * cin
p_r_a_g_m_a
 Аватар для p_r_a_g_m_a
108 / 60 / 17
Регистрация: 08.03.2012
Сообщений: 208
Завершенные тесты: 1
11.04.2012, 02:41     структуру AEROFLOT #46
Цитата Сообщение от mr_aleks Посмотреть сообщение
p_r_a_g_m_a, не понимаю записи
Это каракули копипасты)
C++
1
2
3
4
5
6
cout << "Vvedite kolichestvo struktur: ";
cin>>size;
....
fwrite(&size, 4, 1, file);
....
fwrite(&px[i], sizeof(AEROFLOT), 1, file);
Ну а при чтении:
C++
1
2
3
4
5
6
fread(&size, 4, 1, file);
AEROFLOT* = new AEROFLOT[size];
....
for(i = 0; i < size; i++)
{
  fread(arr[0]+i, sizeof(struct aeroflot), 1, file);
mr_aleks
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 118
11.04.2012, 02:44  [ТС]     структуру AEROFLOT #47
p_r_a_g_m_a, сделал так, запускаю как только пишу сколько структур я буду вводить прога выкидывает ошибку !
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
11.04.2012, 02:50     структуру AEROFLOT #48
Цитата Сообщение от p_r_a_g_m_a Посмотреть сообщение
Перед тем как прочитать структуры, нужно выделить память под них. Если все время выделять 50, то это может быть нерациональное использование памяти. Просто при создании файла нужно записать сколько структур в него было занесено. Ведь все-равно программа в начале это запрашивает.
Я понял, но если в начало файла не записан его размер, то нужно всё-таки его открыть и пройти по нему, узнавая размер.
Во! Вспомнил способ
C
1
2
fseek (f, 0, SEEK_END);
    size=ftell (f);
Добавлено через 4 минуты
fseek (f, 0, SEEK_END);//прокрутка в конец файла
size=ftell (f);//узнаём размер
fseek (f, 0, SEEK_SET);//прокрутка назад в начало
p_r_a_g_m_a
 Аватар для p_r_a_g_m_a
108 / 60 / 17
Регистрация: 08.03.2012
Сообщений: 208
Завершенные тесты: 1
11.04.2012, 02:50     структуру AEROFLOT #49
Цитата Сообщение от mr_aleks Посмотреть сообщение
p_r_a_g_m_a, сделал так, запускаю как только пишу сколько структур я буду вводить прога выкидывает ошибку !
Выложи код чели... Хз что у тебя сейчас там..

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Я понял, но если в начало файла не записан его размер, то нужно всё-таки его открыть и пройти по нему, узнавая размер.
То есть так?:
C++
1
2
3
fseek (pFile, 0, SEEK_END);
size=ftell (pFile);
size/sizeof(AEROFLOT)  == кол-во структур?
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
fseek (f, 0, SEEK_END);//прокрутка в конец файла
size=ftell (f);//узнаём размер
fseek (f, 0, SEEK_SET);//прокрутка назад в начало
Да-да я знаю)
mr_aleks
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 118
11.04.2012, 02:51  [ТС]     структуру AEROFLOT #50
p_r_a_g_m_a,

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <iostream>
#include <stdio.h>
#include <iomanip>
#define STRLEN 20
using namespace std;
#pragma pack (1)
typedef struct
{
    char punkt[STRLEN];
    int reis;
    char tip[STRLEN];
    int cena;
} AEROFLOT, *LPAEROFLOT;
#pragma pack()
int main(int argc, char** argv)
{
    setlocale(LC_ALL, "Russian");
    int size;
    cout << "Vvedite kolichestvo struktur: ";
    cin >> size;
 
    cout << "--------------------" << endl;
    
    LPAEROFLOT pxas = new AEROFLOT[size];
    int index;
    FILE* file;
    fwrite(&size, 4, 1, file);
    if((file = fopen("D:\\5.dat", "wb")) == NULL) { printf("Oshibka pri otkrytii fajla.\n"); exit(1); }
    for (index = 0; index < size; index++)
    {
        cin.ignore();
        cout << "Vvedite dannye: " << index + 1 << endl;
        cout << "Nazvanie punkta naznachenija rejsa: "; gets(pxas[index].punkt); 
        cout << "Tip samoleta: "; gets(pxas[index].tip); 
        cout << "Nomer rejsa: "; cin >> pxas[index].reis;
        cout << "Cena bileta: ";  cin >> pxas[index].cena;
        cout << "--------------------" << endl;
 
        fwrite(&pxas[index], sizeof(AEROFLOT), 1, file);
    }
    fclose(file);
    delete[] pxas;
    system("PAUSE");
    return EXIT_SUCCESS;
}
p_r_a_g_m_a
 Аватар для p_r_a_g_m_a
108 / 60 / 17
Регистрация: 08.03.2012
Сообщений: 208
Завершенные тесты: 1
11.04.2012, 02:55     структуру AEROFLOT #51
Ты пытаешься записать в файл не открыв его
mr_aleks
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 118
11.04.2012, 03:03  [ТС]     структуру AEROFLOT #52
кароче сделал так структуру, потом в проге где сортировка, выдает опять туже ошибку, если поставить
int size=3;
Я ввел в пред. проге 3 структуры то все ок а если стоит 50 похоже такая ошибка будет! в чем тут дело?)

Добавлено через 2 минуты
Проверил и с предыдущем дат файлом если поставить 5 в size все норм без ошибки (этот дат компилировался без записи кол. структур в файл)
p_r_a_g_m_a
 Аватар для p_r_a_g_m_a
108 / 60 / 17
Регистрация: 08.03.2012
Сообщений: 208
Завершенные тесты: 1
11.04.2012, 03:03     структуру AEROFLOT #53
Цитата Сообщение от mr_aleks Посмотреть сообщение
кароче сделал так структуру, потом в проге где сортировка, выдает опять туже ошибку, если поставить
int size=3;
Я ввел в пред. проге 3 структуры то все ок а если стоит 50 похоже такая ошибка будет! в чем тут дело?)
Выложи код 2-й проги =D
mr_aleks
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 118
11.04.2012, 03:09  [ТС]     структуру AEROFLOT #54
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <stdio.h>
#include <iomanip>
#define STRLEN 20
using namespace std;
#pragma pack (1)
struct aeroflot
{
    char punkt[STRLEN];
    int reis;
    char tip[STRLEN];
    int cena;
};
 
struct aeroflot** arr;
struct aeroflot* tmp;
 
int main()
{
 
    int size=5;///ÓÊÀÆÈ ÂÅÐÍÎÅ ÊÎËÈ×ÅÑÒÂÎ ÇÀÏÈÑÅÉ Г‚ ÔÀÉËÅ!!!
    arr=new struct aeroflot*[size];
    arr[0]=new struct aeroflot[size];
    for (int i=0; i<size; i++) arr[i]=arr[0]+i;
 
     FILE* f;
if((f = fopen("D:\\5.dat", "rb+")) == NULL) { printf("Oshibka pri otkrytii fajla.\n"); exit(1); }
for (i=0; i<size; i++) 
fread(arr[0]+i, sizeof(struct aeroflot), size, f);
 fclose(f);
for (i=0; i<size; i++) 
   for (int j=0; j<size-i-1; j++)            //îáû÷Г*ûé ïóçûð¸ê
      if ( (arr[j]->reis)>(arr[j+1]->reis) ){
          tmp=arr[j];
          arr[j]=arr[j+1];
          arr[j+1]=tmp;
       }
 
 
for ( i=0; i<size; i++) 
{
              cout << "Po nomeru: " << arr[i]->reis << endl;
            cout << "--------------------" << endl;
      
}
 
delete[] arr[0];
delete[] arr;
}
p_r_a_g_m_a
 Аватар для p_r_a_g_m_a
108 / 60 / 17
Регистрация: 08.03.2012
Сообщений: 208
Завершенные тесты: 1
11.04.2012, 03:15     структуру AEROFLOT #55
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <iostream>
#include <stdio.h>
#include <iomanip>
#define STRLEN 20
using namespace std;
#pragma pack (1)
struct aeroflot
{
    char punkt[STRLEN];
    int reis;
    char tip[STRLEN];
    int cena;
};
 
struct aeroflot** arr;
struct aeroflot* tmp;
 
int main()
{
 
    int size, i;
    FILE* f;
    if((f = fopen("D:\\5.dat", "rb+")) == NULL) { printf("Oshibka pri otkrytii fajla.\n"); exit(1); }
    fread(&size, 4, 1, f);
    arr=new struct aeroflot*[size];
    arr[0]=new struct aeroflot[size];
    for (i=0; i<size; i++) arr[i]=arr[0]+i;
 
    for (i=0; i<size; i++) 
      fread(arr[0]+i, sizeof(struct aeroflot), size, f);
    fclose(f);
    for (i=0; i<size; i++) 
        for (int j=0; j<size-i-1; j++)            //обычный пузырёк
          if ( (arr[j]->reis)>(arr[j+1]->reis) ){
              tmp=arr[j];
              arr[j]=arr[j+1];
              arr[j+1]=tmp;
           }
 
 
    for ( i=0; i<size; i++) 
    {
                  cout << "Po nomeru: " << arr[i]->reis << endl;
                cout << "--------------------" << endl;
      
    }
 
    delete[] arr[0];
    delete[] arr;
}
mr_aleks
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 118
11.04.2012, 03:19  [ТС]     структуру AEROFLOT #56
Сразу ошибку выбивает
p_r_a_g_m_a
 Аватар для p_r_a_g_m_a
108 / 60 / 17
Регистрация: 08.03.2012
Сообщений: 208
Завершенные тесты: 1
11.04.2012, 03:34     структуру AEROFLOT #57
Цитата Сообщение от mr_aleks Посмотреть сообщение
Сразу ошибку выбивает
Значит не тот дат файл. Нашел еще пару ошибок, но я думаю это не из-за них:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <iostream>
#include <stdio.h>
#include <iomanip>
#define STRLEN 20
using namespace std;
 
#pragma pack (1)
struct aeroflot
{
    char punkt[STRLEN];
    int reis;
    char tip[STRLEN];
    int cena;
};
#pragma pack ()
 
struct aeroflot** arr;
struct aeroflot* tmp;
 
int main()
{
 
    int size, i;
    FILE* f;
 
    if((f = fopen("D:\\5.dat", "rb+")) == NULL) { printf("Oshibka pri otkrytii fajla.\n"); exit(1); }
    fread(&size, 4, 1, f);
 
    arr=new struct aeroflot*[size];
    arr[0]=new struct aeroflot[size];
 
    for (i=0; i<size; i++) arr[i]=arr[0]+i;
 
    for (i=0; i<size; i++) 
      fread(arr[0]+i, sizeof(struct aeroflot), 1, f);
    fclose(f);
 
    for (i=0; i<size; i++) 
        for (int j=0; j<size-i-1; j++)            //обычный пузырёк
          if ( (arr[j]->reis)>(arr[j+1]->reis) ){
              tmp=arr[j];
              arr[j]=arr[j+1];
              arr[j+1]=tmp;
           }
 
 
    for ( i=0; i<size; i++) 
    {
                  cout << "Po nomeru: " << arr[i]->reis << endl;
                cout << "--------------------" << endl;
      
    }
 
    delete[] arr[0];
    delete[] arr;
    system("PAUSE");
    return EXIT_SUCCESS;
}
mr_aleks
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 118
11.04.2012, 19:16  [ТС]     структуру AEROFLOT #58
Не знаю что вы там нашли но эти коды не работают, сразу ошибку выкидывают!
и дат файл тот
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
11.04.2012, 19:31     структуру AEROFLOT #59
А пошагово слабо проверить, в каком месте вылетает?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2012, 23:26     структуру AEROFLOT
Еще ссылки по теме:

C++ Описать структуру с именем AEROFLOT
C++ Описать структуру с именем AEROFLOT
Описать структуру Aeroflot C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
mr_aleks
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 118
11.04.2012, 23:26  [ТС]     структуру AEROFLOT #60
код компилируется все ок, вот когда прога запускается вылаетает с ошибкой хз почему (

Добавлено через 3 часа 7 минут
кароче дело в переменной size, как я понял должно быть там столько же сколько и записей(
Yandex
Объявления
11.04.2012, 23:26     структуру AEROFLOT
Ответ Создать тему
Опции темы

Текущее время: 20:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru