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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 49, средняя оценка - 4.65
Luna17
3 / 3 / 1
Регистрация: 09.03.2010
Сообщений: 95
#1

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

12.04.2010, 16:16. Просмотров 7277. Ответов 10

Описать структуру с именем AEROFLOT содержащей поля: название пункта назначения рейса, номер рейса, тип самолета,
Написать прогу, выполняющую следующие действия:
1) Ввод с клавиатуры данных в массив состоящий из 7 элементов типа AEROFLOT; записи должны размещены в алфавитном порядке по названию пунктов назначения
2)Вывод на экран пунктов назначения и номеров рейсов обслуживаемых самолетов, тип которого введен с клавиатуры
3) Если таких рейсов нет, выдать на экран соответствующее сообщение

Вот что у ми получается, ток где то запуталась, с памятью которую надо выделять в массиве

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
// khlg.cpp : Defines the entry point for the console application.
//
 
#include "stdafx.h"
#include "string.h"
#include "stdio.h"
#include "locale.h"
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale (LC_ALL, "Russian");
    struct AEROFLOT
    {
        char *namereice;
        int №somoleta;
        char *tipsomoleta;
    };
    AEROFLOT k[7], n, h, k; 
 
    printf ("введите пункт назначения\t");
    printf ("введите номер рейса\t");
    printf ("введите тип самолета\t");
    int i;
    for (i=0; i<7; i++)
    {
       scanf_s("%s", &k[i].namereice);
       scanf_s("%d",&k[i].№somoleta);
       scanf_s ("%s", &k[i].tipsomoleta);
    };
    char*h=new char[strlen(namereice)+1];     '//
    char*k=new char[strlen(tipsomoleta)+1];    // тут попыталась но запатулась, так что не использовала
 
    for (i=0; i<7; i++)
        if (strcmp(k[i].namereice, k[i+1].namereice)>0)
        {
            strcpy (n.namereice, k[i+1].namereice);
            strcpy (k[i+1].namereice,k[i].namereice);
            strcpy (k[i].namereice, n.namereice);
        }  
     printf ("%s","список фамилий отсортирован по алфавиту: ");
     printf ("\n");
     for (i=0; i<7; i++)
     puts(k[i].namereice);
     
    
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2010, 16:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Описать структуру с именем AEROFLOT содержащей поля: название пункта назначения рейса, номер рейса, тип самолета, (C++):

Сформировать структуру AEROFLOT для хранения следующей информации номер рейса название пункта назначения рейса тип самолета - C++
Сформировать структуру AEROFLOT для хранения следующей информации: · номер рейса; · название пункта назначения рейса; · тип...

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

в справочной автовокзала хранится расписание движения автобусов. Для каждого рейса указаны его номер, тип автобуса, пунт назначения, время отбытия и п - C++
в справочной автовокзала хранится расписание движения автобусов. Для каждого рейса указаны его номер, тип автобуса, пунт назначения, время...

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

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

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

10
Luna17
3 / 3 / 1
Регистрация: 09.03.2010
Сообщений: 95
15.04.2010, 09:02  [ТС] #2
теперь она типо работает но не до конца правильно, плохо компилируется,... помогите


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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
// jkj.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
 
#include "string.h"
#include "stdio.h"
#include "locale.h"
#include "iostream"
using namespace std;
 
 struct AEROFLOT
    {
        char *namereice;
        int №somoleta;
        char *tipsomoleta;
    };
 ostream& operator<<(ostream& out,AEROFLOT &J)
 { 
     out<<"\n пункт назначения"<<J.namereice;
     out<< "\n номер рейса"<<J.№somoleta;
     return out;
 }
 
int main()
{
    setlocale (LC_ALL, "Russian");
 
    AEROFLOT k[7], n, t; 
 
char buf[255];
 
    int i;
    
    for (i=0; i<7; i++)
    {
       printf ("введите пункт назначения\t");
       k[i].namereice=new char[strlen(buf)+1];
       scanf_s("%s", &k[i].namereice);
            strcpy(k[i].namereice,buf);
 
       printf ("введите пункт назначения\t");
       scanf_s("%d",&k[i].№somoleta);
       
       printf ("введите тип самолета\t");
       k[i].tipsomoleta = new char[strlen(buf)+1];
       scanf_s ("%s", &k[i].tipsomoleta);
       printf("\n");
         strcpy(k[i].tipsomoleta,buf);
   }
 
 
    for (i=0; i<7; i++)
        if (strcmp(k[i].namereice, k[i+1].namereice)>0)
        {
            strcpy (n.namereice, k[i+1].namereice);
            strcpy (k[i+1].namereice,k[i].namereice);
            strcpy (k[i].namereice, n.namereice);
        }  
     printf ("%s","список фамилий отсортирован по алфавиту: ");
     printf ("\n");
     for (i=0; i<7; i++)
     puts(k[i].namereice);
     
         printf("тип самолета введите\t");
         scanf_s("%s", &t.tipsomoleta);
             t.tipsomoleta=new char [strlen(buf)+1];
         for (i=0; i<7; i++)
         {
         if (k[i].tipsomoleta==t.tipsomoleta)
        cout<< (k[i]);
         else printf("таких рейсов нет\t");
         }
 
    delete k[i].namereice;
    delete k[i].tipsomoleta;
    return 0;
}
0
elfon
11 / 11 / 0
Регистрация: 09.11.2009
Сообщений: 32
15.04.2010, 12:16 #3
Теги поставь, ссылаться на ошибки будет проще.
Задумайся над значением
1.
C
1
2
char buf[255];
strcpy(k[i].namereice,buf);
2.
C
1
2
char buf[255];
int iSizeBuff=strlen(buf);//надо бы sizeof(buf), а вообще тут лучше сразу писать 255 и +1 не надо
3.
C
1
2
scanf_s("%s", &t.tipsomoleta);
t.tipsomoleta=new char [strlen(buf)+1];
4.
C
1
2
delete k[i].namereice; //без цикла и i здесь будет равно 7, т.е delete k[7].namereice
delete k[i].tipsomoleta;
И зачем нужен buff?
C
1
2
3
scanf_s("%s", &t.tipsomoleta); //AEROFLOT::tipsamoleta уже указатель, так 
что для строк меняй везде на t.tipsomoleta
//аналогично для AEROFLOT:namereice
k[i].tipsomoleta==t.tipsomoleta это не сравнение строк.
Почитай про сортировку.

Для тебя лучше, если ты всё сама исправишь. Если конечно я всё и правильно нашёл
1
Seishin
12 / 12 / 2
Регистрация: 15.04.2010
Сообщений: 31
16.04.2010, 00:03 #4
1.
C++
1
2
char buf[255];
strlen(buf);
Не стоит использовать функции, которые опираются на завершающий \0, применительно к
неинициализированному массиву, т.е. strlen возвращает тебе рандом, смотря когда встретит \0...

2.
Юзай MAX_PATH или какую-нить свою константу, назначение buf остается загадкой...

C++
1
k[i].namereice = new char[MAX_PATH];
Хотя не понятно какой смысл тут что-то ньюкать, можно и не парясь особо:

C++
1
2
3
4
5
6
struct AEROFLOT
{
    char namereice[MAX_PATH];
    int №somoleta;
    char tipsomoleta[MAX_PATH];
};
3.
Ну, пусть ньюкнули, дальше го...

C++
1
scanf_s("%s", k[i].namereice, [B]MAX_PATH[/B] );
есть же MSDN, там же сказано, что для спецификации %s нужно указывать размер буферов )...
И никаких & перед k[i].namereice - и так уже указатель на первый символ...

4.
C++
1
 strcpy(k[i].namereice,buf);
Это вообще без комментов, типо считали , а потом дайвайте затрем рандомом, который у нас в buf, так, на всякий случай ...
Удаляем...

5.
C++
1
2
3
4
5
6
7
for (i=0; i<7; i++)
        if (strcmp(k[i].namereice, k[i+1].namereice)>0)
        {
            strcpy (n.namereice, k[i+1].namereice);
            strcpy (k[i+1].namereice,k[i].namereice);
            strcpy (k[i].namereice, n.namereice);
        }
Сортировка тут у тя меняет местами имена мест назначения )), а вся остальная инфа остается на месте. Да и то, разовый проход отсортирует только частично

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
bool lChanges = true;
    while ( lChanges )
    {
        lChanges = false; 
        for (i=0; i<6; i++)
            if (strcmp(k[i].namereice, k[i+1].namereice)>0)
            {
                n = k[i];
                k[i] = k[i+1];
                k[i+1] = n;         
 
                lChanges = true;
            }  
    }
Так чуть более юзабельно, да, и в цикле на 1 меньше, ибо ты там внутри делаешь i+1...

6.
C++
1
2
t.tipsomoleta = new char [MAX_PATH];
        scanf_s("%s", t.tipsomoleta, MAX_PATH );
эти грабли уже прошли

7.
C++
1
2
3
4
5
6
7
8
9
10
bool lFoundRace = false;
        for (i=0; i<lCount; i++)
        {
            if ( strcmp( k[i].tipsomoleta, t.tipsomoleta) == 0 )
            {
                cout<< (k[i]);  
                lFoundRace = true;
            }           
        }
        if ( !lFoundRace ) printf("таких рейсов нет\t");
Дальше шли неюзабельные разные куски, которые пофасту превратились в это...

8.
ну, и на последок убираем всю эту кашу и больше никогда не юзаемммм

C++
1
2
3
4
5
6
7
for ( i = 0; i < 7; i++ )
        {
            delete[] k[i].namereice;
            delete[] k[i].tipsomoleta;
        }
 
delete[] t.tipsomoleta;
P.S. Все это естественно пишется совсем иначе
1
Luna17
3 / 3 / 1
Регистрация: 09.03.2010
Сообщений: 95
16.04.2010, 01:24  [ТС] #5
P.S. Все это естественно пишется совсем иначе

как
0
Seishin
12 / 12 / 2
Регистрация: 15.04.2010
Сообщений: 31
16.04.2010, 09:09 #6
0_о, и так же все ошибки уже исправил, код переписывать я, извини, не собираюсь...
0
Luna17
3 / 3 / 1
Регистрация: 09.03.2010
Сообщений: 95
20.04.2010, 08:54  [ТС] #7
ну вот короче у ми опять проблема, причем тупая, у меня теперь не сортируется массив названий пунктов назначения рейсов, он символьный
помгите найти ошибку
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// mhfdh.cpp: определяет точку входа для консольного приложения.
//
 
#include <string.h>
#include <stdio.h>
#include <locale.h>
#include <iostream>
#include <conio.h>
using namespace std;
 
 struct AEROFLOT
    {
        char *namereice;
        int №somoleta;
        char *tipsomoleta;
    };
 ostream& operator<<(ostream& out,AEROFLOT &J)
 { 
     out<<"\n пункт назначения : "<<J.namereice;
     out<< "\n номер рейса : "<<J.№somoleta;
     return out;
 }
 
const int Amax=255;
int main()
{
    setlocale (LC_ALL, "Russian");
 
    AEROFLOT k[7], n, t; 
 
 char buf[Amax], buf1[Amax];
 
    int i;
  
    for (i=0; i<7; i++)
    {
        // 
        printf ("введите пункт назначения\t");
       
        k[i].namereice = new char[Amax];    // Выделение памяти под название самолета
        scanf_s("%s",k[i].namereice, Amax );        
        
 
        printf ("введите тип самолета\t");
        
        k[i].tipsomoleta = new char [Amax];     // Выделение памяти под тип самолета
        scanf_s ("%s",k[i].tipsomoleta, Amax);
            flushall();
       
       printf ("введите номер самолета\t");
       scanf_s("%i",&k[i].№somoleta);
       
       printf("\n");
       
   }
bool    sChang=false;
while(sChang)
{
    for (int i=0; i<6; i++)
        if (strcmp(k[i].namereice, k[i+1].namereice)>0)
        {
            
              n=k[i];
            k[i]=k[i+1];
            k[i+1]=n;
 
            sChang=true;
        }  
}
     printf ("%s","список пунктов назначения рейсов отсортирован по алфавиту: ");
     printf ("\n");
     for (i=0; i<7; i++)
     puts(k[i].namereice);
     
     t.tipsomoleta=new char [Amax];
         printf("тип самолета введите\t");
         scanf_s("%s",t.tipsomoleta, Amax);
bool ret = false;            
         for (i=0; i<7; i++)
         {
         if (strcmp(k[i].tipsomoleta, t.tipsomoleta) == 0)
         {  
             cout<< (k[i]);
             ret = true;
         }
         }
         if (!ret) printf("Таких рейсов нет\t");
         
         for (int i=0; i<7; i++){
    delete[] k[i].namereice;
    delete[] k[i].tipsomoleta;
         }
         _getch();
         return 0;
}
0
Seishin
12 / 12 / 2
Регистрация: 15.04.2010
Сообщений: 31
21.04.2010, 19:54 #8
Блин, уже ведь писал выше :

C++
1
2
3
4
bool lChanges = true;
        while ( lChanges )
        {
                lChanges = false; .....
, а вот у тя :

C++
1
2
3
4
bool    sChang=false;
while(sChang)
{
    for (int i=0; i<6; i++)
так он никогда в этот цикл не зайдет (((((
0
валентин777
0 / 0 / 0
Регистрация: 01.06.2011
Сообщений: 45
09.03.2012, 19:31 #9
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
59
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
 
main()
 
{
    int i,j;
int k;
int min=0;
struct aeroflot
{
char *punkt[20];
char *tip[20];
int *nomer[10];
}x[7];
for(i=0;i<3;i++)
{printf("Dannie o smalete %d \n",i+1);
 
*x[i].punkt=(char*)malloc(20*sizeof(char)); //выделение памяти
 
printf("Vvedite nazvanie punkta naznacheniya\n");
scanf("%s",&x[i].punkt);
*x[i].nomer=(int*)malloc(10*sizeof(int));
printf("Vvedite nomer reysa\n");
scanf("%d",&x[i].nomer);
*x[i].tip=(char*)malloc(20*sizeof(char));
printf("Vvedite tip samoleta\n");
scanf("%s",&x[i].tip);
 
}
for(i=0;i<3;i++);
{
k=i;
min=**x[i].nomer ;
for(j=i+1;j<3;j++)
{
    if (**x[j].nomer<min)
    {
        k=j;
        min=**x[j].nomer;
    }
**x[k].nomer=**x[i].nomer;
**x[i].nomer=min;}
}
 
 
for(i=0;i<3;i++)
{
printf("Punkt naznacheniya-%s\n",x[i].punkt);
printf("Nomer reysa-%d\n",*x[i].nomer);
printf("Tip samoleta-%s\n",x[i].tip);
}
 
 
 
 
return 0;
}

ошибки есть только
0
OstapBender
584 / 523 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
09.03.2012, 22:04 #10
я 1 заметил
Цитата Сообщение от Luna17 Посмотреть сообщение
int №somoleta;
?

вообще забавно, преподы, у друг друга чтоли в нете воруют задания? уже раз 10-ый вижу тут этот дебильный AEROFLOT
1
qwer1234
13 / 13 / 3
Регистрация: 30.10.2012
Сообщений: 463
13.03.2014, 09:48 #11
у меня выдает такую ошибку

d:\äîêóìåíòè\ñ++\laba10\l\bla bla\bla bla_1.cpp(1) : fatal error C1083: Cannot open include file: 'stdafx.h': No such file or directory
Error executing cl.exe.

как исправить?
0
13.03.2014, 09:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2014, 09:48
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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