
2. Задание на разработку
Задача на разработку: «Даны координаты 20 точек в пространстве. Найти номера двух точек, расстояние между которыми наибольшее (считать, что такая пара точек единственная). Реализовать, используя указатели.»
Листинг программы:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void main(void)
{
//Для решения задачи нам необходимо найти растояние между точками в простарнстве
//Для нахождения данного расстояния вы воспользуемся следующей формулой
//d=sqrt((Dx)^2+(Dy)^2+(Dz)^2)
// Объявление переменных, которые будут использоваться в программе
int i,*ui,j,*uj,T1,*uT1,T2,*uT2,*uk,k,otvetT1,*uotvetT1,otvetT2,*uotvetT2;
int *utochka[20][3],tochka[20][3];
double d,*ud,*umaxrasto,maxrasto;
// Присвоение значений указателям
// Необходимо т.к. в задаче говориться выполнить с помощью указателей.
ud=&d;
umaxrasto=&maxrasto;
uotvetT1=&otvetT1;
uotvetT2=&otvetT2;
uk=&k;
uT1=&T1;
uT2=&T2;
uj=&j;
ui=&i;
// Обнуления счетчика и расстояния
*uk=0;
*umaxrasto=0;
// Присвоение первой буквы переменной которая,
//будет использоваться для обозначения точки
*uT1='A';
// заполнения массива 20 точками с тремя произвольными координатами
for (*ui=0;*ui<20;*ui=*ui+1)
{
for (*uj=0;*uj<3;*uj=*uj+1)
{
tochka[*ui][*uj]=(rand() % 101) + 1; //заполнение точек координатами(x,y,z)
utochka[*ui][*uj]=&tochka[*ui][*uj];// Указатель на наши координаты
}
//вывод на экран точку(Буква) с её координатами
printf("Tochka %c(%d;%d;%d)\n",*uT1,*utochka[*ui][0],*utochka[*ui][1],
*utochka[*ui][2]);
*uT1=*uT1+1; //следующая буква
}
// Присвоение переменным начальных букв которые в последствие будут
//использоваться для отображения расстояния
*uT1='A';
*uT2='B';
// Цикл, который будет использоваться для рассчера растояний между точками
//и нахождения максимального расстояния
for(*ui=0;*ui<19;*ui=*ui+1)
{
for (*uj=*uk;*uj<19;*uj=*uj+1)
{
//расчет расстояния между точками
//
*ud=(pow(1.0*(*utochka[*uk][0] - *utochka[*uj+1][0]),2) +
pow(1.0*(*utochka[*uk][1] - *utochka[*uj+1][1]),2)
+ pow(1.0*(*utochka[*uk][2] - *utochka[*uj+1][2]),2));
*ud=sqrt(*ud);
//вывод сообщения на экран о расстоянии между точками
printf("Rasstojanie mezhdu %c%c = %lf\n",*uT1,*uT2,*ud);
// Проверка. Является ли данный отрезок максимальным
// начальное значение максимального расстояния взято за 0(начало программы)
if (*umaxrasto<*ud)
{
*umaxrasto=*ud;
printf("Maksimal'noe rasstojanie imeet otrezok %c%c = %lf\n",*uT1,
*uT2,*umaxrasto);
*uotvetT1=*uT1;
*uotvetT2=*uT2;
}
// Увеличиваем на единицу вторую букву. Т.е. у нас было B стало С и так далее
*uT2=*uT2+1;
}
// Увеличиваем буквы на единицу
*uT1=*uT1+1;
*uT2=*uT1+1;
// Начинаем отсчет цикла с 1, потом с 2 и так далее
*uk=*uk+1;
}
//Вывод на экран Ответа о максимальном расстоянии отрезка и его значении.
printf("\n\nOtvet: Maksimal'noe rasstojanie imeet otrezok %c%c = %lf\n\n\n",
*uotvetT1, *uotvetT2,*umaxrasto);
}
3. Блок-схема работы программы
Заключение
В ходе выполнения контрольной работы я изучил язык программирования С. При написании ответа на теоретический вопрос использовался интернет, а именно wikipedia. При написании программы был разработан простой, удобный и понятный алгоритм. Были проработаны все найденные недочеты, которые могли повлиять на конечный ответ. Также разработанная программа может использоваться для двух платформ, а именно: linux и windows. Поставленные задачи были реализованы полностью.
Для того, чтобы внести изменения в программу в будущем, необходимо, чтобы программа была досконально изучена программистом. Так же в программе должны быть выявлены все недочёты и в дальнейшем исправлены.
Список используемых источников
1 Интерне. Сайт http://ru.wikipedia.org .
2 Крупник А. Б. «Изучаем Cи» / Крупник А. Б. Минск, 2001 — 233 с.