Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.58/19: Рейтинг темы: голосов - 19, средняя оценка - 4.58
herzen2011
-1 / 0 / 0
Регистрация: 01.05.2013
Сообщений: 34
#1

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

01.05.2013, 23:00. Просмотров 3823. Ответов 6
Метки нет (Все метки)

Надо исправить программу чтобы заработала.
У самой уже ничего не получается=((
Описать функцию 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);//используем функцию "меняния" местами
}
Как нужно исправить чтобы заработало?

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2013, 23:00
Ответы с готовыми решениями:

Описать функцию, меняющую местами максимальные элементы двух матриц произвольного порядка
После вывода на экран &quot;repl&quot; программа вылетает. Объясните, пожалуйста, почему?...

Описать процедуру Swap(X, Y), меняющую содержимое переменных X и Y
Подскажите, пожалуйста, что нужно исправить. Моя программа не меняет числа....

Pадача на процедуры (описать процедуру Swap(X,Y), меняющую содержимое переменных X и Y )
прошу решить и с объяснением если можно пожалуйста. Описать процедуру...

Напишите функцию, меняющую местами элементы массива
17. Напишите функцию, меняющую местами наибольший и наименьший элементы массива.

Поменять местами строки матриц, содержащие максимальные элементы
Ввести две матрицы действительных чисел 4х5. Поменять местами строки матриц,...

6
lemegeton
2933 / 1362 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
02.05.2013, 00:55 #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;
}
1
herzen2011
-1 / 0 / 0
Регистрация: 01.05.2013
Сообщений: 34
02.05.2013, 11:24  [ТС] #3
C++
1
int main(int argc, char *argv[])
Программу переписала под обычный школьный компилятор С++, а не под Visual Studio и он ругается вот на эти две переменные, выдает такую фразу "Parameter argc(argv) is never used" там надо директиву какую то подключить чтобы больше не выдавал ошибки или нет?
Когда убираю эту строчку компилятор больше ошибок не выдает, но и программа виснет и не запускается.
Может конечно смешно звучит но пишем программы мы на Borland C++ 3.1(
0
lemegeton
2933 / 1362 / 467
Регистрация: 29.11.2010
Сообщений: 2,725
02.05.2013, 22:56 #4
Цитата Сообщение от herzen2011 Посмотреть сообщение
Программу переписала под обычный школьный компилятор С++, а не под Visual Studio
Мой код и не под вижуал студио. Больше скажу -- у меня даже нет вижуал студио. %)

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

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

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

Поменять местами максимальные элементы заданных матриц. Как упростить программу?
Дали задачу, я её решил, и по-моему получилось как-то нерационально....

Массив. Поменять местами максимальные и минимальные элементы массива
Здраствуйте,помогите решить задачу Дана квадратная матрица поменять местами...

Описать функцию, меняющую порядок элементов вещественного массива
Описать функцию типа void Hill(A, N), меняющую порядок элементов вещественного...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru