Разделение программы на файлы - C (СИ)

Узнай цену своей работы

Формулировка задачи:

У меня есть программа, что являет собой небольшую структуру))
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <clocale>
 
const int n = 15;
int size = 0;
struct addresses {
    int index;
    char town[n];
    char street[n];
    int number;
 };
 
typedef addresses ADD;
ADD add[100];
     
void input(int size) {
    for(int i = 0; i < size; i++) {
        do {
            printf("№ %d Название города: ", i + 1);
            scanf("%s", &add[i].town);
        }while(!strcmp(add[i].town, ""));
        do {
            printf("\n Название улицы: ");
            scanf("%s", &add[i].street);
        }while(!strcmp(add[i].town, ""));
        printf("\n Номер дома: ");
        scanf("%d", &add[i].number);
        printf("\n Индекс: ");
        scanf("%d", &add[i].index);
    }
}
 
void show(int size) {
    printf("+---------------+---------------+---------------+---------------+\n");
    printf("+-----Город-----+-----Улица-----+---Номер дома--+-----Индекс----+\n");
    printf("+               +               +               +               +\n");
    for(int i = 0; i < size; i++) {
        printf("+---------------+---------------+---------------+---------------+\n");
        printf("%s               %s          %d               %d\n", add[i].town, add[i].street, add[i].number, add[i].index);
    }
    printf("+---------------+---------------+---------------+---------------+\n");
}
  
void sortByIndex(int size) {
    int tmp, i, j, pos;
    for(i = 0; i < size; ++i) 
    { 
        pos = i; 
        tmp = add[i].index;
        for(j = i + 1; j < size; ++j) 
        {
            if (add[j].index < tmp) 
            {
               pos = j; 
               tmp = add[j].index; 
            }
        }
        add[pos].index = add[i].index; 
        add[i].index = tmp; 
    }
}
 
void lvivAdd(int size) {
    float lAdd=0;
    float serPersent = 0;
    for(int i = 0; i < size; i++) {
                if(strcmp(add[i].town, "Lviv") == 0) {
                    lAdd++;
                }        
    }
    serPersent = lAdd / (float)size * (float)100;
    printf("\n\n Львовских адресов %.0f, что составляет %.1f % от всех адресов.\n", lAdd, serPersent);
} 
 
int main()
{
    setlocale (LC_ALL, "Russian");
    printf("Сколько адресов будет в структуре? ");
    scanf("%d", &size);
    input(size);
    show(size);
    sortByIndex(size);
    printf("\nВiдсортованi данi:\n");
    show(size);
    lvivAdd(size);
    system("pause");
    return 0;
}
Нужно разделить на

.h

и две

.cpp

. Создал

struct.h

туда занес оглашение структуры и функции, вроде правильно:
const int n = 15;
int size = 0;
struct addresses {
    int index;
    char town[n];
    char street[n];
    int number;
 };
typedef addresses ADD;
ADD add[100];
 
void input(int size);
void show(int size) 
void sortByIndex(int size) 
void lvivAdd(int size)
А вот как на

.cpp

делить, мне немного не понятно(
Если так:

1.срр

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <clocale>
#include <STRUCT.h>
int size = 0;
int main()
{
    setlocale (LC_ALL, "Russian");
    printf("Ñêîëüêî Г*äðåñîâ áóäåò Гў ñòðóêòóðå? ");
    scanf("%d", &size);
    input(size);
    show(size);
    sortByIndex(size);
    printf("\nГ‚iäñîðòîâГ*Г*i Г¤Г*Г*i:\n");
    show(size);
    lvivAdd(size);
    system("pause");
    return 0;
}
 
void input(int size) {
    for(int i = 0; i < size; i++) {
        do {
            printf("В№ %d ГЌГ*çâГ*Г*ГЁГҐ ãîðîäГ*: ", i + 1);
            scanf("%s", &add[i].town);
        }while(!strcmp(add[i].town, ""));
        do {
            printf("\n ГЌГ*çâГ*Г*ГЁГҐ óëèöû: ");
            scanf("%s", &add[i].street);
        }while(!strcmp(add[i].town, ""));
        printf("\n Íîìåð äîìГ*: ");
        scanf("%d", &add[i].number);
        printf("\n Г€Г*äåêñ: ");
        scanf("%d", &add[i].index);
    }
}
 
void show(int size) {
    printf("+---------------+---------------+---------------+---------------+\n");
    printf("+-----Ãîðîä-----+-----ÓëèöГ*-----+---Íîìåð äîìГ*--+-----Г€Г*äåêñ----+\n");
    printf("+               +               +               +               +\n");
    for(int i = 0; i < size; i++) {
        printf("+---------------+---------------+---------------+---------------+\n");
        printf("%s               %s          %d               %d\n", add[i].town, add[i].street, add[i].number, add[i].index);
    }
    printf("+---------------+---------------+---------------+---------------+\n");
}

2.срр

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <clocale>
#include <STRUCT.h>
 
extern ADD add[100];;
 
void sortByIndex(int size) { //ÑîðòèðîâêГ* âûáîðîì
    int tmp, i, j, pos;
    for(i = 0; i < size; ++i) // i - Г*îìåð ГІГҐГЄГіГ№ГҐГЈГ® ГёГ*ГЈГ*
    { 
        pos = i; 
        tmp = add[i].index;
        for(j = i + 1; j < size; ++j) // öèêë âûáîðГ* Г*Г*èìåГ*ГјГёГҐГЈГ® ýëåìåГ*ГІГ*
        {
            if (add[j].index < tmp) 
            {
               pos = j; 
               tmp = add[j].index; 
            }
        }
        add[pos].index = add[i].index; 
        add[i].index = tmp; // ìåГ*ГїГҐГ¬ ìåñòГ*ìè Г*Г*èìåГ*ГјГёГЁГ© Г± add[i].index
    }
}
 
void lvivAdd(int size) {
    float lAdd=0;
    float serPersent = 0;
    for(int i = 0; i < size; i++) {
                if(strcmp(add[i].town, "Lviv") == 0) {
                    lAdd++;
                }        
    }
    serPersent = lAdd / (float)size * (float)100;
    printf("\n\n Ëüâîâñêèõ Г*äðåñîâ %.0f, Г·ГІГ® ñîñòГ*âëÿåò %.1f % îò ГўГ±ГҐГµ Г*äðåñîâ.\n", lAdd, serPersent);
}
То не получается (((

Решение задачи: «Разделение программы на файлы»

textual
Листинг программы
CC = clang
#CC = gcc
CFLAGS = -O2 -Wall
LDFLAGS = -s
OBJ = main.o struct.o
NAME = program
 
all: ${OBJ}
        ${CC} ${LDFLAGS} ${OBJ} -o ${NAME}
 
clean:
        rm ${OBJ} ${NAME}

Объяснение кода листинга программы

  1. CC = clang - это строка определяет компилятор, который будет использоваться при компиляции кода. В данном случае используется clang.
  2. #CC = gcc - это строка комментария, которая не выполняет никаких действий, но объясняет, что изначально предполагалось использовать gcc в качестве компилятора.
  3. CFLAGS = -O2 -Wall - эта строка определяет флаги компилятора. В данном случае используются флаги -O2 и -Wall, которые оптимизируют код и проверяют его на ошибки соответственно.
  4. LDFLAGS = -s - эта строка определяет флаги линковщика. В данном случае используется флаг -s, который означает сокращенный (сжатый) режим вывода.
  5. OBJ = main.o struct.o - эта строка определяет объектные файлы, которые нужно скомпилировать. В данном случае объектные файлы называются main.o и struct.o.
  6. NAME = program - эта строка определяет имя исполняемого файла. В данном случае исполняемый файл называется program.
  7. all: ${OBJ} - эта строка определяет целевую точку для сборки. В данном случае сборка выполняется, если все объектные файлы присутствуют.
  8. ${CC} ${LDFLAGS} ${OBJ} -o ${NAME} - эта строка определяет команду компиляции и линковки. В данном случае компилятор CC компилирует объектные файлы OBJ и линкует их в исполняемый файл NAME. Флаги компилятора и линковщика -O2 -Wall -s также применяются к команде.
  9. clean: - эта строка определяет целевую точку для очистки. В данном случае при выполнении этой строки будут удалены все объектные и исполняемый файлы.
  10. rm ${OBJ} ${NAME} - эта строка определяет команду удаления файлов. В данном случае будут удалены объектные файлы OBJ и исполняемый файл NAME.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.667 из 5
Похожие ответы