Порядок выполнения работы




Лабораторная работа №8

Матрицы в языке Си.

Цель работы: изучение способов работы с динамическими двумерными массивами; реализация простых алгоритмов сортировки и поиска.

 

1. Описание и инициализация матриц

Рассмотрим механизм инициализации динамической двумерной матрицы. Для работы с целочисленной матрицей в программе необходимо описать указатель на указатель:

int **x;

После этого необходимо выделить память под массив указателей на строки матрицы:

x=(int**)malloc(sizeof(int*)*n); // массив из указателей.

Каждый из n указателей должен указывать на массив из m элементов

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

x[i] = (int*)malloc(sizeof(int)*m); // массив из m элементов.

У матрицы заданной таким образом n строк и m столбцов.

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

for(i=n-1;i>=0;i--)

free(x[i]);

free(x);

Для перебора элементов матрицы используются не один, а два цикла:

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

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

Обращение к элементу x[i][j]

Первый индекс элемента определяет номер строки, в которой он расположен, а второй – номер столбца.

Циклы, организованные выше, просматривают матрицу по строкам: элементы нулевой строки, элементы первой строки и т.д..

А такие циклы –

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

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

Обращение к элементу x[j][i]

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

Задать элементы матрицы можно такими же способами, как и элементы массива: ввести с клавиатуры, задать случайным образом, рассчитать по формуле.

Следующий фрагмент программы задет элементы матрицы случайным образом (n – количество строк матрицы, m – количество столбцов):

 

float **x;

int n,m;

x=(float**)malloc(sizeof(float*)*n);

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

x[i] = (float*)malloc(sizeof(float)*m);

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

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

x[i][j] = rand()%200/(rand()%100+1.);

Печать матриц

 

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

 

// печать элементов вещественной матрицы x

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

{

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

printf("%8.3f ",x[i][j]);

// переход на новую строку экрана

printf("\n");

}

 

Отладка программы

 

Как правило, большинство смысловых (логических) или алгоритмических ошибок в программе можно обнаружить, используя встроенный отладчик. Отладчик интегрированной среды позволяет выполнять программу по шагам, строка за строкой, выполнять программу до заданной строки, которую в дальнейшем будем называть точкой останова, просматривать текущие значения используемых переменных.

Для выполнения программы по шагам необходимо предварительно настроить отладчик, выполнив следующие шаги:

- Выберите меню СервисПараметры компилятора – вкладка Настройки – вкладка Компоновщик.

- Измените флаг напротив строки Генерировать отладочную информацию на Yes (рис. 1)

Рис. 1. Изменение настроек компоновщика

- Выберите меню ПроектПараметры проекта – вкладка Компилятор – вкладка Компоновщик.

- Измените флаг напротив строки Генерировать отладочную информацию на Yes (рис. 2)

Рис. 2. Изменение параметров проекта

Наведите курсор мыши на номер строки, в которой бы Вы хотели остановить программу (рис. 3) и кликнув на выбранной строке установите точку останова. При отладке больших программ можно заранее выбрать одну или несколько точек останова. Удалить точки останова можно так же при помощи мыши.

Рис. 3. Определение точки останова программы

Для запуска процесса отладки используйте пункт меню Выполнить - Отладка, либо горячую клавишу < F5 >, либо иконку панели инструментов .

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

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

Рис. 4. Процесс отладки

 

Выберите пункт Добавить в наблюдаемые и в появившемся диалоговом окне напишите имя переменной, значение которой Вы хотите просмотреть во время выполнения программы. На рис. 5 при отладке программы просматриваются значения переменных n и i.

Рис. 5. Наблюдаемые переменные

 

Рассмотрим несколько примеров отладки простейших программ.

Пример 1. Пусть в программе необходимо найти сумму чисел от 0 до 9 и вывести ее на экран. При программировании этого задания была допущена ошибка – значение переменной n не было проинициализировано. Программа при выполнении дает неверный ответ, так как в переменной n при таком написании программы может храниться произвольное значение. Найти такую ошибку поможет отладчик. Выполним программу по шагам, просматривая в окне отладки значение переменной n. При первом выполнении цикла значение переменной не равно 0.

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[])

{

int n,i;

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

n+=i;

printf("%d\n ",n);

system("PAUSE");

return 0;}

Проинициализируем переменную n при описании – int n = 0;

В следующем примере ошибка допущена в теле цикла while(). При таком написании цикл становится бесконечным. Для поиска подобных ошибок можно использовать точку останова в теле цикла.

Пример 2. В окне отладки просматривается переменная, от которой зависит истинность/ложность условия цикла, в данном примере это переменная n. При пошаговом выполнении становится понятно, что переменная n никогда не примет значение, большее 20.

#include <stdio.h>

#include <stdlib.h>

int main(int argc, char *argv[])

{

int n=12;

while (n<20)

{

n--;

}

printf("%d\n ",n);

system("PAUSE");

return 0; }

 

 

Порядок выполнения работы

1. Получить индивидуальный вариант

2. Изучить теоретические аспекты лабораторной работы

3. Изучить работу отладчика в среде DEV-CPP

4. Разработать и реализовать на языке Си алгоритм решения предложенных задач

5. Защитить работу, используя средства отладчика на тестовом примере с матрицей [5x5].

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-11-23 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: