Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Образовательный студенческий форум _ Информатика / Программирование _ Обработка двумерных массивов

Автор: D&M@N 23.12.2009, 13:48

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

#include <stdio.h>

main()
{ int i, j, n;
int x[10][10];

// Вв/выв исходных данных:
printf("\n Введите размер матрицы n и элементы: \n");
scanf("%d", &n);
for ( i = 0; i < n; i++)
for ( j = 0; j < n; j++)
scanf("%d", &x[i][j]);

printf("Исходная матрица %d*%d \n", n, n);
for ( i = 0; i < n; i++ )
{ for (j = 0; j < n; j++ )
printf("%d\t", x[i][j]);
printf("\n");
}

// Обработка матрицы:
for ( i = 1; i < n; i++)
for ( j = 0; j <= i+1; j++)
if ( x[i][j] < 0 ) x[i][j] = -x[i][j];

printf("Обработанная матрица: \n");
for ( i = 0; i < n; i++ )
{ for (j = 0; j < n; j++ )
printf("%d\t", x[i][j]);
printf("\n");
}
}

Автор: граф Монте-Кристо 23.12.2009, 14:12

Вам нужно сменить знак минимального элемента, если он находится выше главной диагонали, а Вы меняете знаки всех отрицательных элементов.

Автор: D&M@N 23.12.2009, 14:15

Цитата(граф Монте-Кристо @ 23.12.2009, 14:12) *

Вам нужно сменить знак минимального элемента, если он находится выше главной диагонали, а Вы меняете знаки всех отрицательных элементов.

а как задать этот минимальный элемент? вот именно в этом у меня и возникла трудность

Автор: граф Монте-Кристо 23.12.2009, 14:15

Ну,видимо,его нужно найти в матрице.

Автор: D&M@N 23.12.2009, 15:29

// if ( x[i][j] < 0 ) x[i][j] = -x[i][j];

вот тут вот как записать наименьший элемент,
каждый раз самому вводить его что ли?

Автор: граф Монте-Кристо 23.12.2009, 15:35

Вам нужно найти в таблице минимальный элемент, и если он находится выше главной диагонали, то сменить его знак. В каждой таблице будет какой-то свой минимальный элемент.

Автор: D&M@N 23.12.2009, 16:03

но понять не могу как сделать чтобы его программа искала?.

Автор: граф Монте-Кристо 23.12.2009, 16:23

Обычный алгоритм. Заводите переменную, скажем, min, и присваиваете ей значение первого элемента таблицы. Потом проходите по всей таблице и проверяете, если очередной элемент меньше или равен min, то присваиваете min значение этого текущего элемента. После обхода всей таблицы в min будет значение минимального элемента.
Можно, чтобы потом не обходить ещё раз всю таблицу, в поиске запоминать координаты минимального элемента, и тогда просто поменять знак у элемента с этими координатами.

Автор: D&M@N 23.12.2009, 17:40

пасибо)

Автор: D&M@N 23.12.2009, 20:20

#include<stdio.h>
int mas_in(int **A, int n);
int min(int **A, int n);
int mas_out(int **A, int n);

void main(void)
{

int=mas_in(A, n);
int=mas_out(A,n);
}
int mas_in(int **A, int n);
{
int n, i, j;
int x[][50];

printf("\n BBedite razmer n i massiv: \n");
scanf("d", &n);
for (i=0; i<n; i++)
for (j=0; j<n; j++)
scanf ("&d", &x[i][j]);
}
int min(int **A, int n);
{
int m, n, i, j;
int x[][50];
m=x[0][0];
for (i=1; i<n; i++)
for (j=0; j<=i+1; j++)
if (m < x[i][j]) && (i > j) x[i][j] = -x[i][j];
return m;
}


проверьте плиз.....тут наверно с вызовом функции не то что то..

Автор: граф Монте-Кристо 23.12.2009, 21:48

int=mas_in(A, n);
int=mas_out(A,n);
Это что такое?
В функциях у Вас n идёт как переменная, которая идёт в функцию,и в то же время Вы объявляете такую же переменную внутри функции. Так нельзя делать.
Где описана функция mas_out?
Что возвращает функция mas_in?

Автор: D&M@N 25.12.2009, 16:27

вот сейчас исправил как мог..оцените....но опять пишет ошибку
declaration terminated incorrectly..подскажите что не так?

#include<stdio.h>
int mas_in(int A[][10]);
int min(int A[][10], int n );
int mas_out(int A[][10], int n);

void main(void)
{ int A[10][10],n;

n=mas_in(A);
mas_out(A, n);

}



int mas_in(int x[][10] );
{
int n, i, j;


printf("\n BBedite razmer n i massiv:\n");
scanf("%d", &n);
for (i=0; i<n; i++)
for (j=0; j<n; j++)
scanf ("%d", &x[i][j]);
return n;
}


void min(int x[][10])
{
int m, n, i, j, im=0, jm=1;

m=x[0][1];

for (i=0; i<n-1; i++)
for (j=i+1; j<n; j++)
if (m > x[i][j])
{ m=x[i][j]; im=i, jm=j; }
x[im][jm]*= -1;

void mas_out( A[][10], n);
{
printf("\n obrabotannaya matriza: \n");
for (i=0; i<n; i++)
for (j=0; j<n; j++)
printf ("%d\t", x[i][j]);
printf ("\n") }

}

Автор: граф Монте-Кристо 25.12.2009, 16:45

Насколько я помню, в самом начале при объявлении функции в скобках нужно писать только типы передаваемых аргументов.
В функции min нужно поиск делать по всей таблице,а Вы ищете только по половине.Да,к тому же,закрывающую скобку пропустили. И в саму эту функцию передаёте один аргумент, хотя выше описали,что хотите передавать два.

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)