|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
04.02.2011, 23:59 | #11 |
Форумчанин
Регистрация: 27.09.2009
Сообщений: 153
|
И всё всего лишь нули выше диагонали.Зачем вам тогда весь этот хлам.Можно гораздо проще.
Код:
|
05.02.2011, 00:06 | #12 |
Пользователь
Регистрация: 04.02.2011
Сообщений: 34
|
0479, Спасибо вам огромное но знаете этот "хлам" и есть условие задачи. Если по другому решишь препод просто на просто не примет, уже пробовали не действует. Можете как - то связать с тем хламом? Пожалуйста если вам не трудно?
Хочу жить... а не существовать...
|
05.02.2011, 00:16 | #13 |
Пользователь
Регистрация: 04.02.2011
Сообщений: 34
|
Конечно)
Постановка задачи
Для разряженной матрицы целых чисел в соответствии с индивидуальным заданием создать модуль доступа к ней, в котором обеспечить экономию памяти при размещении данных. Вот лично мое задание: все нулевые элементы размещены выше главной диагонали 6.3.1. Общие переменные Переменные SIZE и m_addr описаны вне функций с квалификатором static, это означает, что вони доступны для всех функций в этом модуле, но недоступны для внешних модулей. Переменная L2_RESULT также описана вне всех функций, не без явного квалификатора. Эта переменная доступна не только для этого модуля, но и для всех внешних модулей, если она в них буде описана с квалификатором extern. Такое описание имеется в файле LAB2.H. 6.3.2. Функция creat_matr Функция creat_matr предназначена для выделения в динамической памяти места для размещения сжатой матрицы. Прототип функции: int creat_matr ( int N ); где N - размерность матрицы. Функция сохраняет значение параметра в собственной статической переменной и подсчитывает необходимый размер памяти для размещения ненулевых элементов матрицы. Для выделения памяти используется библиотечная функция C malloc. Функция возвращает -1, если при выделении произошла ошибка, или 0, если выделение прошло нормально. При этом переменной L2_RESULT также присваивается значение 0 или -1. 6.3.3. Функция close_matr Функция close_matr предназначена для освобождения памяти при завершении работы с матрицей, Прототип функции: int close_matr ( void ); Функция возвращает 0 при успешном освобождении, -1 - при попытке освободить невыделенную память. Если адрес матрицы в памяти имеет значения NULL, это признак того, что память не выделялась, тогда функция возвращает -1, иначе - освобождает память при помощи библиотечной функции free и записывает адрес матрицы - NULL. Соответственно функция также устанавливает глобальный признак ошибки - L2_RESULT. 6.3.4. Функция read_matr Функция read_matr предназначена для чтения элемента матрицы. Прототип функции: int read_matr(int x, int y); где x и y - координаты (строка и столбец). Функция возвращает значение соответствующего элемента матрицы. Если после выполнения функции значение переменной L2_RESULT -1, то это указывает на ошибку при обращении. Проверка корректности задания координат выполняется обращением к функции ch_coord, если эта последняя возвращает ненулевое значение, выполнение read_matr на этом и заканчивается. Если же координаты заданы верно, то проверяется попадание заданного элемента в нулевой или ненулевой участок. Элемент находится в нулевом участке, если для него номер строки больше, чем номер столбца. Если элемент в нулевом участке, функция просто возвращает 0, иначе - вызывает функцию линеаризации lin и использует значение, которое возвращает lin, как индекс в массиве m_addr, по которому и выбирает то значения, которое возвращается. 6.3.5. Функция write_matr Функция write_matr предназначена для записи элемента в матрицу. Прототип функции: int write_matr(int x, int y, int value); где x и y - координаты (строка и столбец), value - то значение, которое нужно записать. Функция возвращает значение параметра value, или 0 - если была попытка записи в нулевой участок. Если после выполнения функции значение переменной L2_RESULT -1, то это указывает на ошибку при обращении. Выполнение функции подобно функции read_matr с тем отличием, что, если координаты указывают на ненулевой участок, то функция записывает value в массив m_addr. 6.3.6. Функция ch_coord Функция ch_coord предназначена для проверки корректности задания координат. Эта функция описана как static и поэтому может вызываться только из этого же модуля. Прототип функции: static char ch_coord(int x, int y); где x и y - координаты (строка и столбец). Функция возвращает 0, если координаты верные, -1 - если неверные. Соответственно, функция также устанавливает значение глобальной переменной L2_RESULT. Выполнение функции собственно состоит из проверки трех условий: • адрес матрицы не должен быть NULL, т.е., матрица должна уже находиться в памяти; • ни одна из координат не может быть меньше 0; • ни одна из координат не может быть больше NN. Если хотя бы одно из этих условий не выполняется, функция устанавливает признак ошибки. 6.3.7. Функция lin Функция lin предназначена для преобразования двумерных координат в индекс в одномерном массиве. Эта функция описана как static и поэтому может вызываться только из этого же модуля. Прототип функции: static int lin(int x, int y); где x и y - координаты (строка и столбец). Функция возвращает координату в массиве m_addr. Выражение, значение которого вычисляет и возвращает функция, подобрано вот из каких соображений. Пусть мы имеем такую матрицу, как показано ниже, и нам нужно найти линейную координату элемента, обозначенного буквой A с координатами (x,y):
Хочу жить... а не существовать...
|
05.02.2011, 00:28 | #14 |
Форумчанин
Регистрация: 27.09.2009
Сообщений: 153
|
А у вас это нормально компилится и в какой среде разработки?
|
05.02.2011, 00:34 | #15 |
Пользователь
Регистрация: 04.02.2011
Сообщений: 34
|
Да там одна ошибка(
Microsoft Visual C++ 2008
Хочу жить... а не существовать...
|
05.02.2011, 00:36 | #16 |
Форумчанин
Регистрация: 27.09.2009
Сообщений: 153
|
А ошибочку можно опубликовать
|
05.02.2011, 00:44 | #17 |
Пользователь
Регистрация: 04.02.2011
Сообщений: 34
|
Конечно
Код:
error C2015: too many characters in constant
Хочу жить... а не существовать...
|
05.02.2011, 00:46 | #18 |
Форумчанин
Регистрация: 27.09.2009
Сообщений: 153
|
Киньте тогда на форум исходник ваш так легче разобраться. Просто папку спроектом vc++ 2008 заархивируйте и выложите.
|
05.02.2011, 00:47 | #19 |
Участник клуба
Регистрация: 23.12.2010
Сообщений: 1,129
|
Нет, к сожалению там далеко не одна ошибка
Смотрел на код - пустил скупую слезу. Давать такое в качестве примера решения лабы... Я был лучшего мнения о хпи |
05.02.2011, 00:51 | #20 |
Форумчанин
Регистрация: 27.09.2009
Сообщений: 153
|
Son Of Pain.Да тут всё просто.Исходник то для C. А не c++. Они конечно практически одно и тоже однако не совсем. Всё таки различия имеются.
Тем более что в студии по моему библиотеки <alloc.h> попросту нет. А значит нескомпилится при всём желании. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
в сглаженой матрице найти сумму модулей элементов расположенных ниже главной диагонали | Sergeo_89 | Паскаль, Turbo Pascal, PascalABC.NET | 8 | 07.12.2010 00:02 |
Массив, нахождение макс элемента ниже главной диагонали | L3zh1Y | Помощь студентам | 2 | 15.05.2010 13:36 |
Вычисление сумм элементов матрицы А размера n x n, лежащих выше, ниже и на главной диагонали | Tomoa | Microsoft Office Word | 8 | 04.04.2010 20:18 |
Маx элемент ниже главной диагонали | Отчаявшаяся | Помощь студентам | 2 | 16.11.2009 18:19 |
Найти сумму парных элементов матрицы v[4][4].Расположенных ниже главной диагонали. | Black_Angel91 | Помощь студентам | 11 | 21.04.2009 20:51 |