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

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

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

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

09.04.2012, 18:59. Просмотров 3683. Ответов 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, содержащую следующие поля: • название...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
11.04.2012, 01:38     структуру AEROFLOT #31
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
#include "stdafx.h"
#include "stdafx.h"
#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 i;
    int size=50;///УКАЖИ ВЕРНОЕ КОЛИЧЕСТВО ЗАПИСЕЙ В ФАЙЛЕ!!!
    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;
}
Добавлено через 2 минуты
Цитата Сообщение от p_r_a_g_m_a Посмотреть сообщение
потом выделяем память для массива структуры с 10 элементами и первый указатель arr[0] будет ссылаться на эту область памяти.
То есть это вроде как некая матрица 1х10
совершенно верно. Матрица в Си это и есть массив указателей.
Только мы будем менять местами не элементы матрицы arr[0][5], а поднимемся на уровень выше, в массив указателей на эти элементы и будем сортировать указатели. Элементы же в памяти будут стоять неподвижно

Добавлено через 10 минут
При попытке получить поле arr[i]->reis, мы получаем:
Понятия не имею о чём ты я сам только что создал массив указателей, вручную присвоил значения нескольким полям разных элементов, затем удалил его и всё без ошибок. Из файла, естесственно не читал: его у меня нет
p_r_a_g_m_a
109 / 61 / 18
Регистрация: 08.03.2012
Сообщений: 211
Завершенные тесты: 1
11.04.2012, 01:44     структуру AEROFLOT #32
Что-то я окончательно запутался) Причину моего исключения я понял..
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
11.04.2012, 01:48     структуру AEROFLOT #33
Цитата Сообщение от 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
int main()
{
    struct aeroflot** arr;
    struct aeroflot* tmp;
    int i;
    int size=50;///УКАЖИ ВЕРНОЕ КОЛИЧЕСТВО ЗАПИСЕЙ В ФАЙЛЕ!!!
    arr=new struct aeroflot*[size];
    arr[0]=new struct aeroflot[size];
    for (int i=0; i<size; i++) arr[i]=arr[0]+i;
    arr[25]->reis=55;
    arr[44]->reis=55;
    arr[5]->reis=55;
 
    
 delete[] arr[0];
delete[] arr;
retrn 0;
}
p_r_a_g_m_a
109 / 61 / 18
Регистрация: 08.03.2012
Сообщений: 211
Завершенные тесты: 1
11.04.2012, 01:53     структуру AEROFLOT #34
Все понял) После
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
for (int i=0; i<size; i++) arr[i]=arr[0]+i;
arr[0] == arr[0][0]
arr[1] == arr[0][1]
...
arr[50] == arr[0][50]
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
11.04.2012, 01:56     структуру AEROFLOT #35
Цитата Сообщение от p_r_a_g_m_a Посмотреть сообщение
arr[0] == arr[0][0]
arr[1] == arr[0][1]
...
arr[50] == arr[0][50]
А вот и нет! То есть массивы двумерные хранятся таким же образом конечно, но вот только здесь у нас указатели и верно будет
*(arr[0]) == arr[0][0]
*(arr[1]) == arr[1][0]
...
Согласен?
p_r_a_g_m_a
109 / 61 / 18
Регистрация: 08.03.2012
Сообщений: 211
Завершенные тесты: 1
11.04.2012, 01:59     структуру AEROFLOT #36
Не ну то что там указатели ясно) Просто я звездочку не написал)
mr_aleks
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 131
11.04.2012, 02:10  [ТС]     структуру AEROFLOT #37
Скомпилировал, получил вот такое
Миниатюры
структуру AEROFLOT  
p_r_a_g_m_a
109 / 61 / 18
Регистрация: 08.03.2012
Сообщений: 211
Завершенные тесты: 1
11.04.2012, 02:17     структуру AEROFLOT #38
Цитата Сообщение от mr_aleks Посмотреть сообщение
Извиняюсь, но что за файл "stdafx.h" который подключается как библиотека??
Используется в МС:
stdafx.h: включаемый файл для стандартных системных включаемых файлов или включаемых файлов для конкретного проекта, которые часто используются, но не часто изменяются.
mr_aleks
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 131
11.04.2012, 02:20  [ТС]     структуру AEROFLOT #39
Или мб все таки ошибка из за того что в файле не 20 записей а меньше??
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
11.04.2012, 02:23     структуру AEROFLOT #40
Цитата Сообщение от mr_aleks Посмотреть сообщение
Скомпилировал, получил вот такое
У тебя точно size равен числу записей в файле?

Добавлено через 2 минуты
Цитата Сообщение от mr_aleks Посмотреть сообщение
скажите как сделать сортировку "данных по номеру рейса - причем сортировать потребуется только указатели в массиве." и сделать "массив указателей на AEROFLOT на 50 элементов." ?
Твои слова?
mr_aleks
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 131
11.04.2012, 02:24  [ТС]     структуру AEROFLOT #41
Нет конечно там 5 записей я сделал,
Из за дания вот так звучит
Подготовьте массив указателей на AEROFLOT на 50 элементов.

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

Kuzia domovenok, да да! так что там не так?
p_r_a_g_m_a
109 / 61 / 18
Регистрация: 08.03.2012
Сообщений: 211
Завершенные тесты: 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
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 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
109 / 61 / 18
Регистрация: 08.03.2012
Сообщений: 211
Завершенные тесты: 1
11.04.2012, 02:33     структуру AEROFLOT #44
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
можно считывать, пока не EOF
Перед тем как прочитать структуры, нужно выделить память под них. Если все время выделять 50, то это может быть нерациональное использование памяти. Просто при создании файла нужно записать сколько структур в него было занесено. Ведь все-равно программа в начале это запрашивает.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2012, 02:38     структуру 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, 02:38  [ТС]     структуру AEROFLOT #45
p_r_a_g_m_a, не понимаю записи
Цитата Сообщение от p_r_a_g_m_a Посмотреть сообщение
* * cin
Yandex
Объявления
11.04.2012, 02:38     структуру AEROFLOT
Ответ Создать тему
Опции темы

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