Войти

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


ShadowMas
03-04-2009, 21:31
Да что то не как не могу додумать завершающий этап програмки :)

Вобщем,что то голова совсем не думает сегодня :)

Дана такая задачка:

Дана матрица 10:10. Элементы чётных столбцов разделить на максимальный элемент матрици,а не чётных умножить на минимальный.


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

int main()
{
int arr[10][10];
int i,j;
randomize;
for(i = 0; i < 10; i++)
for(j = 0; j < 10; j++)
{

arr[i][j]=random(10);

}

printf("Massiv: n \n\n");
for(i = 0; i < 10; i++)
{
for(j = 0; j < 10; j++)
printf("%3i ",arr[i][j]);

if(j % 10 == 0)
cout<<endl;
printf("\n");
}


//максимальный элемент

int ZnachenieElementaMAX = arr[0][0];
for(i = 0; i < 10; i++)
for(j = 0; j < 10; j++)
{
if(ZnachenieElementaMAX <= arr[i][j])
{
ZnachenieElementaMAX = arr[i][j];
}
}
//Проверка
cout<<"ZnachenieElementaMAX = "<<ZnachenieElementaMAX<<endl;

//минимальный элемент

int ZnachenieElementaMIN = arr[0][0];
for(i = 0; i < 10; i++)
for(j = 0; j < 10; j++)
{
if(ZnachenieElementaMIN >= arr[i][j])
{
ZnachenieElementaMIN = arr[i][j];
}
}
//Проверка
cout<<"ZnachenieElementaMIN = "<<ZnachenieElementaMIN<<endl;
for(i = 0; i < 10; i++)
for(j = 0; j < 10; j++)
{
//операция с четными столбцами
if(j%2 == 0)
А вот тут заминка вышла :)
}


ПОдскажите плиз условие нахождения чётных не чётных элементов матрици

Busla
03-04-2009, 22:17
в матрице счёт столбцов/строк начинается с единицы, а у вас массив заполняется с нулевых индексов. Т.е. всё наоборот: если остаток нулевой - столбец нечётный, иначе - чётный:
if (j%2==0)
arr[i][j]=arr[i][j]*ZnachenieElementaMIN;
else
arr[i][j]=arr[i][j]/ZnachenieElementaMAX;

я бы if вынес за второй цикл:
for(i = 0; i < 10; i++)
if (j%2==0)
for(j = 0; j < 10; j++) arr[i][j]=arr[i][j]*ZnachenieElementaMIN;
else
for(j = 0; j < 10; j++) arr[i][j]=arr[i][j]/ZnachenieElementaMAX;
только массив у вас объявлен целочисленный - после деления получится сплошная абстракция ;-)

Drongo
03-04-2009, 22:18
Только для нахождения минимального значения присвой не первый элемент массива, а обычное число, скажем 10, ведь генерируется случайное число не больше 9. И для расширяемости и удобства, рекомендовется, вместо int arr[10][10]; использовать такую конструкцию, тогда не нужно будет везде писать в размере массива число 10, а просто
const int column = 10;
const int row = 10;

int array[column][row] = {0};
По теме, попробовал бы так, проверь, возможно ошибся, но не должен. Учти советы в начале коммента
for(j = 0; j < 10; j++)
{
//операция с четными столбцами
if(j%2 == 0){
for(i = 0; i < 10; i++)
arr[i][j] /= ZnachenieElementaMAX;
}

}

for(j = 0; j < 10; j++){
if(j % 2 != 0){
for(i = 0; i < 10; i++)
arr[i][j] *= ZnachenieElementaMIN;
//ZnachenieElementaMIN;
}
}

Busla
03-04-2009, 22:19
и чисто гипотетически не исключена ситуация, что произойдёт деление на нуль

Drongo
03-04-2009, 22:21
Busla, for(i = 0; i < 10; i++)
if (j%2==0)
for(j = 0; j < 10; j++) arr[i][j]=arr[i][j]*ZnachenieElementaMIN;
else
for(j = 0; j < 10; j++) arr[i][j]=arr[i][j]/ZnachenieElementaMAX; »Не получится, так как, одно условие за один раз, а у тебя if\else или\или, тогда что-то или какой-то столбец чётный или нечётный, скорее нечётный не будет выполняться, поскольку выполнено первое условие.

Busla
03-04-2009, 22:22
Только для нахождения минимального значения присвой не первый элемент массива, а обычное число, скажем 10 »
всё там было хорошо - с левым числом гораздо проще ошибиться: сейчас массив случайно заполняется, потом кто-то руками попробует и т.п. Да и зачем эта лишняя сущность?

ShadowMas
03-04-2009, 22:26
Спасибо огромное за советы сейчас буду пробывать !!!

Busla
03-04-2009, 22:26
точно - индексы перепутал - вот к чему приводит копипаст! :-)
должно быть:
for(j = 0; j < 10; j++)
if (j%2==0)
for(i = 0; i < 10; i++) arr[i][j]=arr[i][j]*ZnachenieElementaMIN;
else
for(i = 0; i < 10; i++) arr[i][j]=arr[i][j]/ZnachenieElementaMAX;

Drongo
03-04-2009, 22:27
всё там было хорошо - с левым числом гораздо проще ошибиться: сейчас массив случайно заполняется »Согласен, но при его варианте, первым присваивается ноль, поэтому я опробовал, и ошибка деления на ноль. Вот и посоветовал. Хотя чую, перемудрил. :)не исключена ситуация, что произойдёт деление на нуль »Она и не исключена, минимальный элемент в его массиве всегда будет нулём... если не задать масшаб случайных чисел.

1 + random(10);

Busla
04-04-2009, 10:21
но делить-то надо на максимальный, чтобы и он был нулём - вся матрица должна быть заполнена нулями




© OSzone.net 2001-2012