Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Нахождение чётных элементов в столбцах матрицы (http://forum.oszone.net/showthread.php?t=136737)

ShadowMas 03-04-2009 21:31 1083464

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

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

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

Дана матрица 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 1083512

в матрице счёт столбцов/строк начинается с единицы, а у вас массив заполняется с нулевых индексов. Т.е. всё наоборот: если остаток нулевой - столбец нечётный, иначе - чётный:
Код:

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 1083515

Только для нахождения минимального значения присвой не первый элемент массива, а обычное число, скажем 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 1083517

и чисто гипотетически не исключена ситуация, что произойдёт деление на нуль

Drongo 03-04-2009 22:21 1083518

Busla,
Цитата:

Цитата 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 1083520

Цитата:

Цитата Drongo
Только для нахождения минимального значения присвой не первый элемент массива, а обычное число, скажем 10 »

всё там было хорошо - с левым числом гораздо проще ошибиться: сейчас массив случайно заполняется, потом кто-то руками попробует и т.п. Да и зачем эта лишняя сущность?

ShadowMas 03-04-2009 22:26 1083523

Спасибо огромное за советы сейчас буду пробывать !!!

Busla 03-04-2009 22:26 1083524

точно - индексы перепутал - вот к чему приводит копипаст! :-)
должно быть:
Код:

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 1083525

Цитата:

Цитата Busla
всё там было хорошо - с левым числом гораздо проще ошибиться: сейчас массив случайно заполняется »

Согласен, но при его варианте, первым присваивается ноль, поэтому я опробовал, и ошибка деления на ноль. Вот и посоветовал. Хотя чую, перемудрил. :)
Цитата:

Цитата Busla
не исключена ситуация, что произойдёт деление на нуль »

Она и не исключена, минимальный элемент в его массиве всегда будет нулём... если не задать масшаб случайных чисел.

Код:

1 + random(10);

Busla 04-04-2009 10:21 1083774

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


Время: 03:05.

Время: 03:05.
© OSzone.net 2001-