Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2019, 15:08   #1
i_kastiel
Новичок
Джуниор
 
Регистрация: 04.03.2019
Сообщений: 1
По умолчанию Задаётся матрица [n*n]. Отсортировать числа на главной диагонали и на диагоналях, ниже главной

Приветствую. Задача во вложении.
Код:
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
int cmp(const void *x1, const void *x2)
{
 return (*(int*)x1-*(int*)x2);
}
void main()
{
int n; // размерность массива
/* Ввод размерности массива */
DIMENSION:
printf("\tVvedite razmer massiva (1-8):\n\tn = ");
scanf("%i", &n);
printf("\n");
if (n<1 || n>8)
{
printf("\tError! Nevernoe znachenie. Povtorite popitku\n");
goto DIMENSION;
}
int z=0, i, p=n;
for (i=2; i<=n; i++)
{
    z += i;
}
int arr[n][n]; // исходный массив
int a[z]; // рабочий массив(используется для сортировки)
int j, k; // счетчики
/* Заполнение массива */
FILL:
srand(time(NULL));
printf("\tRandom (0) or manually (1)?\n\t");
scanf("%i", &i);
printf("\n");
if (i!=0 && i!=1)
{
printf("\tError! Try again.\n");
goto FILL;
} else if (i==0)
{
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
arr[i][j]=rand()%100-rand()%100;
}
}
} else {
for(i=0; i<n; i++)
{
for(j=0; j<n; j++)
{
printf("\t[%i][%i]=", i, j);
scanf("%i", &arr[i][j]);
}
printf("\n");
}
}
/* Вывод исходного массива */
printf("\tYour massive\n");
for(i=0, k=0; i<n; i++, k++)
{
printf("\t|");
for(j=0; j<n; j++)
{
printf("%4i ", arr[i][j]);
if( i==j ) // заполнение рабочего массива
{
a[k]=arr[i][j];
}
}
printf(" |\n");
}
printf("\n");
for (i=0; i<k; i++)
{
    printf("a[%d]= %d\n", i, a[i]);
}
qsort(a, k, sizeof(int), cmp); // сортировка данных
for(i=0, k=0; i<n; i++, k++)

   for(j=0; j<n; j++)
   {
       if (i==j && j==i)
           arr[i][j]=a[k];
   }
for (i=1, k=0; i<(n-1); i++ )
{
    int l=i;
    for (j=0, i=i; i<n; i++, j++, k++ )
        {
        a[k]=arr[i][j];
        printf("Element nizhe  glavnoi diagonali %d = %d\n", k, a[k]);
        }
        qsort(a, k, sizeof(int), cmp);
     for (j=0,k=0, i=l; i<n; i++, j++, k++ )
    {
     arr[i][j]=a[k];
     a[k]=0;
    }
}
for(i=0; i<n; i++)
{
printf("\t|");
for(j=0; j<n; j++)
{
printf("%4i ", arr[i][j]);
}
printf(" |\n");
}
printf("\n");
}
Программа сортирует только главную и диагональ, ниже главной.
Как я понимаю, цикл
Код:
for (i=1, k=0; i<(n-1); i++ )
{
    int l=i;
    for (j=0, i=i; i<n; i++, j++, k++ )
        {
        a[k]=arr[i][j];
        printf("Element nizhe  glavnoi diagonali %d = %d\n", k, a[k]);
        }
        qsort(a, k, sizeof(int), cmp);
     for (j=0,k=0, i=l; i<n; i++, j++, k++ )
    {
     arr[i][j]=a[k];
     a[k]=0;
    }
}
не переходит на следующую строку матрицы. В чём может быть проблема?
Изображения
Тип файла: png Screenshot_7.png (36.5 Кб, 63 просмотров)
i_kastiel вне форума Ответить с цитированием
Старый 04.03.2019, 15:32   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Т.е. вас не смущает
1.
Код:
i=i
2. что последний внутренний цикл доматает i до n и фактически внешний цикл бесполезен
3. k вообще б вылетали за границы a, как и j
?
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[C++] Дана квадратная целочисленная матрица порядка M. Уменьшить в два раза все элементы, лежащие ниже главной диагонали lunarBeast Помощь студентам 1 15.05.2018 19:34
Разместить на главной диагонали суммы элементов, которые лежат на диагоналях, перпендикулярных к главной. Си LLLyxPaT Помощь студентам 1 28.10.2016 16:01
Работа с матрицами на С++. Найти сумму элементов, расположенных выше главной диагонали, включая элементы главной диагонали. Анастасия225 Помощь студентам 5 20.01.2014 20:47
Массив, нахождение макс элемента ниже главной диагонали L3zh1Y Помощь студентам 2 15.05.2010 13:36
Маx элемент ниже главной диагонали Отчаявшаяся Помощь студентам 2 16.11.2009 18:19