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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2009, 09:53   #1
Dmitrич
 
Регистрация: 01.06.2009
Сообщений: 6
По умолчанию Замена эл-ов 2d матрицы

Здравствуйте. помогите пожалуйста отладить код задачи.
Нарастающий итог. Каждый элемент ai,j. матрицы А(m,n) заменить суммой элементов подматрицы A’(i,j). расположенной в левом верхнем углу матрицы А.
Вот мой код:
Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream.h>
void main ()
{
// определение переменных
int n,m,i,j,k,l;
int mn;
clrscr;
// подключаем рандом и задаем размерность массива
randomize();
cout<<"m="<<endl;
cin>>m;
cout<<"n="<<endl;
cin>>n;
// создаем динамический массив
int **a;

*a = new (int *)[m];
for(i=0;i<m;i++)
  {a[i] = new int[n];
  }
// рандомим и печатаем его
cout<<"Ishodnaya Matrica"<<endl;
for (i=0;i<m;i++)
 {
  for (j=0;j<n;j++)
  {
   a[i][j]=random(20);
   cout<<a[i][j]<<"\t";
   if(j==n){cout<<"\n";}
  }
 }
for (i=0;i<m;i++)
 {
 for (j=0;l<n;j++)
  {
   mn=a[0][0];
   for (k=0;k<i;k++)
    { //ищем минимальный в прямоугольнике (1,1,i,j)
    for (l=0;l<j;l++)
     {
      if (a[k][l]<mn)
      {
      mn=a[k][l];
      }
     }
    }
    a[i][j]=mn;
   }
  }
cout<<endl;
// выводим получившуюся матрицу на экран
cout<<"Rezultat"<<endl;
for (i=0;i<m;i++)
 {
 for (j=0;j<n;j++)
 {
  cout<<a[i][j]<<"\t";
  if(j==n) cout<<"\n";
  }
 }
getch();
//очищаем область памяти
for (i=0;i<m;i++) {
delete [] a[i];
}
delete [] a;
}
Почему-то исходный результат равен начальному =(
Среда Borland c++ for DOS

Последний раз редактировалось Dmitrич; 01.06.2009 в 09:58.
Dmitrич вне форума Ответить с цитированием
Старый 01.06.2009, 13:10   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

У вас же по заданию нужно не минимум в подматрице найти, а сумму.
Вот, исправил в соответствии с заданием и подправил ошибки.
Код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream.h>
#include <time.h>

int main ()
{
// определение переменных
int n,m,i,j,k,l;
int mn;
// подключаем рандом и задаем размерность массива
srand(time(NULL));
cout<<"m="<<endl;
cin>>m;
cout<<"n="<<endl;
cin>>n;
// создаем динамический массив
int **a,**tmp;

a = new int*[m];
for(i=0;i<m;i++)
  a[i] = new int[n];

tmp = new int*[m];
for(i=0;i<m;i++)
 tmp[i] = new int[n];  
  
// рандомим и печатаем его
cout<<"Ishodnaya Matrica"<<endl;
for (i=0;i<m;i++)
 {
  for (j=0;j<n;j++)
  {
   a[i][j]=rand()%20;
   cout<<a[i][j]<<"\t";
   if(j==n-1){cout<<"\n";}
  }
 }

for(i=0; i<m; i++)
 for(j=0; j<n; j++)
  {
   tmp[i][j]=0;
   for (k=0;k<i;k++)
    for (l=0;l<j;l++)
      tmp[i][j] += a[k][l];
   }
cout<<endl;

// выводим получившуюся матрицу на экран
cout<<"Rezultat"<<endl;
for (i=0;i<m;i++)
 {
 for (j=0;j<n;j++)
 {
  cout<<tmp[i][j]<<"\t";
  if(j==n-1) cout<<"\n";
  }
 }

//очищаем область памяти
for (i=0;i<m;i++)
 {
  delete[] a[i];
  delete[] tmp[i];
 }
delete[] a;
delete[] tmp;

getch();
return 0;
}
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 01.06.2009, 13:17   #3
Dmitrич
 
Регистрация: 01.06.2009
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Sazary Посмотреть сообщение
У вас же по заданию нужно не минимум в подматрице найти, а сумму.
Вот, исправил в соответствии с заданием и подправил ошибки.
Прошу прощения, в спешке не свое задание вставил...
Вот мое: В матрице А(m, n) каждый элемент аi,j заменить минимальным среди элементов подматрицы А'(i,j), расположенной в левом верхнем углу матрицы А
они оч похожи =)
Ну а за старания спасибо)
Dmitrич вне форума Ответить с цитированием
Старый 01.06.2009, 13:27   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

А.. Ну тогда поменяется только вот этот цикл:
Код:
for(i=0; i<m; i++)
 for(j=0; j<n; j++)
  {
   tmp[i][j]=a[0][0];
   for (k=0;k<i;k++)
    for (l=0;l<j;l++)
      if(tmp[i][j]>a[k][j]) tmp[i][j] = a[k][l];
   }
cout<<endl;
Вам все равно нужно создавать дополнительную матрицу. Иначе вы каждое следующее значение выбираете на основе измененной исходной матрицы.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 01.06.2009, 13:30   #5
Dmitrич
 
Регистрация: 01.06.2009
Сообщений: 6
По умолчанию

Большое человеческое спасибо =) я два дня сидел думал...
Dmitrич вне форума Ответить с цитированием
Старый 02.06.2009, 06:10   #6
Dmitrич
 
Регистрация: 01.06.2009
Сообщений: 6
По умолчанию

Кстати... попробовал ваш первый код ,который на суму. Код работает,складывает.. но первая строка и первый столбец получается обнуляются
Dmitrич вне форума Ответить с цитированием
Старый 02.06.2009, 11:56   #7
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Dmitrич
Кстати... попробовал ваш первый код ,который на суму. Код работает,складывает.. но первая строка и первый столбец получается обнуляются
Да, потому что я не включал границы (i,j). Поэтому для нулевых строки и столбца просто не из чего составлять сумму.

Чтобы не обнулялись, достаточно включить в циклах по k и l границы (i,j) при обходе.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обращение матрицы методом союзной матрицы dofmat Помощь студентам 6 03.10.2011 15:01
Замена кода программы с Delhi5 на Delhi7 либо замена базы данных с Acessa на MySQL DorianLeroy Фриланс 8 18.02.2009 18:52
замена строк матрицы Rom@shka Общие вопросы C/C++ 1 16.01.2009 15:47
Замена Патрон Общие вопросы Delphi 6 05.11.2008 15:45
Замена Dr.Badnezz Общие вопросы Delphi 11 23.09.2008 17:17