Файл: Разработка циклических алгоритмов.pdf

ВУЗ: Не указан

Категория: Задание

Дисциплина: Программирование

Добавлен: 25.10.2018

Просмотров: 2852

Скачиваний: 49

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

 

Алгоритм  не  сильно  отличается  от  рассмотренного  в  лекционном 

примере.  Остановимся  на  различиях.  Для  накапливания  произведения 
необходимо  перед  циклом  переменной  р  присвоить  начальное  значение  1 
(умножение  на  1  не  изменяет  произведение).  Переменная  k  нужна  для 
выявления  ситуации  отсутствия  элементов,  меньших  заданного  значения; 
развилка после цикла позволяет обнаружить эту ситуацию.  
Далее приведена программа. 

include

 

<stdio.h> 

#include

 

<conio.h> 

#include

 

<math.h> 

void

 main() 

{

float

 a[10],c,p; 

int

 N,k,i; 

 printf(

"Введите N, c\n"

); 

 scanf_s(

"%d%f"

,&N,&c); 

 printf(

"Введите массив из %d элементов\n"

,N); 

 

/* Далее цикл для поэлементного ввода массива*/ 

 

for

 (i=0; i<N; i++) 

  scanf_s(

"%f"

, &a[i]);

/*Далее алгоритм по блок-схеме*/ 

 p=1; k=0; 
 

for

 (i=0; i<N; i++) 

  

if

 (a[i]<c) 

  {   p=p*a[i]; 
      k=k+1; 
  } 
 

if

 (k==0) 

     printf(

"Таких элементов нет\n"

); 

 

else

    

     printf(

" p=%f \n"

,p); 

 _getch(); 
 } 

 


background image

 

 
Пример  2.  
Дан  массив  а  из  N  элементов  (N

10).  Найти  минимальное 

значение среди элементов массива и номер элемента с таким значением. 

Таблица 2. Состав данных примера 2. 

Имя 

Смысл 

Тип 

Структура 

Исходные данные 

число элементов массива 

целый 

простая переменная 

а 

заданный массив 

вещественны
й 

одномерный массив из 10 
элементов 

Выходные данные 

min 

минимальный элемент 
массива 

вещественны
й 

простая переменная 

номер минимального 
элемента 

целый 

простая переменная 

Промежуточные данные 

счетчик элементов 
массива 

целый 

простая переменная 

Блок-схема алгоритма приведена на рис. 2. В начале каждого выполнения 

цикла min – это минимальное значение среди (i-1) первых элементов массива. 
Это значение min сравнивается с а[i]  и в результате определяется минимум из 
первых i элементов массива; при изменении текущего минимального значения 
запоминается  номер  элемента,  на  котором  достигается  текущий  минимум 
(оператор k:=i).  


background image

 

 
Если  минимальное  (одинаковое)  значение  имеют  несколько  элементов 

массива, то предложенный алгоритм выдаст наименьший из их индексов; при 
нестрогом  неравенстве  (a[i]

min)  будет  выдаваться  наибольший  номер.  В 

ситуации,  когда  надо  определить  номера  всех  элементов,  имеющих 
минимальное значение, алгоритм должен иметь два цикла обработки: в первом 
цикле  должен  определяться  минимум,  а  во  втором  по  сравнению  min=a[i] 
находиться номера элементов. 
 

#include

 

<stdio.h> 

Рис.2. Блок-схема программы примера 2 

д

а 

да 

 

k:=i+1 

нет 

Ввод N,  
a[i], i=0,…,N-1 

min:=a[0]; k:=1 

начало 

i:=1 

i

N-1 

a[i]<min 

min:=a[i] 

i:=i+1 

вывод min, k 

конец 


background image

 

#include

 

<conio.h> 

void

 main() 

{

float

 a[10],min; 

int

 N,k,i; 

 printf(

"Введите N\n"

); 

 scanf_s(

"%d"

,&N); 

 printf(

"Введите массив из %d элементов\n"

,N); 

 

/* Далее цикл для поэлементного ввода массива*/ 

 

for

 (i=0; i<N; i++) 

  scanf_s(

"%f"

, &a[i]);

/*Далее алгоритм по блок-схеме*/ 

 min=a[0]; k=1; 
 

for

 (i=1; i<N; i++) 

  

if

 (a[i]<min) 

  {   min=a[i]; 
      k=i+1; 
  } 
  
 printf(

" min=%f k=%d \n"

,min,k); 

 _getch(); 
 } 

 


background image

 

10 

 

4. Пример обработки матриц 

Дана матрица а из N строк и M столбцов (N

5, M

5). Для каждой строки 

матрицы  найти  сумму  элементов  и  определить  число  строк,  для  которых  эта 
сумма положительна. 

Таблица 3. Состав данных примера раздела 4. 

Имя 

Смысл 

Тип 

Структура 

Исходные данные 

число строк матрицы 

целый 

простая переменная 

М 

число столбцов 

целый 

простая переменная 

а 

заданная матрица 

вещественный  двумерный массив 

размером 5*5 

Выходные данные 

счетчик строк матрицы 

целый 

простая переменная 

сумма элементов i-ой 
строки 

вещественный  простая переменная 

число строк с положи-
тельной суммой эле-
ментов 

целый 

простая переменная 

Промежуточные данные 

счетчик столбцов 
матрицы 

целый 

простая переменная 

Обратим внимание, что считая s простой переменной мы предполагаем, 

что значения сумм всех строк должны последовательно записываться в одну 
ячейку памяти.  В этом случае в одном цикле по строкам мы должны 
вычислить сумму элементов строки s, вывести s и сравнить ее с нулем для 
вычисления k.  Можно было объявить s как одномерный массив (число его 
элементов равно числу строк матрицы); тогда алгоритм обработки мог  бы 
состоять из двух последовательных циклов по строкам: в первом из них 
вычислялись бы все элементы массива s и накапливалось значение k, а во 
втором производился бы вывод значений элементов массива s.  

Таким образом, этот несложный пример иллюстрирует два очень важных 

положения: