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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2011, 20:42   #1
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию С++: массив и арифетическая прогрессия

Господа, я не очень хорошо понимаю, как это написать в С++. У меня уже даже схема примера графически готова, а код как-то работает неправильно.

Задача: пользователь вводит серию чисел (последовательность чисел М, количество М). Задается пользователем и число столбцов N. Также пользователь вводит некую константу D, колторая потом принимает участие в создании ариф. прогрессии. В итоге создается матрица M*N, где число определенной строки с каждым новым столбцом является суммой числа из предидущего столбца и константы D.

Схема прилагается.

Код:
#include <iostream>
#include <conio.h>

using namespace std;

int main ()

{ 

int N=0, M=0, D=0;
int i=0, j=0;
int matrix [5][5];


cout<<"Vvedite N"<<endl;
cin>>N;
cout<<"Vvedite M"<<endl;
cin>>M;
cout<<"Vvedite D"<<endl;
cin>>D;

for (i=1;i<=M;i++)
{
cout<<"Vvedite element massiva: "<<endl;
cin>>matrix[i][1];
}
cout<<matrix[i][1]<<endl;


for (i=1;i<=M;i++)
	{
		for (j=1;j<=N;j++)
		{
			matrix[i][j]=matrix[i][j-1]+D;
			cout<<matrix[i][j]<<endl;
		}
	}

	_getch ();
	return 0;
}
Изображения
Тип файла: jpg matrix.JPG (37.2 Кб, 128 просмотров)
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 09.04.2011, 20:51   #2
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

В C/C++ индексация с нуля начинается.
Vago вне форума Ответить с цитированием
Старый 09.04.2011, 21:34   #3
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Это-то да.. но как тогда я смогу реализовать обращение к предидущему столбцу в самом начале - М[0][0-1]? Компьютер 0-1 не поймет.... или посчитает неправильно
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 09.04.2011, 21:43   #4
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Код:
#include <iostream>
#include <conio.h>

using namespace std;

int main () { 

   int N=0, M=0, D=0;
   int i=0, j=0;
   int matrix [5][5];

   cout<<"Vvedite N (k-vo stolbcov)"<<endl; cin>>N;
   cout<<"Vvedite M (k-vo strok)"<<endl; cin>>M;
   cout<<"Vvedite D"<<endl; cin>>D;

   for (i=0;i<M;i++) {
      cout<<"Vvedite element massiva: "<<endl;
      cin>>matrix[i][0];
   }

   for (i=0;i<M;i++) {
      for (j=1;j<N;j++) {
         matrix[i][j]=matrix[i][j-1]+D;
      }
   }

   for (i=0;i<M;i++) {
      for (j=0;j<N;j++) {
         cout<<matrix[i][j] << ' ';
      }
      cout << endl ;
   }

   _getch ();
   return 0;

}
Added 20:03 CET
Проверку N и M на невыход за границы max. размерностей уж сами добавьте.

Ну и cin.get() вместо _getch() для сохранения общности...

Последний раз редактировалось Vago; 09.04.2011 в 22:02.
Vago вне форума Ответить с цитированием
Старый 09.04.2011, 21:50   #5
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Лучше счетчики циклов объявлять непосредственно в них.
Код:
for (int i = 0; i < M; i ++)
{
...
}
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 09.04.2011, 22:10   #6
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Спасибо! Сейчас попробую)))
У меня наивный вопрос по теории массивов - нам все объясняли, что размерность массива должна быть указана в самом начале и якобы является чуть ли не изменной величиной (с этим я бы поспорила). А в случае интерактива с пользователем программа же не знает, какую размерность пользователь захочет. Как мы тогда можем в самом начале оформить граммотную инициализацию размерности массива, размер которого потом может измениться?
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 09.04.2011, 22:21   #7
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

С помощью динамических массивов.
Пример:
Код:
int arr_size;
printf("Введите размер массива: ");
scanf("%d", &arr_size);
int* arr = 0;
arr = new int [arr_size]; //заняли память под массив arr размером arr_size
/* Тут можем работать с ним как с обычным */
delete [] arr; //освободили память
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Старый 09.04.2011, 22:37   #8
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от Blondy Посмотреть сообщение
У меня наивный вопрос по теории массивов - нам все объясняли, что размерность массива должна быть указана в самом начале и якобы является чуть ли не изменной величиной (с этим я бы поспорила). А в случае интерактива с пользователем программа же не знает, какую размерность пользователь захочет. Как мы тогда можем в самом начале оформить граммотную инициализацию размерности массива, размер которого потом может измениться?
Ну, когда-то давно, в прошлом тысячелетии, так оно и было... Резервировался, "из соображений здравого смысла", "ОЧЕНЬ БОЛЬШОЙ" массив, а потом работали с реальным массивом, не превышающим по размерности зарезервированную. Сейчас - погибче. Если C-транслятор поддерживает стандарт C99, так там даже на этапе трансляции можно задавать переменные размерности. VLA фича называется (M$ её, правда, игнорирует ). А так - разобраться с указателями, и - вперёд! Запрашиваем - отдаём при выполнении. Динамически. Используя malloc() / free() либо new() / delete() (как показано выше), в зависимости от языка.

А по поводу "нам все объясняли" - ну, тут два варианта объяснения имеется.

1. Преподаватель считает, что существуют другие, более важные, более основополагающие, вещи которые вы должны твёрдо выучить, прежде чем переходить к работе с динамическими массивами.

2. Преподаватель отстал от жизни и не хочет её, эту жизнь, догонять. Бывает и такое. Хочется надеяться, что это - не ваш случай.
Vago вне форума Ответить с цитированием
Старый 10.04.2011, 01:49   #9
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Мы еще динамические массивы не проходили((((( Куда нам еще до динамических массивов, мы с обычными все разобраться не можем.

То если если речь идет о самом обычном массиве (как в этом задании), просто чтобы компьютер не ругался, мы задаем какой-нибудь массив для начала (скажем, 5х5 ) а потом в зависимости от пожеланий пользователя искустенно изменяем его размеры (в циклах for), да? Это если речь идет о самых примитивных программах в программировании на С++.
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 10.04.2011, 01:51   #10
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Цитата:
изменяем его размеры
Такую операцию возможно производить только с динамическим массивом (да и то, с помощью вспомогательного массива, тоже динамического).
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подпрограммы; прогрессия superDmitry Помощь студентам 2 10.12.2010 21:39
Прогрессия Grobovichok Помощь студентам 0 05.12.2010 16:52
арифметическая прогрессия... Васильева Зинаида Помощь студентам 2 21.10.2010 22:06
Геометрическая прогрессия Владимир_Мар Общие вопросы Delphi 1 27.05.2010 20:12
Арифметическая прогрессия Carbon Помощь студентам 14 09.03.2008 18:12