Консультация № 169952
28.06.2009, 00:22
0.00 руб.
0 5 1
Здравствуйте, эксперты!Мне нужна ваша помощь.
Даны массивы A[3][5], B[3][5]. Для каждого массива
определить номер столбца с максимальным
элементом. В столбце с максимальным
элементом все отрицательные элементы
заменить на ноль.
Буду вам очень признательна.

Приложение:
имеется задачка, на подобие которой нужно сделать.
Условие задачи - Даны вещественные массивы A[3][4], D[3][4].
Для каждого массива определить сумму положительных элементов,
расположенных в четных столбцах и сумму положительных элементов,
расположенных в нечетных столбцах.

В данной задаче должны быть реализованы:
1. Ввод исходных массивов.
2. Расчет суммы положительных элементов в четных столбцах массива и
суммы положительных элементов в нечетных столбцах массива.
3. Вывод на экран исходного массива и полученного результата.

Каждую операцию оформим в виде отдельной функции.
Пусть:
input() - функция ввода массива
schetsum() - функция расчета сумм положительных элементов в четных и
нечетных столбцах массива
(у данной функции в качестве аргументов должны быть либо
2 указателя, либо 2 ссылки)
output() - функция вывода исходного массива и полученных результатов


#include <iostream.h>
#include <iomanip.h>
// прототипы функций
void input ( float [3][4], char);
void schetsum ( float [3][4], float &, float &);
void output ( float [3][4], char, float, float);

void main()
{
// объявление массивов и переменных
float a[3][4], d[3][4], suma_ch, suma_nch, sumd_ch, sumd_nch;

// suma_ch - для расчета суммы в четных столбцах массива a
// suma_nch - для расчета суммы в нечетных столбцах массива a
// sumd_ch - для расчета суммы в четных столбцах массива d
// sumd_nc - для расчета суммы в нечетных столбцах массива d

// обращение к функциям (вызов для выполнения)
input ( a, 'a');
input ( d, 'd');
schetsum( a, suma_ch, suma_nch);
schetsum( d, sumd_ch, sumd_nch);
output( a, 'a', suma_ch, suma_nch);
output( d, 'd', sumd_ch, sumd_nch);
}

// определение функции ввода массива input()
void input ( float x[3][4], char name)
{
int i, j;
cout << "Вводим массив " << name << endl;
for (i=0; i<3; i++)
for (j=0; j<4; j++)
{
cout << " Введите " << name << "[" << i << "][" << j << "]=";
cin >> x[i][j];
}
}
// определение расчетной функции
// в качестве аргументов у данной функции две ссылки
void schetsum ( float x[3][4], float &sum_ch, float &sum_nch)
{
int i,j;
sum_ch = 0;
sum_nch = 0;

// будем считать четными столбцы с индексами 0 и 2,
// а нечетными - с индексами 1 и 3
// расчет суммы в четных столбцах
for (j=0; j<4; j+=2)
for (i=0; i<3; i++)
if ( x[i][j] > 0 )
sum_ch += x[i][j];
// расчет суммы в нечетных столбцах
for (j=1; j<4; j+=2)
for (i=0; i<3; i++)
if ( x[i][j] > 0 )
sum_nch += x[i][j];
}

// определение функции вывода output()
void output ( float x[3][4], char name, float sum_chet, float sum_nchet)
{
int i,j;
cout << " Исходный массив " << name << ":" << endl;
for (i=0; i<3; i++)
{
for (j=0; j<4; j++)
cout << setw(5) << x[i][j];
cout << endl;
}
cout << "Сумма положительных элементов в четных столбцах массива "
<< name << " равна " << sum_chet << endl;
cout << "Сумма положительных элементов в нечетных столбцах массива"
<< name << " равна " << sum_nchet << endl;
}

Обсуждение

Неизвестный
28.06.2009, 02:23
общий
Юлия Комиссарова:
Посмотрите здесь:
https://rfpro.ru/?step=question&q_id=169917
давно
Академик
320937
2216
28.06.2009, 10:26
общий
28.06.2009, 19:43
это ответ
Здравствуйте, Юлия Комиссарова. Текст в приложении.

Приложение:
// msvcpp 6
#include <iostream>
using namespace std;

void change2d( int *mat, const int rows, const int cols, const int col_no );
int col_with_max( const int *mat, const int rows, const int cols );
void input2d( int* mat, const int rows, const int cols );
void print2d( const int *mat, const int rows, const int cols );
void process( int *mat, const char letter, const int rows, const int cols );
int main( void )
{
using namespace std;

const int rows = 3,
cols = 5;
int a[rows][cols];
int b[rows][cols];


process( &a[0][0], 'A', rows, cols );
process( &b[0][0], 'B', rows, cols );
return 0;
}

void change2d( int *mat, const int rows, const int cols, const int col_no )
{
for (int r=0; r<rows; ++r)
if (*(mat+r*cols+col_no)<0)
*(mat+r*cols+col_no) = 0;
}

int col_with_max( const int *mat, const int rows, const int cols )
{
int max = *mat; // mat[0][0]
int col_max = 0;
for (int r=0; r<rows; ++r)
for (int c=0; c<cols; ++c)
if (*(mat+r*cols+c) > max) {
max = *(mat+r*cols+c);
col_max = c;
}
return col_max;
}

void input2d( int* mat, const int rows, const int cols )
{
using namespace std;
for ( int r = 0; r<rows; ++r )
for ( int c=0; c<cols; ++c ) {
cout << "mat[" << r << "][" << c << "]=";
cin >> *(mat+r*cols+c);
}
}

void print2d( const int *mat, const int rows, const int cols )
{
using namespace std;
for ( int r = 0; r<rows; ++r) {
for ( int c = 0; c<cols; ++c )
cout << *(mat+r*cols+c);
cout << endl;
}
}

void process( int *mat, const char letter, const int rows, const int cols )
{
int col_no;

input2d( mat, rows, cols );
cout << "ishodnaya matriza " << letter << endl;
print2d( mat, rows, cols );
col_no = col_with_max( mat, rows, cols );
cout << "nomer stolbza s maximalnym elementom " << col_no << endl;
change2d( mat, rows, cols, col_no );
cout << "matriza " << letter << " posle izmenenia" << endl;
print2d( mat, rows, cols );
}
Неизвестный
28.06.2009, 13:12
общий
leonid59:
По стандарту ISO C++ запрещается декларировать переменные без типа. Так что это ошибка.
Код:

const
rows = 3;
cols = 5;


Кроме того определение rows заканчивается ';', cols это уже другой оператор. Это тоже ошибка.

Хотя разработчики компиляторов(не все) делают нам поблажку и допускают декларировать функцию main() как void, тем не менее, по тому же стандарту, функция main() должна возвращать тип int.
Неизвестный
28.06.2009, 14:02
общий
Micren:
Спасибо, уважаемый Micren!
Неизвестный
28.06.2009, 14:07
общий
Юлия Комиссарова:
Уважаемая Юлия Комиссарова! В коде функции main допущены ошибки. Требуется
int main( void )
{
using namespace std;

const int rows = 3,
cols = 5;
int a[rows][cols];
int b[rows][cols];


process( &a[0][0], 'A', rows, cols );
process( &b[0][0], 'B', rows, cols );
return 0;
}

Форма ответа