Консультация № 160337
12.02.2009, 21:36
0.00 руб.
0 10 1
Дан одномерный массив, состоящий из n целых чисел. Если элемент четный, то прибавить к нему первый, если нечетный - последний элемент массива. Первый и последний элементы не изменять.

Обсуждение

Неизвестный
12.02.2009, 21:36
общий
программа на C++
Неизвестный
12.02.2009, 23:08
общий
14.02.2009, 05:27
это ответ
Здравствуйте, Саркисян Гварг Владимирович!
Программа с комментариями. Проверялась MS Visual Studio 2008
Код:

#include <limits>
#include <locale>
#include <iostream>
#include <iomanip>

using namespace std;

void printArray(const wchar_t* const,const int* const,unsigned int);

int main()
{
locale::global(locale("rus_rus.866"));
// Вводим количество элементов массива
unsigned int N=0;
while(!N)
{
wcout<<L"Введите количество элементов массива:";
wcin>>N;
if(wcin.fail()||!N)
{
wcout<<L"Неверное значение"<<endl;
wcin.clear();
}
wcin.ignore(numeric_limits<streamsize>::max(),L'\n');
}
try
{
// Выделяем память
int *array=new int[N];
// Вводим массив
for(unsigned int i=0;i<N;i++)
{
while(true)
{
wcout<<L"Введите "<<i+1<<L"-й элемент:";
wcin>>array[i];
if(wcin.good())
{
wcin.ignore(numeric_limits<streamsize>::max(),L'\n');
break;
}
wcout<<L"Неверный ввод"<<endl;
wcin.clear();
wcin.ignore(numeric_limits<streamsize>::max(),L'\n');
}
}
printArray(L"Исходный массив:",array,N);
// Все по условию задачи
for(unsigned int i=1;i<N-1;i++)
array[i]+=array[abs(array[i]%2)*(N-1)];
printArray(L"Результирующий массив:",array,N);
delete []array;
}
catch (bad_alloc)
{
wcout<<L"Не могу выделить память для массива"<<endl;
}
system("PAUSE");
return 0;
}

// Процедура вывода массива на экран
void printArray(const wchar_t* const message,const int* const array,unsigned int length)
{
wcout<<message<<endl;
for(unsigned int i=0;i<length;i++)
wcout<<setw(9)<<array[i]<<L' ';
wcout<<endl;
}


Пример результата работы:
Код:

Введите количество элементов массива:10
Введите 1-й элемент:2
Введите 2-й элемент:4
Введите 3-й элемент:2
Введите 4-й элемент:3
Введите 5-й элемент:5
Введите 6-й элемент:6
Введите 7-й элемент:7
Введите 8-й элемент:9
Введите 9-й элемент:0
Введите 10-й элемент:6
Исходный массив:
2 4 2 3 5 6 7 9
0 6
Результирующий массив:
2 6 4 9 11 8 13 15
2 6

Неизвестный
12.02.2009, 23:24
общий
а можно сделать программу на простеших библиотеках iostream.h, math.h, conio.h
Неизвестный
12.02.2009, 23:30
общий
Вы просили на C++. math.h и conio.h здесь не нужны, а iostream и так используется. Она что у Вас не идет?
Неизвестный
12.02.2009, 23:34
общий
идет.. когда я делал на C++ программы, мне хватало одного iostream.h, для чего другие библиотеки?..
Неизвестный
12.02.2009, 23:38
общий
недавно переставлял Windows, поставил Windows XP Professional x64, C++ выдает ошибку.. Файл изображения C:/~/BC.EXE не поврежден, но предназначен для другого типа компьютера.
Неизвестный
12.02.2009, 23:41
общий
limits для numeric_limits<streamsize>::max()
iomanip - setw()
locale - locale::global()
Вам вообще нравится, когда приложение консольное нормально по русски с Вами общается?
Неизвестный
12.02.2009, 23:44
общий
впринципе да.. это же удобнее.. Но основы тоже надо знать.....
Неизвестный
12.02.2009, 23:59
общий
Так это и есть основы
Неизвестный
13.02.2009, 17:34
общий
Необходимо внести в программу небольшое изменение:
Код:

#include <limits>
#include <locale>
#include <iostream>
#include <iomanip>

using namespace std;

void printArray(const wchar_t* const,const int* const,unsigned int);

int main()
{
locale::global(locale("rus_rus.866"));
// Вводим количество элементов массива
unsigned int N=0;
while(!N)
{
wcout<<L"Введите количество элементов массива:";
wcin>>N;
if(wcin.fail()||!N)
{
wcout<<L"Неверное значение"<<endl;
wcin.clear();
}
wcin.ignore(numeric_limits<streamsize>::max(),L'\n');
}
try
{
// Выделяем память
int *array=new int[N];
// Вводим массив
for(unsigned int i=0;i<N;i++)
{
while(true)
{
wcout<<L"Введите "<<i+1<<L"-й элемент:";
wcin>>array[i];
if(wcin.good())
{
wcin.ignore(numeric_limits<streamsize>::max(),L'\n');
break;
}
wcout<<L"Неверный ввод"<<endl;
wcin.clear();
wcin.ignore(numeric_limits<streamsize>::max(),L'\n');
}
}
printArray(L"Исходный массив:",array,N);
// Все по условию задачи
for(unsigned int i=1;i<N-1;i++)
array[i]+=array[abs(array[i]%2)*(N-1)];
printArray(L"Результирующий массив:",array,N);
delete []array;
}
catch (bad_alloc)
{
wcout<<L"Не могу выделить память для массива"<<endl;
}
system("PAUSE");
return 0;
}

// Процедура вывода массива на экран
void printArray(const wchar_t* const message,const int* const array,unsigned int length)
{
wcout<<message<<endl;
for(unsigned int i=0;i<length;i++)
wcout<<setw(9)<<array[i]<<L' ';
wcout<<endl;
}
Форма ответа