Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2012, 03:27   #1
pro100oper
Новичок
Джуниор
 
Регистрация: 19.06.2012
Сообщений: 3
Восклицание Одномерный массив в с++

Доброго время суток!
Есть проблемка. В коде, найденном на этом форуме, есть непонятная часть:
Код:
#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <math.h>
#include <windows.h>

using namespace std;

int main()
{
const int n=5;
int m[n];
int i;
cout<<"VVEDITE "<<n; cout<<" celih cheisel\n"<<endl;
for (i=0;i<n;i++) cin >>m[i];
for (i=0;i<n;i++) cout<<m[i]<<' ';
//номер минимального элемента массива
int min=m[0];
int nom_min=0;
for (i = 1; i < n; i++)
        {
        if (m[i] < min){
                min = m[i];
                nom_min = i+1;
                };
        };
cout<<"\nNomer min elementa"<<nom_min; cout<<";";
 
//отрицательные элементы номера
int n1 = 0, n2 = 0;
 
//определение номера первого отрицательного элемента
for (i = 0; i < n; i++) {
    if (m[i] < 0) {
        n1 = i;
        break;
    }
}
 
//определение номера второго отрицательного элемента
for (i = n1+1; i < n; i++) {
    if (m[i] < 0) {
        n2 = i;
        break;
    }
}

//проверка на существование границ отрицательных элементов
if ((n2 != 0) && (n1 != n2)) {
    int sum_mezhdu = 0;
    //нахождение суммы элементов между первым и последним отрицательным элементом
    for (i = n1+1; i < n2; i++) {
        sum_mezhdu += m[i];
    };
    cout<<"\nSumma mezhdu pervim i vtorim otriczatelnim elementom"<<sum_mezhdu;
} else 
    cout<<"\nERROR";
 
//упорядочение элементов массива по модулю больших единицы
int k, pr_per=0;
double mFoo;
for (i = 0; i < n; i++) {
    if ( fabs(m[i]) <= 1 ) {
        mFoo = m[i];
        for (k = i; k > pr_per; k-- ) {
            m[k] = m[k-1];
        }
        m[pr_per++] = mFoo;
    }
}

cout<<"\n massiv posle preobrazheniya"<<endl;
        
//вывод массива после преобразования
for (i = 0; i <= n; i++)
        {
        cout<< m[i];
        };
 
_getch();
return 0;
}
упорядочение элементов массива по модулю больших единицы - здесь массивы выводится в делается в упорядоченном виде, но после массива появляется еще некое число. Как это число можно убрать?

спасибо!
pro100oper вне форума Ответить с цитированием
Старый 19.06.2012, 07:02   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Рассмотрим код:

Код:
   double mFoo;
    for (i = 0; i < n; i++) {
        if ( fabs( m[i]) <= 1 ) { //: error C2668: fabs: неоднозначный вызов перегруженной функции
            mFoo = m[i];
            for (k = i; k > pr_per; k-- ) {
                m[k] = m[k-1];
            }
            m[pr_per++] = mFoo; //: warning C4244: =: преобразование 'double' в 'int', возможна потеря данных
        }
    }
Итого: 1 ошибка компиляции , 1 мина замедленного действия

Далее ответ на твой вопрос:

Код:
//вывод массива после преобразования
for (i = 0; i <= n; i++)  //<---- условие прерывания цикла. Какой индекс имеет последний элемент массива?
        {
        cout<< m[i];
        };
Выход за пределы диапазона. Если в массиве 5 элементов, то последний элемент имеет индекс 4. Посмотри внимательно на условие прерывание цикла.

Резюмируя: когда ты писал код, ты думал о номерах элементов. А должен был думать об индексах. Индексы начинаются с нуля.
_Bers вне форума Ответить с цитированием
Старый 19.06.2012, 10:52   #3
pro100oper
Новичок
Джуниор
 
Регистрация: 19.06.2012
Сообщений: 3
По умолчанию

А можно по подробней, как исправить это в программе?
pro100oper вне форума Ответить с цитированием
Старый 19.06.2012, 11:54   #4
Glaciuse
Пользователь
 
Регистрация: 22.05.2011
Сообщений: 44
По умолчанию

//вывод массива после преобразования
Код:
for (i = 0; i < n; i++)
{
     cout<< m[i];
};
Glaciuse вне форума Ответить с цитированием
Старый 19.06.2012, 18:18   #5
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от pro100oper Посмотреть сообщение
А можно по подробней, как исправить это в программе?
http://www.programmersforum.ru/showthread.php?t=34061
_Bers вне форума Ответить с цитированием
Старый 20.06.2012, 00:50   #6
pro100oper
Новичок
Джуниор
 
Регистрация: 19.06.2012
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Glaciuse Посмотреть сообщение
//вывод массива после преобразования
Код:
for (i = 0; i < n; i++)
{
     cout<< m[i];
};
спасибо! но я уже позже сам допер)))
pro100oper вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одномерный массив Абай Паскаль, Turbo Pascal, PascalABC.NET 0 12.06.2011 21:02
Одномерный массив и Двумерный массив eugene1437 Общие вопросы C/C++ 15 25.05.2011 19:17
Одномерный массив , двухмерный массив Woxx Паскаль, Turbo Pascal, PascalABC.NET 0 10.09.2010 09:28
Одномерный массив. Q basic - Построить новый массив из элементов исходного ,которые больше P. Marishkaa Помощь студентам 2 12.01.2010 16:54
Двумерный массив, одномерный массив. Branbal Помощь студентам 14 18.11.2009 12:40