Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Контрольная по ОАиП №1 Вариант 17.odt
Скачиваний:
9
Добавлен:
01.04.2014
Размер:
34.79 Кб
Скачать

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 с.