 |
|
Нахождение чётных элементов в столбцах матрицы
Да что то не как не могу додумать завершающий этап програмки :)
Вобщем,что то голова совсем не думает сегодня :)
Дана такая задачка:
Дана матрица 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)
А вот тут заминка вышла :)
}
ПОдскажите плиз условие нахождения чётных не чётных элементов матрици
|
в матрице счёт столбцов/строк начинается с единицы, а у вас массив заполняется с нулевых индексов. Т.е. всё наоборот: если остаток нулевой - столбец нечётный, иначе - чётный:
Код:
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;
только массив у вас объявлен целочисленный - после деления получится сплошная абстракция ;-)
|
Только для нахождения минимального значения присвой не первый элемент массива, а обычное число, скажем 10, ведь генерируется случайное число не больше 9. И для расширяемости и удобства, рекомендовется, вместо использовать такую конструкцию, тогда не нужно будет везде писать в размере массива число 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,
Цитата:
Цитата 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 или\или, тогда что-то или какой-то столбец чётный или нечётный, скорее нечётный не будет выполняться, поскольку выполнено первое условие.
|
Цитата:
Цитата Drongo
Только для нахождения минимального значения присвой не первый элемент массива, а обычное число, скажем 10 »
|
всё там было хорошо - с левым числом гораздо проще ошибиться: сейчас массив случайно заполняется, потом кто-то руками попробует и т.п. Да и зачем эта лишняя сущность?
|
Спасибо огромное за советы сейчас буду пробывать !!!
|
точно - индексы перепутал - вот к чему приводит копипаст! :-)
должно быть:
Код:
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;
|
Цитата:
Цитата Busla
всё там было хорошо - с левым числом гораздо проще ошибиться: сейчас массив случайно заполняется »
|
Согласен, но при его варианте, первым присваивается ноль, поэтому я опробовал, и ошибка деления на ноль. Вот и посоветовал. Хотя чую, перемудрил. :)
Цитата:
Цитата Busla
не исключена ситуация, что произойдёт деление на нуль »
|
Она и не исключена, минимальный элемент в его массиве всегда будет нулём... если не задать масшаб случайных чисел.
|
но делить-то надо на максимальный, чтобы и он был нулём - вся матрица должна быть заполнена нулями
|
Время: 03:05.
© OSzone.net 2001-