Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Определение переменных программы ⇐ ПредыдущаяСтр 2 из 2
Для реализации алгоритма понадобятся такие переменные: n - параметр внешнего цикла, для него достаточно короткого целого значения: short n;x - параметр внутреннего цикла и одновременно - текущее значение абсциссы графика. Хотя его точность невелика, объявим его как double, в соответствии с общим стилем программирования на С. double x;y - текущее значение ординаты графика: double y;h - смещение в строке символа, который означает точку графика. Поскольку смещение не может превышать 80 (размер строки экрана), для этой переменной достаточно будет короткого целого: short h;Разработка текста программы Начинаем разработку текста программы с заголовка главной функции: int main(void)Далее открывается тело функции, и в него включаются объявления переменных (см. п.5.2). Кодовая часть программы начинается в соответствии со схемой алгоритма (блок 2) оператором-заголовком внешнего цикла. Это типичный цикл со счетчиком, он реализуется оператором: for (n=0; n<5; n++) {
В теле цикла прежде всего печатается заголовок таблицы (блок 3) операторами: printf("| X | Y |\n"); printf("|------------|------------|\n");
Блок 5 схемы алгоритма (проверка попадания на первый отрезок) реализуется условным оператором: if (x<1)
Если же предыдущее условие не выполняется, блок 6 схемы алгоритма (проверка попадания на второй отрезок) реализуется условным оператором:
Если же и это условие не выполняется, то мы имеем попадание на третий отрезок, и значение абсциссы вычисляется (блок 9) по уравнению для второй прямой: else y=7-2*x;Во внутреннем цикле мы выполняем вычисления для одного периода функции, но внешний цикл выполняется у нас 5 раз. Реальное значение абсциссы с учетом внешнего цикла составляет x+4n. Теперь, когда мы имеем абсциссу и ординату графика, можем выводить строку выходных данных (блок 10). Сперва выводим строку таблицы: printf("| %5.2lf | %10.7lf | ",x+n*4,y);
Следующий шаг - вывод в той же строку точки графика. После вывода строки таблицы в строке экрана осталось 57 свободных знакомест. На этом пространстве нам нужно показать значения y от -1 до +1. Если мы возьмем коэффициент масштабирования 10, то амплитуда графика составит 20 знакомест - достаточно для наглядного его представления. Масштабирование значения ординаты выполняется оператором: h=(y+1)*10;
При выполнении последнего оператора мы теряем дробную часть. Поскольку среди библиотечных функций языка C нет функции точного округления, мы выполняем такое округление сами: if (y-1-h*10>0.5) h++;Далее в строку экрана выводится (блоки 12-13) требуемое количество пробелов. В следующем цикле полученное ранее значение h работает как счетчик на вычитание. for (; h>0; h--) printf(" ");а потом выводится символ '*' и происходит переход на новую строку экрана: printf("*\n");На этом заканчивается внутренний цикл. После выхода из внутреннего цикла мы выводим сообщение оператору: printf("Нажмите клавишу Enter...");
На этом закрывается внешний цикл, а потом и тело функции main(). Полный текст программы приведен ниже. /****************************************************//* Лабораторная работа ╧7 *//* Вычисление значений периодической функции *//* Пример выполнения. Вариант ╧30. *//****************************************************/#include <stdio.h>#include <math.h>int main(void) { short n; /* параметр внешнего цикла */ double x, y; /* абсцисса и ордината графика */ short h; /* позиция точки на экране */ /* внешний цикл - для 5 периодов */ for (n=0; n<5; n++) { /* вывод заголовка таблицы */ printf("| x | y |\n"); printf("|-------|------------|\n"); /* внутренний цикл для одного периода */ for (x=0; x<4; x+=0.25) { /* 1-й отрезок */ if (x<1) y=2*x-1; /* 2-й отрезок */ else if (x<3) y=1-sqrt(1-(x-2)*(x-2)); /* 3-й отрезок */ else y=7-2*x; /* вывод строки таблицы */ printf("| %5.2lf | %10.7lf |",x+n*4,y); /* определение позиции точки */ h=(y+1)*10; if (y-1-h*10>0.5) h++; /* вывод точки графика */ for (; h>0; h--) printf(" "); printf("*\n"); } /* конец внутреннего цикла */ /* пауза до команды оператора */ printf("Нажмите клавишу Enter..."); getchar(); } /* конец внешнего цикла */ return 0;} /* конец программы */Отладка программы Форма вывода в приведенной программе такая, что нет настоятельной необходимости применять при отладке пошаговый режим. Однако логический план отладки следует составить поэтапным:
Результаты работы программы Мы приводим только часть результатов, полученных на экране при работе программы (для одного периода функции). Остальные результаты повторяют приведенные с другими значениями x. | x | y ||-------|------------|| 0.00 | -1.0000000 |*| 0.25 | -0.5000000 | *| 0.50 | 0.0000000 | *| 0.75 | 0.5000000 | *| 1.00 | 1.0000000 | *| 1.25 | 0.3385622 | *| 1.50 | 0.1339746 | *| 1.75 | 0.0317542 | *| 2.00 | 0.0000000 | *| 2.25 | 0.0317542 | *| 2.50 | 0.1339746 | *| 2.75 | 0.3385622 | *| 3.00 | 1.0000000 | *| 3.25 | 0.5000000 | *| 3.50 | 0.0000000 | *| 3.75 | -0.5000000 | *Нажмите клавишу Enter.... . .Выводы При выполнении лабораторной работы изучены вопросы:
|
||
Последнее изменение этой страницы: 2018-05-10; просмотров: 258. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |