Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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 и концом тела цикла пропускаются:
while(...) { ... if(...) 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; просмотров: 490; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.117.192.64 (0.007 с.) |