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

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

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

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

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

36
152 / 150 / 44
Регистрация: 09.02.2010
Сообщений: 407
14.05.2011, 15:06 21
Author24 — интернет-сервис помощи студентам
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
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 2
14.05.2011, 15:38 22
slice, с чего Вы это взяли?
0
79 / 78 / 6
Регистрация: 04.11.2010
Сообщений: 249
14.05.2011, 17:04 23
Ошибся. На чистом Си практически не писал.
0
28 / 3 / 1
Регистрация: 12.05.2011
Сообщений: 60
16.05.2011, 06:51  [ТС] 24
Теперь надо сделать меню.
Например:

-Нажмите 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 25
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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  [ТС] 26
dampir_sanek, идеально! Огромное спасибо!
0
152 / 150 / 44
Регистрация: 09.02.2010
Сообщений: 407
16.05.2011, 07:47 27
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  [ТС] 28
Если 1 раз вносишь инфу о поездах, потом делаешь поиск и вновь вносишь информацию о поездах, первые данные стираются. Решить проблему можно только через запись в файл?
0
152 / 150 / 44
Регистрация: 09.02.2010
Сообщений: 407
16.05.2011, 08:02 29
kudpro, нет, нужно динамически выделять память для массива а для n+1 элементов, предварительно сохраняя значения старого массива a[n].
смотри в сторону malloc, memcpy.
1
28 / 3 / 1
Регистрация: 12.05.2011
Сообщений: 60
16.05.2011, 08:41  [ТС] 30
Хотелось бы конечно пример
0
152 / 150 / 44
Регистрация: 09.02.2010
Сообщений: 407
16.05.2011, 11:38 31
Лучший ответ Сообщение было отмечено как решение

Решение

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
Эксперт С++
5043 / 2622 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 2
16.05.2011, 11:48 32
dampir_sanek, чтобы не мучиться дополнительно еще и с memcpy можно воспользоваться realloc. Позволит увеличить размер массива в том же указателе
2
152 / 150 / 44
Регистрация: 09.02.2010
Сообщений: 407
16.05.2011, 12:05 33
fasked, огромное спасибо за подсказку, действительно так в разы легче)) буду пользоваться. Как то в Шилдте не обращал внимания на realloc, поэтому постоянно malloc, максимум calloc использовал
0
28 / 3 / 1
Регистрация: 12.05.2011
Сообщений: 60
12.11.2011, 20:15  [ТС] 34
Всем добрый день.
Опять вернулся к этой программе (код выше).
Нужно переделать её так, чтобы она использовала динамические структуры а в частности списки.

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

Решение

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
22.12.2014, 21:17
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.12.2014, 21:17
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
37
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru