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

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

Войти
Регистрация
Восстановить пароль
 
maddoxx
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 24
#1

Файлы и функции - C++

17.02.2013, 03:44. Просмотров 378. Ответов 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
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
#include <stdio.h>
#include <conio.h>
#include <iostream>
 
#define size 2
#define buf 256
#define dSize 10
#define NULL 0
 
struct train
{
    char name[buf];
    int  number;
    char date[dSize];
}; 
 
extern void input(train *mas);
extern void output(train *mas);
extern void sort(train *mas);
 
void main()
{ 
    train *mas;
    mas = new train [size]; 
    if (mas != NULL)
    {
        input(mas);
        sort(mas);
        output(mas);
    }
    else
        printf("\nMenory error!\n");
    _getch();
}
 
void input(train *mas)
{
    register int i,j;
    printf("\nInput information\n");
    for(i=0; i<size; i++)
    {
        fflush(stdin);
        printf("\n\nInput name for element [%d]: ",i+1);    //Считываем название поезда до нажатия Enter или до конца буфера (256 символов)
        for(j=0; j<buf; j++)
        {
            char tmp;
            scanf("%c",&tmp);
            if (tmp == '\n')
            {
                mas[i].name[j] = '*';
                j=buf;
            }
            else
                mas[i].name[j] = tmp;
        }
 
        fflush(stdin);
        printf("Input number for element [%d]: ",i+1);      //Считываем номер поезда
        scanf("%d",&mas[i].number);
 
        fflush(stdin);
        printf("Input date for element [%d] (format xx.xx.xxxx): ",i+1);    //Считываем дату отправления (10 символов с разделителем '.')
        for(j=0; j<dSize; j++)
            scanf("%c",&mas[i].date[j]);
    }
}
 
void output(train *mas)
{
    register int i,j;
    system("cls");
    printf("\nOutput information\n");
    for(i=0; i<size; i++)
    {
        printf("\n\nElement [%d]",i+1);         //Какой номер елемента выводим
        printf("\nName: ");                     //Выводим имя
        for(j=0; j<buf; j++)
        {
            if (mas[i].name[j] == '*')          //До первого искуственно образованного символа конца строки
                j = buf;
            else
                printf("%c",mas[i].name[j]);
        }
        printf("\nNumber: %d",mas[i].number);   //Выводим номер
        printf("\nDate: ");                     
        for(j=0; j<dSize; j++)
            printf("%c",mas[i].date[j]);            //Выводим дату
    }
}
 
void sort(train *mas)
{
    register int i,j;
    for(i=0; i<size-1; i++)
        for(j=i+1; j<size; j++)
            if (mas[i].name[0] > mas[j].name[0])
            {
                fflush(stdin);
                train swap = mas[i];
                mas[i] = mas[j];
                mas[j] = swap;
            }
}
Помогите пожалуйста вынести любую из функций в отдельный файл, сам пытался ничего не получилось.
Суть задания была такая:
В каждом задании по возможности ввод, вывод, сортировку оформить как отдельные функции (применить к этим функциям классы хранения), функцию сортировки массива структур поместить в отдельный файл, структурную переменную объявить как статическую, счетчики циклов объявить как регистровые переменные, передачу значений осуществить через внешние переменные, осуществить динамическое распределение памяти под структуры.
Заранее спасибо
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2013, 03:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Файлы и функции (C++):

Файлы и функции - C++
Народ... помогите с задачкой: Написать программу, вводящую в файл или читающую из файла ведомость студентов. Для получения места в...

Функции и файлы - C++
Всем здрасьте , я учусь по книге Хенкеманса , и тут возникли вопросы. У меня есть 3 файла , небольших : 1. Мой главный файлик ...

Файлы + функции - C++
Сформировать бинарный файл из элементов, заданной в варианте структуры, распечатать его содержимое , выполнить добавление элементов в...

Структуры, функции и файлы - C++
Для хранения данных о ноутбуках описать структуру вида, описанного в варианте 10. Написать функцию, которая читает данные о ноутбуках из...

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

Про функции и файлы - C++
Вобщем начал изучать С++ добрался до файлов задумал написать примитивный справочник телефонный с возможностью сохранения чтения и поиска в...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
СПП
25 / 25 / 2
Регистрация: 15.12.2012
Сообщений: 71
17.02.2013, 05:28 #2
Цитата Сообщение от maddoxx Посмотреть сообщение
Помогите пожалуйста вынести любую из функций в отдельный файл
Что-то вроде этого??? - каждая функция в отдельном файле, я думаю вы об этом просили

main.cpp
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
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <stdlib.h>
 
#include "struct_train.h"
#include "input.cpp"
#include "output.cpp"
#include "sort.cpp"
 
#define size 2
#define buf 256
#define dSize 10
#define NULL 0
 
 
extern void input(train *mas);
extern void output(train *mas);
extern void sort(train *mas);
 
int main()
{ 
    train *mas;
    mas = new train [size]; 
    if (mas != NULL)
    {
        input(mas);
        sort(mas);
        output(mas);
    }
    else
        printf("\nMenory error!\n");
    _getch();
 
return 0;
}
train.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef     train_h
#define     train_h
 
#define size 2
#define buf 256
#define dSize 10
#define NULL 0
 
struct train
{
    char name[buf];
    int  number;
    char date[dSize];
}; 
 
 
#endif  // train_h
input.cpp
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
#ifndef     input_cpp
#define     input_cpp
 
#include "struct_train.h"
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <stdlib.h>
 
#define size 2
#define buf 256
#define dSize 10
#define NULL 0
 
void input(train *mas)
{
    register int i,j;
    printf("\nInput information\n");
    for(i=0; i<size; i++)
    {
        fflush(stdin);
        printf("\n\nInput name for element [%d]: ",i+1);    //Считываем название поезда до нажатия Enter или до конца буфера (256 символов)
        for(j=0; j<buf; j++)
        {
            char tmp;
            scanf("%c",&tmp);
            if (tmp == '\n')
            {
                mas[i].name[j] = '*';
                j=buf;
            }
            else
                mas[i].name[j] = tmp;
        }
 
        fflush(stdin);
        printf("Input number for element [%d]: ",i+1);      //Считываем номер поезда
        scanf("%d",&mas[i].number);
 
        fflush(stdin);
        printf("Input date for element [%d] (format xx.xx.xxxx): ",i+1);    //Считываем дату отправления (10 символов с разделителем '.')
        for(j=0; j<dSize; j++)
            scanf("%c",&mas[i].date[j]);
    }
}
 
#endif  // input.cpp
output.cpp
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
#ifndef     output_cpp
#define     output_cpp
 
#include "struct_train.h"
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <stdlib.h>
 
#define size 2
#define buf 256
#define dSize 10
#define NULL 0
 
void output(train *mas)
{
    register int i,j;
    system("cls");
    printf("\nOutput information\n");
    for(i=0; i<size; i++)
    {
        printf("\n\nElement [%d]",i+1);         //Какой номер елемента выводим
        printf("\nName: ");                     //Выводим имя
        for(j=0; j<buf; j++)
        {
            if (mas[i].name[j] == '*')          //До первого искуственно образованного символа конца строки
                j = buf;
            else
                printf("%c",mas[i].name[j]);
        }
        printf("\nNumber: %d",mas[i].number);   //Выводим номер
        printf("\nDate: ");                     
        for(j=0; j<dSize; j++)
            printf("%c",mas[i].date[j]);            //Выводим дату
    }
}
 
#endif // output_cpp
sort.cpp
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
#ifndef     sort_cpp
#define     sort_cpp
 
#include "struct_train.h"
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <stdlib.h>
 
#define size 2
#define buf 256
#define dSize 10
#define NULL 0
 
void sort(train *mas)
{
    register int i,j;
    for(i=0; i<size-1; i++)
        for(j=i+1; j<size; j++)
            if (mas[i].name[0] > mas[j].name[0])
            {
                fflush(stdin);
                train swap = mas[i];
                mas[i] = mas[j];
                mas[j] = swap;
            }
}
 
#endif  // sort_cpp
1
maddoxx
0 / 0 / 0
Регистрация: 17.02.2013
Сообщений: 24
17.02.2013, 12:31  [ТС] #3
Да спасибо большое, именно это мне и нужно было
Вот только еще вопрос есть что и для чего нужно вот это:
C++
1
2
#ifndef     input_cpp
#define     input_cpp
и в каждом файле так. Это вроде бы макросы какие то?

Добавлено через 18 минут
Вот что у меня получилось:
source.cpp
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
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include "train.h"
#include "sort.cpp"
 
#define size 2
#define buf 256
#define dSize 10
#define NULL 0
 
extern void input(train *mas);
extern void output(train *mas);
extern void sort(train *mas);
 
void main()
{ 
    static train *mas;
    mas = new train [size]; 
    if (mas != NULL)
    {
        input(mas);
        sort(mas);
        output(mas);
    }
    else
        printf("\nMenory error!\n");
    _getch();
}
 
void input(train *mas)
{
    register int i,j;
    printf("\nInput information\n");
    for(i=0; i<size; i++)
    {
        fflush(stdin);
        printf("\n\nInput name for element [%d]: ",i+1);    //Считываем название поезда до нажатия Enter или до конца буфера (256 символов)
        for(j=0; j<buf; j++)
        {
            char tmp;
            scanf("%c",&tmp);
            if (tmp == '\n')
            {
                mas[i].name[j] = '*';
                j=buf;
            }
            else
                mas[i].name[j] = tmp;
        }
 
        fflush(stdin);
        printf("Input number for element [%d]: ",i+1);      //Считываем номер поезда
        scanf("%d",&mas[i].number);
 
        fflush(stdin);
        printf("Input date for element [%d] (format xx.xx.xxxx): ",i+1);    //Считываем дату отправления (10 символов с разделителем '.')
        for(j=0; j<dSize; j++)
            scanf("%c",&mas[i].date[j]);
    }
}
 
void output(train *mas)
{
    register int i,j;
    system("cls");
    printf("\nOutput information\n");
    for(i=0; i<size; i++)
    {
        printf("\n\nElement [%d]",i+1);         //Какой номер елемента выводим
        printf("\nName: ");                     //Выводим имя
        for(j=0; j<buf; j++)
        {
            if (mas[i].name[j] == '*')          //До первого искуственно образованного символа конца строки
                j = buf;
            else
                printf("%c",mas[i].name[j]);
        }
        printf("\nNumber: %d",mas[i].number);   //Выводим номер
        printf("\nDate: ");                     
        for(j=0; j<dSize; j++)
            printf("%c",mas[i].date[j]);            //Выводим дату
    }
}
train.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#ifndef     train_h
#define     train_h
 
#define size 2
#define buf 256
#define dSize 10
 
struct train
{
    char name[buf];
    int  number;
    char date[dSize];
}; 
 
#endif  // train_h
sort.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#ifndef     sort_cpp
#define     sort_cpp
 
#include "train.h"
#include <stdio.h>
 
#define size 2
 
void sort(train *mas)
{
    register int i,j;
    for(i=0; i<size-1; i++)
        for(j=i+1; j<size; j++)
            if (mas[i].name[0] > mas[j].name[0])
            {
                fflush(stdin);
                train swap = mas[i];
                mas[i] = mas[j];
                mas[j] = swap;
            }
}
 
#endif  // sort_cpp
И вот такие ошибки:
1. error LNK2005: "void __cdecl sort(struct train *)" (?sort@@YAXPAUtrain@@@Z) уже определен в sort.obj C:\Documents and Settings\Admin\Рабочий стол\rampage\rampage\source.obj
2. error LNK1169: обнаружен многократно определенный символ - один или более C:\Documents and Settings\Admin\Рабочий стол\rampage\Debug\rampage.exe 1

Я тут прочитал что нельзя заголовочный файл включать куда любо более одного раза. Может быть ошибки из за этого?

Добавлено через 12 минут
Все спасибо, исправил тем что создал отдельный заголовочный файл для функции в котором вот такой код
C++
1
2
3
4
5
6
#ifndef     sort_h
#define     sort_h
 
extern void sort(train *mas);
 
#endif  // sort_h
и подключал уже его к головному модулю
0
СПП
25 / 25 / 2
Регистрация: 15.12.2012
Сообщений: 71
17.02.2013, 14:46 #4
Цитата Сообщение от maddoxx Посмотреть сообщение
Да спасибо большое, именно это мне и нужно было
Вот только еще вопрос есть что и для чего нужно вот это: Код C++1
2
C++
1
2
#ifndef * * input_cpp
#define * * input_cpp
и в каждом файле так. Это вроде бы макросы какие то?
в народе их называют инпут-гуарды или как-то так, они не дают опасности включить один и тот же файл повторно
допустим есть главный файл
C++
1
2
// главный файл main.cpp
int main(){return 0;}
и есть 1 хидер
C++
1
2
3
4
5
6
7
8
//1 хидер head.h
// где включены такие библиотеки 
#include <iostream>
#include <clocale>
#include <cstdlib>
 
//и внимание
#include "__file2.cpp"
допустим в _file2.cpp тоже нужно работать с
C++
1
#include <iostream>
и получается что мы подключаем 2 раза одну и туже библиотеку, и компилятор на это будет ругаться





Если разбирать вот это конструкцию из макросов
C++
1
2
3
4
#ifndef     __file.cpp
#define    __file.cpp
    /* . . . */
#endif
то компиляция поисходит так
считывает перваыю сторочку #ifndef __file.cpp
то компилятор считывает эту ликсемы и принимает значение true так как раньше она не была определена
вторая строчка #define __file.cpp определяет эту ликсему

если компилятор в каком-то другом файле вновь включает эту строку то она определяется как false
и переходит к #else - (его тут нету, я им непользуюсь в таких случаях) или к
#endif - как в нашем варианте
и непозволяет подключить библиотеку дважды


Не по теме:

Как то так, я надеюсь более опытные программисты дополнят мой ответ, или исправят его))
но общие черты я помоему оюьяснил

1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2013, 14:46
Привет! Вот еще темы с ответами:

Структуры, функции и файлы - C++
Для хранения данных о цветных планшетных сканерах описать структуру вида: struct scan_info{ char model; //наименование модели ...

Функции, строки и файлы - C++
Подскажите, как оформить эту программу в виде последовательности функций. Все необходимые данные для функций должны передаваться им в...

Функции,файлы, структуры - C++
Для хранения данных о планшетных сканерах описать структура вида: struct scan_info{ char model; //наименование int price; //цена ...

Структуры,файлы,функции - C++
Задача:дан массив структур с координатами точек x и y соответственно.При помощи функций определить: 1)среднюю точку(среднее...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.02.2013, 14:46
Ответ Создать тему
Опции темы

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