Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

(С++) Квадратная матрица

17K
28 января 2007 года
S_A_M
10 / / 27.01.2007
[SIZE="6"][FONT="Times New Roman"][/FONT][/SIZE]Даны действительные числа a1, ..., an. Получить квадратную матрицу порядка n:

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
552
28 января 2007 года
Ivanhoe
373 / / 30.04.2006
Как я понял, каждая следующая строчка - это сдвинутая на один влево предыдущая. Т.о. i-я строка начинается c ai элемента.

Код:
#include <stdio.h>

#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;
}
320
28 января 2007 года
m_Valery
1.0K / / 08.01.2007
Предлагаю вариант С++,STL. описание всех используемых ф -ий см.MSDN или учебник по С++.2S_A_M : тебе ж надо на С++? или на С,где в VisualStudio (какая?)или Builder?Об этом уже говорили недавно - указывать где делаешь и что конкретно надо,какое решение?
swap - меняет местами элементы двух контейнеров, push_back - вставить в конец,erase - удаление,front - начальный элемент.Контейнерный класс стандартной библиотеки шаблонов(STL) vector - предназначен для быстрой вставки и удаления в конце контейнера , прямой доступ к любому элементу.
Для этой задачи еще подойдет класс deque - предназначенный для быстрой вставки и удаления в начало и в конец контейнера,прямой доступ к любому элементу.Рекомендую Липпман Стенли "С++ для начинающих"(хотя может эта книга и не совсем для начинающих) имхо : стоит почитать .:)
Код:
#include "stdafx.h"
#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;
}
552
28 января 2007 года
Ivanhoe
373 / / 30.04.2006
Кста, действительно надо бы знать, подо что S_A_M желает иметь прогу. Я вот с gcc компилил. Чистый C, консоль.
63
28 января 2007 года
Zorkus
2.6K / / 04.11.2006
Цитата: m_Valery
Предлагаю вариант С++,STL. описание всех используемых ф -ий см.MSDN или учебник по С++.2S_A_M : тебе ж надо на С++? или на С,где в VisualStudio (какая?)или Builder?Об этом уже говорили недавно - указывать где делаешь и что конкретно надо,какое решение?



swap - меняет местами элементы двух контейнеров, push_back - вставить в конец,erase - удаление,front - начальный элемент.Контейнерный класс стандартной библиотеки шаблонов(STL) vector - предназначен для быстрой вставки и удаления в конце контейнера , прямой доступ к любому элементу.
Для этой задачи еще подойдет класс deque - предназначенный для быстрой вставки и удаления в начало и в конец контейнера,прямой доступ к любому элементу.


Ну обычно говорят, что vector - это класс, реализующий динамический массив:) Так думаю, объяснение базовое понятней будет.

Цитата: m_Valery

Рекомендую Липпман Стенли "С++ для начинающих"(хотя может эта книга и не совсем для начинающих) имхо : стоит почитать .:)


А мне вот не очень понравилось. Если хочешь действительно узнать STL, читай Н. Джосъютис, С++. Стандартная библиотека для профессионалов.
(Но там подразумевается, что С++ сам хорошо знаешь.)
А для начинающего STL - проще и доступней всего, и чтобы на практике применить, с примерами, это Г. Шилдт, "С++. Базовый курс".
[quote=Ivanhoe]

 
Код:
#define N 5

[/quote]
Для таких вещей лучше писать const.
9
28 января 2007 года
Lerkin
3.0K / / 25.03.2003
Цитата: Zorkus
...
(Но там подразумевается, что С++ сам хорошо знаешь.)



Да, ничего :). Никола дает некоторые вводные понятия :)

320
28 января 2007 года
m_Valery
1.0K / / 08.01.2007
2Zorkus : ты прав , но я имел ввиду другое - чтоб сразу требования к решению писали( динамич.матрица или нет, если
динамич. - нужны указатели, может они как раз указатели сейчас и проходят,а может и нет ,потом можно stl ( ? )для таких задач или нельзя,ведь препод решению с stl (скажет что содрал)может и не поверить - и... 2 балла ?:) сразу.
Мне вот уже и Lerkinоб этом намекнул;)
А про Липпмана я с тобой в чем - то согласен,меня ,например ,иногда раздражало как он перескакивает(это ,дескать, рассмотрим потом и это
тоже потом ,т.е вы этого пока не знаете(так и не говори об этом тогда!) но ничего дерзайте)имхо у него с последовательностью изложения не очень.А stl он разбирает...уж не знаю хорошо или нет . Книгу что советуешь не читал , сейчас поищу.
63
29 января 2007 года
Zorkus
2.6K / / 04.11.2006
Цитата: m_Valery
2Zorkus : ты прав , но я имел ввиду другое - чтоб сразу требования к решению писали( динамич.матрица или нет, если
динамич. - нужны указатели, может они как раз указатели сейчас и проходят,а может и нет ,потом можно stl ( ? )для таких задач или нельзя,ведь препод решению с stl (скажет что содрал)может и не поверить - и... 2 балла ?:) сразу.


Лично я всегда придерживался мнения - что надо писать так, как удобнее для решения задачи, а не так, как хочет препод. Если тот дает задание, которое можно сделать лучше, чем он сам делал 10 лет назад, когда составлял программу занятий - то с ним можно и нужно спорить.

320
29 января 2007 года
m_Valery
1.0K / / 08.01.2007
Вот это точно!В яблочко!:) Так вот мне и кажется , что задачи с дин. массивами лучше решать с vector, чем c указателями
int **array = new int*[count]; и т.д. за последние 2 дня уже
уже несколько раз на форуме об этом (о выделении памяти)вопросы поднимались...:) Неужели в этих вопросах есть еще какие то неясности ? Как оказалось ...есть:) А на преподавателей равняться нечего - учимся ведь для себя , а не для оценки :)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог