рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Краткая теоретическая справка

Краткая теоретическая справка - раздел Философия, Алгоритмические языки и основы Так Же, Как И Во Многих Других Языках Программирования, Двумерный Массив – Эт...

Так же, как и во многих других языках программирования, двумерный массив – это одномерный массив одномерных массивов элементов любого типа. Как и для одномерного массива указывается количество элементов в массиве, например,

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, что и сделаем в следующих примерах.

– Конец работы –

Эта тема принадлежит разделу:

Алгоритмические языки и основы

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования... Алгоритмические языки и основы... Программирования...

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Краткая теоретическая справка

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Краткая теоретическая справка и рекомендации по выполнению
Кроме выполнения вычислений заданием предусмотрено изучение наиболее распространенных математических функций, даже если они не используются при выполнении задания. Для каждой функции обрат

Формулы для решения задач
  Площадь треугольника: где а – основание, h – высота треугольника.

Тема №3. Циклы, символьный (литерный) тип данных
Задания: 1). Написать программу при помощи оператора цикла for (без применения массивов и прямой адресации курсора) для распечатки на экране монитора указан

Краткая теоретическая справка и рекомендации по выполнению
Для переменных типа массив в языке Си всегда в качестве индекса используется целое число. Это связано с тем, что переменная типа массив является указателем на начало этого одномерного массива. Анал

Краткая теоретическая справка и рекомендации по выполнению
Строка в языке Си представляет собой одномерный массив символов, последним элементом которой является символ конца строки – нуль (строка, завершающаяся нулем, то есть NULL terminated string).

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги