Работа с компилятором GCC в командной строке.Урок 2.
Цель
Изучить структуру программ, исходный текст которых состоит из двух и более файлов. Приобрести практические навыки компиляции такой программы при помощи компилятора GCC в командной строке. Научится разбивать программу на несколько файлов с исходным текстом и использовать функции, объявленные в других файлах.
Кстати, на сайте читать удобнее
Исходные данные
• n количество кругов, прямоугольников и m количество точек.
• Опции компилятора: -lm, -c, -o,-s.
Используемые строки для компиляции
• Создание объектного файла:
GCC –с main.c –o main.o
GCC –с rnd.c –o rnd.o
GCC –с geo.c –o geo.o
• Cоздание исполнимого файла:
GCC main.o rnd.o geo.o -s -o neomain.exe -lm
Пример попадания точек в круг и квадрат + график
Вывод:
В итоге проделанной работы можно понять, как состоит структура файла и как в итоге из нескольких файлов с помощью компилятора gcc через командную строку можно создать один исполняемый файл.
Исходный текст программы
GEO.c
int tochka_v_kruge(float x, float y,float x0,float y0,float r)
{
if(((x-x0)*(x-x0))+((y-y0)*(y-y0))<=r*r)
{
return 1;
}
else
{
return 0;
}
}
int tochka_v_kvadrate(float x, float y, float x0, float y0, float x2, float y2)
{
if((x2
x)) {
return 0;
}
if((y2
y)) {
return 0;
}
return 1;
}
RND.c
#include
#include
#include
float rnd(float a, float b)
{
srand(time(NULL));
float x=(float)rand() / (float) RAND_MAX;
return (x*(b-a))+a;
}
MAIN.c
#include
#include
#include
#include "geo.h"
#include "rnd.h"
//using namespace std;
main()
{
srand(time(NULL));
int I = 0;
float x = rnd(0,5);
float y = rnd(0,5);
float r = rnd(0,5);
printf("krug x = %f, y = %f, r = %f", x, y, r);
for (I = 0; I < 3; I++)
{
float x0 = rnd(0,5);
float y0 = rnd(0,5);
if(tochka_v_kruge(x, y, x0, y0, r) == 1)
{
printf("tochka x = %f, y = %f vxodit v krug", x0, y0);
}
else
{
printf("tochka x = %f, y = %f nevxodit v krug", x0, y0);
}
}
x = rnd(0,5);
y = rnd(0,5);
float x2 = x + rnd(0,5);
float y2 = y - rnd(0,5);
printf("pramoygol'nik x = %f, y = %f, x2 = %f, РЅ2 = %f", x, y, x2, y2);
for (I = 0; I < 3; I++)
{
float x0 = rnd(0,5);
float y0 = rnd(0,5);
if( tochka_v_kvadrate(x, y, x0, y0, x2, y2))
{
printf("tochka x = %f, y = %f vxodit v pramoygol'nik", x0, y0);
}
else
{
printf("tochka x = %f, y = %f nevxodit v pramoygol'nik", x0, y0);
}
}
getchar();
}
GEO.h
extern int tochka_v_kruge(float x, float y,float x0,float y0,float r);
extern int tochka_v_kvadrate(float x, float y, float x0, float y0, float x2, float y2);
RND.h
extern float rnd(float a, float b);