Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
iWord
10 / 10 / 2
Регистрация: 21.12.2010
Сообщений: 108
1

Найти минимальный элемент каждого столбца матрицы и поменять его местами с элементом побочной диагонали

10.01.2011, 21:34. Просмотров 1558. Ответов 20
Метки нет (Все метки)

Уважаемые форумчане , прошу помочь с программой данного содержания:
"Дана квадратная матрица, в которой надой найти минимальный элемент каждого столбца и поменять его местами с элементом побочной матрицы".Никак не выходит поиск минимального массива и замена на побочной диагонали.
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
 
main(int argc,char *argv[])
{
char s[30],p[10];
int x[100][100],a[30][30],q,highest,m,n,i,j,w,e,r,min,max,imin,imax,jmax,jmin,min1,max1,i1min,j1min,i1max,j1max;
srandom(time(NULL));
m=n;
puts("Программу выполнил Мухамедгалиев Ринат ИВТ-11");
puts("В двумерном массиве размерности n*n");
puts("Вдвухмерной матрице найти минимальный элемент в столбце и заменит его на элемент в побочной диагонали");
puts(" ");
if (argc<2) { puts("Нужно вводить ./gl4 [размерность квадаратной матрицы] [hand/random]"); exit(0);  }
n=atoi(argv[1]);
m=n;
if ((n<2) || (n>20) || (m<n) || (m>n)) { puts("Вводимые значения кол-во строк и столбцов должны быть от 2 до 20"); exit(0); }
puts(" ");
if (strcmp(argv[2],"hand")==0) 
{
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
{
printf("Введите %d,%d элемент=\n",i,j);
fgets(p,9,stdin);
a[i][j]=atoi(p);
}
} else
{
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
a[i][j]=rand()%99;
}
//==================vivod=====================
puts(" ");
puts("====Введенная матрица====");
puts(" ");
for (i=1;i<=n;i++)
{
for (j=1;j<=m;j++)
{
printf("%d ",a[i][j]);
if ((a[i][j]>=0) && (a[i][j]<=9)) printf(" ");}
puts("");}
 
//нахождение минимального элемента в столбце и замена на побочной диагонали. 
 
puts(" ");
printf("%d ", jmin);
}
 
puts(" ");
}
Добавлено через 26 минут
Цитата Сообщение от iWord Посмотреть сообщение
Никак не выходит поиск минимального массива и замена на побочной диагонали.
Описался *минимального элемента
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2011, 21:34
Ответы с готовыми решениями:

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

Найти минимальный элемент матрицы, и поменять его местами с первым элементом
#include &lt;stdlib.h&gt; #include &lt;stdio.h&gt; #define N 3 #define M 4 int main() { int i,j,min=0; ...

Найти минимальный элемент матрицы С (размер m*n), и поменять его местами с первым элементом
помогите пожалуйста код написать.

Найти в каждой строке матрицы наибольший элемент и поменять его местами с элементом главной диагонали
Привет. Помогите исправить программу. Найти в каждой строке наибольший элемент и поменять его...

Найти минимальный элемент и поменять его местами с последним элементом массива
Вот условие Найти минимальный элемент и поменять его местами с последним элементом массива. вот...

20
Crudelis
Шаровик затейник
689 / 438 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
10.01.2011, 21:34 2
у меня вопрос, в 10й строке для чего определенно огромное количество переменных типа int?
поиск минимума:
C++
1
2
3
4
5
6
7
int min=a[0][0];
for(int i=0;i<30;i++){
for(int j=0;j<30;j++){
if(min>a[i][j])
min=a[i][j];
}
}
1
iWord
10 / 10 / 2
Регистрация: 21.12.2010
Сообщений: 108
10.01.2011, 21:47  [ТС] 3
Хм да там много переменных , так как костям из прошлой программы другого задания взял.Но ваш код все же не подходит.Есть еще у кого варианты?
0
sandye51
программист С++
838 / 597 / 147
Регистрация: 19.12.2010
Сообщений: 2,016
10.01.2011, 22:28 4
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
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
 
size_t max(const int* v, const size_t& n)
{
    int i = 1, Imax = 0;
    for (i = 0; i < n; ++i)
        if (v[i] > v[Imax])
            Imax = i;
    return Imax;
}
 
int main()
{
    size_t n, i, j;
    printf("Enter the size of the matrix\n");
    scanf("%u", &n);
    printf("Enter the matrix\n");
    int** matrix = (int**)malloc(sizeof(int*) * n);
    for (i = 0; i < n; ++i)
        matrix[i] = (int*)malloc(sizeof(int) * n);
    for (i = 0; i < n; ++i)
        for (j = 0; j < n; ++j)
            scanf("%d", &matrix[j][i]);
 
    for (i = 0; i < n; ++i)
    {
        size_t Imax = max(matrix[i], n);
        int Tmp = matrix[i][Imax];
        matrix[i][Imax] = matrix[i][n - i - 1];
        matrix[i][n - i - 1] = Tmp;
    }
    for (i = 0; i < n; ++i)
    {
        for (j = 0; j < n; ++j)
            printf("%3d", matrix[j][i]);
        printf("\n");
    }
    getch();
    for (i = 0; i < n; ++i)
        free(matrix[i]);
    free(matrix);
    return 0;
}
1
10.01.2011, 22:28
iWord
10 / 10 / 2
Регистрация: 21.12.2010
Сообщений: 108
10.01.2011, 22:52  [ТС] 5
Огромное спасибо *пошел компилить под чистый си*
0
iWord
10 / 10 / 2
Регистрация: 21.12.2010
Сообщений: 108
11.01.2011, 02:18  [ТС] 6
А можете из этого функцию сделать? так как при совмещении программ выходит кучу ошибок
0
sandye51
программист С++
838 / 597 / 147
Регистрация: 19.12.2010
Сообщений: 2,016
11.01.2011, 02:21 7
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void function_1(int** matrix, int n)
{
    int i;
    for (i = 0; i < n; ++i)
    {
        int t = 1, Imax = 0;
        for (t = 0; t < n; ++t)
            if (matrix[i][t] > matrix[i][Imax])
                Imax = t;
        int Tmp = matrix[i][Imax];
        matrix[i][Imax] = matrix[i][n - i - 1];
        matrix[i][n - i - 1] = Tmp;
    }
}
отдельной функцией
1
iWord
10 / 10 / 2
Регистрация: 21.12.2010
Сообщений: 108
11.01.2011, 02:31  [ТС] 8
если не ошибаюсь то функцию вызывать так ? function_1(a,n)? Где а - матрица?Просто все никак не выходит совместить вашу программу и мою.
0
sandye51
программист С++
838 / 597 / 147
Регистрация: 19.12.2010
Сообщений: 2,016
11.01.2011, 02:34 9
void function_1(int** matrix, int n)
matrix - матрица типа int
n - ее порядок
1
iWord
10 / 10 / 2
Регистрация: 21.12.2010
Сообщений: 108
11.01.2011, 02:41  [ТС] 10
void function_1(int** a, int n) вот так будет выглядеть в программе тоесть?
0
sandye51
программист С++
838 / 597 / 147
Регистрация: 19.12.2010
Сообщений: 2,016
11.01.2011, 02:49 11
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
#include <stdio.h>
#include <stdlib.h>
 
void function_1(int** matrix, int n)
{
    int i;
    for (i = 0; i < n; ++i)
    {
        int t = 1, Imax = 0;
        for (t = 0; t < n; ++t)
            if (matrix[i][t] > matrix[i][Imax])
                Imax = t;
        int Tmp = matrix[i][Imax];
        matrix[i][Imax] = matrix[i][n - i - 1];
        matrix[i][n - i - 1] = Tmp;
    }
}
 
int main()
{
    int n, i, j;
    printf("Enter the size of the matrix\n");
    scanf("%d", &n);
    printf("Enter the matrix\n");
    int** matrix = (int**)malloc(sizeof(int*) * n);
    for (i = 0; i < n; ++i)
        matrix[i] = (int*)malloc(sizeof(int) * n);
    for (i = 0; i < n; ++i)
        for (j = 0; j < n; ++j)
            scanf("%d", &matrix[j][i]);
    function_1(matrix, n);
    for (i = 0; i < n; ++i)
    {
        for (j = 0; j < n; ++j)
            printf("%3d", matrix[j][i]);
        printf("\n");
    }
    for (i = 0; i < n; ++i)
        free(matrix[i]);
    free(matrix);
    return 0;
}
пример в программе
строка 31
1
iWord
10 / 10 / 2
Регистрация: 21.12.2010
Сообщений: 108
11.01.2011, 02:54  [ТС] 12
сейчас попробую просто смущает что вы не явно указываете размер матрицы , а просто выделяете память под нее. можно как то без выделения сделать?А можете показать на примере моей программы как реализовать а то ругается на
gl4.c:64: warning: passing argument 1 of ‘function_1’ from incompatible pointer type
gl4.c:6: note: expected ‘int **’ but argument is of type ‘int (*)[30]’
0
sandye51
программист С++
838 / 597 / 147
Регистрация: 19.12.2010
Сообщений: 2,016
11.01.2011, 03:17 13
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
 
void function_1(int** matrix, int n)
{
        int i;
        for (i = 0; i < n; ++i)
        {
                int t = 1, Imax = 0;
                for (t = 0; t < n; ++t)
                        if (matrix[i][t] > matrix[i][Imax])
                                Imax = t;
                int Tmp = matrix[i][Imax];
                matrix[i][Imax] = matrix[i][n - i - 1];
                matrix[i][n - i - 1] = Tmp;
        }
}
 
void print_matrix(int** matrix, int n)
{
    int i, j;
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < n; j++)
            printf("%3d", matrix[i][j]);
        puts("");
    }
}
 
int main(int argc,char *argv[])
{
    int **a, n, i, j;
    srand(time(NULL));
    puts("Программу выполнил Мухамедгалиев Ринат ИВТ-11");
    puts("В двумерном массиве размерности n*n");
    puts("В матрице найти минимальный элемент в столбце и заменить его на элемент в побочной диагонали\n");
    if (argc<2)
    { 
        puts("Нужно вводить ./gl4 [размерность квадаратной матрицы] [hand/randon]");
        exit(0);
    }
    n = atoi(argv[1]);
    a = (int**)malloc(sizeof(int*) * n);
    for (i = 0; i < n; ++i)
        a[i] = (int*)malloc(sizeof(int) * n);
    if (n < 2 || n >= 20)
    {
        puts("Вводимые значения кол-во строк и столбцов должны быть от 2 до 20"); 
        exit(0); 
    }
    if (strcmp(argv[2], "hand") == 0) 
        for (i = 0; i < n; i++)
            for (j = 0; j < n; j++)
            {
                printf("Введите %d,%d элемент = \n", i, j);
                scanf("%d", &a[i][j]);
            } 
    else
        for (i = 0; i < n; i++)
            for (j = 0; j < n; j++)
                a[i][j] = rand() % 100;
    //==================vivod=====================
    puts("\n====Введенная матрица====\n");
    print_matrix(a, n);
    //нахождение минимального элемента в столбце и замена на побочной диагонали. 
    function_1(a, n);
    puts("");
    print_matrix(a, n);
    for (i = 0; i < n; ++i)
        free(a[i]);
    free(a);
    return 0;
}
1
iWord
10 / 10 / 2
Регистрация: 21.12.2010
Сообщений: 108
11.01.2011, 03:24  [ТС] 14
спасибо вывело так:
Код
====Введенная матрица====

 48  1 41 52
 22 79 70 16
 85 20  2  6
 63 74 60 43

 48  1 41 52
 22 70 79 16
 20 85  2  6
 74 63 60 43
0
iWord
10 / 10 / 2
Регистрация: 21.12.2010
Сообщений: 108
11.01.2011, 03:25  [ТС] 15
дабл пост прошу удалить
0
sandye51
программист С++
838 / 597 / 147
Регистрация: 19.12.2010
Сообщений: 2,016
11.01.2011, 03:31 16
iWord,
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
 
void function_1(int** matrix, int n)
{
        int i;
        for (i = 0; i < n; ++i)
        {
                int t = 1, Imax = 0;
                for (t = 0; t < n; ++t)
                        if (matrix[i][t] > matrix[i][Imax])
                                Imax = t;
                int Tmp = matrix[i][Imax];
                matrix[i][Imax] = matrix[i][n - i - 1];
                matrix[i][n - i - 1] = Tmp;
        }
}
 
void print_matrix(int** matrix, int n)
{
        int i, j;
        for (i = 0; i < n; i++)
        {
                for (j = 0; j < n; j++)
                        printf("%3d", matrix[j][i]);
                puts("");
        }
}
 
int main(int argc,char *argv[])
{
        int **a, n, i, j;
        srand(time(NULL));
        puts("Программу выполнил Мухамедгалиев Ринат ИВТ-11");
        puts("В двумерном массиве размерности n*n");
        puts("В матрице найти минимальный элемент в столбце и заменить его на элемент в побочной диагонали\n");
        if (argc<2)
        { 
                puts("Нужно вводить ./gl4 [размерность квадаратной матрицы] [hand/randon]");
                exit(0);
        }
        n = atoi(argv[1]);
        a = (int**)malloc(sizeof(int*) * n);
        for (i = 0; i < n; ++i)
                a[i] = (int*)malloc(sizeof(int) * n);
        if (n < 2 || n >= 20)
        {
                puts("Вводимые значения кол-во строк и столбцов должны быть от 2 до 20"); 
                exit(0); 
        }
        if (strcmp(argv[2], "hand") == 0) 
                for (i = 0; i < n; i++)
                        for (j = 0; j < n; j++)
                        {
                                printf("Введите %d,%d элемент = \n", i, j);
                                scanf("%d", &a[j][i]);
                        } 
        else
                for (i = 0; i < n; i++)
                        for (j = 0; j < n; j++)
                                a[j][i] = rand() % 100;
        //==================vivod=====================
        puts("\n====Введенная матрица====\n");
        print_matrix(a, n);
        //нахождение минимального элемента в столбце и замена на побочной диагонали. 
        function_1(a, n);
        puts("");
        print_matrix(a, n);
        for (i = 0; i < n; ++i)
                free(a[i]);
        free(a);
        return 0;
}
попробуйте вот так, должно нормально вывести
1
iWord
10 / 10 / 2
Регистрация: 21.12.2010
Сообщений: 108
11.01.2011, 03:34  [ТС] 17
38 82 0 5
56 39 94 36
10 67 80 41
83 28 3 31

38 67 0 41
56 39 94 36
10 82 80 5
83 28 3 31
0
sandye51
программист С++
838 / 597 / 147
Регистрация: 19.12.2010
Сообщений: 2,016
11.01.2011, 03:34 18
ну все ок
1
iWord
10 / 10 / 2
Регистрация: 21.12.2010
Сообщений: 108
11.01.2011, 03:37  [ТС] 19
Все нашел загвоздку!


void function_1(int** matrix, int n)
{
int i;
for (i = 0; i < n; ++i)
{
int t = 1, Imax = 0;
for (t = 0; t < n; ++t)
if (matrix[i][t] < matrix[i][Imax])
Imax = t;
int Tmp = matrix[i][Imax];
matrix[i][Imax] = matrix[i][n - i - 1];
matrix[i][n - i - 1] = Tmp;
}
}

Добавлено через 1 минуту
Спасибо тебе , что помог в столь поздний час!
0
sandye51
программист С++
838 / 597 / 147
Регистрация: 19.12.2010
Сообщений: 2,016
11.01.2011, 03:38 20
iWord, ах, а я наоборот максимальный искал)
ну да
1
11.01.2011, 03:38
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2011, 03:38

Найти минимальный элемент массива и поменять его местами с элементом, который задан
Суть в том, что надо найти минимальный элемент массива и поменять его места с элементом, который...

Найти в каждой строке наибольший элемент и поменять его местами с соответствующим элементом главной диагонали
Элементами матрицы являются случайные значения функции f(x). Вывести на печать результаты и...

Найти минимальный элемент массива и поменять его местами с элементом массива, номер которого задан
Найти минимальный элемент массива и поменять его местами с элементом массива, номер которого задан....


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.