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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2009, 20:18   #1
Babun
 
Регистрация: 23.05.2009
Сообщений: 7
По умолчанию Описать функцию Repl(A,B)

Условие:
Описать функцию Repl(A,B), меняющую местами максимальные элементы матриц A и B произвольного порядка. Считать, что в каждой матрице только один элемент.

Код:
#include <vcl.h>
#pragma hdrstop
#include <conio.h>
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#define n 3
int Repl(int A[n][n], int B[n][n]);


//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{ clrscr();
randomize();
int i1, j1, i2, j2;
int A[n][n];
int B[n][n];
  for (i1=0; i1<n; i1++)
  {
    for (j1=0; j1<n; j1++)
    {
      A[i1][j1] = random(10) - 5;
      if (A[i1][j1] < 0)
      printf(" %d", A[i1][j1]);
      else
      printf("  %d", A[i1][j1]);
    }
  puts("\n");
  }
puts("\n");
  for (i2=0; i2<n; i2++)
  {
    for (j2=0; j2<n; j2++)
    {
      B[i2][j2] = random(10) - 5;
      if (B[i2][j2] < 0)
      printf(" %d", B[i2][j2]);
      else
      printf("  %d", B[i2][j2]);
    }
    puts("\n");
  }
Repl(A,B);
/* печать должна тут быть */
for(i1=0;i1<=n;i1++)
    {for(j1=0;j1<=n;j1++)
        {
      if (A[i1][j1] < 0)
      printf(" %d", A[i1][j1]);
      else
      printf("  %d", A[i1][j1]);
    }
  puts("\n");
  }
  puts("\n");
for(i2=0;i2<=n;i2++)
   { for(j2=0;j2<=10;j2++)
      {if (B[i2][j2] < 0)
      printf(" %d", B[i2][j2]);
      else
      printf("  %d", B[i2][j2]);
    }
  puts("\n");
  }
getch();
        return 0;
}
//---------------------------------------------------------------------------
int Repl(int A[n][n], int B[n][n])
{
  int max1, max2, i1, i2, j1, j2;
  int tmp1=0;
  int tmp2=0;
  int tmp3=0;
  int tmp4=0;
  for (i1=0; i1<n; i1++)
    {for (j1=0; j1<n; j1++)
      max1=A[1][1];
      if (max1>A[i1][j1])
        {max1=A[i1][j1];
         tmp1=i1;
         tmp2=j1;}
    }
  for (i2=0; i2<n; i2++)
    {for (j2=0; j2<n; j2++)
       max2=B[1][1];
       if (max2>B[i2][j2])
         {max2=B[i2][j2];
          tmp3=i2;
          tmp4=j2;}
    }
  A[tmp1][tmp2]=B[tmp3][tmp4];
  B[tmp3][tmp4]=A[tmp1][tmp2];
}
Непонятно, почему выдаёт какую-то фигню, помогите пожалуйста найти и исправить ошибку.
Babun вне форума Ответить с цитированием
Старый 24.05.2009, 20:31   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Вы фигню написали, вот и выдаётся фигня. Пробуйте так:
Код:
int Repl(int A[n][n], int B[n][n])
{
  int max1, max2, i1, i2, j1, j2;
  int tmp1=0;
  int tmp2=0;
  int tmp3=0;
  int tmp4=0;
  max1=A[0][0];
  for (i1=0; i1<n; i1++)
    {for (j1=0; j1<n; j1++)
      if (max1 < A[i1][j1])
        {max1=A[i1][j1];
         tmp1=i1;
         tmp2=j1;}
    }

  max2=B[0][0];
  for (i2=0; i2<n; i2++)
    {for (j2=0; j2<n; j2++)
       if (max2 < B[i2][j2])
         {max2=B[i2][j2];
          tmp3=i2;
          tmp4=j2;}
    }
  int tmp = A[tmp1][tmp2];
  A[tmp1][tmp2] = B[tmp3][tmp4];
  B[tmp3][tmp4] = tmp;
}
ЗЫ. По заданию у Вас матрицы произвольного порядка, а не фиксированного
pu4koff вне форума Ответить с цитированием
Старый 24.05.2009, 20:42   #3
Babun
 
Регистрация: 23.05.2009
Сообщений: 7
По умолчанию

Попробовал так, как Вы написали, вывод такой:

3 -5 -2

0 -4 -3

2 -1 3



-2 2 -3

-5 4 4

4 -5 0



4 -5 -2 0

0 -4 -3 2

2 -1 3 3

3 3 2 3



-2 2 -3 -5 3 4 4 -5 0 4 -5

-5 3 4 4 -5 0 4 -5 -2 0 -4

4 -5 0 4 -5 -2 0 -4 -3 2 -1

4 -5 -2 0 -4 -3 2 -1 3 9 3

Видно, что изменённая первая матрица (идущая 3-й по счёту) получается, если бы не дополнительный столбец+строка, а вот со второй вообще не похоже...
Babun вне форума Ответить с цитированием
Старый 24.05.2009, 20:53   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Это всё от того, что кто-то копировать свой код правильно не может. Ну что за невнимательность такая...
Код:
/* печать должна тут быть */
for(i1=0;i1<n;i1++)
    {for(j1=0;j1<n;j1++)
        {
      if (A[i1][j1] < 0)
      printf(" %d", A[i1][j1]);
      else
      printf("  %d", A[i1][j1]);
    }
  puts("\n");
  }
  puts("\n");
for(i2=0;i2<n;i2++)
   { for(j2=0;j2<n;j2++)
      {if (B[i2][j2] < 0)
      printf(" %d", B[i2][j2]);
      else
      printf("  %d", B[i2][j2]);
    }
  puts("\n");
  }
pu4koff вне форума Ответить с цитированием
Старый 24.05.2009, 21:08   #5
Babun
 
Регистрация: 23.05.2009
Сообщений: 7
По умолчанию

Спасибо Вам огромное, невнимательность подводит, и ещё вот здесь
Код:
/* печать должна тут быть */
for(i1=0;i1<n-1;i1++)
    {for(j1=0;j1<n-1;j1++)
        {
      if (A[i1][j1] < 0)
      printf(" %d", A[i1][j1]);
      else
      printf("  %d", A[i1][j1]);
    }
  puts("\n");
  }
  puts("\n");
for(i2=0;i2<n-1;i2++)
   { for(j2=0;j2<n-1;j2++)
      {if (B[i2][j2] < 0)
      printf(" %d", B[i2][j2]);
      else
      printf("  %d", B[i2][j2]);
    }
  puts("\n");
  }
И всё замечательно работает, ещё раз огромное спасибо!
Babun вне форума Ответить с цитированием
Старый 24.05.2009, 21:13   #6
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Так не нужно там никаких -1. Матрицы у Вас 3х3, а теперь я так понимаю выводятся как 2х2
pu4koff вне форума Ответить с цитированием
Старый 24.05.2009, 21:31   #7
Babun
 
Регистрация: 23.05.2009
Сообщений: 7
По умолчанию

3х3 а выводились последние 2 4х4.
Babun вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Описать функцию CompressStr(S) строкового типа,выполняющую сжатие строки S Allen Iverson Паскаль, Turbo Pascal, PascalABC.NET 7 23.04.2009 01:07
Как правильно описать функцию? аукшщ Общие вопросы C/C++ 2 19.01.2009 11:37
[Pascal] Описать функцию IntFileSize Катуха Помощь студентам 2 24.12.2008 17:20
Описать рекурсивную функцию Palindrom(S) логического типа Master-Sergey Помощь студентам 1 15.12.2008 19:03
Помогите описать функцию pahaig Помощь студентам 2 09.04.2007 22:28