Мегаобучалка Главная | О нас | Обратная связь


Передача двумерных массивов



2019-05-24 210 Обсуждений (0)
Передача двумерных массивов 0.00 из 5.00 0 оценок




 

Способ 1. При передаче двумерного массива в функцию следует учитывать, что количество элементов в строке массива является частью типа имени этого массива. Так например, для массива int A [3] [4] имя массива А имеет тип int (*) [4], т.е. А - это указатель на одномерный массив из 4 элементов типа int.

Поэтому необходимо передавать два параметра: имя массива и количество строк в массиве.

Пример.

 

int sum2 (int A [] [4], int M); // прототип

int sum2 (int A [] [4], int M); // заголовок

{

….

} // телофункции

void main ()

{

int res, A [] [4] = {{2,1,3,2}, {2,3,4,5}}; // две строки, четыре столобца

res = sum2 (A,

2); // вызов функции sum2

}

 

Формальный аргумент имени массива может иметь вид int (*A) [4].

int sum2 (int (*A) [4], int M); // прототип

Для определения размера массива при вызове функции можно использовать выражение sizeof (A) /sizeof (A []). Например,

 

res = sum2 (A, sizeof (A) /sizeof (A []));

 

Способ 2. Другой способ передачи двумерного массива в функцию состоит в погружении фактического двумерного массива с размерами MxN в двумерный массив заведомо больших размеров. Пи этом достаточно взять большой размер стоки, например, 100.

 

int sum3 (int A [] [100], int M, int N); // прототип

int sum3 (int A [] [100], int M, int N); // заголовок

{

….

} // телофункции

void main ()

{

int res, A [2] [100] = {{2,1,3,2}, {2,3,4,5}}; /* две строки, четыре столбца с чатичной инициалиазацией*/

res = sum3 (A, 2,4); // вызов функции sum3

}

 

Способ 3. Третий способ передачи двумерного массива в функцию состоит в эмуляции фактического двумерного массива с размерами MxN с помощью одномерного массива с размером M*N. Пи этом M*N должно быть меньше 64К.

 

int sum4 (int A [], int M, int N); // прототип

int sum4 (int A [], int M, int N); // заголовок

{

….

} // телофункции

void main ()

{

int res, A [2] [4] = {{2,1,3,2}, {2,3,4,5}}; /* две строки, четыре столбца */

res = sum4 ( (int *) A, 2,4); // вызов функции sum4

}

 


Тестирование функций

 

Вычислительные модули необходимо тщательно протестировать с помощью отдельной тестовой функции с прототипом

void test (void);

При тестировании следует соблюдать следующие требования:

автоматизм, то есть от программиста при тестировании не требуется никаких действий,

прозрачность. Это означает, что функция test выводит сообщения на экран только в случае возникновения ошибок.

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

всесторонность, то есть при тестировании необходимо рассмотреть все крайние ситуации.

В программе должны осуществляться все возможные проверки, в частности:

на корректность входных данных,

при выделении динамической памяти,

на выход индексов массива из диапазона.

 


Практические задания

 

Указать классы памяти переменной

 

Что напечатает программа? Укажите область действия, область видимости и продолжительность жизни всех переменных n.

int n = 1;

void main ()

{

printf (“%d", n);

static int n=3;

printf (“%d", n);

while (n--)

{

printf (“%d", n);

int n=10;

printf (“%d", n);

printf (“%d”,:: n+n);

}

}

Работаем с адресами

 

У некоторой программы в модели large при работе в отладчике регистры содержат следующие значения:

 

CS = 1ADF, DS=1AE3, SS=1B26, SP=0FD2.

 

Найдите размеры областей памяти.

Укажите диапазоны возможных адресов для:

переменной int n=2, если она а) глобальная, б) статическая, в) локальная;

содержимого указателя char *str=”Hello”;

значения адресной константы main;

содержимого указателя int *A= (int *) malloc (1000).

 

Прототипы функций

 

Свопинг

Напишите прототип функции, которая организует обмен значений двух переменных.

 

Индексы максимальных элементов одномерного массива

Напишите прототип функции, которая находит индексы максимальных элементов одномерного массива.

 

Индексы максимальных элементов двумерного массива

Напишите прототип функции, которая находит индексы максимальных элементов двумерного массива с заданными размерами.

 

Угол между двумя векторами

Напишите прототип функции, которая находит угол в радианах между двумя векторами из пространства Rn.

 

Определитель матрицы

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

 


Выделение фрагмента программы в отдельную функцию

 

Разбиение программы на функции

 

#include <stdio. h>

void main ()

{

int a, b, div, mod;

printf (“Введите два целых числа”);

scanf (“%d%d”, &a, &b);

div = a/b;

mod = a%b;

printf (“\n%d /%d =%d”, a, b, div);

printf (“\n%d%%%d =%d", a, b, mod);

}

 

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

 

Тестирование функции

 

Сортировка массива

Следующий прототип функции сортирует массив А размером n по возрастанию на месте оригинального массива void sort (int A [], int n);

Напишите тест этой функции для трех различных вариантов исходных данных.


МиниМакс

Функция находит минимальное и максимальное из двух чисел типа int и имеет прототип

 

void MinMax (int a, int b, int *pmin, int *pmax);

 

Напишите тест для этой функции.


Лабораторные задания

 

Линейное уравнение

 

Написать функцию, которая решает линейное уравнение a ∙ x + b = 0 с проверкой выхода за диапазон типа float. Прототип функции

int linur (float a, float b, float *px);

Функция получает: a и b - коэффициенты уравнения, px - указатель на ячейку, в которую будет помещен единственный корень уравнения.

Функция возвращает:

0 - нет решения,

1 - найдено единственное решение,

2 - любое число является решением,

3 - решение единственное, но не входит в диапазон типа переменной x.

Вывод текстовой информации с результатами решения организовать с использованием оператора switch. Выход из программы должен быть единственным. Организовать тестирование функции linur.

 



2019-05-24 210 Обсуждений (0)
Передача двумерных массивов 0.00 из 5.00 0 оценок









Обсуждение в статье: Передача двумерных массивов

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ...
Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (210)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.008 сек.)