Разделение программы на файлы - 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}
Объяснение кода листинга программы
CC = clang
- это строка определяет компилятор, который будет использоваться при компиляции кода. В данном случае используется clang.#CC = gcc
- это строка комментария, которая не выполняет никаких действий, но объясняет, что изначально предполагалось использовать gcc в качестве компилятора.CFLAGS = -O2 -Wall
- эта строка определяет флаги компилятора. В данном случае используются флаги-O2
и-Wall
, которые оптимизируют код и проверяют его на ошибки соответственно.LDFLAGS = -s
- эта строка определяет флаги линковщика. В данном случае используется флаг-s
, который означаетсокращенный
(сжатый) режим вывода.OBJ = main.o struct.o
- эта строка определяет объектные файлы, которые нужно скомпилировать. В данном случае объектные файлы называютсяmain.o
иstruct.o
.NAME = program
- эта строка определяет имя исполняемого файла. В данном случае исполняемый файл называетсяprogram
.all: ${OBJ}
- эта строка определяет целевую точку для сборки. В данном случае сборка выполняется, если все объектные файлы присутствуют.${CC} ${LDFLAGS} ${OBJ} -o ${NAME}
- эта строка определяет команду компиляции и линковки. В данном случае компиляторCC
компилирует объектные файлыOBJ
и линкует их в исполняемый файлNAME
. Флаги компилятора и линковщика-O2 -Wall -s
также применяются к команде.clean:
- эта строка определяет целевую точку для очистки. В данном случае при выполнении этой строки будут удалены все объектные и исполняемый файлы.rm ${OBJ} ${NAME}
- эта строка определяет команду удаления файлов. В данном случае будут удалены объектные файлыOBJ
и исполняемый файлNAME
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д