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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.09.2011, 23:22   #1
Enigmya
Пользователь
 
Регистрация: 10.02.2011
Сообщений: 19
По умолчанию С++ массив

Есть задача: Дан N-элементный одномерный массив M. Заполнить К элементов, стоящих во второй половине данного массива, последовательными числами от K до 1.
Наваяла такой код, но программа зависает, понимаю, что что-то где-то не то, но не понимаю что именно Помогите, пожалуйста, разобраться.
Код:
#include <iostream>
using namespace std;
int main()                                         
{setlocale(LC_ALL,"Russian");
        int nSize ;    // Размер массива
             cout << "Input n: ";
                  cin >> nSize ;
             int* M;    //Создаем массив с указаным размером
                 M=new int[nSize];
      for(int i = 0 ; i < nSize ; ++i )
          {M[i] = i; }                   // Инициализируем нулями
 
 
     int nCenterMass = nSize / 2 ;      //Находим середину массива
      for(int i = nCenterMass, k = nCenterMass ; i <= nSize ; ++i) //Начинаем заполнять массив с середины
    {
        M[i] = k ;  // В начале k будет равно среднему элементу, потом дикрементируем
        k-- ;
    }
          
     for(int i = 0 ; i <= nSize ; ++i)   
    {                                   
        cout<<"M["<<i<<"]="<<M[i] ;      
        cout<<endl;
                delete[] M;
                    }
         system("pause");
}
Enigmya вне форума Ответить с цитированием
Старый 10.09.2011, 00:15   #2
Ak1ra
 
Аватар для Ak1ra
 
Регистрация: 19.02.2009
Сообщений: 9
По умолчанию

Здесь
Код:
for(int i = nCenterMass, k = nCenterMass ; i <= nSize ; ++i)
и здесь
Код:
for(int i = 0 ; i <= nSize ; ++i)
надо i < nSize.

А это
Код:
delete[] M;
вынеси за цикл, ато ты nSize+1 раз удаляешь свой массив.))
Ak1ra вне форума Ответить с цитированием
Старый 10.09.2011, 00:19   #3
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,872
По умолчанию

перебираем все элементы от K-го с конца до N (самого последнего).
и присваиваем им последовательные числа: K, K-, K-2, ....4, 3, 2, 1.
тогда как-то так:
Код:
for(i=N-K;i=N;i++)
 {
   M[i]=N-i;
 }
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 10.09.2011, 00:24   #4
fizteh
Пользователь
 
Регистрация: 27.02.2011
Сообщений: 46
По умолчанию

Сразу видна ошибка в последнем цикле. i<nSize, это правильнее будет
и delete[]M; нужно сделать после цикла.
fizteh вне форума Ответить с цитированием
Старый 10.09.2011, 23:17   #5
Enigmya
Пользователь
 
Регистрация: 10.02.2011
Сообщений: 19
По умолчанию

Спасибо)) Тока вот в варианте, когда количество элементов массива нечетное, последнее число получается 0, а надо 1. В чем ошибка?
Enigmya вне форума Ответить с цитированием
Старый 11.09.2011, 11:30   #6
fizteh
Пользователь
 
Регистрация: 27.02.2011
Сообщений: 46
По умолчанию

Пришли код, получишь ответ)
fizteh вне форума Ответить с цитированием
Старый 11.09.2011, 13:50   #7
Enigmya
Пользователь
 
Регистрация: 10.02.2011
Сообщений: 19
По умолчанию

Код:
#include <iostream>
using namespace std;
int main()                                         
{setlocale(LC_ALL,"Russian");
        int nSize ;    // Размер массива
             cout << "Input n: ";
                  cin >> nSize ;
             int* M;    //Создаем массив с указаным размером
                 M=new int[nSize];
      for(int i = 0 ; i < nSize ; ++i )
          {M[i] = i; }                   // Инициализируем нулями
 
 
     int nCenterMass = nSize / 2 ;      //Находим середину массива
      for(int i = nCenterMass, k = nCenterMass ; i < nSize ; ++i) //Начинаем заполнять массив с середины
    {
        M[i] = k ;  // В начале k будет равно среднему элементу, потом дикрементируем
        k-- ;
    }
          
     for(int i = 0 ; i < nSize ; ++i)   
    {                                   
        cout<<"M["<<i<<"]="<<M[i] ;      
        cout<<endl;
                                   }
	  delete[] M;
         system("pause");
}
Enigmya вне форума Ответить с цитированием
Старый 11.09.2011, 14:07   #8
fizteh
Пользователь
 
Регистрация: 27.02.2011
Сообщений: 46
По умолчанию

Код:

// Алгоритм Евклида
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()                                         
{setlocale(LC_ALL,"Russian");
        int nSize ;    // Размер массива
             cout << "Input n: ";
                  cin >> nSize ;
             int* M;    //Создаем массив с указаным размером
                 M=new int[nSize];
      for(int i = 0 ; i < nSize ; ++i )
          {M[i] = i; }                   // Инициализируем нулями
 
 
     int nCenterMass = nSize / 2 ; //Находим середину массива
	 int _nCenterMass=nCenterMass;
	 if (nSize % 2!=0 )
	 {
		 _nCenterMass++;
	 }
      for(int i = _nCenterMass, k = nCenterMass ; i < nSize ; ++i) //Начинаем заполнять массив с середины
    {
        M[i] = k ;  // В начале k будет равно среднему элементу, потом дикрементируем
        k-- ;
    }
          
     for(int i = 0 ; i < nSize ; ++i)   
    {                                   
        cout<<"M["<<i<<"]="<<M[i] ;      
        cout<<endl;
                                   }
	  delete[] M;
         system("pause");
}
fizteh вне форума Ответить с цитированием
Старый 11.09.2011, 14:11   #9
fizteh
Пользователь
 
Регистрация: 27.02.2011
Сообщений: 46
По умолчанию

Первый комментарий убрать
fizteh вне форума Ответить с цитированием
Старый 11.09.2011, 14:29   #10
Enigmya
Пользователь
 
Регистрация: 10.02.2011
Сообщений: 19
По умолчанию

Заработало) Спасибо за помощь
Enigmya вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задан вектор X[20]. Положительные числа переписать в массив Y, а отрицательные в массив W leha_demi Помощь студентам 2 24.09.2011 18:12
Запись координат в массив в реал тайм, Как записать координаты в массив Dark19 Visual C++ 2 21.06.2011 18:45
Из массив А получить массив В, удвоив все нечётные элементы удвоены ( на Pascal) KARTER Помощь студентам 1 18.06.2011 19:58
Массив - Нужно написать массив и распечатать на экран с конца в начало(язык С++) econ Помощь студентам 1 29.05.2011 22:02
Упорядочить массив в порядке возрастания и напечатать входной и исходный массив. TheVenny Помощь студентам 3 26.11.2008 15:06