Слайд 2
Бикмурзина А.Р., Захарова З.Х., Хохлов Д.Г.
КГТУ (КАИ), кафедра
АСОИУ
Ветвления
Условный оператор if для записи ветвлений:
if (выражение) оператор
S1 [else оператор S2]
Сокращенный условный оператор:
if (выражение) оператор S
Схема работы оператора if (полного и сокращенного)
Слайд 3
Бикмурзина А.Р., Захарова З.Х., Хохлов Д.Г.
КГТУ (КАИ), кафедра
АСОИУ
Ветвления
Условие ветвления алгоритма и программы – выражение языка С
в скобках (так же как в циклах). Условие истинно, если значение выражения ≠ 0,
ложно в противном случае. Оператор s может быть простым или составным.
Требуется вычислить значение величины
a*x2 + b2*x, если a < 0
y = x – a*b, если 0 ≤ a < 1
1 + x, если a ≥ 1
/* фрагмент программы для вычисления величины y */
float a, b, x;
cin >> a >> b>>x;
if ( a < 0 ) cout << “y = ” << a *x *x + b *b *x;
else if ( a < 1 ) cout << “y = ” << x - a * b;
else cout << “y = ” << 1 + x;
Слайд 4
Бикмурзина А.Р., Захарова З.Х., Хохлов Д.Г.
КГТУ (КАИ), кафедра
АСОИУ
Последовательная обработка
Последовательная обработка данных (однопроходная обработка)
применяется если:
1. необходимо вводить и обрабатывать последовательность элементов исходных данных, в том порядке, в каком она размещена в файле на внешнем носителе;
2. каждый элемент последовательности используется не более одного раза.
Не требуется хранения сразу всех элементов. Достаточно иметь одну переменную, содержащую текущий (очередной) элемент входной последовательности.
В некоторых случаях используются несколько текущих элементов (например, два-три соседних).
Слайд 5
Бикмурзина А.Р., Захарова З.Х., Хохлов Д.Г.
КГТУ (КАИ), кафедра
АСОИУ
Последовательная обработка
Элементами данных последовательности могут быть:
- числа;
- символы, строки;
- записи файла и др.
Последовательность исходных данных может задаваться:
1. с указанием количества элементов;
2. с признаком конца последовательности;
3. обрабатываться до конца входного файла.
Слайд 6
Бикмурзина А.Р., Захарова З.Х., Хохлов Д.Г.
КГТУ (КАИ), кафедра
АСОИУ
Последовательная обработка
1. Входная последовательность задается
с указанием количества элементов
n ≥ 0 в следующем порядке:
n, X1, X2, ... , Xn
Алгоритм 3.1.
Последовательная обработка заданного количества элементов.
Ввод n;
for (j=1; j<=n; j++)
{ Ввод X;
Обработка X;
}
Слайд 7
Бикмурзина А.Р., Захарова З.Х., Хохлов Д.Г.
КГТУ (КАИ), кафедра
АСОИУ
Последовательная обработка
2. Входная последовательность задается
с признаком конца:
X1, X2, ... , Xn, W
где n - неизвестное заранее количество элементов (n >= 0),
W -признак конца последовательности (известное заранее значение, отличающееся от элементов последовательности).
Алгоритм 3.2. Последовательная обработка элементов с признаком конца W.
Ввод X;
while (X != W)
{ Обработка X;
Ввод X;
}
Слайд 8
Бикмурзина А.Р., Захарова З.Х., Хохлов Д.Г.
КГТУ (КАИ), кафедра
АСОИУ
Последовательная обработка
Если количество повторений n > 0, то возможно
использование цикла с постусловием
Ввод X;
do
{ Обработка X;
Ввод X;
}
while (X != W);
Слайд 9
Бикмурзина А.Р., Захарова З.Х., Хохлов Д.Г.
КГТУ (КАИ), кафедра
АСОИУ
Последовательная обработка
3. Входная последовательность
X1, X2, ... , Xn
продолжается до конца входного файла,
n - неизвестное заранее количество элементов (n >=0), признак конца отсутствует.
Алгоритм 3.3. Последовательная обработка элементов до конца файла.
Ввод X;
while (не конец входного файла)
{ Обработка X;
Ввод X;
}
Слайд 10
Бикмурзина А.Р., Захарова З.Х., Хохлов Д.Г.
КГТУ (КАИ), кафедра
АСОИУ
Последовательная обработка
Конец файла при вводе с
клавиатуры задается комбинацией клавиш Ctrl+Z и Enter.
В программе на языке С конец входного файла можно обнаружить после попытки ввода данных за пределами файла.
Например, значением функции scanf является количество фактически введенных элементов. Если не удалось ввести ни одного элемента, значение функции равно -1.
Слайд 11
Бикмурзина А.Р., Захарова З.Х., Хохлов Д.Г.
КГТУ (КАИ), кафедра
АСОИУ
Последовательная обработка
Иногда в языке C можно
обойтись одной операцией ввода X, поместив ее внутри условия цикла.
while (ввод X и X != W)
Обработка X;
while (ввод X и не конец входного файла)
Обработка X;
Слайд 12
Бикмурзина А.Р., Захарова З.Х., Хохлов Д.Г.
КГТУ (КАИ), кафедра
АСОИУ
Сумма числовой последовательности
Задача 3.1.
«Сумма числовой последовательности».
Определить сумму
и среднее арифметическое значение элементов заданной числовой последовательности.
а) Входная последовательность задается с указанием количества элементов n ≥ 0 в следующем порядке:
n X1 X2 ... Xn
Тест. Вход: 4 2 3.5 1.5 5
Выход: Сумма = 12.00
Среднее = 3.00
Слайд 13
Бикмурзина А.Р., Захарова З.Х., Хохлов Д.Г.
КГТУ (КАИ), кафедра
АСОИУ
Сумма числовой последовательности
Используем алгоритм 3.1. для определения суммы элементов
числовой последовательности.
x – текущий элемент последовательности,
s – текущее значение суммы элементов.
До начала цикла по вводу и обработке элементов величину s обнуляем.
На каждом шаге цикла вводим одно очередное число и его значение добавляем к величине s.
Слайд 14
Бикмурзина А.Р., Захарова З.Х., Хохлов Д.Г.
КГТУ (КАИ), кафедра
АСОИУ
Сумма числовой последовательности
Схема алгоритма «Сумма числовой последовательности»
Слайд 15
Бикмурзина А.Р., Захарова З.Х., Хохлов Д.Г.
КГТУ (КАИ), кафедра
АСОИУ
Сумма числовой последовательности
Трассировочная таблица исполнения алгоритма задачи
«Сумма числовой
последовательности»
n=
s=
i=
x=
i<=n
Сумма=12.00
Среднее=3.00
4
0
1
+
2
2.0
2
+
3.5
5.5
3
+
1.5
7.0
4
-
5
12.0
5
+
Вывод
Слайд 16
Бикмурзина А.Р., Захарова З.Х., Хохлов Д.Г.
КГТУ (КАИ), кафедра
АСОИУ
Сумма числовой последовательности
/* Программа 3.1а. Сумма и среднее числовой
последовательности.*/
/* Задано количество чисел n>=0. */
#include
void main(void)
{ int n; /* Количество чисел */
float x, /* Текущее число */
sum=0; /* Текущая сумма */
int i; /* Номер текущего числа */
scanf("%d", &n);
for ( i = 1; i <=n; i++)
{ scanf("%f", &x); /* Ввод текущего числа */
sum = sum + x;
}
printf ("\n Сумма = %.2f\n Среднее = %.2f\n", sum, sum/n);
}
Слайд 17
Бикмурзина А.Р., Захарова З.Х., Хохлов Д.Г.
КГТУ (КАИ), кафедра
АСОИУ
Сумма числовой последовательности
/* Программа 3.1б. Сумма и среднее числовой
последовательности.*/
/* Задан признак конца W = 9999 */
#include
#define W 9999
void main(void)
{ float x, /* Текущее число */
sum=0; /* Текущая сумма */
int k = 0; /* Количество чисел */
scanf ("%f", &x);
while (x != W)
{ sum = sum + x; k++;
scanf("%f", &x);
}
if (k > 0)
printf ("\n Сумма = %.2f\n Среднее = %.2f\n", sum, sum/k);
}
Слайд 18
Бикмурзина А.Р., Захарова З.Х., Хохлов Д.Г.
КГТУ (КАИ), кафедра
АСОИУ
Сумма числовой последовательности
/* Программа 3.1в. Сумма и среднее числовой
последовательности.*/
/* Последовательность продолжается до конца файла */
#include
void main(void)
{ float x, /* Текущее число */
sum=0; /* Текущая сумма */
int k = 0; /* Количество чисел */
while (scanf ("%f", &x) >0) /* ввод чисел до конца файла */
{ sum = sum + x; k++;}
if (k>0)
printf ("\n Сумма = %.2f\n Среднее = %.2f\n", sum, sum/k);
}
Слайд 19
Бикмурзина А.Р., Захарова З.Х., Хохлов Д.Г.
КГТУ (КАИ), кафедра
АСОИУ
Максимум числовой последовательности
Задача 3.2.
«Максимум числовой последовательности»
Последовательность
вещественных чисел продолжается до конца файла. Составить программу нахождения максимального члена последовательности.
Тест. Вход: -5 3.1 2
Выход: Максимум = 3.100000
Слайд 20
Бикмурзина А.Р., Захарова З.Х., Хохлов Д.Г.
КГТУ (КАИ), кафедра
АСОИУ
Максимум числовой последовательности
Используем алгоритм 3.3. для обработки
последовательности.
x – текущий элемент последовательности,
max – максимум просмотренной части последовательности.
Начальное значение max равно первому члену последовательности.
На каждом шаге цикла вводим одно очередное число и если очередное число оказывается больше max, оно заменяет максимум.