Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Помогите с программой... матрицы, матрицы 
:(
    Опции темы
vika3110
Дата 8.12.2008, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 7.12.2008

Репутация: нет
Всего: нет



Здравствуйте!!! Помогите пожалуйста написать программу:


Задание: 
1.    Написать функцию, реализующую указанный вариант обработки данных, аргументами которой являются необходимые матрицы (двумерные массивы) и вектора (одномерные массивы). При необходимости аргументами функции могут быть также размерности используемых массивов. 
2.    Написать программу, которая использует функцию из пункта 1 для обработки матриц и векторов, значения которых загружаются из файлов. После загрузки из файлов начальных данных программа выводит их на экран, потом производит обработку, записывает получившиеся результаты в файлы, и выводит результаты на экран.

Задача.   Дана матрица A(n*n) целых чисел. Получить вектор, элементы которого равны сумме минимального и максимального элементов соответствующих столбцов 2 и 4 секторов. (См. рис)
user posted image


Будьте добры помочь, совсем не знаю как это делается!!!
заранее весьма благодарна 
PM MAIL   Вверх
Avaj
Дата 9.12.2008, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 212
Регистрация: 14.7.2008
Где: Владивосток.

Репутация: 1
Всего: 3



А можно по-подробней о тех элементах матрицы, которые находятся "на пересечении" секторов - к какому сектору их относить?
PM MAIL   Вверх
vika3110
Дата 9.12.2008, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 7.12.2008

Репутация: нет
Всего: нет



Цитата(Avaj @  9.12.2008,  08:55 Найти цитируемый пост)
А можно по-подробней о тех элементах матрицы, которые находятся "на пересечении" секторов - к какому сектору их относить? 

Честно говоря не знаю, есть требования но там по моему про это ни чего не написано...

Требования к коду программы
При выполнении данного задания, а так же последующих необходимо выполнять ряд требований, которые помогают программисту допускать меньшее число ошибок: 
1.    Избегайте использования глобальных переменных. Это приводит к частым ошибкам, связанных с использованием одного и того же ресурса для разных целей, “утечкам памяти” и непредсказуемому поведению программы при выходе за границы выделенной памяти. Самой распространенной ошибкой является использование одной и той же глобальной переменной в разных функциях. Одна функция изменила для себя ее значение, а вторая, к которой вернулась программа, нужное ей значение этой переменной утратило, так как его затерла предыдущая функция. Другим часто встречающимся подводным камнем являются массивы. Если их объявлять глобальными, то обращаться можно к любому их элементу из любого места программы, притом, что выход за границы массива не приводит к ошибке исполнения, ошибка в вычислениях будет неявной и ее будет трудно найти. 
2.    При описании переменных или массивов, инициализируйте их (придавайте начальное значение, особенно если оно известно). Например:
Код


int i = 0, j = 10;
double d=1,0;

for ( ; i < j; i++)
    d = i / d; // не всегда может возникнуть деление на ноль если забыть инициализацию


3.    Для динамического выделения памяти следует помнить, что в данном случае  приходится обращаться к этой памяти через указатель на массив, причем на одномерный массив, даже если вы выделяете память под многомерный. Если вы хотите работать с матрицей (двумерным массивом) в динамической памяти так же, как вы работаете с двумерными массивами в статической памяти, можно использовать, например, следующий способ: создать указатель на массив указателей на массивы, где каждый элемент – это указатель на соответствующую строку матрицы, а потом выделить память для каждой строки этой матрицы: 
Код


double **mat = 0;    // описана матрица, но память для неё пока не выделена
// будем выделять память под матрицу размером N на M:
mat = (double **)malloc(N * sizeof(double *)); // выделили массив указателей на N строк
for (int i = 0; i < N; i++)                // проходим все строки 
    mat[i]=(double *)malloc(M*sizeof(double)); //выделяя под каждую M столбцов  
for (int i = 0; i < N; i++)
    for (int j = 0; j < M; j++)
      mat[i][j] = 0;  // очищаем каждый элемент матрицы 
// работаем с матрицей 
...
// здесь матрица стала ненужной, можно её удалить
for (int i = 0; i < N; i++) // проходим все строки, удаляя каждую
    free(mat[i]);
free(mat); // удаляем массив указателей на строки


После того как матрица становится ненужной, ее следует удалить из памяти, чтобы она не занимала место, в противном случае возможны утечки памяти в программе – самой неуловимой ее ошибки. В примере выше показано, как это делать. Обратите внимание, что порядок высвобождения памяти обратный порядку ее выделения.
4.    Если вы решили использовать один и тот же файл и для чтения, и для записи, следует помнить, что функция fopen при этом требует использования специальных форматов, например "r+", "w+". В программе необходимо учитывать возможность того, что функция открытия файла завершит работу неуспешно, и при необходимости надо отображать сообщение об этой ошибке и прекращать выполнение программы. 


Это сообщение отредактировал(а) vika3110 - 9.12.2008, 20:12
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1320 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.