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

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

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

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

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

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

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
p_r_a_g_m_a
109 / 61 / 18
Регистрация: 08.03.2012
Сообщений: 211
Завершенные тесты: 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
Сообщений: 131
11.04.2012, 02:44  [ТС]     структуру AEROFLOT #47
p_r_a_g_m_a, сделал так, запускаю как только пишу сколько структур я буду вводить прога выкидывает ошибку !
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 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
109 / 61 / 18
Регистрация: 08.03.2012
Сообщений: 211
Завершенные тесты: 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
Сообщений: 131
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
109 / 61 / 18
Регистрация: 08.03.2012
Сообщений: 211
Завершенные тесты: 1
11.04.2012, 02:55     структуру AEROFLOT #51
Ты пытаешься записать в файл не открыв его
mr_aleks
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 131
11.04.2012, 03:03  [ТС]     структуру AEROFLOT #52
кароче сделал так структуру, потом в проге где сортировка, выдает опять туже ошибку, если поставить
int size=3;
Я ввел в пред. проге 3 структуры то все ок а если стоит 50 похоже такая ошибка будет! в чем тут дело?)

Добавлено через 2 минуты
Проверил и с предыдущем дат файлом если поставить 5 в size все норм без ошибки (этот дат компилировался без записи кол. структур в файл)
p_r_a_g_m_a
109 / 61 / 18
Регистрация: 08.03.2012
Сообщений: 211
Завершенные тесты: 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
Сообщений: 131
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
109 / 61 / 18
Регистрация: 08.03.2012
Сообщений: 211
Завершенные тесты: 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
Сообщений: 131
11.04.2012, 03:19  [ТС]     структуру AEROFLOT #56
Сразу ошибку выбивает
p_r_a_g_m_a
109 / 61 / 18
Регистрация: 08.03.2012
Сообщений: 211
Завершенные тесты: 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
Сообщений: 131
11.04.2012, 19:16  [ТС]     структуру AEROFLOT #58
Не знаю что вы там нашли но эти коды не работают, сразу ошибку выкидывают!
и дат файл тот
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
11.04.2012, 19:31     структуру AEROFLOT #59
А пошагово слабо проверить, в каком месте вылетает?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2012, 23:26     структуру AEROFLOT
Еще ссылки по теме:

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

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

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

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

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


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

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

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

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