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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.01.2011, 00:18   #1
mojohead
Пользователь
 
Регистрация: 10.01.2011
Сообщений: 79
По умолчанию массив

Всем здравствуйте!!! Вот написал програмку такую она вроде работает... да вот незадача при введении размерности массива гдето 100 при выходе из программы выдаёт ошибку.

P.S. программа заполняэт массив элементами от 1 до n и находит ихнюю сумму.

Код:
#include <vcl.h>
#include<iostream>
#include<conio>
#include<vector>
 using namespace std;
int main(int)
{
  int n,i,lent=0,k=0;
  cout<<"Vvedute kolu4estvo elem: ";
  cin>>n;
  vector<int> r(n);
  for (i=1;i<=n;i++)
      {r[i]+=i;
       lent=i;
       k+=lent;
      }
      cout<<"Symma elementov nashego massuva:"<<k<<"\n";
      cout<<"A vot u nash massuv:\n";
      for (i=0;i<n;i++)
      cout<<r[i]+1<<"\n";
      getch();
      return 0;
}
вот код ошибки
Изображения
Тип файла: jpg Безымянный.jpg (21.1 Кб, 148 просмотров)

Последний раз редактировалось ACE Valery; 16.01.2011 в 01:31.
mojohead вне форума Ответить с цитированием
Старый 16.01.2011, 11:12   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
for (i=1;i<=n;i++)
Насколько я знаю в Си при работе с массивами не пишут = в условии, поскольку там все с нуля начинается.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.01.2011, 12:41   #3
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Stilet, а почему бы и нет? Просто нужно так делать:
Код:
for (int i = 0;i<=n;i++)
Только зачем извращаться с vector? Не проще ли
Код:
int r[100];
_-Re@l-_ вне форума Ответить с цитированием
Старый 16.01.2011, 12:52   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а почему бы и нет?
Потому что указание r(n); означает массив из n чисел, а обращение идет начинаясь с нуля, значит r[i] при i=n вылетит за пределы массива, указав на ячейку памяти за пределами вектора на одну позицию.
Цитата:
int r[100];
Нет. Не проще. Программе заранее не известно кол-во элементов в массиве. STL тут в тему. Хотя можно было заменить на new int[n], но автору захотелось так и он имеет на это право (и лево тоже)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.01.2011, 13:45   #5
mojohead
Пользователь
 
Регистрация: 10.01.2011
Сообщений: 79
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Потому что указание r(n); означает массив из n чисел, а обращение идет начинаясь с нуля, значит r[i] при i=n вылетит за пределы массива, указав на ячейку памяти за пределами вектора на одну позицию.
да я налажал немного.. переделал ....работает спасибо!!!
mojohead вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задан вектор X[20]. Положительные числа переписать в массив Y, а отрицательные в массив W leha_demi Помощь студентам 2 24.09.2011 18:12
Дан массив А(20). Получить массив В(20), в котором В(1)=А(2), В(2)=А(1), В(3)=А(4), В(4)=А(3) и т.д. Выве nikita1 Помощь студентам 5 01.12.2010 18:16
Как конвертировать массив символов в массив байт davinci C++ Builder 6 30.10.2010 18:09
Одномерный массив. Q basic - Построить новый массив из элементов исходного ,которые больше P. Marishkaa Помощь студентам 2 12.01.2010 16:54
Упорядочить массив в порядке возрастания и напечатать входной и исходный массив. TheVenny Помощь студентам 3 26.11.2008 15:06