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

Выполнить задание с использованием функций и текстовых файлов - C++

Восстановить пароль Регистрация
 
AK_U
 Аватар для AK_U
0 / 0 / 0
Регистрация: 03.02.2010
Сообщений: 22
16.03.2010, 00:02     Выполнить задание с использованием функций и текстовых файлов #1
Завал по лабам. Помогите плиз. Надо написать вот такую программку. По первой части мне все понятно. По второй смог написать только ввод( точнее написал все, но препод не принял). Мне идея понятна, но не могу грамотно реализовать.

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

Заранее благодарен!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
16.03.2010, 06:30     Выполнить задание с использованием функций и текстовых файлов #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
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#include <assert.h>
 
enum {
    MAXPOINT = 20
};
 
struct route {
    char pointA[MAXPOINT];
    char pointB[MAXPOINT];
    int num;
};
 
struct route *EnterRoutes(void);
char *EnterPoint(void);
struct route **SearchRoutes(struct route *, const char *);
void PrintRoutes(struct route **);
 
int main(void) /* ANSI C89 */
{
    struct route *prt;
    char *ppt;
    struct route **ppfrt;
    
 
    prt = EnterRoutes();
    
    if (prt == NULL)
        assert(0 && "enter routes");
    
    
    ppt = EnterPoint();
    
    if (ppt == NULL)
        assert(0 && "enter point");
    
    
    ppfrt = SearchRoutes(prt, ppt);
    
    if (ppfrt == NULL)
        assert(0 && "search routes");
    
    free(ppt);
    
    
    PrintRoutes(ppfrt);
    
    free(ppfrt);
 
    free(prt);
    
    
    exit(EXIT_SUCCESS);
}
 
struct route *EnterRoutes(void)
{
    struct route *pr;
    const int nr = 8;
    
    pr = (struct route *) malloc(nr*sizeof(struct route));
    
    if (pr == NULL)
        assert(0 && "enter routes allocation");
    
    strcpy((pr+0)->pointA, "one");
    strcpy((pr+0)->pointB, "onewhere");
    (pr+0)->num = 1;
    
    strcpy((pr+1)->pointA, "two");
    strcpy((pr+1)->pointB, "twowhere");
    (pr+1)->num = 2;
    
    /* ... */
    
    return pr;
}
 
char *EnterPoint(void)
{
    char *p;
    
    p = (char *) malloc(MAXPOINT);
    
    if (p == NULL)
        assert(0 && "enter point allocation");
    
    strcpy(p, "one");
    
    return p;
}
 
struct route **SearchRoutes(
                struct route *prt, const char *p)
{
    struct route **pprt;
    const int nr = 8;
    int i, n;
    
    pprt = (struct route **) malloc(
        (nr+1)*sizeof(struct route *)
    );
    
    if (pprt == NULL)
        assert(0 && "search routes allocation");
    
    n = 0;
    
    for (i = 0; i < nr; i++)
        if
        (
            strcmp((prt+i)->pointA, p) == 0 ||
            strcmp((prt+i)->pointB, p) == 0
        ) {
            pprt[n] = prt+i;
            n++;
        }
    
    pprt[n] = NULL;
    n++;
    
    if (n < nr+1) {
 
        struct route **pp;
        
        pp = (struct route **) realloc(
            pprt, n*sizeof(struct route *)
        );
    
        if (pp == NULL)
            assert(0 && "search routes reallocation");
        
        pprt = pp;
    
    }
    
    return pprt;
}
 
void PrintRoutes(struct route **ppfrt)
{
    if (*ppfrt == NULL) {
    
        printf("there is no any route found" "\n");
        
        return;
    
    }
    
    while (*ppfrt != NULL) {
 
        printf("%3d: %s, %s" "\n",
            (*ppfrt)->num, (*ppfrt)->pointA,
            (*ppfrt)->pointB);
        
        ppfrt++;
    
    }
}
AK_U
 Аватар для AK_U
0 / 0 / 0
Регистрация: 03.02.2010
Сообщений: 22
17.03.2010, 18:16  [ТС]     Выполнить задание с использованием функций и текстовых файлов #3
accept, спасибо, но такое решение я пока вряд ли пойму, тут даже прототипы функций мы еще в такой форме не проходили=(((
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
18.03.2010, 07:59     Выполнить задание с использованием функций и текстовых файлов #4
тут, в основном, момент с выделением памяти под структуры
чтобы список не делать, я заюзал массив структур, заканчивающихся нулевым указателем
а assert'ы стопорят программу и показывают строку

Добавлено через 2 часа 48 минут
вернее там список указателей на найденные структуры, завершающийся нулевым указателем
структуры-то там заданы из условия
AK_U
 Аватар для AK_U
0 / 0 / 0
Регистрация: 03.02.2010
Сообщений: 22
18.03.2010, 11:03  [ТС]     Выполнить задание с использованием функций и текстовых файлов #5
ага, понятно, у меня вот в этом еще вопрос:
C++
1
2
3
4
struct route **SearchRoutes(struct route *, const char *);
void PrintRoutes(struct route **);
 
struct route **ppfrt;
Что делают **, и зачем в прототипе писать struct, это от С отсталось?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
18.03.2010, 11:15     Выполнить задание с использованием функций и текстовых файлов #6
это на C, на С++ по-другому всё
но оно пойдёт на C++, так как написано в C89

она ищет routes в списке и, когда находит один, записывает его адрес в массив адресов
после всех таких адресов ставит NULL (тоже адрес)
а потом вывод эти найденные читает из массива адресов
и вытаскивает через эти адресы значения из структур

то есть структуры лежат в одном месте, адресы найденных в другом месте
но адресы найденных - это адресы тех, которые вместе (в одном ряде)
просто среди них нет адресов структур, которые не подходят
Yandex
Объявления
18.03.2010, 11:15     Выполнить задание с использованием функций и текстовых файлов
Ответ Создать тему

Метки
marsh, marsh c, описать структуру, описать структуру c, описать структуру marsh c, описать структуру marsh, описать структуру с именем marsh, описать структуру с именем marsh c, структура marsh, структура marsh c, структуры данных, структуры данных c
Опции темы

Текущее время: 21:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru