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

Переставить в обратном порядке элементы матрицы, расположенные между последним и минимальным - C++

Восстановить пароль Регистрация
 
Кристо
0 / 0 / 0
Регистрация: 03.10.2011
Сообщений: 9
09.10.2011, 14:19     Переставить в обратном порядке элементы матрицы, расположенные между последним и минимальным #1
В каждой строке матрицы переставить в обратном порядке элементы, расположенные между последним и минимальным элементами.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2011, 14:19     Переставить в обратном порядке элементы матрицы, расположенные между последним и минимальным
Посмотрите здесь:

Переставить в обратном порядке буквы расположенные между с 2 по 10 C++
Как переставить в обратном порядке элементы массива, расположенные между его минимальным и максимальным элементами C++
Переставить в обратном порядке элементы массива, расположенные между его минимальным и максимальным элементами C++
C++ Переставить в обратном порядке элементы массива, расположенные между его минимальным и максимальным элементами
Дан массив размера 10. Переставить в обратном порядке элементы массива, расположенные между его минимальным и максимальным элементами C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
09.10.2011, 15:39     Переставить в обратном порядке элементы матрицы, расположенные между последним и минимальным #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include <iostream>
#include <conio.h>
#include <cstdlib>
 
const int MIN = 11;//Элемент, на 1 больше максимально допустимого.
 
int main()
{
    srand(time(NULL));
    int rows, cols;
    std::cout << "Enter rows & cols of array:\n";
    std::cin >> rows >> cols;
    
    std::cout << "\nSource array:\n";
    int **arr = new int* [rows];
    for(int i = 0; i < rows; ++i)
    {
        arr[i] = new int [cols];
        int min = MIN, pos;
        for(int j = 0; j < cols; ++j)
        {
            arr[i][j] = rand() % 21 - 10;
            if(arr[i][j] < min)
            {
                min = arr[i][j];
                pos = j;
            }
            std::cout << arr[i][j] << '\t';
        }
        std::cout << std::endl;
        for(int j = 0; j < (cols - pos) / 2; ++j)
        {
            int tmp = arr[i][pos + j];
            arr[i][pos + j] = arr[i][cols - j - 1];
            arr[i][cols - j - 1] = tmp;
        }
        
    }
    
    std::cout << "\nArray after rearrangement:\n";
    for(int i = 0; i < rows; ++i)
    {
        for(int j = 0; j < cols; ++j)
            std::cout << arr[i][j] << '\t';
        std::cout << std::endl;
    }
    
    getch();
    return 0;
}
Кристо
0 / 0 / 0
Регистрация: 03.10.2011
Сообщений: 9
09.10.2011, 21:24  [ТС]     Переставить в обратном порядке элементы матрицы, расположенные между последним и минимальным #3
Спасибо,что ответили......но я,если честно многое не поняла......я только начала разбираться в С++
вот моя программа,она работает,но неправильно....я никак не могу найти ошибку...


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
#include "stdafx.h"
#include<iostream>
#include<cmath>
 
using namespace std;
const int nm=10;
const int mm=10;
 
void input(int (*a)[nm],int n,int m);
void print(int (*a)[nm],int n,int m);
void poisk(int (*a)[nm],int n,int m);
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    int x[nm][mm];
    int n,m;
    cout<<"n,m?...";
    cin>>n>>m;
    input(x,n,m);
    poisk(x,n,m);
    print(x,n,m);
    system("pause");
    return 0;
}
 
 
void input(int (*a)[nm],int n,int m)
{
    int i,j;
    for(i=0;i<n;i++)
        for(j=0;j<m;j++)
            cin>>a[i][j];
}
 
void print(int (*a)[nm],int n,int m)
{
    int i,j;
    for(i=0;i<n;i++)
    {
        cout<<'\n';
        for(j=0;j<m;j++)
            cout<<a[i][j]<<" ";
        cout<<'\n';}
}
 
 
 
void poisk(int (*a)[nm],int n,int m)
{
    int i,j,k;
    int min;
    for(i=0;i<n;i++)
    {
        min=a[i][0];
        for(j=0;j<m;j++)
        {
            if (a[i][j]<min)
                min=a[i][j];
        }
        for(j=0;j<m;j++)
        {
           if(a[i][j]==min)
               for(k=j+1;k<m/2;k++)
                   swap(a[i][k],a[i][m-k+1]);
        }
               
            
    }
}
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
09.10.2011, 21:40     Переставить в обратном порядке элементы матрицы, расположенные между последним и минимальным #4
Собственно, в моем коде позиция минимального элемента находится в строке #23(конструкция if, вложенная в 2 цикла). Перестановка элементов с найденной позиции до конца строки просходит в строках ##31-36(опять же, следует учитывать большой внешний цикл i). Можете взять куски из моего кода, но, если вам принципиально важно, я могу глянуть с утра свежим взглядом на ваш код(а если найдутся энтузиасты, то и еще раньше глянут).
Петррр
 Аватар для Петррр
5917 / 3354 / 333
Регистрация: 28.10.2010
Сообщений: 5,926
09.10.2011, 21:44     Переставить в обратном порядке элементы матрицы, расположенные между последним и минимальным #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include <iostream>
#include <ctime>
#include <algorithm>
 
using namespace std;
 
int main(int argc, char **argv)
{
    const int rows = 5;
    const int columns = 6;
    srand(time(NULL));
    int **array = new int*[rows];
    for(int i = 0; i < rows; i++)
        array[i] = new int[columns];
 
    for(int i = 0; i < rows; i++)
    {
        for(int j = 0; j < columns; j++)
        {
            array[i][j] = rand() % 20;
            cout.width(3);
            cout << array[i][j] ;
        }
        cout << endl;
    }
 
    cout << "___\n";
    for(int i = 0; i < rows; i++)   
        reverse( find(&array[i][0], &array[i][columns], *min_element(&array[i][0], &array[i][columns])), &array[i][columns]); 
    
    for(int i = 0; i < rows; i++)
    {
        for(int j = 0; j < columns; j++)
        {
            cout.width(3);
            cout << array[i][j];
        }
        cout << endl;
    }
 
    for(int i = 0; i < rows; i++)
        delete [] array[i];
    delete [] array;
    system("pause");
    return 0;
}
Кристо
0 / 0 / 0
Регистрация: 03.10.2011
Сообщений: 9
09.10.2011, 21:47  [ТС]     Переставить в обратном порядке элементы матрицы, расположенные между последним и минимальным #6
я была бы очень благодарна вам,SOON,если бы вы с утра посмотрели свежим взглядом.......заранее спасибо
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
09.10.2011, 22:07     Переставить в обратном порядке элементы матрицы, расположенные между последним и минимальным #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Кристо Посмотреть сообщение
В каждой строке матрицы переставить в обратном порядке элементы, расположенные между последним и минимальным элементами.
Задачка простенькая, вы только ответьте, а если минимальных элементов несколько?

Если имеется в виду первый минимальный элемент, то вот как можно переделать вашу функцию poisk:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void poisk(int (*a)[nm],int n,int m)
{
        int i, j, k;
        int min;
        for(i=0;i<n;i++)
        {
                min=a[i][0];
                k = 0;
                for(j=0;j<m;j++)
                {
                        if (a[i][j]<min)
                        {
                                min=a[i][j];
                                k = j;
                        }
                }
                for(++k, j=m-1; k<j; ++k, --j)
                    swap(a[i][k],a[i][j]);
 
 
        }
}
Если же последний минимальный, то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void poisk(int (*a)[nm],int n,int m)
{
        int i, j, k;
        int min;
        for(i=0;i<n;i++)
        {
                min=a[i][0];
                k = 0;
                for(j=0;j<m;j++)
                {
                        if (a[i][j]<=min)
                        {
                                min=a[i][j];
                                k = j;
                        }
                }
                for(++k, j=m-1; k<j; ++k, --j)
                    swap(a[i][k],a[i][j]);
 
 
        }
}
lemegeton
 Аватар для lemegeton
2910 / 1339 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
09.10.2011, 22:13     Переставить в обратном порядке элементы матрицы, расположенные между последним и минимальным #8
Сообщение было отмечено автором темы, экспертом или модератором как ответ
... и еще менее понятный, но правильный вариант.
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
#include <iostream>
#include <iomanip>
#include <vector>
#include <algorithm>
#include <iterator>
#include <ctime>
 
class RandomInteger {
 public:
  RandomInteger(int min, int max) : min_(min), max_(max) {}
  int operator()() {
    return std::rand() % (max_ - min_ + 1) + min_;
  }
 private:
  int min_;
  int max_;
};
 
class RandomVector {
 public:
  RandomVector(size_t size, size_t min, size_t max)
    : size_(size), min_(min), max_(max) {}
  std::vector<int> operator()() {
    std::vector<int> result(size_);
    std::generate(result.begin(), result.end(), RandomInteger(min_, max_));
    return result;
  }
 private:
  size_t size_;
  size_t min_;
  size_t max_;
};
 
std::ostream &operator<<(std::ostream &stream,
  const std::vector<int> &vector) {
  for (std::vector<int>::const_iterator i = vector.begin();
    i != vector.end(); ++i)
    stream << std::setw(3) << *i << " ";
  return stream;
}
 
std::ostream &operator<<(std::ostream &stream,
  const std::vector< std::vector<int> > &matrix) {
  for (std::vector< std::vector<int> >::const_iterator i = matrix.begin();
    i != matrix.end(); ++i)
    stream << *i << std::endl;
  return stream;
}
 
int main(int argc, char *argv[]) {
  std::srand(std::time(NULL));
  size_t rows = 5 + rand() % 5;
  size_t cols = 5 + rand() % 5;
 
  std::vector< std::vector<int> > matrix(rows);
 
  std::generate(matrix.begin(), matrix.end(), RandomVector(cols, 0, 5));
  std::cout << matrix << std::endl;
 
  for (std::vector< std::vector<int> >::iterator row = matrix.begin();
    row != matrix.end(); ++row) {
    std::vector<int>::iterator 
      first = std::min_element((*row).begin(), (*row).end()),
      last = (*row).end() - 1;
    while (first < last)
      std::swap(*first++, *last--);
  }
 
  std::cout << matrix << std::endl;
  return 0;
}
x1Mike7x
 Аватар для x1Mike7x
214 / 127 / 6
Регистрация: 06.11.2010
Сообщений: 234
10.10.2011, 00:04     Переставить в обратном порядке элементы матрицы, расположенные между последним и минимальным #9
Кристо, у тебя немного неправильный процесс обмена элементов в 61-66 строках. Перепиши так:
C++
1
2
3
4
5
6
7
8
9
....................
int k, r;
if( a[i][j]==min )
{
    for( k=j+1, r=m-2; k<r; k++, r-- )
        swap(a[i][k], a[i][r]);
    j = m;
}
................................
Кристо
0 / 0 / 0
Регистрация: 03.10.2011
Сообщений: 9
10.10.2011, 16:31  [ТС]     Переставить в обратном порядке элементы матрицы, расположенные между последним и минимальным #10
Спасибо большое за помощь.......я разобралась наконец-то...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2011, 18:58     Переставить в обратном порядке элементы матрицы, расположенные между последним и минимальным
Еще ссылки по теме:

Переставить в обратном порядке элементы массива, расположенные между минимальным и максимальным элементами C++
Перегрузка функций. Переставить элементы между минимальным и максимальным в обратном порядке C++
Переставить в обратном порядке элементы массива, расположенные между элементами AK и AL включительно C++

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

Или воспользуйтесь поиском по форуму:
pilo4ka
Сообщений: n/a
25.12.2011, 18:58     Переставить в обратном порядке элементы матрицы, расположенные между последним и минимальным #11
здравствуйте!!! помогите пожалуйста не могу решить задачу, просто даже представления не имею, как это делать!!!!! кому не сложно помогите, подскажите!!!!заранеее благодарна!!! вот условия задачи: В одномерном массиве, состоящем из n вещественных элементов, вычислить:
-сумму элементов массива, расположенных после первого положительного элемента;
-записать элементы массива в фаил.#include "stdafx.h"
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
#include "stdio.h"
#include "iostream"
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
float sum, mas[n];
int a, b, i,n , k, imax;
for (i=0; i<n; i++) // находим первый положительный
{
if ((mas[i])>0)
{
k=i;
break;
}
}
sum=0;
for (k; k<n; k++) // находим сумму после первого положительного
{
sum=sum+mas[k];}
 
printf("Сумма элементов после первого положительного = %f\n",sum);
 
return 0;
}
Yandex
Объявления
25.12.2011, 18:58     Переставить в обратном порядке элементы матрицы, расположенные между последним и минимальным
Ответ Создать тему
Опции темы

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