bsuir.info
БГУИР: Дистанционное и заочное обучение
(файловый архив)
Вход (быстрый)
Регистрация
Категории каталога
Другое [197]
Бухучет [16]
ВМиМОвЭ [4]
ОДМиТА [13]
ОЛОБД [17]
ООПиП [67]
ОС [19]
ПСОД [47]
Форма входа
Поиск
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Файловый архив
Файлы » ИСиТвЭ » Другое

Контрольная по ОАиП №1 Вариант 17
Подробности о скачивании 12.01.2011, 12:16
Содержание

Введение.......................................................................................................................3
1. Теоретический вопрос.............................................................................................4
2. Задание на разработку.............................................................................................8
3. Блок-схема работы программы..............................................................................11
Заключение..................................................................................................................12
Список использованных источников........................................................................13
Введение
В последнее время широкое распространение получила сфера информационных услуг. В первую очередь это связано с широким распространением компьютерной техники по всему миру.
В контрольной работе необходимо выполнить 2 задания. Первое задание является теоретическим вопросом. Второе — задача.
Для выполнения первого задания необходимо ответить на следующий вопрос: «Вложенные циклы». Чтобы ответить на него, необходимо воспользоваться каким-либо источником информации. Я в качестве источника информации буду использовать интернет, а конкретней wikipedia.
Для того, чтобы выполнить второе задание необходимо написать следующую программу: «Даны координаты 20 точек в пространстве. Найти номера двух точек, расстояние между которыми наибольшее (считать, что такая пара точек единственная). Реализовать, используя указатели.». Чтобы реализовать данную задачу понадобиться узнать следующий вопрос: «Как находиться расстояние от одной точки до другой в пространстве». После этого можно будет приступать к реализации задачи.
Тему моей контрольной работы можно считать актуально т. к. вложенные циклы являются неотъемлемой частью хорошей программы. Они используются для создания многомерных массивов, которые широко распространены при написании программ.
Программа которую необходимо разработать является начальным этапам для понимание следующих вопросов: «Что такое программа? Что такое консоль? Что такое консольная программа? и так далее».

1. Теоретический вопрос

Задание по теории «Вложенные циклы»

Цикл — разновидность управляющей конструкции в высокоуровневых языках программирования, предназначенная для организации многократного исполнения набора инструкций. Также циклом может называться любая многократно исполняемая последовательность инструкций, организованная любым способом (например, с помощью условного перехода).
Последовательность инструкций, предназначенная для многократного исполнения, называется телом цикла. Единичное выполнение тела цикла называется итерацией. Выражение определяющее, будет в очередной раз выполняться итерация, или цикл завершится, называется условием выхода или условием окончания цикла (либо условием продолжения в зависимости от того, как интерпретируется его истинность — как признак необходимости завершения или продолжения цикла). Переменная, хранящая текущий номер итерации, называется счётчиком итераций цикла или просто счётчиком цикла. Цикл не обязательно содержит счётчик, счётчик не обязан быть один — условие выхода из цикла может зависеть от нескольких изменяемых в цикле переменных, а может определяться внешними условиями (например, наступлением определённого времени), в последнем случае счётчик может вообще не понадобиться.
Исполнение любого цикла включает первоначальную инициализацию переменных цикла, проверку условия выхода, исполнение тела цикла и обновление переменной цикла на каждой итерации. Кроме того большинство языков программирования предоставляют средства для досрочного завершения цикла, то есть выхода из цикла независимо от истинности условия выхода.
Существует возможность организовать цикл внутри тела другого цикла. Такой цикл будет называться вложенным циклом. Вложенный цикл по отношению к циклу в тело которого он вложен будет именоваться внутренним циклом, и наоборот цикл в теле которого существует вложенный цикл будет именоваться внешним по отношению к вложенному. Внутри вложенного цикла в свою очередь может быть вложен еще один цикл, образуя следующий уровень вложенности и так далее. Количество уровней вложенности, как правило, не ограничивается.
Полное число исполнений тела внутреннего цикла не превышает произведения числа итераций внутреннего и всех внешних циклов. Например взяв три вложенных друг в друга цикла, каждый по 10 итераций, получим 10 исполнений тела для внешнего цикла, 100 для цикла второго уровня и 1000 в самом внутреннем цикле.
Одна из проблем, связанных с вложенными циклами — организация досрочного выхода из них. Во многих языках программирования есть оператор досрочного завершения цикла (break в Си, exit в Турбо Паскале, last в Perl и т. п.), но он, как правило, обеспечивает выход только из цикла того уровня, откуда вызван. Вызов его из вложенного цикла приведёт к завершению только этого внутреннего цикла, объемлющий же цикл продолжит выполняться. Проблема может показаться надуманной, но она действительно иногда возникает при программировании сложной обработки данных, когда алгоритм требует немедленного прерывания в определённых условиях, наличие которых можно проверить только в глубоко вложенном цикле.
Решений проблемы выхода из вложенных циклов несколько:
Простейший — использовать оператор безусловного перехода goto для выхода в точку программы, непосредственно следующую за вложенным циклом. Этот вариант критикуется сторонниками структурного программирования, как и все конструкции, требующие использования goto. Некоторые языки программирования, например, Модула-2, просто, не имеют оператора безусловного перехода, и в них подобная конструкция невозможна.
Альтернатива — использовать штатные средства завершения циклов, в случае необходимости устанавливая специальные флаги, требующие немедленного завершения обработки. Недостаток — усложнение кода, снижение производительности без каких-либо преимуществ, кроме теоретической «правильности» из-за отказа от goto.
Размещение вложенного цикла в процедуре. Идея состоит в том, чтобы всё действие, которое может потребоваться прервать досрочно, оформить в виде отдельной процедуры, и для досрочного завершения использовать оператор выхода из процедуры (если такой есть в языке программирования). В языке Си, например, можно построить функцию с вложенным циклом, а выход из неё организовать с помощью оператора return. Недостаток — выделение фрагмента кода в процедуру не всегда логически обосновано, и не все языки имеют штатные средства досрочного завершения процедур.
Воспользоваться механизмом генерации и обработки исключений (исключительных ситуаций), который имеется сейчас в большинстве языках высокого уровня. В этом случае в нештатной ситуации код во вложенном цикле возбуждает исключение, а блок обработки исключений, в который помещён весь вложенный цикл, перехватывает и обрабатывает его. Недостаток — реализация механизма обработки исключений в большинстве случаев такова, что скорость работы программы уменьшается. Правда, в современных условиях это не особенно важно: практически потеря производительности столь мала, что имеет значение лишь для очень немногих приложений.
Наконец, существуют специальные языковые средства для выхода из вложенных циклов. Так, в языке Ада программист может пометить цикл (верхний уровень вложенного цикла) меткой, и в команде досрочного завершения цикла указать эту метку. Выход произойдёт не из текущего цикла, а из всех вложенных циклов до помеченного, включительно.

Пример программы c вложенным циклом оператора for:

#include <stdio.h>
int rnd( int max ) {
return (rand() % max) + 1;
}
main()
{
int i,j,x,n[10][10];
for (i=0;i<10;i++)
{// внутрений цикл
for(j=0;j<10;j++)
{//вложенный цикл
n[i][j]=rnd(101);
printf("n[%d][%d]=%d",i,j,n[i][j]);
}}}

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

Категория: Другое | Добавил: iribnix
Просмотров: 1384 | Загрузок: 18
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]