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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2013, 16:20   #1
S111S
Новичок
Джуниор
 
Регистрация: 03.04.2013
Сообщений: 2
По умолчанию Задача с матрицей (C)

Отсортировать числа, находящиеся на ломаной линии в виде прямо-угольного треугольника, гипотенуза которого расположена на главной диагонали.

Вывести минимальное число среди чисел, которые НЕ подвергались сортировке.

вот есть вывод массива:
Код:
#include <stdio.h>
#include <stdlib.h>

int main()
{
   int i,j,n,k;
 int a[10][10];
 printf("vvedite razmer massiva ot 1 do 8=");
 scanf("%i",&n);
 printf("\n");

 srand(time(0));
 for (i = 0; i <= n - 1; ++i)
 {  for (j = 0; j <= n - 1; ++j)
     {  a[i][j] = rand() % 199 - 99;
         printf("%3i ", a[i][j]);  }
     printf("\n\n");
 }

}
S111S вне форума Ответить с цитированием
Старый 03.04.2013, 20:17   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Помогу с менее тривиальной частью, а именно сортировкой на ломаной:
Код:
#include <stdio.h>
#include <stdlib.h>

int
max(const int a, const int b)
{
    return (a > b) ? a : b;
}

int
min(const int a, const int b)
{
    return (a < b) ? a : b;
}

int*
get(const int *a, const int n, const int k)
{
    int r = min(min(k, 3 * n - 3 - k), n - 1);
    int c = max(min(k, 2 * n - 2 - k), 0);
    return (a + n * r + c);
}

int
main()
{
    int n, i, j;
    printf("Input size of array: ");
    scanf("%d", &n);
    int a[n][n];
    srand(time(0));
    for (i = 0; i != n; ++i) {
        for (j = 0; j != n; ++j) {
            a[i][j] = rand() % 199 - 99;
            printf("%3d ", a[i][j]);
        }
        printf("\n");
    }
    //3*n-3 количество сортируемых элементов
    for (i = 0; i != 3 * n - 3 - 1; ++i) {
        for (j = i + 1; j != 3 * n - 3; ++j) {
            int *p1 = get(a, n, i);
            int *p2 = get(a, n, j);
            if (*p1 > *p2) {
                int tmp = *p1;
                *p1 = *p2;
                *p2 = tmp;
            }
        }
    }
    printf("Sorted array:\n");
    for (i = 0; i != n; ++i) {
        for (j = 0; j != n; ++j) {
            printf("%3d ", a[i][j]);
        }
        printf("\n");
    }
    getch();
    return 0;
}
Все формулы выводились на бумаге.
Смысл таков - "разворачиваем" ломаную в линейный массив.
Пишем функцию, преобразующую номер в линейном массиве в указатель на нужный элемент в двумерном массиве.
Сортировка линейного массива - тривиальная задача.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 03.04.2013 в 20:51.
BDA вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача с матрицей Сергей124 Паскаль, Turbo Pascal, PascalABC.NET 1 25.11.2012 20:30
задача с матрицей на с++ inuzen Общие вопросы C/C++ 2 23.06.2012 23:37
Задача с матрицей Cheat Помощь студентам 2 27.05.2012 15:39
Задача с матрицей H[o][o]K Помощь студентам 1 15.12.2007 16:51