Форум программистов, компьютерный форум CyberForum.ru

Массив: Описать функцию swap(A,B), меняющую местами максимальные элементы матриц А и В. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 5.00
herzen2011
-1 / 0 / 0
Регистрация: 01.05.2013
Сообщений: 34
01.05.2013, 23:00     Массив: Описать функцию swap(A,B), меняющую местами максимальные элементы матриц А и В. #1
Надо исправить программу чтобы заработала.
У самой уже ничего не получается=((
Описать функцию swap(A,B), меняющую местами максимальные элементы матриц А и В.
Вот что у меня получается:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include <iostream.h>
#define n 2//размерность массивов
 
int CreateMas1(int n)//функция котороя создает массив 1
{
    int *mas1 = new1 int[n][n];//создаем массив размерностью N  
    return mas1;//возращаем массив
}
 
int CreateMas2(int n)//функция котороя создает массив 2
{
    int *mas2 = new2 int[n][n];
    return mas2;//возращаем массив
 
}
    
void input(int n,int *new1,int *new2)//вводим данные в массивы
{
    &mas1={{1,2},{3,4}};
    &mas2={{5,6},{7,8}};
}
 
void output(int n,int *new1,int *new2)//выводим их на экран
{
    for(int i1=0;i1<n;i1++)
        for( int j1=0;j1<n;j1++)
        cout<<new1[i1][j1]<<" ";//выводим с пробелами
        cout<<endl;//отступаем строку для красоты
    for(int i2=0;i2<n;i2++)
        for( int j2=0;j2<n;j2++)
        cout<<new2[i2][j2]<<" ";//выводим с пробелами
        cout<<endl;//отступаем строку для красоты
}
 
void swap(int n,int *new1,int *new2)//функция котороя ищет 1 максимум и 2 максимум,потом меняет их местами
{
    
    int max1,max2;//переменные 1 максимума и 2 максимума
    int temp1,temp2;//вспомогательные переменные для замены местами
    int i,j;//счетчик
    int k=0,s=0,z=0,r=0;//индексы обязательно равны 0 так может быть что максимум 1 или максимум 2 будет первым
    
    max1 = new1[0][0];//присваиваем 1 максимальному первый элемент матрицы
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
        if(new1[i][j] > max1)//если текущий элемент матрицы больше максимального то:
        {
            max1 = new1[i][j];//присваиваем максимальному текущий
            k = i;
            s = j;//индексам присваиваем текущую позицию матрицы
        }
    
    max2 = new2[0][0];//тоже самое только со 2 максимумом
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
        if(new2[i][j] > max2)
        {
            max2 = new2[i][j];
            z = i;
            r = j;
        }
 
    cout<<"max1 = "<<max1<<" position = "<<k<<s<<endl;//выводим максимальные элементы и номера их позиций в массивах
    cout<<"max2 = "<<max2<<" position = "<<z<<r<<endl;
 
    temp1 = new1[k][s];//меняем их местами с помощью ТЕМП1
    new1[k][s] = new2[z][r];
    new2[z][r] = temp1;
 
    temp2 = new2[z][r];//меняем их местами с помощью ТЕМП2
    new2[z][r] = new1[k][s];
    new1[k][s] = temp2;
 
    cout<<"\nYour matr after swap: "<<endl;//ваша матрица после сортировки
    output(n,new1,new2);//использует функцию вывода(смотри выше)
    cout<<"max1 = "<<max1<<" position = "<<z<<r<<endl;//просто меняем индексы местами:)
    cout<<"max2 = "<<max2<<" position = "<<k<<s<<endl;
}
 
 
 
 
void main()//главная
{
    int *mas1 = CreateMas1(n);//создаем массив с помощью функции CreateMas размерностью N
    input(n,new1);//заполняем его
    cout<<"\nYour matr: "<<endl;//выводим
    output(n,new1);
    
    int *mas2 = CreateMas2(n);//создаем массив с помощью функции CreateMas размерностью N
    input(n,new2);//заполняем его
    cout<<"\nYour matr: "<<endl;//выводим
    output(n,new2);
 
    swap(n,new1,new2);//используем функцию "меняния" местами
}
Как нужно исправить чтобы заработало?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2013, 23:00     Массив: Описать функцию swap(A,B), меняющую местами максимальные элементы матриц А и В.
Посмотрите здесь:

Массив. Поменять местами максимальные и минимальные элементы массива C++
C++ Pадача на процедуры (описать процедуру Swap(X,Y), меняющую содержимое переменных X и Y )
Напишите подпрограмму, меняющую местами минимальный и максимальный элементы матрицы C++
C++ Напишите функцию, меняющую местами элементы массива
Поменять местами максимальные элементы заданных матриц. Как упростить программу? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
02.05.2013, 00:55     Массив: Описать функцию swap(A,B), меняющую местами максимальные элементы матриц А и В. #2
Мне нравятся такие формулировки задания.

Цитата Сообщение от herzen2011 Посмотреть сообщение
Описать функцию swap(A,B),
О'кей! Как два пальца об асфальт!
C++
1
2
3
4
5
void swap(int &a, int &b) {
  int c = a;
  a = b;
  b = c;
}
Ха, я почти закончил!

Цитата Сообщение от herzen2011 Посмотреть сообщение
меняющую местами максимальные элементы матриц А и В.
Эээ... Теперь надо создать две матрицы, заполнить, найти максимальные элементы и поменять местами... Ой-йооо...

Офигеть, формулировки заданий.

Добавлено через 16 минут
Цитата Сообщение от herzen2011 Посмотреть сообщение
Как нужно исправить чтобы заработало?
Ошибок столько, что исправив каждую просто получим совершенно другой код.
Честно говоря, лошадке настолько плохо, что лучше пристрелить, чтоб не мучилась.

Вот вам новая, если покатит.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include <ctime>
#include <cstdlib>
#include <iostream>
#include <iomanip>
 
int **createMatrix(int size) {
  int **result = new int*[size];
  for (int i = 0; i < size; ++i) {
    result[i] = new int[size];
  }
  return result;
}
 
void deleteMatrix(int **matrix, int size) {
  for (int i = 0; i < size; ++i) {
    delete [] matrix[i];
  }
  delete [] matrix;
}
 
int **fillRandom(int **matrix, int size, int max) {
  for (int i = 0; i < size; ++i) {
    for (int j = 0; j < size; ++j) {
      matrix[i][j] = rand() % max;
    }
  }
  return matrix;
}
 
int **printMatrix(int **matrix, int size) {
  for (int i = 0; i < size; ++i) {
    for (int j = 0; j < size; ++j) {
      std::cout << std::setw(2) << matrix[i][j] << " ";
    }
    std::cout << std::endl;
  }
  return matrix;
}
 
int &findMaximum(int **matrix, int size) {
  int *result = &matrix[0][0];
  for (int i = 0; i < size; ++i) {
    for (int j = 0; j < size; ++j) {
      if (*result < matrix[i][j]) {
        result = &matrix[i][j];
      }
    }
  }
  return *result;
}
 
void swap(int &a, int &b) {
  int c = a;
  a = b;
  b = c;
}
 
int main(int argc, char *argv[]) {
  srand(time(0));
 
  int sizeA = 5;
  int sizeB = 4;
 
  int **a = fillRandom(createMatrix(sizeA), sizeA, 10);
  int **b = fillRandom(createMatrix(sizeB), sizeB, 100);
 
  printMatrix(a, sizeA);
  int &maximumA = findMaximum(a, sizeA);
  std::cout << "Maximum = " << maximumA << std::endl << std::endl;
  
  printMatrix(b, sizeB);
  int &maximumB = findMaximum(b, sizeB);
  std::cout << "Maximum = " << maximumB << std::endl << std::endl;
 
  swap(maximumA, maximumB);
 
  printMatrix(a, sizeA);
  std::cout << std::endl;
  printMatrix(b, sizeB);
 
  deleteMatrix(a, sizeA);
  deleteMatrix(b, sizeB);
  return 0;
}
herzen2011
-1 / 0 / 0
Регистрация: 01.05.2013
Сообщений: 34
02.05.2013, 11:24  [ТС]     Массив: Описать функцию swap(A,B), меняющую местами максимальные элементы матриц А и В. #3
C++
1
int main(int argc, char *argv[])
Программу переписала под обычный школьный компилятор С++, а не под Visual Studio и он ругается вот на эти две переменные, выдает такую фразу "Parameter argc(argv) is never used" там надо директиву какую то подключить чтобы больше не выдавал ошибки или нет?
Когда убираю эту строчку компилятор больше ошибок не выдает, но и программа виснет и не запускается.
Может конечно смешно звучит но пишем программы мы на Borland C++ 3.1(
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
02.05.2013, 22:56     Массив: Описать функцию swap(A,B), меняющую местами максимальные элементы матриц А и В. #4
Цитата Сообщение от herzen2011 Посмотреть сообщение
Программу переписала под обычный школьный компилятор С++, а не под Visual Studio
Мой код и не под вижуал студио. Больше скажу -- у меня даже нет вижуал студио. %)

Цитата Сообщение от herzen2011 Посмотреть сообщение
Когда убираю эту строчку компилятор больше ошибок не выдает, но и программа виснет и не запускается.
У вас очень слабое понимание того, что происходит.

Цитата Сообщение от herzen2011 Посмотреть сообщение
ругается вот на эти две переменные, выдает такую фразу "Parameter argc(argv) is never used"
Компилятор заметил, что объявленная переменная не используется.
Если это просто ворнинг -- игнорируйте его, он вздорный. Если это ошибка, ищите способы решить. Например, компилятор может скушать int main() {, ну или как-нибудь еще в вашем компиляторе.

Цитата Сообщение от herzen2011 Посмотреть сообщение
Может конечно смешно звучит но пишем программы мы на Borland C++ 3.1
Очень. Глючный, бажный. Допотопный стандарт. Одна радость -- есть TurboVision. Тоже глючный, правда.
herzen2011
-1 / 0 / 0
Регистрация: 01.05.2013
Сообщений: 34
02.05.2013, 23:16  [ТС]     Массив: Описать функцию swap(A,B), меняющую местами максимальные элементы матриц А и В. #5
Понимание именно этой темы у меня действительно отвратное(
Честно говоря я даже не понимаю как с использованием указателей описывать функцию...
Весь программный код я слабо понимаю и мало что смогу обьяснить пеподователю
А под какой программой писали вы, если не секрет?
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
02.05.2013, 23:35     Массив: Описать функцию swap(A,B), меняющую местами максимальные элементы матриц А и В. #6
Я писал в редакторе geany, проверял компилятором gcc. В принципе, ничего сверхъестественного я не писал -- должно собираться и в MSVS и в BorlandBuilder'e. Разве что в допотопном Borland C++ может не собираться.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2013, 23:40     Массив: Описать функцию swap(A,B), меняющую местами максимальные элементы матриц А и В.
Еще ссылки по теме:

Написать функцию, меняющую в переменной типа char местами биты с номерами n и n+1 C++
C++ Описать функцию, меняющую порядок элементов вещественного массива
Напишите подпрограмму, меняющую местами минимальный и максимальный элементы матрицы C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
herzen2011
-1 / 0 / 0
Регистрация: 01.05.2013
Сообщений: 34
02.05.2013, 23:40  [ТС]     Массив: Описать функцию swap(A,B), меняющую местами максимальные элементы матриц А и В. #7
Огромное спасибо,выручил сильно=)
Прогу уже вот вот после выходных сдавать=)
Yandex
Объявления
02.05.2013, 23:40     Массив: Описать функцию swap(A,B), меняющую местами максимальные элементы матриц А и В.
Ответ Создать тему
Опции темы

Текущее время: 04:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru