- •Н.В. Галина, и.Е. Белоцерковская, л.Ю. Катаева
- •Оглавление
- •Введение
- •Глава 1 Устройство и принципы работы персонального компьютера. Основы работы с ос Windows
- •1.1 Устройство и принципы работы персонального компьютера
- •1.2 Назначение блоков и их краткая характеристика
- •1.3 Программное обеспечение персонального компьютера
- •Глава 2 Понятие алгоритма. Виды алгоритмов
- •1. Линейный алгоритм,
- •2. Разветвляющийся алгоритм,
- •3. Циклический алгоритм.
- •Глава 3 Понятие блок-схемы. Основные типы блоков. Реализация основных алгоритмов
- •3.1 Понятие блок-схемы
- •3.2 Линейный алгоритм
- •3.3 Разветвляющийся алгоритм
- •3.4 Циклический алгоритм
- •4.2 Начало работы в приложении Visual Studio
- •Глава 5 Графическая и программная реализации алгоритмов
- •5.1 Реализация линейного алгоритма
- •5.2 Реализация разветвляющегося алгоритма
- •5.3 Реализация циклического алгоритма
- •5.4 Исследование таблицы значений функции
- •Глава 6 Понятие массива. Одномерные и двумерные массивы
- •6.1 Одномерные массивы
- •6.2 Двумерные массивы
- •6.3 Исследование двумерного массива
- •Глава 7 Задания и варианты для лабораторных работ. Методические указания
- •7.1 Задания и варианты для лабораторных работ
- •7.2 Методические указания и примеры выполнения лабораторных работ
- •Литература
- •Галина Наталья Владимировна Белоцерковская Ирина Ефимовна Катаева Лилия Юрьевна
- •603950, Г. Нижний Новгород, ул. Минина, 24.
6.2 Двумерные массивы
У двумерного массива имеется два индекса: i – номер строки, j – номер столбца.
Индексация двумерного массива представлена на рис. 6.4.
Рис. 6.4 Индексация двумерного массива
Для использования двумерного массива в программе, необходимо:
1. Объявить массив в функции main():
тип_данных имя_массива [количество строк][количество столбцов];
double a[5][9]; // двумерный массив из 5 строк, 9 столбцов
2. Проинициализировать массив;
3. Провести вычисления, исследования.
Способы инициализации двумерного массива a[n][m]:
1. инициализация числами:
double a[2][3]={{1, 2.6, -9}, {0, -2.81, 134.05}};
2. с клавиатуры:
for(i=0; i<n; i=i+1){
for(j=0; j<m; j=j+1){
cout<<”a[“<<i<<”][”<<j<<”]=”;
cin>>a[i][j];
}
}
3. по формуле: ai,j=i+j
for(i=0; i<n; i=i+1){
for(j=0; j<m; j=j+1){
a[i][j]=i+j;
}
}
6.3 Исследование двумерного массива
1. Поменять местами строки с индексами i1, i2:
Рис. 6.5. Блок-схема |
for(j=0; j<m; j=j+1){ tmp=a[i1][j]; a[i1][j]=a[i2][j]; a[i2][j]=tmp; }
|
Примечание. Если требуется поменять местами столбцы с индексами j1, j2, то цикл организуется по i.
2. Вычислить формулу
:
Рис. 6.6. Блок-схема |
S=0; for(i=0; i<n; i=i+1){ f=…; S=S+f; } cout<<”S=”<<S<<endl; |
Примечание. Если
требуется вычислить выражение по формуле
,
то перед циклом надо задать «P=1»,
в теле цикла «P=P•f».
3. Условия для исследования квадратной матрицы (количество строк и столбцов совпадает):
для элементов на главной диагонали: i=j;
для элементов над главной диагональю: i<j;
для элементов под главной диагональю: i>j;
для элементов на побочной диагонали: i+j=n-1;
для элементов над побочной диагональю: i+j<n-1;
для элементов под побочной диагональю: i+j>n-1.
Примечание. Если требуется определить, например, сумму элементов, находящихся над главной диагональю, то задаем двумерный цикл по i, j и в теле цикла ставим дополнительное условие «i<j».
Пример 6.3. Массив
а(6,
8) задан формулой аi,j=3i-5j.
Найти сумму элементов во второй строке,
поменять местами первую и третью строки,
найти произведение по формуле
.
Решение. Данную задачу можно разбить на несколько этапов:
1. задать массив по формуле и вывести его на экран;
2. найти сумму элементов во второй строке и вывести ее на экран;
3. поменять местами первую и третью строки;
4. вывести на экран измененный массив;
5. найти произведение по формуле и вывести его на экран.
Каждый указанный этап решается с помощью циклов. Все циклы целесообразно использовать с предусловием (в программе – оператор for). На первом этапе следует организовать двумерный цикл по i, по j, т.к. необходимо задать значениями и вывести на экран весь массив. На втором этапе перед циклом необходимо задать S=0, а в теле цикла по j насчитывать значение S. Индекс i задаем как 1, что соответствует второй строке. Следует отметить, что нельзя считать сумму по какой-то определенной строке (столбце, диагонали) внутри двумерного цикла, т.к. в этом случае S будет больше в разы (зависит от количества строк/столбцов).На третьем этапе индексы строк берем i=0 – для первой строки, i=2 – для третьей строки. Замена строк организуется в одномерном цикле по j.На четвертом этапе матрица а должна быть отражена на экране. Нам требуется показать, что замена строк выполнена верно.На пятом этапе перед циклом следует задать P=1, а в теле цикла насчитывать произведение. Цикл организуем одномерный по i от 0 до 2 включительно, т.к. согласно формуле изменяется только i.
Рис. 6.7. Блок-схема
Код программы (Visual Studio) с оператором for (предусловие):
// proga29.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
double a[6][8];
double S, tmp, P;
int i, j;
cout<<"Massiv a:"<<endl;
for(i=0; i<6; i=i+1){
for(j=0; j<8; j=j+1){
a[i][j]=3.0*i-5.0*j;
cout<<setw(5)<<a[i][j];
}
cout<<endl;
}
S=0;
for(j=0; j<8; j=j+1){
S=S+a[1][j];
}
cout<<"S="<<S<<endl;
for(j=0; j<8; j=j+1){
tmp=a[0][j];
a[0][j]=a[2][j];
a[2][j]=tmp;
}
for(i=0; i<6; i=i+1){
for(j=0; j<8; j=j+1){
cout<<setw(5)<<a[i][j];
}
cout<<endl;
}
P=1;
for(i=0; i<2; i=i+1){
P=P*(a[i][1]-a[i][0]);
}
cout<<"P="<<P<<endl;
return 0;}
Результат выполнения программы:
