Реферат Курсовая Конспект
Краткая теоретическая справка - раздел Философия, Алгоритмические языки и основы Так Же, Как И Во Многих Других Языках Программирования, Двумерный Массив – Эт...
|
Так же, как и во многих других языках программирования, двумерный массив – это одномерный массив одномерных массивов элементов любого типа. Как и для одномерного массива указывается количество элементов в массиве, например,
int x[5][7]; // Двумерный массив целых чисел (5 строк по 7 элементов)
Для использования одного элемента двумерного массива необходимо указать оба индекса (индекс строки и индекс столбца), например,
x[2][4] = 5; // Четвертому элементу второй строки присваивается 5
Особенным для языка Си является то, что можно получить указатель на одномерный массив, входящий в состав двумерного массива. Например, адрес начала второго массива будет выглядеть так:
x[2].
Тот же самый адрес второго массива можно представить в виде
(x+2).
Здесь x – адрес начала двумерного, а смещение на 2 относительно этого начала дает увеличение адреса на 14 байтов (размер одномерного массива равен 7, а после умножения на 2 и получаем число 14).
Используя оператор разыменования, по адресу массива можно получить обращение ко второй строке двумерного массива
*(x+2).
Ну а теперь, если вспомнить тему № 5, легко получить другой вариант записи присваивания четвертому элементу второй строки значения 5
*(*(x+2)+4) = 5// Четвертому элементу второй строки присваивается 5.
В этой форме записи присутствуют два оператора разыменования. Поэтому часто в отношении переменной x (двумерного массива) говорят, что это указатель на указатель, хотя это утверждение требует некоторых пояснений, которые будут даны ниже, при рассмотрении примеров обработки двумерных массивов.
Для использования всего того, что сделано в работе по теме №5, можно просто копировать функции из файла решения задачи по теме №5, а можно использовать другой прием. Алгоритм следующий:
1.Создадим новый проект, например, с именем 7.
2.Копируем в рабочий каталог проекта 7 файл с решением задачи по теме №5, но с именем 5.h.
3.Редактируем файл 5.h, оставляя только заголовки функций, например, получится следующее содержимое
// 1. Инициализация генератора случайных чисел
void Randomize();
//2. Генератор случайного числа в диапазоне от 0 до range
int Random(int range);
// 3. Проверка повторения случайного числа
// c - указатель начала массива, n - индекс нового элемента
int Test_Repetition(int *c, int n);
// 4. Добавить новый элемент
// с - указатель начала массива, n - номер нового элемента
// range1, range2 – левая и правая границы диапазона
void New_Item(int *c, int n, int range1, int range2);
// 5. Заполнение одномерного массива
// c - массив, n - количество элементов
void Filling (int *c, int n, int range1, int range2);
// 6. Распечатка одномерного массива
void Print(int *c, int n);
// 7. Поиск минимального значения
// с – указатель на начало одномерного массива,
// n - количество элементов массива,
// index – указатель на индекс минимума
int Min(int *c, int n, int *index);
// 8. Создание дубликата массива в динамической памяти
int * Copy (int *c, int n);
// 9. Обмен элементов местами в массиве
void Exchange (int *c, int n, int k);
// 10 .Сортировка методом прямого поиска
void SearchSort ( int *c, int n );
4.Копируем в рабочий каталог проекта 7 файл с решением задачи по теме №5, но с именем 5.c.
5.Редактируем файл 5.c и получаем
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <time.h>
// 1. Инициализация генератора случайных чисел
void Randomize()
{
srand(time(0));
}
//2. Генератор случайного числа в диапазоне от 0 до range
int Random(int range)
{
return (rand() % range);
}
// 3. Проверка повторения случайного числа
// c - указатель начала массива, n - индекс нового элемента
int Test_Repetition(int *c, int n)
{ int x, j;
x = 0; // Считаем, что значение новое
// Цикл сравнения со всеми предыдущими
for (j=0; j<n; j++)
if (*(c+n)==*(c+j))
{
x = 1; // Элементы совпали
break;
}
return x;
}
// 4. Добавить новый элемент
// с - указатель начала массива, n - номер нового элемента
// range1, range2 – левая и правая границы диапазона
void New_Item(int *c, int n, int range1, int range2)
{ int x = 0; // Элементы массива разные
do
{
c[n] = Random(range2 - range1) + range1; // Новое значение
x =Test_Repetition(c,n); // Проверка на повторение
}
while (x==1); // Повторять, когда элементы совпали
}
// 5. Заполнение одномерного массива
// c - массив, n - количество элементов
void Filling (int *c, int n, int range1, int range2)
{ int i;
c[0]=Random (range2 - range1) + range1; // Элемент с индексом 0.
// Цикл заполнения массива
for (i=1;i<n; i++) // Цикл заполнения элементов значениями
New_Item(c, i, range1, range2);
}
// 6. Распечатка одномерного массива
void Print(int *c, int n)
{ int i;
for (i=0; i<n; i++)
printf("%4d",c[i]);
puts(""); // Переход на новую строку
}
// 7. Поиск минимального значения
// с – указатель на начало одномерного массива,
// n - количество элементов массива,
// index – указатель на индекс минимума
int Min(int *c, int n, int *index)
{ int i, min;
min = c[0]; // Начальное значение минимума
(*index) = 0; // Начальное значение индекса минимума
for ( i=1; i<n; i++ )
if (c[i]<min)
{
min = c[i];
(*index) = i;
}
return min;
}
// 8. Создание дубликата массива в динамической памяти
int * Copy (int *c, int n)
{ int *m, i;
// Резервирование памяти под дубликат массива
m = (int*)malloc(sizeof(int)*n);
// Копирование массива
for ( i = 0; i<n; i++ ) m[i] = c[i];
// Функция возвращает адрес нового массива
return m;
}
// 9. Обмен элементов местами в массиве
void Exchange (int *c, int n, int k)
{ int tmp; //Переменная для временного хранения данных
tmp = c[n];
c[n] = c[k];
c[k] = tmp;
}
// 10 .Сортировка методом прямого поиска
void SearchSort ( int *c, int n )
{ int i, min, indexMin; int *p;
for ( i=0; i<n-1; i++) // Определить массив с индексами от i до n
{ p = (c+i); // Задать адрес начала массива
min = Min (p, n-i, &indexMin); // Найти минимум в массиве
// Обменять местами минимальный элемент с первым
Exchange ( p, 0, indexMin ); }
}
6.Включаем файлы 5.h и 5.c в проект.
7.Копируем в рабочий каталог проекта 7 файл с решением задачи по теме №5, но с именем main.c. Редактируем файл к следующему виду (обратите внимание на стрку #include “5.h”)
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include "5.h"
#define N 15
inline void Rus() // Русификация вывода в консольное окно
{
setlocale( LC_CTYPE, ".1251" );
}
void Title()
{
puts("Лабораторная работа №5");
puts("Задание:");
puts("1. Заполнить массив неповторяющимися числами");
puts(" в диапазоне от -30 до +70.");
puts("2. Распечатать одномерный массив.");
puts("3. Найти минимальное значение в массиве и его индекс.");
puts("4. Сделать дубликат массива в динамической памяти.");
puts("5. Провести сортировку массива-дубликата методом");
puts(" прямого поиска");
puts("6. Распечатать результат сортировки.");
puts("7. Удалить дубликат из динамической памяти. ");
}
// Главная функция
int main()
{
int m[N];
int min, IndexMin;
int *Duplicate;
Rus();
Randomize();
Title();
puts(" Заполнение массива");
Filling(m,N,-30,70);
puts(" Распечатка массива ");
Print (m,N);
puts(" Минимальное значение массива ");
min = Min(m,N,&IndexMin);
printf("min = %d его индекс = %d ", min, IndexMin);
puts(" Создание дубликата массива ");
Duplicate = Copy(m,N);
puts(" Распечатка дубликата массива ");
Print (Duplicate,N);
puts(" Сортировка дубликата методом прямого поиска");
SearchSort(Duplicate,N);
puts(" Распечатка дубликата массива после сортировки ");
Print (Duplicate,N);
puts(" Удаление дубликата");
free(Duplicate);
return 0;
}
8.Компилируем и запускаем эту программу на исполнение, чтобы убедиться, что все преобразования сделаны правильно.
Теперь в любой программе можем использовать функции обработки одномерных массивов, подключив в программу подготовленные файлы 5.h и 5.c, что и сделаем в следующих примерах.
– Конец работы –
Эта тема принадлежит разделу:
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования... Алгоритмические языки и основы... Программирования...
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Краткая теоретическая справка
Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов