(С++) Квадратная матрица
a1 a2 a3 ... an-2 an-1 an
a2 a3 a4 ... an-1 an a1
a3 a4 a4 ... an a1 a2
............................................
an a1 a2 ... an-3 an-2 an-1
#define N 5
int main()
{
float arr[N][N];
float a[N];
int i, j, k;
// Просматриваем по строчкам
for (i = 0; i < N; i++)
{
// Вывод элементов в i-й строке
// начинаем с a
j = i;
// N элементов
for (k = 0; k < N; k++)
{
arr[k] = a[j];
// Если еще не достигли N, то прибавляем 1
// Иначе - сбрасываем счетчик в 0
if (j < N)
{
j++;
}
else
{
j = 0;
}
}
}
return 0;
}
swap - меняет местами элементы двух контейнеров, push_back - вставить в конец,erase - удаление,front - начальный элемент.Контейнерный класс стандартной библиотеки шаблонов(STL) vector - предназначен для быстрой вставки и удаления в конце контейнера , прямой доступ к любому элементу.
Для этой задачи еще подойдет класс deque - предназначенный для быстрой вставки и удаления в начало и в конец контейнера,прямой доступ к любому элементу.Рекомендую Липпман Стенли "С++ для начинающих"(хотя может эта книга и не совсем для начинающих) имхо : стоит почитать .:)
#include <vector>
#include <iostream>
#include <ctime>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
srand(time(0));
int n;
cout<<"Input size..."<<endl;
cin>>n;
vector<int> vec;
for(int i = 0;i<n;++i)
vec.push_back(rand()%10);
cout<<"1-st vector"<<endl;
for(int i = 0;i<n;++i)
cout<<vec<<' ';
cout<<"\n\n";
vector< vector<int> > mass(n);
mass[0].swap(vec);
for(int i=1;i<n;++i)
{
vector<int> vec = mass[i-1];
int value = vec.front();
vec.erase(vec.begin());
vec.push_back(value);
mass.swap(vec);
}
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vi::const_iterator vit;
typedef vvi::const_iterator vvit;
cout<<"Matrix"<<endl;
for(vvit it=mass.begin();it!=mass.end();++it)
{
for(vit i=it->begin();i!=it->end();++i)
{
cout << *i << " ";
}
cout << "\n";
}
return 0;
}
swap - меняет местами элементы двух контейнеров, push_back - вставить в конец,erase - удаление,front - начальный элемент.Контейнерный класс стандартной библиотеки шаблонов(STL) vector - предназначен для быстрой вставки и удаления в конце контейнера , прямой доступ к любому элементу.
Для этой задачи еще подойдет класс deque - предназначенный для быстрой вставки и удаления в начало и в конец контейнера,прямой доступ к любому элементу.
Ну обычно говорят, что vector - это класс, реализующий динамический массив:) Так думаю, объяснение базовое понятней будет.
Рекомендую Липпман Стенли "С++ для начинающих"(хотя может эта книга и не совсем для начинающих) имхо : стоит почитать .:)
А мне вот не очень понравилось. Если хочешь действительно узнать STL, читай Н. Джосъютис, С++. Стандартная библиотека для профессионалов.
(Но там подразумевается, что С++ сам хорошо знаешь.)
А для начинающего STL - проще и доступней всего, и чтобы на практике применить, с примерами, это Г. Шилдт, "С++. Базовый курс".
[quote=Ivanhoe]
[/quote]
Для таких вещей лучше писать const.
(Но там подразумевается, что С++ сам хорошо знаешь.)
Да, ничего :). Никола дает некоторые вводные понятия :)
динамич. - нужны указатели, может они как раз указатели сейчас и проходят,а может и нет ,потом можно stl ( ? )для таких задач или нельзя,ведь препод решению с stl (скажет что содрал)может и не поверить - и... 2 балла ?:) сразу.
Мне вот уже и Lerkinоб этом намекнул;)
А про Липпмана я с тобой в чем - то согласен,меня ,например ,иногда раздражало как он перескакивает(это ,дескать, рассмотрим потом и это
тоже потом ,т.е вы этого пока не знаете(так и не говори об этом тогда!) но ничего дерзайте)имхо у него с последовательностью изложения не очень.А stl он разбирает...уж не знаю хорошо или нет . Книгу что советуешь не читал , сейчас поищу.
динамич. - нужны указатели, может они как раз указатели сейчас и проходят,а может и нет ,потом можно stl ( ? )для таких задач или нельзя,ведь препод решению с stl (скажет что содрал)может и не поверить - и... 2 балла ?:) сразу.
Лично я всегда придерживался мнения - что надо писать так, как удобнее для решения задачи, а не так, как хочет препод. Если тот дает задание, которое можно сделать лучше, чем он сам делал 10 лет назад, когда составлял программу занятий - то с ним можно и нужно спорить.
int **array = new int*[count]; и т.д. за последние 2 дня уже
уже несколько раз на форуме об этом (о выделении памяти)вопросы поднимались...:) Неужели в этих вопросах есть еще какие то неясности ? Как оказалось ...есть:) А на преподавателей равняться нечего - учимся ведь для себя , а не для оценки :)