Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.02.2011, 23:59   #11
0479
Форумчанин
 
Аватар для 0479
 
Регистрация: 27.09.2009
Сообщений: 153
По умолчанию

И всё всего лишь нули выше диагонали.Зачем вам тогда весь этот хлам.Можно гораздо проще.

Код:
#include <iostream>
#include <stdlib.h>
using namespace std;
int main(){
int i,j;
char d;
int a[5][5];
for ( i=0;i<5;i++)
for ( j=0;j<5;j++)
a[i][j]=rand()%100;
for ( i=0;i<5;i++)
for ( j=i+1;j<5;j++)
a[i][j]=0;
for ( i=0;i<5;i++){
for ( j=0;j<5;j++)
cout<<a[i][j]<<" ";cout<<"\n";}
cin>>d;
}
Правд матрица 5 на 5 но можн сделать сколько угодно.Числа в матрице рандомные.
0479 вне форума Ответить с цитированием
Старый 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
0479
Форумчанин
 
Аватар для 0479
 
Регистрация: 27.09.2009
Сообщений: 153
По умолчанию

А у вас это нормально компилится и в какой среде разработки?
0479 вне форума Ответить с цитированием
Старый 05.02.2011, 00:34   #15
Вечно грустная...
Пользователь
 
Аватар для Вечно грустная...
 
Регистрация: 04.02.2011
Сообщений: 34
Смущение

Да там одна ошибка(

Microsoft Visual C++ 2008
Хочу жить... а не существовать...
Вечно грустная... вне форума Ответить с цитированием
Старый 05.02.2011, 00:36   #16
0479
Форумчанин
 
Аватар для 0479
 
Регистрация: 27.09.2009
Сообщений: 153
По умолчанию

А ошибочку можно опубликовать
0479 вне форума Ответить с цитированием
Старый 05.02.2011, 00:44   #17
Вечно грустная...
Пользователь
 
Аватар для Вечно грустная...
 
Регистрация: 04.02.2011
Сообщений: 34
Смущение Конечно

Код:
/************************ Файл MAIN2.C **************************/
/* "Программа пользователя" */
#include "lab2.h"
#include <stdio.h> 
main(){
 int R;    /* размерность */
 int i, j; /* номера строки и столбца */
 int m;    /* значения элемента */
 int op;   /* операция */
  clrscr();
  printf('Введите размерность матрицы >'); scanf("%d",R);
  /* создание матрицы */
  if ( creat_matr (R) ) {
     printf("Ошибка создания матрицы\n");
     exit(0);
     }
  /* заполнение матрицы */
  for ( m=j=0; j<R; j++)
     for ( i=0; i<R; i++)
           write_matr(i,j,++m);
   while(1) {
      /* вывод матрицы на экран */
      clrscr();
      for (j=0; j<R; j++) {
         for (i=0; i<R; i++)
            printf("%3d ",read_matr(i,j));
            printf("\n");
         }
      printf("0 - выход\n1 - чтение\n2 - запись\n>");
      scanf("%d",&op);
      switch(op) {
        case 0:
          if (close_matr()) printf("Ошибка при уничтожении\n");
          else printf("Матрица уничтожена\n");
          exit(0);
        case 1: case 2:
          printf("Введите номер строки >");
          scanf("%d",&j);
          printf("Введите номер столбца >");
          scanf("%d",&i);
          if (op==2) {
             printf("Введите значение элемента >");
             scanf("%d",&m);
             write_matr(j,i,m);
             if (L2_RESULT<0) pritnf("Ошибка записи\n");
             }
          else {
             m=read_matr(j,i);
             if (L2_RESULT<0) pritnf("Ошибка считывания\n");
             else printf("Считано: %d\n",m);
             }
          printf("Нажмите клавишу\n"); getch();
          break;
        }
      }
}
/********************Конец файла MAIN2.C **********************/
Вот ошибка
error C2015: too many characters in constant
Хочу жить... а не существовать...
Вечно грустная... вне форума Ответить с цитированием
Старый 05.02.2011, 00:46   #18
0479
Форумчанин
 
Аватар для 0479
 
Регистрация: 27.09.2009
Сообщений: 153
По умолчанию

Киньте тогда на форум исходник ваш так легче разобраться. Просто папку спроектом vc++ 2008 заархивируйте и выложите.
0479 вне форума Ответить с цитированием
Старый 05.02.2011, 00:47   #19
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Нет, к сожалению там далеко не одна ошибка

Смотрел на код - пустил скупую слезу. Давать такое в качестве примера решения лабы... Я был лучшего мнения о хпи
Son Of Pain вне форума Ответить с цитированием
Старый 05.02.2011, 00:51   #20
0479
Форумчанин
 
Аватар для 0479
 
Регистрация: 27.09.2009
Сообщений: 153
По умолчанию

Son Of Pain.Да тут всё просто.Исходник то для C. А не c++. Они конечно практически одно и тоже однако не совсем. Всё таки различия имеются.
Тем более что в студии по моему библиотеки <alloc.h> попросту нет. А значит нескомпилится при всём желании.
0479 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
в сглаженой матрице найти сумму модулей элементов расположенных ниже главной диагонали 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