Многомерные массивы

std::sort прекрасно применяется и для обычных массивов:

int mass[10];
std::sort( mass, mass+10 );

Ребят гляньте что не так, первая часть задания найти первый столбец где нет отрицательного элемента срабатывает,
А вот отсортировать элементы именно СТОЛБЦА не выходит. бредово сортирует как то.

include <stdio.h>

include <conio.h>

include <iostream>

void main ()
{
const int str=5;
const int stolb=5;
int i,j;
float massiv[str][stolb];
for (int a = 0; a <str; a++)
{
for (int b = 0; b <stolb; b++)
{
massiv[a][b]=-10 + rand() % 21;
printf(«massiv:%1.1f\t», massiv[a][b]); // выводим матрицу на экран
}
}
printf(«n\n\n»);

int Stolbez = 0;
int flag;
for (int i = 0; i <str; i++)
{ // здесь ищем колонки без отрицательных чисел
for(int j = 0; j <stolb; j++)
{
if (massiv[i][j] >= 0)
{
flag = true;
continue;
}
else
{
flag = false;
break;
}
}
if (flag)
Stolbez = i + 1;
}
if (Stolbez)

printf(«Nomer pervogo izstolbcov ne soderzh ni odnogo otric elementa:%d\n», Stolbez);
else
printf(«All columns contains negative numbers.\n»);

for(int c=0;c<=(str*stolb);c++) //количество проходов
{
for(int j=0; j<stolb;j++) // сортировка столбцов по возрастанию
{
for(int i=0;i<str-1;i++)
{
if(massiv[i][j]>massiv[i][j+1])
{
int temp =massiv [i][j];
massiv [i][j]=massiv[i][j+1];
massiv[i][j+1]=temp;
}
}
}
}
for(int j=0; j<stolb;j++)
{
for(int i=0;i<str;i++)
{
printf(«mass %1.1f\t»,massiv[i][j]); //отсортированный массив
}
}
}

MonkeyHip, ты не мог бы взять на себя труд оформлять код программы в посте с нормальным форматированием. Способ указан прямо над полем ввода комментария. Способ с обратными апострофами («вручную») — надёжнее.

А то твой перекорёженный код разбирать и потом для себя ручками форматировать — ломает ((

По поводу текста программы: присоединяюсь к предыдущему оратору ))

Я вот чего-то не понял, а зачем тебе СТОЛБЕЦ сортировать? В твоем задании вроде такой задачи вообще ни где не ставится. Или я что-то где-то упустил?

А сортировка у тебя действительно странненькая. Пузырек по ходу.

Вот код для Пузырька. Откуда брал не помню.

   int ary[ARY_LEN];

   //...

   for (int i = 0; i < ARY_LEN - 1; i++)
   {
        for (int j = 1; j < ARY_LEN - i; j++)
        {
           if (ary[j] < ary[j - 1] )
               swap(&ary[j], &ary[j - 1]);
        }
    }

Да извините за код, я тут новенький, буду знать. я же написал что мне нужно отсортировать по столбцам и найти столбец без отрицательных. у меня вроде как сортирует но странновато как то.

Вот моя сортировка.

 for(int c=0;c<=(str*stolb);c++) //количество проходов
    {
    for(int j=0; j<stolb;j++) // сортировка столбцов по возрастанию
    {
    for(int i=0;i<str-1;i++)
    {
    if(massiv[i][j]>massiv[i][j+1])
    {
    int temp =massiv [i][j];
    massiv [i][j]=massiv[i][j+1];
    massiv[i][j+1]=temp;
    }
    }
    }
    }
    for(int j=0; j<stolb;j++)
    {
    for(int i=0;i<str;i++)
    {
    printf("mass %1.1f\t",massiv[i][j]); //отсортированный массив
    }
    }

пузырьком я понимааю что проще и лучше, но я немного не понимаю сам метод что вот это за ARY_LEN — 1; и ARY_LEN — i;

я же написал что мне нужно отсортировать по столбцам и найти столбец без отрицательных

Ну да, найти столбец без отрицательных значений. А сортировать-то столбцы зачем?

Достаточно просто последовательно просматривать каждый столбец на предмет отрицательных значений.

Перед просмотром очередного столбца выставляешь флаг наличия отрицательного элемента в false. Просматриваешь столбец. Если очередной элемент отрицательный, переводишь флаг в true и переходишь к следующему столбцу. Если просмотр столбца прошел полностью и флаг остался false, значит этот столбец без отрицательных элементов. Задача решена.

ARY_LEN — длина массива. Видимо целая константа или макрос (#define).

ARY_LEN - 1; — значение на единицу меньшее, чем длина массива ))

ARY_LEN - i; — в данном случае, во втором цикле массив просматривается до i-ого элемента. Правее все значения уже отсортированы.

В твою сортировку я что-то не въехал ((

А по форматированию кода — хрен редьки не слаще ((
Ты действительно так пишешь код? Если да, то срочно учись форматировать код. Иначе с твоими исходниками ни кто дела иметь не захочет.

Ну да, найти столбец без отрицательных значений. А сортировать-то столбцы зачем?

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

извините за код.

#include <stdio.h>
#include <conio.h>
#include <iostream>

void main ()

{
    const int str=5;
        const int stolb=4;
        int i,j;
    int massiv[str][stolb];

for (int a = 0; a <str; a++)
   {
        for (int b = 0; b <stolb; b++)
      {
                  massiv[a][b]=-10 + rand() % 20;

                      // printf("massiv:%d\t", massiv[a][b]);          // выводим матрицу на экран                 
        } 
   }
for (i=0; i<str; ++i)
{
for (j=0; j<stolb; ++j)
printf("massiv %d  ",massiv[i][j]);
printf ("\n");
}
printf("\n\n");

int foundColumn = 0;
    int flag;

    for (int i = 0; i <str; i++)
    {                                        // здесь ищем колонки без отрицательных чисел
        for(int j = 0; j <stolb; j++)
        {
            if (massiv[i][j] >= 0)
              {
                flag = true;
                continue;
              }
            else
            {
                flag = false;
                break;
            }
        }
            if (flag)
            foundColumn = i + 1;
    }

if (foundColumn)

printf("Nomer pervogo izstolbcov ne soderzh ni odnogo otric elementa:%d\n", foundColumn);
    else
        printf("All columns contains negative numbers.\n\n\n");

for(int c=0;c<=(str*stolb);c++)                           //количество проходов
{
for(int j=0; j<stolb;j++)                          // сорртировка солбцов по возрастанию
         {
           for(int i=0;i<str-j-1;i++)
            {
              if(massiv[i][j]> massiv[i+1][j])
               {

                   int temp =massiv [i][j];
                 massiv [i][j]=massiv[i+1][j];
                 massiv[i+1][j]=temp;
               }
            }
         }

}

for (i=0; i<str; ++i)
{
for (j=0; j<stolb; ++j)
printf("massiv %d  ",massiv[i][j]);
printf ("\n");
}
}

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.