C++. помогите найти ошибку в программе.

программирование C++

// Одномерные.cpp : main project file.

#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <time.h>
#include <math.h>

using namespace std;

int n=1;

int main()
{
setlocale(LC_ALL,"russian_russia");//русский язык

/*-------------создание и заполнение массива---------------------------------------------------------------*/

cout<<"Введите число элеентов n \n n=";
cin>>n;
cout<<'\n';
int *m = new int [n];
int *m2 = new int [n];
srand( (unsigned)time( NULL ) ); //Привязка генератора


//заполнение массива случайными элементами:-------------------------------------------------

for(int i=0; i<n; i++)
{
m[i]=((double)rand()/(double)RAND_MAX)*200-100;
printf("%5i",m[i]);
if(!((i+1)%8)) cout<<'\n';
}

/*-----------Нахождение минимального по модулю:--------------------------------------------------------------*/

int k=0;
int min=abs(m[0]);
for(int i=0; i<n; i++)
{
if (abs(m[i])<min)
{
min=abs(m[i]);
}//if
}//for
cout<<'\n'<<'\n'<<"Эленент с минимальным модулем: "<<min<<'\n';


/*----------Нахождение первого нулевого:------------------------------------------------------------------------*/

k = -1;
for(int i=0; i<n; i++)
{
if (m[i]==0)
{k=i; break;}
}


if (k>=0) {
/*------Сумма элементов массива после нулевого:-------------------------------------------------------------*/

int sum=0;
for(int i=(k+1); i<n; i++) sum=sum+(m[i]);
cout<<'\n'<<"Сумма модулей элементов после первого нулевого: "<<sum<<'\n';
}
else {
cout << "Нет нулевых элементов\n";
}

/*------Преобразование массива:------------------------------------------------------------------------------------*/
k = 0;
for( int i=0; i<n; i++)
{
if(!(i%2)) {
m2[k] = m[i];
k++;
}
}
for( int i=0; i<n; i++)
{
if((i%2)) {
m2[k] = m[i];
k++;
}
}


/*---------------Вывод результата:-----------------------------------------------------------------------*/

cout<<'\n'<<"Результат:"<<'\n'<<'\n';
for(int i=0; i<n; i++)
{
printf("%5i",m2[i]);
if(!((i+1)%8)) cout<<'\n';
}
cout<<'\n';

return 0;
} //int main
Ответы:
if(!(i%2))
i % 2 вернет число - остаток от деления на 2. Этой строчкой, вы видимо хотели проверить, является ли число нечетным. Так вот, правильней я считаю записать это в виде (и далее во всех подобных случаях):
if( (i % 2) != 0 )
или же, если вам нужна четность то
if( (i % 2) == 0)
Просто я впервые вижу подобную проверку на кратность чему-либо,... может она и правильная, но читать её, имхо, сложнее. То что я написал - традиционные варианты и они будут более понятны, как мне кажется :).
Вот, особо других "ошибок" (тк я сомневаюсь, что вышеописанная у вас является ошибкой) я не увидел. Если компилятор что-то дурное выдает, вы скопируйте текст ошибки сюда.
В чем именно ошибка то?
1. Не во всех версиях C++ переменная определяемая в операторе for является локальной. Соответственно, может возникнуть ошибка.
2. Находится сумма элементов массива после первого нулевого, а пишется будто это сумма модулей.
3. Это не ошибка, а просто комментарий. Преобразование осуществляется по закону: сразу выписываются номера с чётными номерами, потом с нечётными. Важно: Нумерация начинается с нуля.


15 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.