русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Компонента StringGrid


Дата добавления: 2013-12-24; просмотров: 2049; Нарушение авторских прав


В) Работа со строками и столбцами

Б) Диагонали квадратной матрицы

А) Простейшие примеры

Примеры алгоритмов, использующих двумерные массивы.

Многомерные массивы

И) Поиск совпадений

З) Сортировка массива

Задача 16. Отсортировать массив по возрастанию (т.е. расположить его элементы в порядке возрастания).

 

Для этой задачи придумано множество различных алгоритмов. Один из них - сортировка методом прямого выбора:

 

for(i=0; i<n; i++)

for(k=i+1; k<n; k++)

if (a[k]<a[i]) {

p=a[k]; // Обмен a[k] и a[i]

a[k]=a[i];

a[i]=p;

}

 

Здесь на каждой итерации внешнего цикла происходит помещение на i-ую позицию наименьшего из "оставшихся" (т.е. расположенных от i-ой позиции до конца массива) значений элементов.

Этот алгоритм включает в себя, таким образом, алгоритмы поиска минимума и обмена.

Задача 17. Найти в массиве элемент, повторяющийся наибольшее количество раз. (Если таких элементов несколько, вывести любой из них).

 

for(max=i=0; i<n; i++){

s=1; // s - число повторений i-го элемента

for(k=i+1; k<n; k++)

if (a[k]==a[i]) s++;

if (s>max) {

max=s; // max - число повторений x

x=a[i]; // x - значение наиболее

} // частого элемента

}

 

Заметим, что x здесь не присвоено начальное значение, т.к. оператор x=a[i]; обязательно выполнится хотя бы раз (max вначале = 0, а s не меньше 1), а использовано x будет лишь впоследствии.

 

Многомерные массивы отличаются от одномерных только тем, что каждый элемент характеризуется не одним, а двумя или более индексами. Они используются, например, для хранения таблиц (каждый элемент таблицы имеет 2 индекса - № строки и № столбца).



Декларация многомерного массива имеет следующий формат:

тип ID [размер1] [размер2]…[размерN] =

{ {список начальных значений},

{список начальных значений},

};

Списки начальных значений – атрибут необязательный.

Пример:

 

int a[3][3]={ {1,2,3}, {4,5,6}, {7,8,9} };

 

Аналогично, при обращении к конкретному элементу многомерного массива указывается имя массива и затем - последовательно индексы элемента, каждый в квадратных скобках; например:

a[2][1]

a[i+1][k]

 

Рассмотрим особенности работы с многомерными массивами на конкретном примере двумерного массива (двумерные массивы называют также матрицами):

 

#include <stdio.h>

void main()

{

int i, j;

int m[3][4] = { { 1, 2, 3, 4}, {11,12,13,14}, {21,22,23,24} };

for (i=0; i<3; i++) {

printf("\n %2d)", i+1);

for (j=0; j<4; j++)

printf(" %3d",m[ i ] [ j ]);

}

}

 

Результаты работы программы:

1) 1 2 3 4

2) 11 12 13 14

3) 21 22 23 24

 

 

Задача 1. Ввести матрицу и увеличить все ее элементы на единицу.

 

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

void main() {

int a[10][10],n,m,i,j;

// Ввод матрицы

cout<<"Vvedite n,m <=10:";

cin>>n>>m;

cout<<"Vvedite massiv:\n";

for (i=0; i<n; i++)

for (j=0; j<m; j++)

cin>>a[i][j];

// Увеличение на 1

for (i=0; i<n; i++)

for (j=0; j<m; j++)

a[i][j]++;

// Вывод матрицы

puts("Result:");

for (i=0; i<n; i++)

for (j=0; j<m; j++)

printf("%3d%c", a[i][j], j==m-1? '\n' : ' ');

 

getch();

}

 

Задача 2. Найти в матрице наибольший элемент и его позицию.

 

max=a[0][0];

im=jm=0;

for (i=0; i<n; i++)

for (j=0; j<m; j++)

if (a[i][j]>max) {

max=a[i][j];

im=i;

jm=j;

}

printf("Max element a[%d][%d]=%d\n", im, jm, max);

 

Задача 3. Переписать матрицу в одномерный массив.

 

int b[100];

for (i=k=0; i<n; i++)

for (j=0; j<m; j++)

b[k++]=a[i][j];

 

После выполнения этого участка программы k=n*m -количество элементов в полученном массиве.

 

 

 

Квадратной называется матрица, у которой число строк равно числу столбцов. Ее главной диагональю называется диагональный ряд элементов, идущий из верхнего левого угла в нижний правый, а побочной диагональю - идущий из верхнего правого угла в нижний левый:

 

 

Обозначим размер матрицы буквой N, индекс строки буквой I, а индекс столбца буквой J. Тогда у элементов, лежащих на главной диагонали, I = J , а у элементов, лежащих на побочной диагонали, I + J = N - 1 .

 

Задача 4. Найти сумму элементов матрицы, лежащих над главной диагональю.

 

Из рисунка видно, что у элементов, лежащих над главной диагональю,

I < J .

Можно учесть это в условии оператора if, либо цикла for :

 

for (i=s=0; i<n; i++)

for (j=i+1; j<n; j++)

s+=a[i][j];

 

 

Строка или столбец матрицы аналогичны одномерному массиву. Поэтому к ним применимы все алгоритмы, рассмотренные для одномерных массивов.

В применении же ко всей матрице это обычно требует дополнительного внешнего цикла (циклов).

 

Задача 5. Поменять местами первую и последнюю строки матрицы.

 

for (j=0; j<m; j++) {

p=a[0][j];

a[0][j]=a[n-1][j];

a[n-1][j]=p;

}

 

Задача 6. Найти сумму элементов в каждой строке матрицы.

 

Поскольку строк в матрице несколько, ответом будет не одно число, а одномерный массив:

 

int b[10];

 

for (i=0; i<n; i++) {

for (j=s=0; j<m; j++)

s+=a[i][j];

b[i]=s;

}

 

for(i=0; i<n; i++)

printf("%d ", b[i]);

puts("");

 

Задача 7. Найти сумму элементов в каждом столбце матрицы.

 

По сравнению с предыдущей задачей, здесь изменится порядок циклов (ведь сначала нужно целиком подсчитать сумму в одном столбце, и только затем - в другом и т.д.):

 

for (j=0; j<m; j++) {

for (i=s=0; i<n; i++)

s+=a[i][j];

b[j]=s;

}

 

for(j=0; j<m; j++)

printf("%d ", b[j]);

puts("");

 

 

Задача 8. В каждой строке матрицы определить количество элементов, равных нулю. Отсортировать строки матрицы по убыванию этого количества.

 

Прежде всего, нужно определить эти количества и занести их в одномерный массив (обозначим его b):

 

for (i=0; i<n; i++) {

for (j=s=0; j<m; j++)

if (a[i][j]==0) s++;

b[i]=s;

}

 

 

Затем нужно отсортировать матрицу. В процессе этого обменивать местами нужно как сами строки, так и соответствующие им элементы одномерного массива b (чтобы каждый его элемент продолжал соответствовать своей строке):

 

for (i=0; i<n; i++)

for (k=i+1; k<n; k++)

if (b[k]>b[i]) {

for(j=0; j<m; j++)

{ p=a[i][j]; a[i][j]=a[k][j]; a[k][j]=p; }

p=b[i]; b[i]=b[k]; b[k]=p;

}

 

В оконном режиме ввод и вывод массивов обычно организуется с использованием компоненты StringGrid, предназначенной для отображения информации в виде двумерной таблицы, каждая ячейка которой представляет собой окно однострочного редактора (аналогично окну Edit):

 

 

Доступ к информации осуществляется с помощью свойства Cells[ACol][ARow] типа AnsiString, где целочисленные значения ACol, ARow указывают позицию элемента.

Внимание! Первый индекс ACol определяет номер столбца, а второй ARow – номер строки в отличие от индексов массива.

В инспекторе объектов значения ColCount и RowCount устанавливают начальные значения количества столбцов и строк в таблице, а FixedCols и FixedRows задают количество столбцов и строк фиксированной зоны. Фиксированная зона выделена другим цветом и обычно используется для надписей.




<== предыдущая лекция | следующая лекция ==>
Е) Обмен местами | Общие понятия.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.129 сек.