Иллюстрированный самоучитель по С++ для начинающих

Решения (задачи 140-158)

Задача 156.

// Бинарный поиск в упорядоченном массиве #include <stdio.h> #include <conio.h>
fine SZ 10 void main()
// размер массива
int a[SZ]; // массив целых
int obr; // образец для поиска
int ok; // 1 – массив упорядочен
int verh,niz; // границы части массива, в которой
// выполняется поиск int sred;
// индекс среднего элемента в области
// поиска
int found; 111 – поиск успешен int n;
// счетчик сравнений с образцом int i;
// ввод массива printf("*** Бинарный поиск ");
printf("в упорядоченном массиве ***\п");
printf("Введите массив (в едной строке %i ", SZ);
printf("целых чисел) и нажмите Enter\n");
printf(" › "); for (i = 0; i < SZ; i++)
scanf("%i", &a[i]);
// проверим, упорядочен ли массив по возрастанию ok = 1;
// пусть массив упорядочен i = 0; do
if (a[i] <= a[i+l]) i++;
else ok = 0; while (ok SS i < SZ -1);
if (!ok) {
puts("Введенный массив не является");
puts("упорядоченным по возрастаникЛп");
goto bye;
printf ("Введите образец для поиска (целое число) › ".);
scanf("%i", &obr);
// бинарный поиск verh = 0; niz = SZ -1;
found = 0; n = 0; do {
sred = (niz-verh) / 2 + verh; // делим массив пополам
if (a[sred] == obr)
found = 1; else
// в какой части, в верхней или в нижней,
// может находиться искомый элемент?
if (obr < a[sred])
niz = sred-1; //в верхней
else verh = sred+1; //в нижней } while (verh <= niz &&!found); if (found) {
printf("Совпадение с элементом номер %i ", sred);
printf("Выполнено %i сравнений", n);
else
printf("Образец в массиве не найден\п");
bye:
printf("\п Для завершения работы нажмите Enter");
getch();

Задача 157.

// Анализ роста учеников #include <stdio.h> #include <conio.h>
ttdefine SZ 30 //максимальное кол-во учеников
void main()
int r;
// рост ученика
int rost[SZ]; // рост всех учеников
int h = 0; // кол-во учеников, о которых
// введены сведения float sred; // средний рост int m = 0; // кол-во учеников, у которых
// рост больше среднего int sum =0; // суммарный рост int i = 0;
printf("*** Анализ роста учеников ***\п");
printf("Вводите рост (см) учеников\п");
printf("Для завершения введите 0 и нажмите Enter\n");
do
printf(" › "); scanf ("%i", &r); if (r) rost[i++] = r; sum += r;
} while (r && i < SZ);
if (n)
sred = (float) sum / n;
m = 0;
// сравним рост каждого со средним
for (i = 0; i < n; i++)
if (rost[i] > sred) m++;
printf("Средний рост: %3.2f см\п", sred);
printf("У %i учеников рост превышает среднийХп", m)
printf("\п Для завершения нажмите Enter");
getch();

Задача 158.

ш/ Вычисление суммы элементов массива (по столбцам)
finclude <stdio.h>
#include <conio.h>
#define ROW 3 // кол-во строк
#define COL 5 // кол-во столбцов
void main ()
int a[ROW][COL]; // массив
int s[COL]; // сумма элементов
int i,i;
printf("Хп Введите массив\п");
printf("После ввода элементов каждой строки,");
printf("\n%i целых чисел, нажимайте Enter\n", COL);
for (i = 0; i < ROW; i++) // ROW строк
printf(" › "); for (j = 0; j < COL; j++) scanf("%i", &a[i] [j]);
printf("Хп Введенный массив\п");
for (i = 0; i < ROW; i++)
{
for (j = 0; j < COL; j++)
printf("%i ", a[i][j]);
printf("\n");
// "очистим" массив s
for (i = 0; i < COL; i++) s[i] = 0;
// обработка
for (j = 0; j < COL; j++) // для каждого столбца
for (i = 0; i < ROW; i++) // суммируем эл-ты
+= a[i] [j];
ntf("
for (i = 0; i < COL; i++) printf("%i ", s [i]);
An.");
printf("\п Для завершения нажмите Enter");
getch();
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.