Консультация № 158390
21.01.2009, 22:20
0.00 руб.
0 1 1
Здравствуйте!Помогите, пожалуйста, решить задание:
Даны целые массивы А[10], B[10] и значения R и F. Каждый
массив пpеобpазовать по пpавилу: компоненты с четными
номеpами, пpедшествующие наибольшему компоненту
массива, заменить на значение R (для массива A) и значение
F (для массива B). Считать, что в каждом массиве
наибольший компонент единственный.

Приложение:
Имеются методические указания:


Условие задачи – Даны целочисленные массивы C[15], D[15].
Каждый массив пpеобpазовать по пpавилу: если компоненты массива
упорядочены по возрастанию, то все положительные компоненты следует
заменить на значение 0, в противном случае массивы оставить без
изменений.

В данной задаче необходимо написать программу, выполняющую
следующие действия:
1. Ввод исходных массивов C и D.
2.
Вывод на экран исходных массивов.
3. Преобразование массивов.
4. Вывод на экран измененных массивов.

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

Пусть
input() - функция ввода данных
output() - функция вывода на экран
preobr() - функция преобразования массивов

Текст программы на языке C++
#include <iostream.h>
#include <iomanip.h>
// прототипы функций
void input( int [15], char );
void output( int [15], char * );
void preobr( int [15] );

void main()
{
// объявление массивов и переменных
int c[15], d[15];
// обращение к функциям (вызов для выполнения):
input(c, 'c'); // в функцию в качестве аргументов передается
input(d, 'd'); // массив и его имя (символ в апострофах)
output(c, "Исходный массив c:");
preobr(c);
output(c, "Преобразованный массив c:");
output(d, "Исходный массив d:");
preobr(d);
output(d, "Преобразованный массив d:");
}

// определение функции ввода массива input()
void input( int x[15], char name)
{
int i;
cout << "Вводим массив " << name << endl;
for (i=0; i<15; i++)
{
cout << " Введите элемент массива " << name << "[" << i << "]=";
cin >> x[i];
}
}

массива output()
// определение функции вывода
void output ( int x[15], char *zag )
{
int i;
cout << endl << endl << zag << endl;
for (i=0; i<15; i++)
cout << setw(5) << x[i];
}

// определение функции преобразования массива preobr()
void preobr ( int m[15] )
{
int i, prizn;
prizn=1; // вспомогательная переменная - если ее значение не
// изменится, значит массив упорядочен по возрастанию

for (i=0; i<14; i++)
if ( m[i+1] <= m[i] )
// последующий элемент массива не больше предыдущего,
// следовательно, массив не упорядочен по возрастанию
{
prizn = 0; // изменили значение признака
break; // вышли из цикла, так как массив не упорядочен
// и до конца выполнять цикл не имеет смысла
}

if ( prizn == 1 )
// массив упорядочен по возрастанию - заменяем положительные
// элементы на нули
for (i=0; i< 15; i++)
if ( m[i] > 0 )
m[i] = 0;
}

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



Обсуждение

давно
Посетитель
7438
7205
22.01.2009, 02:25
общий
это ответ
Здравствуйте, Сидорова Юлия Евгеньевна!
Решение в духе Ваших методических указаний в приложении.


Приложение:
#include <iostream.h>
#include <iomanip.h>

// прототипы функций
void input( int [10], char );
void output( int [10], char * );
void preobr( int [10], int );
void inputint( int*, char );

void main()
{
// объявление массивов и переменных
int A[10], B[10];
int R, F;

// обращение к функциям (вызов для выполнения):
input(A, 'A'); // в функцию в качестве аргументов передается
input(B, 'B'); // массив и его имя (символ в апострофах)

inputint( &R, 'R' );
inputint( &F, 'F' );

output(A, "Исходный массив A:");
preobr(A, R);
output(A, "Преобразованный массив A:");

output(B, "Исходный массив B:");
preobr(B, F);
output(B, "Преобразованный массив B:");
cout << endl;
}

// определение функции ввода массива input()
void input( int x[10], char name)
{
int i;
cout << "Вводим массив " << name << endl;
for (i=0; i<10; i++)
{
cout << " Введите элемент массива " << name << "[" << i << "]=";
cin >> x[i];
}
}

// определение функции ввода параметра R или F inputint()
void inputint( int * x, char name)
{
cout << "Вводим " << name << " = ";
cin >> *x;
}

// определение функции вывода массива output()
void output ( int x[10], char *zag )
{
int i;
cout << endl << endl << zag << endl;
for (i=0; i<10; i++)
cout << setw(5) << x[i];
}

// определение функции преобразования массива preobr()
void preobr ( int m[10], int v )
{
int i, max, imax;

for (max=m[0],imax=0,i=1; i<10; i++)
if (m[i]>max)
{
max = m[i];
imax = i;
}
for (i=1; i<imax; i+=2)
m[i]=v;
}
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Форма ответа