- •Лабораторные работы по курсу" "Основы программирования и алгоритмические языки" часть I
- •2. Порядок выполнения лабораторных работ
- •2.1. Подготовка к выполнению
- •2.2. Задания для выполнения.
- •2.3. Выполнение задания
- •3. Отчет к лабораторной работе
- •4. Литература
- •Лабораторная работа ╧1 Работа в системе программирования Borland с
- •1. Цель работы
- •2. Подготовка каталога и запуск системы программирования
- •3. Настройка рабочей среды
- •3.1. Установка каталогов
- •3.2. Параметры компиляции
- •3.3. Параметры программы Make
- •3.4. Параметры компоновщика
- •3.5. Параметры отладчика
- •3.6. Сохранение параметров среды
- •4. Пользование подсказкой
- •5. Создание, редактирование и сохранение программы
- •6. Компиляция и выполнение программы
- •7. Диагностика ошибок и предупреждения компилятора и компоновщика
- •8. Отладка программы
- •9. Выводы
- •5. Пример решения задачи (вариант 30)
- •5.1. Разработка алгоритма решения
- •5.2. Определение переменных программы
- •5.3. Разработка текста программы
- •5.4. Отладка программы
- •5.5. Результаты работы программы
- •5.6. Выводы
- •Приложение 1. Базовые типы данных языка с
- •Приложение 2. Некоторые функции стандартного ввода-вывода
- •4. Варианты индивидуальных заданий
- •5. Пример решения задачи (вариант 30)
- •5.1. Разработка алгоритма решения.
- •5.2. Определение переменных программы
- •5.3. Разработка текста программы
- •5. Пример решения задачи (вариант 30)
- •5.1. Программа упаковки
- •5.2. Программа распаковки
- •5.3. Выводы
- •5. Пример решения задачи (вариант 30)
- •5.1. Разработка алгоритма решения.
- •5.2. Определение переменных программы
- •5.3. Разработка текста программы
- •5.4. Отладка программы
- •5.5. Результаты работы программы
- •5.6. Выводы
- •5. Пример решения задачи (вариант 30)
- •5.1. Разработка алгоритма решения.
- •5.2. Определение переменных программы
- •5.3. Разработка текста программы
- •5.4. Отладка программы
- •5.5. Результаты работы программы
- •5.6. Выводы
- •5. Пример решения задачи (вариант 30)
- •5.1. Разработка алгоритма решения.
- •5.2. Определение переменных программы
- •5.3. Разработка текста программы
- •5.4. Отладка программы
- •5.5. Результаты работы программы
- •5.6. Выводы
- •4. Варианты индивидуальных заданий
- •5. Пример решения задачи (вариант 30)
- •5.1. Разработка алгоритма.
- •5.2. Определение переменных программы
- •5.3. Разработка текста программы
- •5.4. Отладка программы
- •5.5. Результаты работы программы
- •5.6. Выводы
- •4. Варианты индивидуальных заданий
- •5. Пример решения задачи (вариант 30)
- •5.1. Разработка алгоритма решения.
- •5.2. Определение переменных программы
- •5.3. Разработка текста программы
- •5.4. Отладка программы
- •5.5. Результаты работы программы
- •5.6. Выводы
5.3. Разработка текста программы
Начинаем разработку текста программы с заголовка главной функции:
int main(void)
Далее открывается тело функции, и в него включаются объявления переменных (см. п.5.2).
Кодовая часть программы начинается в соответствии со схемой алгоритма (блок 2) оператором-заголовком внешнего цикла. Это типичный цикл со счетчиком, он реализуется оператором:
for (n=0; n<5; n++) {
Так как в теле цикла содержится несколько отдельных действий, значит, будет несколько операторов, тело цикла берется в операторные скобки.
В теле цикла прежде всего печатается заголовок таблицы (блок 3) операторами:
printf("| X | Y |\n");
printf("|------------|------------|\n");
После этого открываем внутренний цикл (блок 4). Параметр этого цикла - значение абсциссы x - принимает значения от 0 до 3.75 с шагом 0.25:
for (x=0; x<4; x+=0.25) {
Блок 5 схемы алгоритма (проверка попадания на первый отрезок) реализуется условным оператором:
if (x<1)
В случае выполнения этого условия, значение абсциссы вычисляется (блок 7) по уравнению для первой прямой:
y=2*x-1;
Если же предыдущее условие не выполняется, блок 6 схемы алгоритма (проверка попадания на второй отрезок) реализуется условным оператором:
else if (x<3)
В случае выполнения этого условия, значение абсциссы вычисляется (блок 8) по уравнению для полуокружности:
y=1-sqrt(1-(x-2)*(x-2));
В этом выражении для возведения в степень 2 применяется умножение. Функция sqrt() описана в файле math.h, так что включаем этот файл в начало программы:
#include <math.h>
Если же и это условие не выполняется, то мы имеем попадание на третий отрезок, и значение абсциссы вычисляется (блок 9) по уравнению для второй прямой:
else y=7-2*x;
Во внутреннем цикле мы выполняем вычисления для одного периода функции, но внешний цикл выполняется у нас 5 раз. Реальное значение абсциссы с учетом внешнего цикла составляет x+4n. Теперь, когда мы имеем абсциссу и ординату графика, можем выводить строку выходных данных (блок 10). Сперва выводим строку таблицы:
printf("| %5.2lf | %10.7lf | ",x+n*4,y);
Спецификации формата подобраны таким образом, чтобы значения x и y выводились в два столбца. Числовые параметры спецификации %lf должны обеспечить представление значений x и y с достаточной точностью. Функция printf() описана в файле stdio.h, поэтому мы включаем этот файл в начало программы:
#include <stdio.h>
Следующий шаг - вывод в той же строку точки графика. После вывода строки таблицы в строке экрана осталось 57 свободных знакомест. На этом пространстве нам нужно показать значения y от -1 до +1. Если мы возьмем коэффициент масштабирования 10, то амплитуда графика составит 20 знакомест - достаточно для наглядного его представления. Масштабирование значения ординаты выполняется оператором:
h=(y+1)*10;
Выбранное значение коэффициента масштабирования - 10 - может быть изменено при отладке).
При выполнении последнего оператора мы теряем дробную часть. Поскольку среди библиотечных функций языка C нет функции точного округления, мы выполняем такое округление сами:
if (y-1-h*10>0.5) h++;
Далее в строку экрана выводится (блоки 12-13) требуемое количество пробелов. В следующем цикле полученное ранее значение h работает как счетчик на вычитание.
for (; h>0; h--) printf(" ");
а потом выводится символ '*' и происходит переход на новую строку экрана:
printf("*\n");
На этом заканчивается внутренний цикл.
После выхода из внутреннего цикла мы выводим сообщение оператору:
printf("Нажмите клавишу Enter...");
И ждем нажатия клавЁши:
getchar();
На этом закрывается внешний цикл, а потом и тело функции 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;
} /* конец программы */
