Форум программистов, компьютерный форум, киберфорум
Наши страницы

Создать уникальный двумерный массив - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычислить сумму отрицательных элементов массива, которые делятся на 5 и индексы которых есть нечетные числа http://www.cyberforum.ru/cpp-beginners/thread1020337.html
Вычислить сумму отрицательных элементов массива, которые делятся на 5 и индексы которых есть нечетные числа.
C++ Файл. Подстрока из цифр Требуется определить строки файла, содержащие максимальную по длине подстроку, состоящую только из цифр. Если таких строк несколько, вывести первые 10. Вот мой код... Выдаёт неверный результат, если... http://www.cyberforum.ru/cpp-beginners/thread1020334.html
C++ Перевод из десятичной в Римскую
Дали курсовую , сдавать уже на днях. Может кто знает как делать? Написать программу перевода чисел из десятичной системы счисления в Римскую.исходное число считывается из одного файла, а...
Найти первую последовательность максимальной длины в массиве C++
Делал задачку: ввод одномерного массива из n целых чисел (1<=n<=100); Найти 1-ю последовательность максимальной длины масива; вывод результата выполнения операции. Вот что я написал, но...
C++ Не могу найти ошибку http://www.cyberforum.ru/cpp-beginners/thread1020313.html
Задача: вывести элементы массива, которые повторяются ровно 2 раза #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv) { setlocale (LC_ALL,...
C++ Задан текст. Определить количество слов, в которых встречается буква вводимая с клавиатуры Доброго времени суток. Помогите написать программу, пожалуйста. Заранее большое спасибо. подробнее

Показать сообщение отдельно
Flinky
0 / 0 / 0
Регистрация: 25.11.2013
Сообщений: 2
02.12.2013, 18:19  [ТС]
Почти доделал,для случая когда в первоначальном массиве(который 8*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
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include <iostream>
#include <ctime>
 
using namespace std;
 
int main()
{
    int min =0;
    int max =0;
    int imin =-1; 
    int jmin =-1;
    int imax =-1; 
    int jmax =-1;   
    srand(time(NULL));
    const int n =8; 
    int sum = 0;
    int **a = new int* [n]; // Создаем массив указателей
    for (int i = 0; i < n; i++)
    { 
        a[i] = new int [n]; // Создаем элементы
    }
    // А дальше работа как с обычным массивом. 
    for (int i = 0;( i < n) && (i!= (i+1)); i++)
    {
        for (int j = 0;( j < n) && (i!= (i+1)); j++)
        {
            a[i][j] = rand() % 64;
            cout.width(3);
            cout << a[i][j] << " "; 
        }
        cout << endl; // Двумерный массив. Строка кончилась, переводим строку и на консоли
    }
    // Считаем минимальный и максимальный
    min = a[0][0];// берем самый первый элемент массива и считаем, что он минимальный.
    max = a[0][0];// и он же максимальный. 
 
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (a[i][j] < min)
                {
                min = a[i][j];
                    imin = i;
                        jmin = j;
            }
 
            if (a[i][j] > max)
            {   
                max = a[i][j];
                    imax = i;
                        jmax = j;
            }
        }
    }
  cout << "min = " << min << " pos = " << imin << " " << jmin  << endl << "max = " << max << " pos = " << imax << " " << jmax<< endl;
  //тут мы найдем e и q,размер прямоугольника,e-столбец,q-строка
  int e=abs( n-(n-abs((imax-imin))));
    cout <<"e ="<<e<<endl;
        int q = abs (n-(n-abs((jmax-jmin))));
            cout <<"q ="<<q<<endl;
//создадим новый массив(прямоугольник)
int **arr= new int *[e];
    
    for (int i=0; i<e; i++)
        arr[i] = new int[q];
//если минимальный стоит левее максимального(как я рисовал)
    //новый двумерный массив(прямоугольник) по каждой строке,поочередно,вписываем в одномерный
int k = 0;
for (i=imin; i<imax; i++)
    {
            int f = 0;
        for (j=jmin; j<jmax; j++)
        {
            arr[k*q + f] = a[i][j]; 
 
            f += 1;//f отвечает за передвижение по строке(вправо)
        }
        k += 1;//  k - за передвижение по столбцу(вниз)
}
 
    
for (int i=0; i<(e*q); i++)//внешний цикл,прогоняем от начала до конца(размер прямоугольника,разложенного в строку e*q)
    {
        for (int j = (e*q-1); j>i; j--)//ну и рассматриваем элементы с конца до позиции i;
        {
            if(arr[j]<arr[j-1] //// Если соседние элементы расположены в неправильном порядке, то меняем их местами
            {
                swap (a[j], a[j - 1]);//меняем их
            }
        }
} 
 
 
 
 
for (int i = 0; i < size(e*q); i++)
         {
        cout << arr[i] << ' ';
    }
    for (int i = 0; i < (e*q); i++)
   {
       delete[]arr[i];
    }
    delete [] arr;
 
 
        // Удаление массива
   for (int i = 0; i < n; i++)
   {
       delete[]a[i]; // Удаляем каждый элемент
   }
    delete [] a; // А потом массив
   system("pause");
    return 0;
}
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru