
- •Содержание
- •Введение
- •История развития компьютера
- •Типы и назначение компьютеров
- •Классы программного обеспечения (ПО) ЭВМ
- •Операционная система персонального компьютера (ПК)
- •Основы информатики
- •Информационные процессы
- •Информационная деятельность человека
- •Технические средства хранения информации
- •Кодирование информации
- •Системы счисления
- •Представление информации в компьютере
- •Представление текстовых данных
- •Представление изображений
- •Представление звуковой информации
- •Представление видео
- •Введение в программирование на языке Си
- •Этапы решения задачи на ЭВМ
- •Графический способ описания алгоритмов
- •Структура программы на языке С++
- •Описание переменных
- •Функции ввода-вывода
- •Условный оператор
- •Составной оператор
- •Операция условия
- •Оператор выбора
- •Циклические программы
- •Оператор цикла с постусловием
- •Оператор цикла с предусловием
- •Оператор цикла со счетчиком
- •Обработка массивов
- •Обработка одномерных массивов
- •Обработка двумерных массивов
- •Массивы и указатели
- •Пользовательские функции
- •Решение нелинейных уравнений
- •Нелинейные уравнения
- •Исследование уравнений и отделение корней
- •Методы поиска корней уравнения
- •Модификация табличного способа
- •Метод Ньютона (метод касательных)
- •Метод секущих
- •Файлы
- •Файлы данных и каталоги. Внутренняя организация и типы файлов
- •Текстовые файлы
- •Строки символов
- •Заключение
- •Список источников

{ printf("Введите %d-й элемент массива:\n»,i+1); scanf("%f», &a[i]);
}
/*_______ Соpтиpовка_________*/ do
{
fl = 1;// Флаг поднять
// В очередной раз просматриваем элементы массива for (i = 0; i<n-1; i++)
if ( a[i] > a[i+1] )
{ //Меняем местами соседние элементы d=a[i];
a[i]=a[i+1];
a[i+1]=d;
fl=0; //Если был обмен, то флаг опускаем
}
}
while (!fl); //Если fl = 1, то массив отсортирован for (i=0;i<n;i++)
printf("%7.2f», a[i]); getch();
}
Основной цикл do while прекращает выполняться, когда значение переменной fl остается равной 1 после выполнения вложенного цикла for. Это происходит в том случае, если ни одну пару элементов не удается переставить, что указывает на то, что все элементы стоят на своих местах.
Обработка двумерных массивов
Двумерные массивы имеют аналогию с таким понятием в математике, как матрица. Двумерный массив - это одномерный массив, элементами которого являются одномерные массивы (рис. 29).
Рис. 32
int b[N][M]; float a[3][4];
89

В описании N и M - количество строк и количество столбцов матрицы. Традиционно в качестве идентификатора номера строки используют символ i, а столбца - j. При изменении второго индекса j на единицу перемещение идет вдоль строки, а при изменении первого индекса i на единицу - вертикально вдоль столбца. Элемент одномерного массива а[i] является указателем на начало i -ой строки матрицы. К элементу двумерного массива, описанному выше, можно обратиться с помощью идентификатора а[i][j].
Ниже приведены примеры обращения к элементам двумерных массивов:
a[i][j] = 13.13; a[0][1] = 8; b[5][6] = 7; b[i][8] = 0;
|
При обработке двумерных массивов |
|
возникают такие же задачи, как и при обработке |
|
одномерных массивов: ввод элементов массива, |
|
нахождение суммы, произведения, среднего и т. |
|
д., поиск некоторого элемента в массиве, |
|
сортировка элементов массива, вывод элементов |
|
массива. |
|
На рис. 30 приведена схема алгоритма |
|
формирования элементов массива с помощью |
|
датчика случайных чисел, вывод элементов |
|
массива на экран, вычисление суммы всех |
|
элементов двумерного массива. Программа дана в |
|
примере pr20. |
|
В графической схеме алгоритма совмещены |
|
в одном цикле формирование, нахождение суммы |
|
и вывод элементов массива. Анализируя |
|
предложенную программу, можно заметить, что |
|
для ввода, вывода и нахождения суммы элементов |
|
массива используются два вложенных цикла. |
|
Обычно разбивают решение задачи на три этапа: |
|
ввод, обработка и вывод информацию. Так как |
|
массив располагается в непрерывной области |
|
памяти построчно, более рационально будет и |
|
обрабатывать элементы построчно. В программе |
|
во вложенных циклах для каждого значения |
|
индекса i индекс j изменяется от 0 до m-1, т. е. |
Рис. 33 |
индекс j изменяется чаще. При выводе элементов |
|
90 |
массива на экран для каждого значения i в теле цикла выполняются два оператора: первый оператор цикла выводит на экран в строчку элементы одной строки, а второй оператор вывода переводит курсор на новую строку, что как раз и обеспечивает вывод матрицы в виде прямоугольника.
//Пример pr20 #include <stdio.h> #include <conio.h> #include <stdlib.h> void main ()
{ const int N1 = 10, M1 = 10; int a[N1][M1], i, j, n, m;
printf ( «Введите число стpок и столбцов массива:» ); scanf ( «%d%d», &n, &m );
int s = 0;
printf ( «Полученный массив\n» ); for ( i = 0; i<n; i++ )
{for ( j = 0; j<m; j++ )
{a[i][j] = rand();
printf ( «%5d «, a[i][j] ); s = s+a[i][j];
}
printf ( «\n» );
}
printf ( «s = %d \n», s ); getch ();
}
Следующий пример иллюстрирует работу с диагоналями матрицы. Дана квадратная матрица. Заменить отрицательные элементы побочной диагонали суммой элементов главной диагонали матрицы. Главная диагональ проходит из левого верхнего в правый нижний угол. Так как работаем с квадратной матрицей, только на главной диагонали будут лежать элементы, индексы строк и столбцов которых одинаковы. Именно этот факт и используется при решении задачи. Мы не будем перебирать все элементы массива и проверять, совпали ли индексы, а сразу задаем оба индекса с помощью одного идентификатора i. Побочная диагональ проходит из правого верхнего в левый нижний угол матрицы. Нетрудно заметить, что при движении по побочной диагонали номер строки возрастает от 1 до n, номер столбца убывает от n до 1. Значит, только на
91

побочной диагонали лежат элементы, у которых номер столбца определяется по формуле j=n-i+1. В то же время, если обратить внимание на эту формулу в программе, она там другая j = n-i-1, так как индексы в языке С++ изменяются от 0. Программа приведена в примере pr21, графическая схема алгоритма - на рис. 31.
Рис. 34
//Пример pr21 #include <stdio.h> #include <conio.h> #include <stdlib.h> void main()
{
const int N1 = 10, //максимальнoе число стpок M1 = 10; // и столбцов матрицы
int a[N1][M1], //матрица i, // текущий номеp строки
j, // текущий номеp столбца
n, m, s; // текущий размер матрицы
printf ( «Введите число стpок и столбцов массива:» ); scanf ( «%d%d», &n, &m );
92