Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПСД программы (полн).doc
Скачиваний:
1
Добавлен:
17.04.2019
Размер:
289.79 Кб
Скачать

Максимум числовой последовательности

Задача 4.2. «Максимум числовой последовательности».

Последовательность вещественных чисел продолжается до конца файла. Составить программу нахождения максимального члена последовательности.

Тест. Вход: -5 3.1 2

Выход: Максимум = 3.100000

Используем алгоритм 4.3. для обработки последовательности. Используем следующие переменные:

x – текущий элемент последовательности,

max – максимум просмотренной части последовательности.

Для нахождения максимума используем следующий метод. Начальное значение max равно первому члену последовательности. На каждом шаге цикла вводим одно очередное число и если очередное число оказывается больше max, оно заменяет максимум.

/* Программа 4.2. Определение максимального элемента */

/* числовой последовательности */

#include <stdio.h>

void main(void)

{ float x, max; /* Текущее число, текущий максимум */

int k; /* Количество введенных чисел */

k = scanf("%f", &max); /* 1-е число */

if (k < 1) printf ("\nВходная последовательность пуста\n");

else

{ while ((k = scanf("%f", &x)) > 0)

if (x > max) max = x;

printf ("\nМаксимум= %f\n", max);

}

}

Задача 4.3. Задана непустая числовая последовательность. Определить, является ли последовательность знакочередующейся.

Тест_1. Вход: -5 3.1 -2 1 -7

Выход: Знаки чередуются.

Тест_2. Вход: -5 3.1 -2 -1 7

Выход: Знаки не чередуются.

Используем алгоритм 3.3. для обработки последовательности. Но одного текущего элемента последовательности недостаточно, будем сохранять два соседних текущих элемента:

xpred – предыдущий элемент последовательности,

x – текущий элемент последовательности.

При обработке последовательности необходимо искать нарушение чередования знаков (например, по значению произведения двух соседних элементов). Используем дополнительную переменную flag:

flag = 1 – последовательность знакочередующаяся, 0 – нет, инициализация: flag =1.

/* Программа 4.3. Знакочередование последовательности чисел */

#include <stdio.h>

void main(void)

{ float xpred, x; /* предыдущее и текущее числа */

int flag = 1; /* признак знакочередования */

/* flag=1- знаки чередуются, 0 – нет */

scanf("%f", &xpred) ;

while( scanf("%f", &x)>0)

{ if (xpred * x >= 0) flag = 0;

xpred = x;

}

if (flag) printf ("\n Знаки чередуются.");

else printf ("\n Знаки не чередуются.");

}

Последовательная обработка символов

Задача 5.1. Вывести коды введенных с клавиатуры символов. Последовательность символов завершается нажатием клавиши Esc.

Тест. Вход: Kazan 2007 <Esc>

Выход:

K=82, a=97, z=122, a=97, n= 110, =32, 2=50, 0=48, 0=48, 7=55,  = 27

/* Программа 5.1. Коды символов */

#include <stdio.h>

#include <conio.h>

main()

{ int sim;

printf("\n Введи текст, завершающийся клавишей Esc\n");

do

{ sim=getch(); putchar(sim);

printf("=%d, ",sim);

}

while( sim!=27);

puts("Нажми любую клавишу");

getch();

return 0;

}

Пояснения к программе.

1. Очередной символ вводится вызовом функции

sim=getch(); // ввод без эхо вывода на экран.

Объявление функции getch() содержится в заголовочном файле <conio.h>.

2. Вызовы функций putchar() и printf() выводят символ:

putchar(sim); // вывод в виде символа

printf("=%d, ",sim); // вывод числового кода символа

3. Функция puts() выводит строку.