Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Лабораторная работа 7 Указатели.

Работа добавлена на сайт samzan.net:

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 27.11.2024

Лабораторная работа №7                                              Указатели.

ПрограммированиЕ с использованием динамических двумерных массивов

Цель: программирование с использованием динамических двумерных массивов в интегрированной среде программирования Visual С++.

7.1. Объявление указателя

 Для всех переменных выделяются участки памяти размером, соответствующим типу переменной. Программист имеет возможность работать непосредственно с адресами, для чего определен соответствующий тип данных – указатель. Указатель имеет следующий формат:

тип *имя указателя

Например:

 int *a;     double *b, *d;      char *c;

Знак «звездочка» относится к имени указателя. Значение указателя соответствует первому байту участка памяти, на который он ссылается. На один и тот же участок памяти может ссылаться любое число указателей.

В языке Си существует три вида указателей:

1. Указатель на объект известного типа. Содержит адрес объекта определенного типа.

2. Указатель типа void. Применяется, еcли тип объекта заранее не определен.

3. Указатель на функцию.

7.2. Операции над указателями

Над указателями можно провести две унитарные операции:

1. &  (взять адрес). Указатель получает адрес переменной. Данная операция применима к переменным, под которые выделен соответствующий участок памяти.

2. *  (операция разадресации). Предназначена для доступа к величине, расположенной по данному адресу.

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

Указатели, как правило, используются при работе с динамической памятью (heap, или «куча»).  Для работы с динамической памятью в языке Си определены следующие функции: malloc, сalloc, realloc и free.

В языке C++ для выделения и освобождения памяти определены операции new и delete соответственно. Используют две формы операций:

1. Тип *указатель = new тип (значение) – выделение участка памяти в соответствии с указанным типом и занесение туда указанного значения.

     delete указатель – освобождение  выделенной памяти.

2.  Тип *указатель = new тип[n]  – выделение участка памяти размером n блоков указанного типа.

     delete [ ]указатель – освобождение  выделенной памяти.

7.3. Создание двумерного динамического массива

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

double  **umas2;

 umas2 = new double*[n];

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

    umas2[i] = new double[m];

       …

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

      delete [ ]umas2[i];

  delete [ ]umas2;

      umas2=NULL;

7.4. Пример выполнения работы

Условие 1. Найти минимальный и максимальный элементы матрицы и их координаты.

  min=max=a[0][0];

imin=jmin=imax=jmax=0;

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

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

{

 if (a[i][j]<min)  { min=a[i][j];   imin=i;   jmin=j; }

  else 

 if (a[i][j]>max) { max=a[i][j];  imax=i;  jmax=j; }

}

Условие 2. Упорядочить строки матрицы по неубыванию их максимальных элементов.

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

    {

 b[i]=a[i][0];

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

     if (a[i][j]>b[i]) b[i]=a[i][j];

    }

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

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

    if (b[i]>b[j])

    {

   t=b[i];

   b[i]=b[j];

   b[j]=t;

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

    {

   t=a[i][k];

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

   a[j][k]=t;

    }

    }

7.5. Индивидуальные задания 

В работе память для массива должна выделяться динамически. На экран выводить исходные данные и результат.

1. Задана матрица размером NxM. Получить массив B, присвоив его k-му элементу значение 0, если все элементы k-го столбца матрицы нулевые, и значение 1 -  в противном случае.

2. Задана матрица размером NxM. Получить массив B, присвоив его k-му элементу значение 1, если элементы k-й  строки матрицы упорядочены по убыванию, и значение 0 - в противном случае.

3. Задана матрица размером NxM. Получить массив B, присвоив его k-му элементу значение 1, если k-я строка матрицы симметрична, и значение 0 -  в противном случае.

4. Задана матрица размером NxM. Определить количество «особых» элементов матрицы, считая элемент «особым», если он больше суммы остальных элементов своего столбца.

5. Задана матрица размером NxM. Определить количество «особых» элементов матрицы, считая элемент «особым», если в строке слева от него находятся элементы, меньшие его, а справа – большие.

6. Задана символьная матрица размером NxM. Определить количество различных элементов матрицы (т.е. повторяющиеся элементы считать один раз).

7. Дана матрица размером NxM. Упорядочить ее строки по возрастанию их первых элементов.

8. Дана матрица размером NxM. Упорядочить ее строки по возрастанию суммы их элементов.

9. Дана матрица размером NxM. Упорядочить ее столбцы по возрастанию их наименьших элементов.

10. Определить, является ли заданная квадратная матрица n-го порядка симметричной относительно побочной диагонали.

11. Для матрицы размером NxM вывести на экран все седловые точки. Элемент матрицы называется седловой точкой, если он является наименьшим в своей строке и одновременно наибольшим в своем столбце или наоборот.

12. В матрице размером NxM переставить строки так, чтобы на главной диагонали матрицы были расположены элементы, наибольшие по абсолютной величине.

13. В матрице размером NxM найти максимальный среди элементов, лежащих ниже побочной диагонали, и минимальный среди элементов, лежащих выше главной диагонали.

14. В матрице размером NxM поменять местами строку, содержащую элемент с наибольшим значением, со строкой, содержащей элемент с наименьшим значением.

15. Из матрицы размером NxM получить матрицу размером (N–1) x (M–1) путем удаления из исходной матрицы строки и столбца, на пересечении которых расположен элемент с наибольшим по модулю значением.

7.6. Отчет по Лабораторной работе № 7 должен содержать:

  1.  Титульный лист с названием лабораторной работы и номером варианта;
  2.  Цель лабораторной работы;
  3.  Задание (согласно варианту);
  4.  Теоретические сведения;
  5.  Ход работы;
  6.  Программный код;
  7.  Блок – схема в электронном виде (согласно варианту);
  8.  Вывод по лабораторной работе.





1. контроль к 1
2. Применение демократических ценностей Евросоюза на примере Эстонии
3. Курсовая работа- Бюджетирование в производственной организации
4. Реферат- Особенности несостоятельности (банкротства) отдельных категорий должников - юридических лиц
5. химического факультета Ковалева Д
6. Государственное управление в сфере образования, науки и здравоохранения
7. Руководство по знанию законов 1
8. Тема 4 Основы языка SQL
9. тема для Вас интересна просим ответить на ряд вопросов и оставить свои контактные данные для того чтобы орга
10. . По сост. на 01-10-06 провед.
11. Боб Ресурс соликларни иктисодий мазмунм ва ахамияти
12. 26 Вторник 21 Среда
13. распространение Вашей печатной продукции флаеры визитки диски и т
14. Тема Лица подлежащие уголовной ответственности по российскому законодательству
15. Социальная работа в хосписе
16. парламентские выборы во Франции завершились убедительной победой левых сил и прежде всего Французской соц
17. объект могут быть включены информация и ее носители а также человеческий фактор
18. Население, ремесла и торговля Москвы XVI-го века
19. ТЕМА8 Наследственное право1
20. РЕФЕРАТ дисертації на здобуття наукового ступеня кандидата мистецтвознавства