Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.79
mr_aleks
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 131
#1

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

09.04.2012, 18:59. Просмотров 3765. Ответов 64
Метки нет (Все метки)

Сформировать структуру 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");
}
Но она не правильно по мойму... т.к. не правильно выводит записи из файла в след. проге
Толи что то в обьявлении типов или еще где (
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2012, 18:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос структуру AEROFLOT (C++):

Описать структуру Aeroflot - C++
Описать структуру с именем AEROFLOT,которая имеет следующие поля: 1 - название пункта назначения рейса; 2 - номер рейса; 3 - тип...

Описать структуру AEROFLOT - C++
1. Описать структуру с именем AEROFLOT, содержащую следующие поля: - название пункта назначения рейса; - номер рейса; - тип самолета....

Описать структуру с именем AEROFLOT - C++
Описать структуру с именем AEROFLOT, содержащую следующие поля: □ название пункта назначения рейса; □ номер рейса; ...

Описать структуру с именем AEROFLOT - C++
1. Описать структуру с именем AEROFLOT, содержащую следующие поля: - название пункта назначения рейса; - номер рейса; - тип самолета....

Описать структуру с именем AEROFLOT - C++
Описать структуру с именем AEROFLOT, содержащую следующие поля: • название пункта назначения рейса; • номер рейса; • тип самолета.

Описать структуру с именем AEROFLOT - C++
1. Описать структуру с именем AEROFLOT, содержащую следующие поля: a)название пункта назначения рейса; б)номер рейса; в)тип...

64
p_r_a_g_m_a
110 / 62 / 18
Регистрация: 08.03.2012
Сообщений: 211
Завершенные тесты: 1
11.04.2012, 02:41 #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);
0
mr_aleks
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 131
11.04.2012, 02:44  [ТС] #47
p_r_a_g_m_a, сделал так, запускаю как только пишу сколько структур я буду вводить прога выкидывает ошибку !
0
Kuzia domovenok
1951 / 1804 / 140
Регистрация: 25.03.2012
Сообщений: 6,245
Записей в блоге: 1
11.04.2012, 02:50 #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);//прокрутка назад в начало
0
p_r_a_g_m_a
110 / 62 / 18
Регистрация: 08.03.2012
Сообщений: 211
Завершенные тесты: 1
11.04.2012, 02:50 #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);//прокрутка назад в начало
Да-да я знаю)
0
mr_aleks
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 131
11.04.2012, 02:51  [ТС] #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;
}
0
p_r_a_g_m_a
110 / 62 / 18
Регистрация: 08.03.2012
Сообщений: 211
Завершенные тесты: 1
11.04.2012, 02:55 #51
Ты пытаешься записать в файл не открыв его
0
mr_aleks
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 131
11.04.2012, 03:03  [ТС] #52
кароче сделал так структуру, потом в проге где сортировка, выдает опять туже ошибку, если поставить
int size=3;
Я ввел в пред. проге 3 структуры то все ок а если стоит 50 похоже такая ошибка будет! в чем тут дело?)

Добавлено через 2 минуты
Проверил и с предыдущем дат файлом если поставить 5 в size все норм без ошибки (этот дат компилировался без записи кол. структур в файл)
0
p_r_a_g_m_a
110 / 62 / 18
Регистрация: 08.03.2012
Сообщений: 211
Завершенные тесты: 1
11.04.2012, 03:03 #53
Цитата Сообщение от mr_aleks Посмотреть сообщение
кароче сделал так структуру, потом в проге где сортировка, выдает опять туже ошибку, если поставить
int size=3;
Я ввел в пред. проге 3 структуры то все ок а если стоит 50 похоже такая ошибка будет! в чем тут дело?)
Выложи код 2-й проги =D
0
mr_aleks
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 131
11.04.2012, 03:09  [ТС] #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;
}
0
p_r_a_g_m_a
110 / 62 / 18
Регистрация: 08.03.2012
Сообщений: 211
Завершенные тесты: 1
11.04.2012, 03:15 #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;
}
0
mr_aleks
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 131
11.04.2012, 03:19  [ТС] #56
Сразу ошибку выбивает
0
p_r_a_g_m_a
110 / 62 / 18
Регистрация: 08.03.2012
Сообщений: 211
Завершенные тесты: 1
11.04.2012, 03:34 #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;
}
0
mr_aleks
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 131
11.04.2012, 19:16  [ТС] #58
Не знаю что вы там нашли но эти коды не работают, сразу ошибку выкидывают!
и дат файл тот
0
Kuzia domovenok
1951 / 1804 / 140
Регистрация: 25.03.2012
Сообщений: 6,245
Записей в блоге: 1
11.04.2012, 19:31 #59
А пошагово слабо проверить, в каком месте вылетает?
0
mr_aleks
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 131
11.04.2012, 23:26  [ТС] #60
код компилируется все ок, вот когда прога запускается вылаетает с ошибкой хз почему (

Добавлено через 3 часа 7 минут
кароче дело в переменной size, как я понял должно быть там столько же сколько и записей(
0
11.04.2012, 23:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2012, 23:26
Привет! Вот еще темы с ответами:

Описать структуру с именем AEROFLOT - C++
Помогите пожалуйста, очень прошу. Описать структуру с именем AEROFLOT, содержащую следующие поля: название пункта назначения рейса,...

Описать структуру с именем Aeroflot - C++
Описать структуру с именем AEROFLOT , содержащую следующие поля: * название пункта назначения рейса; * номер рейса; * тип самолета; ...

Описать структуру с именем AEROFLOT - C++
Приветик всем! Помогите пожалуйста! Надо переделать программу на Си. Ниже написана подобная программа, но некоторое надо изменить: записи...

Описать структуру с именем AEROFLOT - C++
Вариант 4 1. Описать структуру с именем АЕRОFLОТ, содержащую следующие поля: • NAZN - название пункта назначения рейса; • NUMR -...


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

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru