ݺߣ

ݺߣShare a Scribd company logo
Лекция 3 Разработка алгоритмов и программ  сверху вниз
Задача Дано целое  n   и вещественные  x1, x2, ..., xn . Составить программу печати заданных вещественных чисел в порядке возрастания (не убывания).
Вход: Введите количество чисел:   5 Введите числа: 12.5  6  14  -3  10   Выход: Упорядоченные числа: -3.0  6.0  10.0  12.5  14.0
Функциональная структура программы main Vvod Sort
1 этап.  Разработка  алгоритма функции  main ().
Алгоритм   : 1.  n  =  Vvod ( x );  /* Ввод  n   и  массива  x   */ 2.  Sort  ( x , n );  /* Сортировка массива  x  по  возрастанию*/ 3.  Вывод сортированного по возрастанию массива  x
2  этап
Алгоритм функции ввода данных   int  Vvod (float x[]) { Ввод  n; for (i=0; i<n; i++) Ввод  x[i]; Возврат  n ; }
Вывод массива x   Вывод заголовка &quot;Упорядоченные числа:&quot;;  for (i=0; i<n; i++) Вывод  x[i];
Метод последовательного нахождения максимума   2.5  6  14  -3  10 // рассматривается n элементов 2.5  6  10  -3  14 2.5  6  10  -3  // рассматривается n-1 элементов 2.5  6  -3  10  2.5  6  -3  // рассматривается n-2 элементов 2.5  -3  6 2.5  - 6  // рассматривается n-3 элементов -3  2.5
Алгоритм функции сортировки массива  x   по возрастанию   void  Sort (float  x[],  int  n) {  for  ( k = n -1;  k >0;  k --) { Определение максимума среди  элементов x[0], ... , x[k]  и  его  индекса  imax .   Обмен:  x[i max ] <--> x[ k ];  }
3 этап Определение максимума среди элементов x[0], ... , x[k]  и  его индекса  imax .
Фрагмент программы: imax =0; for (i =1; i <= k; i++) if  (x[i] > x[imax])  imax = i;
Программа: #include <stdio.h> #define  NMAX  100  /* Макс-е количество входных чисел */ /* Функция ввода данных * / int   Vvod  ( float x []) { int  n;  /* Количество чисел  */ int  i;  /* Индекс текущего числа  */ printf (&quot;Введите количество чисел&quot;); scanf (&quot;%d&quot;, &n); printf (&quot; Введите   числа &quot;); for (i=0; i<n; ++i) scanf(&quot;%f&quot;, &x[i]); return n; }
/* Функция сортировки  x  массива по возрастанию  */ void  Sort (float  x[],  int  n) {  int  k;  /* Максимальный индекс просмотра*/ float r ; /* Для обмена  */ int   imax ; /*  Индекс максимального элемента */ int  i;  /* Индекс текущего числа   */ for  ( k = n -1;  k >0;  k --) {  imax =0; for (i =1; i <= k; i++) if  (x[i] > x[imax])  imax = i; /*  Обмен  x [ imax ] и  x [ k ]  */ r = x[imax]; x[imax] = x[k]; x[k] = r; } }
/*  Главная функция  */ void main (void) {  float x[NMAX];  /* Обрабатываемые числа */ int  n;  /* Количество чисел  */ int  i;  /* Индекс текущего числа  */ /* 1. Ввод массива x  */ n = Vvod(x); /* 2. Сортировка массива x по возрастанию */ Sort(x,n); /* 3. Вывод массива x */ printf(&quot;Упорядоченные числа:&quot;); for (i=0; i<n; ++i) printf (&quot;  %4.1f&quot;, x[i]); }

More Related Content

лекция 3

  • 1. Лекция 3 Разработка алгоритмов и программ сверху вниз
  • 2. Задача Дано целое n и вещественные x1, x2, ..., xn . Составить программу печати заданных вещественных чисел в порядке возрастания (не убывания).
  • 3. Вход: Введите количество чисел: 5 Введите числа: 12.5 6 14 -3 10 Выход: Упорядоченные числа: -3.0 6.0 10.0 12.5 14.0
  • 5. 1 этап. Разработка алгоритма функции main ().
  • 6. Алгоритм : 1. n = Vvod ( x ); /* Ввод n и массива x */ 2. Sort ( x , n ); /* Сортировка массива x по возрастанию*/ 3. Вывод сортированного по возрастанию массива x
  • 8. Алгоритм функции ввода данных int Vvod (float x[]) { Ввод n; for (i=0; i<n; i++) Ввод x[i]; Возврат n ; }
  • 9. Вывод массива x Вывод заголовка &quot;Упорядоченные числа:&quot;; for (i=0; i<n; i++) Вывод x[i];
  • 10. Метод последовательного нахождения максимума 2.5 6 14 -3 10 // рассматривается n элементов 2.5 6 10 -3 14 2.5 6 10 -3 // рассматривается n-1 элементов 2.5 6 -3 10 2.5 6 -3 // рассматривается n-2 элементов 2.5 -3 6 2.5 - 6 // рассматривается n-3 элементов -3 2.5
  • 11. Алгоритм функции сортировки массива x по возрастанию void Sort (float x[], int n) { for ( k = n -1; k >0; k --) { Определение максимума среди элементов x[0], ... , x[k] и его индекса imax . Обмен: x[i max ] <--> x[ k ]; }
  • 12. 3 этап Определение максимума среди элементов x[0], ... , x[k] и его индекса imax .
  • 13. Фрагмент программы: imax =0; for (i =1; i <= k; i++) if (x[i] > x[imax]) imax = i;
  • 14. Программа: #include <stdio.h> #define NMAX 100 /* Макс-е количество входных чисел */ /* Функция ввода данных * / int Vvod ( float x []) { int n; /* Количество чисел */ int i; /* Индекс текущего числа */ printf (&quot;Введите количество чисел&quot;); scanf (&quot;%d&quot;, &n); printf (&quot; Введите числа &quot;); for (i=0; i<n; ++i) scanf(&quot;%f&quot;, &x[i]); return n; }
  • 15. /* Функция сортировки x массива по возрастанию */ void Sort (float x[], int n) { int k; /* Максимальный индекс просмотра*/ float r ; /* Для обмена */ int imax ; /* Индекс максимального элемента */ int i; /* Индекс текущего числа */ for ( k = n -1; k >0; k --) { imax =0; for (i =1; i <= k; i++) if (x[i] > x[imax]) imax = i; /* Обмен x [ imax ] и x [ k ] */ r = x[imax]; x[imax] = x[k]; x[k] = r; } }
  • 16. /* Главная функция */ void main (void) { float x[NMAX]; /* Обрабатываемые числа */ int n; /* Количество чисел */ int i; /* Индекс текущего числа */ /* 1. Ввод массива x */ n = Vvod(x); /* 2. Сортировка массива x по возрастанию */ Sort(x,n); /* 3. Вывод массива x */ printf(&quot;Упорядоченные числа:&quot;); for (i=0; i<n; ++i) printf (&quot; %4.1f&quot;, x[i]); }