Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.57/35: Рейтинг темы: голосов - 35, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 146

структуру AEROFLOT

09.04.2012, 18:59. Показов 7526. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.04.2012, 18:59
Ответы с готовыми решениями:

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

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

Описать структуру с именем Aeroflot
62. Описать структуру с именем AEROFLOT, содержащую следующие поля: NAZN — название пункта назначения рейса; NUMR — номер рейса; TIP...

64
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
10.04.2012, 20:58
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от p_r_a_g_m_a Посмотреть сообщение
Как я понял что-то вроде этого?:
Я понял, что менять местами надо именно указатели, а не экземпляры структур, так как особенно при работе с массивами структур, операция перестановки экземпляров отнимает куда больше времени и памяти, чем перестановка указателей на них

Добавлено через 13 минут
Цитата Сообщение от 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
struct aeroflot** arr;
struct aeroflot* tmp;
int size=50;
int main(){
arr=new struct aeroflot*[size];
arr[0]=new struct aeroflot[size];
for (int i=0; i<size; i++) a[i]=arr[0]+i;
 
 
for (int i=0; i<size; i++) {//считываем массив из файла, с клавы или откуда угодно
   cin>>arr[i]->reis;//и все остальные поля...
   //..........короче считывание сами придумайте, 
}
 
for (int i=0; i<size; i++) 
   for (int j=0; j<size-i-1; j++)            //обычный пузырёк
      if ( (arr[j]->reis)>(arr[j]->reis) ){
          tmp=arr[j];
          arr[j]=arr[j+1];
          arr[j+1]=tmp;
       }
delete[] arr[0];
delete[] arr;
}
0
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 146
10.04.2012, 21:57  [ТС]
Компилятор выдает ошибку на arr[j]->reis, заменил на точку и пишит уже.
error C2228: left of '.reis' must have class/struct/union type
из файла тоесть так file = fopen("D:\\5.dat", "rb+") ?
И вывод надо структур уже отсортированных ?

Добавлено через 5 минут
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
#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)
{
LPAEROFLOT pxas = new AEROFLOT[10];
LPAEROFLOT pl[SIZE] = {NULL};
...
    FILE* file;
    if((file = fopen("D:\\5.dat", "rb+")) == NULL) { printf("Oshibka pri otkrytii fajla.\n"); exit(1); }
...
for ( i=0; i<20; i++)
    {
        fread(&pxas[i],sizeof(AEROFLOT),1,file); pl[i]=&pxas[i];
    }   
//считывания типо такого ?
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
10.04.2012, 22:07
Цитата Сообщение от mr_aleks Посмотреть сообщение
error C2228: left of '.reis' must have class/struct/union type
А целиком код сложно было запостить?
0
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 146
10.04.2012, 22:28  [ТС]
Как то так

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 <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;
 
struct aeroflot** arr;
struct aeroflot* tmp;
int size=50;
int main()
{
    arr=new struct aeroflot*[size];
arr[0]=new struct aeroflot[size];
for (int i=0; i<size; i++) arr[i]=arr[0]+i;
 
     FILE* file;
for (i=0; i<size; i++) {
    if((file = fopen("D:\\5.dat", "rb+")) == NULL) { printf("Oshibka pri otkrytii fajla.\n"); exit(1); }
}
 
for (i=0; i<size; i++) 
   for (int j=0; j<size-i-1; j++)            //îáû÷íûé ïóçûð¸ê
      if ( (arr[j].reis)>(arr[j].reis) ){
          tmp=arr[j];
          arr[j]=arr[j+1];
          arr[j+1]=tmp;
       }
delete[] arr[0];
delete[] arr;
 
 
 
for ( i=0; i<20; i++) 
{
 
        
            cout << "Po nomeru: " << arr[i].reis << endl;
            cout << "--------------------" << endl;
        
}
 
 
}
но тут явно не дописано или я полностью не понимаю как сортировать только указатели в массиве.
Если нужно то вот само задание
Подготовьте массив указателей на AEROFLOT на 50 элементов.

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

Для чтения каждой отдельной записи осуществите динамический захват памяти.

Соответствующий адрес храните в массиве указателей.

Выполните сортировку данных по номеру рейса - причем сортировать потребуется только указатели в массиве.

Выведите отсортированнный массив.
в начальных темах с указателями я еще понимал то тут уже нет
ПС предыдущий код проги на 2ой стр!
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
10.04.2012, 22:51
Ты что? Ты что не знаешь разницы между arr[i]. и arr[i]-> ???
arr[i].reis применяется для обращения к полю reis в и-том элементе массива
arr[i]->reis применяется для обращения к полю reis, в элементе на который указывает и-тый указатель в массиве

в общем случае запись arr[i]->reis эквивалентна *(arr[i]).reis
Если тебе настолько неудобна запись "стрелочкой" для обращения по указателю, можешь добавить скобки со звёздочкой.

Но просто arr[i].reis это бессмыслица. После того как мы решили хранить в массиве указатели, надо соответственно и изменить обращение к полям структур
Ты это проходил уже или читал об этом?
0
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 146
10.04.2012, 23:39  [ТС]
может набросите как будет выглядить для моего случая?) но почему не хочет компилировать такие выражения, я не знаю

Добавлено через 25 минут
вроде бы проходили но знаете как на лекциях это бывает, почитать котигорически надо.

Если будет время и желание набросте )
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
11.04.2012, 00:27
А из какого ты файла читаешь?( Мне не сам файл, а программу, которая его создала.)
0
 Аватар для p_r_a_g_m_a
112 / 64 / 23
Регистрация: 08.03.2012
Сообщений: 211
11.04.2012, 01:11
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
struct aeroflot** arr;
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
cin>>arr[i]->reis;
А разве не arr[0][i].reis ?
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
11.04.2012, 01:18
Цитата Сообщение от p_r_a_g_m_a Посмотреть сообщение
А разве не arr[0][i].reis ?
Я не уверен, что вызвало твой вопрос. Ты точно с оператором -> знаком?
Или я действительно неправильно написал?
arr это указатель на начало массива указателей
arr[i] это i-й член массива, это указатель указывающий на i-ю структуру
arr[i]->reis это поле reis полученное по указателю arr[i] на структуру struct aeroflot
Всё ещё считаешь, что тут ошибка? Вполне вероятно, но не в arr[i]->reis
0
 Аватар для p_r_a_g_m_a
112 / 64 / 23
Регистрация: 08.03.2012
Сообщений: 211
11.04.2012, 01:25
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
arr=new struct aeroflot*[size];
Ну ведь тут выходит что мы создаем 10 указателей
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
arr[0]=new struct aeroflot[size];
потом выделяем память для массива структуры с 10 элементами и первый указатель arr[0] будет ссылаться на эту область памяти.
То есть это вроде как некая матрица 1х10

При попытке получить поле arr[i]->reis, мы получаем:
Миниатюры
структуру AEROFLOT  
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
11.04.2012, 01:38
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, мы получаем:
Понятия не имею о чём ты я сам только что создал массив указателей, вручную присвоил значения нескольким полям разных элементов, затем удалил его и всё без ошибок. Из файла, естесственно не читал: его у меня нет
1
 Аватар для p_r_a_g_m_a
112 / 64 / 23
Регистрация: 08.03.2012
Сообщений: 211
11.04.2012, 01:44
Что-то я окончательно запутался) Причину моего исключения я понял..
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
11.04.2012, 01:48
Цитата Сообщение от 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;
}
1
 Аватар для p_r_a_g_m_a
112 / 64 / 23
Регистрация: 08.03.2012
Сообщений: 211
11.04.2012, 01:53
Все понял) После
Цитата Сообщение от 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]
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
11.04.2012, 01:56
Цитата Сообщение от 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]
...
Согласен?
0
 Аватар для p_r_a_g_m_a
112 / 64 / 23
Регистрация: 08.03.2012
Сообщений: 211
11.04.2012, 01:59
Не ну то что там указатели ясно) Просто я звездочку не написал)
0
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 146
11.04.2012, 02:10  [ТС]
Скомпилировал, получил вот такое
Миниатюры
структуру AEROFLOT  
0
 Аватар для p_r_a_g_m_a
112 / 64 / 23
Регистрация: 08.03.2012
Сообщений: 211
11.04.2012, 02:17
Цитата Сообщение от mr_aleks Посмотреть сообщение
Извиняюсь, но что за файл "stdafx.h" который подключается как библиотека??
Используется в МС:
stdafx.h: включаемый файл для стандартных системных включаемых файлов или включаемых файлов для конкретного проекта, которые часто используются, но не часто изменяются.
0
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 146
11.04.2012, 02:20  [ТС]
Или мб все таки ошибка из за того что в файле не 20 записей а меньше??
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,531
Записей в блоге: 1
11.04.2012, 02:23
Цитата Сообщение от mr_aleks Посмотреть сообщение
Скомпилировал, получил вот такое
У тебя точно size равен числу записей в файле?

Добавлено через 2 минуты
Цитата Сообщение от mr_aleks Посмотреть сообщение
скажите как сделать сортировку "данных по номеру рейса - причем сортировать потребуется только указатели в массиве." и сделать "массив указателей на AEROFLOT на 50 элементов." ?
Твои слова?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.04.2012, 02:23
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru