Правила записи и использования
1. Отсутствие указанных в квадратных скобках элементов приводит к получению укороченного (неполного) оператора условного перехода. 2. В ветви «ДА» может быть один простой оператор или требуемое их количество, оформленное в виде одного составного оператора. 3. В ветви «НЕТ» должен быть только один простой (составной) оператор. 4. В каждой из ветвей возможно использование других операторов if для проверки дополнительных условий. В этом случае говорят о вложенных операторах if. При записи вложенных if рекомендуется для наглядности сдвигать их вправо от основного. Рассмотренные операторы условной передачи управления позволяют выполнить программирование алгоритма (рис. 4.3), представленного двумя условно-линейными изображениями (рис. 4.4). Анализ условно-линейных схем алгоритма и структур условных операторов позволяет сделать следующие выводы: реализовать в программе вариант алгоритма, в котором после проверки условия расположена ветвь “НЕТ” позволяет только неполный оператор условного перехода; программировать вариант алгоритма, в котором под проверкой условия располагается ветвь “ДА” возможно только с использованием полного оператора условного перехода. С учётом изложенного выполним идентификацию переменных и составим программы решения задачи о нагрузках на основания. Идентификация переменных представлена в табл. 4. Таблица 4
Составление программы по условно-линейной схеме варианта 1 Анализ первого варианта условно-линейной схемы, в которой под блоком проверки условия расположена ветвь «ДА», а затем ветвь «НЕТ», и структур полного и укороченного оператора if позволяет сделать вывод, что для программирования можно применять только полный if с аналогичным расположением ветвей. Вариант программы может выглядеть следующим образом: /* Задача 4.1. Простое ветвление. Полный if */ /* Разработал студент гр. А031 Степанов И.Г. */ #include <stdio.h> /* включающие */ #include <stdlib.h> /* директивы */ #include <math.h> /* препроцессора */ main() { float vc, roc, mkr, l, doc, k1, pi=3.1416, mc, f; int n; scanf(“%3f%5f%5f%4f%4f%4f”, &vc, &roc, &mkr, &l, &doc, &k1); printf(“\n vc=%5.2f roc=%5.3f mkr=%5.2f l=%5.1f” “doc=%5.2f k1=%4.2f\n”, vc, roc, mkr, l, doc, k1); mc=vc*roc; if(mc<=mkr) /* полный вариант оператора if */ { f=mc/pow(l*k1,2); /* операторы */ n=1; /* ветви “ДА” */ } else { f=mc/(pi*pow(doc,2)/4.); /* операторы */ n=2; /* ветви “НЕТ” */ } printf(“\n mc=%9.3f f=%9.3f n=%6d\n", mc, f, n); } 15.0.96314.85296.2.650.01 – данные для проверки ветви 1 15.1.15014.85296.2.650.01 – данные для проверки ветви 2 15.0.98014.85296.2.650.01 – данные для расчёта Несколько строк значений исходных данных при одном операторе ввода показывают необходимость последовательного троекратного выполнения программы. Это нужно для того, чтобы перед решением задачи с указанными в ней значениями, убедиться в работоспособности каждой из ветвей. Отладочные просчёты ведутся со специально подобранными значениями вводимых величин, как правило, граничными в заданном диапазоне. После отладки программы выполняется решение задачи с истинными исходными данными. Первые две строки численных значений вводимых переменных позволяют провести отладку (проверку работоспособности) программы по каждой из ветвей. При roс=0.963 (первая строка), проверяемое условие выполняется и рассчитывается ветвь «ДА». Для roc=1.15 (вторая строка), условие не выполняется и решение должно пройти по ветви «НЕТ». Третья строка позволяет получить конкретные результаты для реально заданного значения плотности. Составление программы по условно-линейной схеме варианта 2 Анализ второго варианта условно-линейной схемы, в которой под блоком проверки условия расположена ветвь «НЕТ», а затем ветвь «ДА», и структур полного и укороченного оператора if позволяет сделать вывод, что для программирования требуется применить структуру с использованием укороченного if и двух goto. Вариант программы может иметь вид: /* Задача 4.1. Простое ветвление. Неполный if */ /* Разработал студент гр. А031 Степанов И.Г. */ #include <stdio.h> /* включающие */ #include <stdlib.h> /* директивы */ #include <math.h> /* препроцессора */ main() { float vc, roc, mkr, l, doc, k1, pi=3.1416, mc, f; int n; scanf(“%3f%5f%5f%4f%4f%4f”, &vc, &roc, &mkr, &l, &doc, &k1); printf(“\n vc=%5.2f roc=%5.3f mkr=%5.2f l=%5.1f” “doc=%5.2f k1=%4.2f\n”, vc, roc, mkr, l, doc, k1); mc=vc*roc; if(mc<=mkr) goto M1; /*укороченный вариант оператора if*/ f=mc/(pi*pow(doc,2)/4.); /* операторы */ n=2; /* ветви “НЕТ” */ goto M2; M1: f=mc/pow(l*k1,2); /* операторы */ n=1; /* ветви “ДА” */ M2:printf(“\n mc=%9.3f f=%9.3f n=%6d\n", mc, f, n); } 15.0.96314.85296.2.650.01 – данные для проверки ветви 1 15.1.15014.85296.2.650.01 – данные для проверки ветви 2 15.0.98014.85296.2.650.01 – данные для расчёта Первые две строки численных значений вводимых переменных необходимы для отладки программы по обеим ветвям в зависимости от разных плотностей. Третья строка позволяет получить конкретные результаты для реально заданного значения плотности.
|