![]() Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву ![]() Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Запись алгоритмов с помощью диаграмм Несси - Шнейдермана (структограмм )Содержание книги
Поиск на нашем сайте
Язык Си является достаточно развитым для того, чтобы вообще обойтись без каких-либо особых способов записи алгоритмов. Однако для тех, кто только начинает программировать, может понадобится более наглядное средство иллюстрации алгоритмов. Раньше для таких целей широко использовались так называемые блок-схемы. Однако их применение очень легко может привести к появлению программ с неоправданно сложной структурой, в которой трудно разобраться. Для описания логики работы программ вместо блок-схем можно использовать диаграммы Несси - Шнейдермана, которые отличаются тем, что пригодны для описания только структуированных программ (состоящих из базовых логических структур). Рассмотрим базовые логические структуры и их представление в виде структограмм. Процесс - один или несколько операторов, выполнение которых происходит последовательно. Изображается в виде прямоугольника, управление в который передается сверху, а выходит из него снизу:
Проверка условия - управление передается в один из нижних процессов:
Цикл - пока. Процесс повторяется несколько раз пока истинно условие. 9.4. Рассмотрим некоторые типовые приемы программирования и использования рассмотренных выше операторов. Для подсчета различных объектов, получающихся в процессе работы программы используют счетчики, которые представляют собой переменные целого типа, меняющие свои значения в процессе выполнения счета. Использование счетчика покажем на примере программы, которая подсчитывает количество отрицательных значений функции sin(x) для x меняющегося от xn до xk с шагом h. Вначале запишем алгоритм с помощью диаграммы Несси-Шнейдермана.
Теперь можно рассмотреть программу на языке Си:
#include <math.h> #include <stdio.h>
/* использование счетчика */
void main(void) { double xn, xk, h, x; int Count; /* счетчик */
printf("Введите xn, xk, h \n"); scanf("%lf%lf%lf", &xn, &xk, &h); x = xn; Count = 0; /* инициализация счетчика */ while(x <= xk) { if(sin(x) < 0) Count++; /* выполнение счета */ x += h; } printf("Число отрицательных синусов = %d\n", Count); }
Довольно часто в программах приходится вычислять суммы и произведения. При нахождении суммы надо выделить переменную для ее хранения, обнулить ее, затем циклически добавлять к ней очередное значение. Найдем сумму отрицательных значений функции sin(x) для x меняющегося от xn до xk с шагом h. Следующая программа решает эту задачу:
#include <math.h> #include <stdio.h>
/* нахождение суммы отрицательных значений синуса */
void main(void) { double xn, xk, h, x, sum;
printf("Введите xn, xk, h \n"); scanf("%lf%lf%lf", &xn, &xk, &h); x = xn; sum = 0; /* обнуление суммы */ while(x <= xk) { if(sin(x)<0) sum += sin(x); /* вычисление суммы */ x += h; } printf("Сумма = %lf\n", sum); }
Для повышения эффективности программы можно описать еще одну переменную, например sinus и изменить оператор вычисления суммы:
if((sinus = sin(x)) < 0) sum += sinus;
В этом случае экономится время за счет однократного вычисления синуса. Для вычисления произведения необходимо выделить переменную для его хранения, занести в эту переменную единицу и в цикле домножать ее на очередное значение. Во многих сложных алгоритмах требуется запоминать факты наступления различных событий, связанных с процессом выполнения программы. Для этих целей используются флаги, которые представляют собой переменные целого типа, принимающие определенные значения в зависимости от этих событий. Простейший пример использования флагов иллюстрирует фрагмент программы, моделирующий работу оператора if с помощью оператора while. Иными словами, показывается, что при реализации программ можно вообще обойтись без оператора if. Действительно, рассмотрим следующий оператор if:
if(a > b) k = sin(x); else k = x * x;
Очевидно, такие же действия будет выполнять группа операторов, использующая флаг и приведенная ниже:
fl = 1; /* флаг */ while (a > b && fl) { k = sin(x); fl = 0; } while (fl) { k = x * x; fl = 0; }
В данном случае флаг сигнализирует о выборе одной из альтернатив оператора if. Следующая программа устанавливает факт наличия отрицательных значений sin(x) для x меняющегося от xn до xk c шагом h:
#include <math.h> #include <stdio.h>
/* использование флагов */
void main(void) { double xn, xk, h, x; int minus; /* флаг */
printf("Введите xn, xk, h \n"); scanf("%lf%lf%lf", &xn, &xk, &h); x = xn; minus = 0; /* предполагается, что нет не одного отрицательного значения */
while(x <= xk) { if(sin(x) < 0) minus = 1;
x += h; } if(minus) printf("Имеются отрицательные значения\n"); else printf("Все синусы положительные\n"); }
В данной программе флаг устанавливается в 1, как только появляется отрицательный синус. Оператор прерывания цикла Предыдущая программа имеет существенный недостаток: перебираются все значения синуса, хотя цикл можно остановить, когда появится первое отрицательное значение. Этот недостаток можно исправить, как показано в следующем фрагменте:
x = xn; minus = 0; while(x < xk &&!minus) { ... }
В языке Си есть специальный оператор для прерывания цикла. Это оператор "break;". Выполнение его в программе немедленно прерывает цикл, в котором он находится и управление передается на следующий за циклом оператор. Используя оператор break, цикл предыдущей программы можно переписать в виде:
x = xn; minus = 0; while(x < xn) { if(sin(x) < 0) { minus = 1; break; } x += h; }
Оператор продолжения цикла Оператор "continue;" вызывает переход к следующей итерации цикла, т.е. к очередной проверке условия. Естественно, все операторы тела цикла, находящиеся между continue и концом тела цикла пропускаются:
{ ...
... /* операторы пропускаются */ }
Операторы break и continue позволяют избавиться от необходимости применения оператора goto, поэтому последний в этом методическом пособии не рассматривается. Пример организации простейшего меню Современный стиль программирования предписывает использовать в программах различного рода меню, которые предоставляют пользователю возможность выбора одного из предложенных действий. Следующая программа вычисляет sin(x), cos(x), tan(x) в зависимости от выбора пользователя:
#include <math.h> #include <stdio.h>
/* Организация простейшего меню */ void main (void) { int loop; /* Флаг, который сигнализирует о конце работы */ int choice; /* Текущий выбор пункта меню */ double fun, x; /* Значения функции и аргумента */ printf("\nВведите аргумент x="); scanf("%lf", &x); loop=1; while (loop) { printf ("\n Введите номер функции:\n"); printf ("1. sin(x)\n2. cos(x)\n"); printf ("3. tan(x)\n4. Конец работы\n"); scanf ("%d", &choice); if (choice==1) fun=sin(x); else if (choice==2) fun=cos(x); else if (choice==3) fun=tan(x); else if (choice==4) { loop=0; continue; } else { printf("Неверный выбор\n"); continue; } printf("Значение функции %lf\n", fun); } }
Данная программа выводит на экран дисплея список возможных действий. Пользователь должен выбрать нужное, введя его номер. Для управления выходом из цикла и организации конца работы программы используется флаг loop.
|
||||||||||||||||||
Последнее изменение этой страницы: 2016-04-08; просмотров: 504; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.219.101.224 (0.01 с.) |