Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/68: Рейтинг темы: голосов - 68, средняя оценка - 4.60
28 / 3 / 1
Регистрация: 12.05.2011
Сообщений: 60

Описать структуру с именем Train

12.05.2011, 16:04. Показов 14211. Ответов 36

Студворк — интернет-сервис помощи студентам
Задание:

Описать структуру с именем TRAIN, содержащую следующие поля:
- название пункта назначения;
- номер поезда;
- время отправления.
Написать программу, выполняющую следующие действия:
- ввод с клавиатуры данных в массив, состоящий из восьми элементов типа TRAIN;
- записи должны быть упорядочены по номерам поездов;
- вывод на экран информации о поезде, номер которого введен с клавиатуры;
- если таких поездов нет, выдать на дисплей соответствующее сообщение.

На языке Cи.

Есть подобная тема для C++ там задача решена.

Помогите интегрировать или написать с нуля данную программу. Спасибо
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.05.2011, 16:04
Ответы с готовыми решениями:

Описать структуру с именем TRAIN
Ребят,помогите сделать пожалуйста! (в поиске такой проги на Си нет) Описать структуру с именем TRAIN, содержащую следующие поля: -...

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

Описать структуру с именем TRAIN (поправить код)
Описать структуру с именем TRAIN содержащую следующие поля - название пункта назначения - номер поезда - время отправления ...

36
152 / 150 / 44
Регистрация: 09.02.2010
Сообщений: 407
14.05.2011, 15:06
Студворк — интернет-сервис помощи студентам
slice, есть. Читаем стандарт:
The C89 Committee added to C two type qualifiers, const and volatile; and C99 adds a
third, restrict. Individually and in combination they specify the assumptions a compiler
can and must make when accessing an object through an lvalue.
Пункт 6.7.3 документа C99RationaleV5.10.pdf. open-std.org
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
14.05.2011, 15:38
slice, с чего Вы это взяли?
0
79 / 78 / 6
Регистрация: 04.11.2010
Сообщений: 249
14.05.2011, 17:04
Ошибся. На чистом Си практически не писал.
0
28 / 3 / 1
Регистрация: 12.05.2011
Сообщений: 60
16.05.2011, 06:51  [ТС]
Теперь надо сделать меню.
Например:

-Нажмите 1 чтобы добавить поезда.
-Нажмите 2 чтобы найти поезда.

Все сделать надо с использование Switch,Case,Break

Добавлено через 10 минут
Вот основа для поста выше!
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
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
 
int n = 2;
 
 
typedef struct
{
    char pn [21];
    unsigned int num;
    char time [6];
} Train;
 
int main(void)
{
    int kk = 2;
    switch(kk)
    {
    case 1:
        puts ( "случай 1. "); break;
    case 2:
        puts ( "случай  2. "); break;
    case 3:
        puts ( "случай  3. "); break;
    default:
        puts ( "случай  default. "); break;
    }
 
    printf (" ВНОСИМ ИФНОРМАЦИЮ О ПОЕЗДАХ:\n ");
    Train a[n];
    int i = 0;
    for (i=0; i<n; i++)   //Ввод данных
    {
        printf ("Введите пункт назначения: ");
        scanf("%s", &a[i].pn);
        printf (" Введите номер поезда: ");
        scanf("%d", &a[i].num);
        printf (" Введите время отправления ");
        scanf("%s", &a[i].time);
    }
 
    Train buf;
    int k;
    for (i=0; i < n-1; i++)
        for (k=0; k < n-1; k++)
            if (strcmp (a[k].time, a[k+1].time)>0)
            {
                buf = a[k];
                a[k] = a[k+1];
                a[k+1] = buf;
            }
    char pp[21];
    printf (" ИЩЕМ ПОЕЗД\n ");
    printf ("Введите пункт назначения: ");
    scanf("%s%*c", pp);
    int f = 0;
    for (i=0; i<n; i++)
        if (strcmp (a[i].pn, pp) == 0)
        {
            printf ("Поезд номер: %u\tВремя отправления: %s\n", a[i].num, a[i].time);
            printf("\n");
            f = 1;
        }
    if (!f)
        printf ("В %s ПОЕЗДА НЕ ХОДЯТ!",pp);
    getchar();
    return 0;
}
0
152 / 150 / 44
Регистрация: 09.02.2010
Сообщений: 407
16.05.2011, 07:32
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

kudpro, держи, с менюшкой.
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
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
 
int n = 1;
 
typedef struct
{
    char pn [21];
    unsigned int num;
    char time [6];
} Train;
 
Train* vvod(Train *a)
{
    printf (" ВНОСИМ ИФНОРМАЦИЮ О ПОЕЗДАХ:\n ");
    int i = 0;
    Train buf;
    int k;
    for (i=0; i<n; i++)   //Ввод данных
    {
        printf ("Введите пункт назначения: ");
        scanf("%s", &a[i].pn);
        printf (" Введите номер поезда: ");
        scanf("%d", &a[i].num);
        printf (" Введите время отправления ");
        scanf("%s%*c", &a[i].time);
    }
 
    for (i=0; i < n-1; i++)
        for (k=0; k < n-1; k++)
            if (strcmp (a[k].time, a[k+1].time)>0)
            {
                buf = a[k];
                a[k] = a[k+1];
                a[k+1] = buf;
            }
 
    return a;
}
 
int menu_choice() {
    char s[10];
    int     c;
 
    printf("1. Добавить поезд\n");
    printf("2. Найти поезд\n");
    printf("0. Выход\n");
    do {
        printf("Ваш выбор: ");
        gets(s);
        c = atoi(s);
        } while (c < 0 || c > 2);
    return c;
}
 
Train search(Train *a)
{
    int i;
    char pp[21];
    printf (" ИЩЕМ ПОЕЗД\n ");
    printf ("Введите пункт назначения: ");
    scanf("%s%*c", pp);
    int f = 0;
    for (i=0; i<n; i++)
        if (strcmp (a[i].pn, pp) == 0)
        {
            printf ("Поезд номер: %u\tВремя отправления: %s\n", a[i].num, a[i].time);
            printf("\n");
            f = 1;
        }
    if (!f)
        printf ("В %s ПОЕЗДА НЕ ХОДЯТ!",pp);
 
}
 
int main(void)
{
    Train a[n];
    for (;;){
        switch(menu_choice())
        {
           case 1: vvod(a);
               break;
            case 2: search(a);
               break;
            case 0: exit(0);
                break;
        }
    }
}
1
28 / 3 / 1
Регистрация: 12.05.2011
Сообщений: 60
16.05.2011, 07:43  [ТС]
dampir_sanek, идеально! Огромное спасибо!
0
152 / 150 / 44
Регистрация: 09.02.2010
Сообщений: 407
16.05.2011, 07:47
kudpro, пожалуйста. Тут еще косячечек забыл убрать, замени
C
1
Train search(Train *a)
на
C
1
void search(Train *a)
1
28 / 3 / 1
Регистрация: 12.05.2011
Сообщений: 60
16.05.2011, 07:59  [ТС]
Если 1 раз вносишь инфу о поездах, потом делаешь поиск и вновь вносишь информацию о поездах, первые данные стираются. Решить проблему можно только через запись в файл?
0
152 / 150 / 44
Регистрация: 09.02.2010
Сообщений: 407
16.05.2011, 08:02
kudpro, нет, нужно динамически выделять память для массива а для n+1 элементов, предварительно сохраняя значения старого массива a[n].
смотри в сторону malloc, memcpy.
1
28 / 3 / 1
Регистрация: 12.05.2011
Сообщений: 60
16.05.2011, 08:41  [ТС]
Хотелось бы конечно пример
0
152 / 150 / 44
Регистрация: 09.02.2010
Сообщений: 407
16.05.2011, 11:38
Лучший ответ Сообщение было отмечено как решение

Решение

kudpro, как то так
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
96
97
98
99
100
101
102
103
104
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
 
 
 
typedef struct
{
    char pn [21];
    unsigned int num;
    char time [6];
} Train;
 
Train* vvod(Train *a, int *n)
{
    printf (" ВНОСИМ ИФНОРМАЦИЮ О ПОЕЗДАХ:\n ");
    int i, k;
    Train buf;
    Train *tmp;
    if (*n == 0) {
        a = (Train*) malloc (sizeof(Train));
        tmp = (Train*) malloc (sizeof(Train));
    }
    else {
        tmp = (Train*) malloc (*n*sizeof(Train));
        memcpy(tmp, a, *n);
        a = (Train*) malloc ((*n+1)*sizeof(Train));
    }
 
    printf ("Введите пункт назначения: ");
    scanf("%s", &buf.pn);
    printf (" Введите номер поезда: ");
    scanf("%d", &buf.num);
    printf (" Введите время отправления ");
    scanf("%s%*c", &buf.time);
 
    *n += 1;
    memcpy(a, tmp, *n);
    a[*n-1] = buf;
 
    for (i=0; i < *n-1; i++)
        for (k=0; k < *n-1; k++)
            if (strcmp (a[k].time, a[k+1].time)>0) {
                buf = a[k];
                a[k] = a[k+1];
                a[k+1] = buf;
            }
    free(tmp);
    tmp = NULL;
    return a;
}
 
int menu_choice() {
    char s[10];
    int     c;
 
    printf("1. Добавить поезд\n");
    printf("2. Найти поезд\n");
    printf("0. Выход\n");
    do {
        printf("Ваш выбор: ");
        fgets(s, 10,stdin);
        c = atoi(s);
        } while (c < 0 || c > 2);
    return c;
}
 
void search(Train *a, const int n)
{
    int i;
    char pp[21];
    printf (" ИЩЕМ ПОЕЗД\n ");
    printf ("Введите пункт назначения: ");
    scanf("%s%*c", pp);
    int f = 0;
    for (i=0; i < n; i++)
        if (strcmp (a[i].pn, pp) == 0)
        {
            printf ("Поезд номер: %u\tВремя отправления: %s\n", a[i].num, a[i].time);
            printf("\n");
            f = 1;
        }
    if (!f)
        printf ("\nВ %s ПОЕЗДА НЕ ХОДЯТ!\n",pp);
 
}
 
int main(void)
{
    Train *a;
    int count_train = 0;
    for (;;){
        switch(menu_choice()) {
           case 1: a = vvod(a, &count_train);
               break;
            case 2: search(a, count_train);
               break;
            case 0: free(a);
            a = NULL;
            exit(0);
                break;
        }
    }
}
3
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
16.05.2011, 11:48
dampir_sanek, чтобы не мучиться дополнительно еще и с memcpy можно воспользоваться realloc. Позволит увеличить размер массива в том же указателе
2
152 / 150 / 44
Регистрация: 09.02.2010
Сообщений: 407
16.05.2011, 12:05
fasked, огромное спасибо за подсказку, действительно так в разы легче)) буду пользоваться. Как то в Шилдте не обращал внимания на realloc, поэтому постоянно malloc, максимум calloc использовал
0
28 / 3 / 1
Регистрация: 12.05.2011
Сообщений: 60
12.11.2011, 20:15  [ТС]
Всем добрый день.
Опять вернулся к этой программе (код выше).
Нужно переделать её так, чтобы она использовала динамические структуры а в частности списки.

Добавлено через 8 часов 8 минут
ап.... жесть сколько тем
0
0 / 0 / 1
Регистрация: 04.10.2011
Сообщений: 8
21.03.2012, 23:01
шикарно написанна программа.)хотя условие той,что мне нужна,другое немного,жаль.
0
0 / 0 / 0
Регистрация: 21.05.2014
Сообщений: 12
21.05.2014, 23:53
подскажите как сделать эту программу на русском?
0
0 / 0 / 1
Регистрация: 15.12.2014
Сообщений: 9
22.12.2014, 21:17
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

dampir_sanek, компилятор ругается на строку 90, что А не инициализирована

Добавлено через 11 часов 13 минут
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
96
97
98
99
100
101
102
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
 
FILE*fIn;
 
typedef struct
{
    char pn[21];
    unsigned int num;
    char time[6];
} Train;
 
Train* vvod(Train *a, int *n)
{
    int i, k;
    Train buf;
    Train *tmp;
    printf("\n ");
    if (*n == 0) {
        a = (Train*)malloc(sizeof(Train));
        tmp = (Train*)malloc(sizeof(Train));
    }
    else {
        tmp = (Train*)malloc(*n*sizeof(Train));
        memcpy(tmp, a, *n);
        a = (Train*)malloc((*n + 1)*sizeof(Train));
    }
 
    fscanf(fIn, "%s", &buf.pn);
    fscanf(fIn, "%d", &buf.num);
    fscanf(fIn, "%s%*c", &buf.time);
 
    *n += 1;
    memcpy(a, tmp, *n);
    a[*n - 1] = buf;
 
    for (i = 0; i < *n - 1; i++)
        for (k = 0; k < *n - 1; k++)
            if (a[k].num == a[k + 1].num) {
        buf = a[k];
        a[k] = a[k + 1];
        a[k + 1] = buf;
            }
    free(tmp);
    tmp = NULL;
    return a;
}
 
int menu_choice() {
    char s[10];
    int     c;
 
    printf("1. add train\n");
    printf("2. search train and exit\n");
    printf("0. exit\n");
    do {
        printf("Your chois: ");
        fgets(s, 10, stdin);
        c = atoi(s);
    } while (c < 0 || c > 2);
    return c;
}
 
void search(Train *a, const int n)
{
    int i;
    unsigned int pp;
    printf(" Search train\n ");
    printf("num: ");
    scanf("%d", &pp);
    int f = 0;
    for (i = 0; i < n; i++)
        if (a[i].num == pp)
        {
        printf("Name: %s\tTime: %s\n", a[i].pn, a[i].time);
        printf("\n");
        f = 1;
        }
    if (!f)
        printf("\nTrain not found!\n");
}
 
int main(void)
{
    Train *a = NULL;
    int count_train = 0;
    char *sIn = "in.txt";
    if (!(fIn = fopen(sIn, "r"))) printf("Error");
    for (;;){
        switch (menu_choice()) {
        case 1: a = vvod(a, &count_train);
            break;
        case 2: search(a, count_train);
            break;
        case 0: free(a);
            a = NULL;
            exit(0);
            break;
        }
    }
}
Подскажите, почему запоминает только последний считанный поезд? немного переделал программу, сортировка идет по номеру и поиск по номеру, читаем из файла, образец строки в файле:
Петушки 45 15.10

Добавлено через 22 часа 3 минуты
ау, тут никто не помогает чтоль?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.12.2014, 21:17
Помогаю со студенческими работами здесь

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

Описать структуру Train
Программа выбивает ошибки! я еще мало чего понимаю, помогите пожалуйста! #include &lt;stdio.h&gt; #include &lt;string.h&gt; ...

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

Описать структуру с именем STUDENT
Описать структуру с именем STUDENT, содержащую следующие поля: □фамилия и инициалы; □номер группы; □ успеваемость (массив...

Описать структуру с именем KNIGA
Задание 1. Описать структуру с именем KNIGA, содержащую следующие поля: • название; • автор; • издательство. 2. Написать...


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

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения Продолжаю серию постов о дискретно-событийной модели рабочего. . .
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru