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

Ваш аккаунт

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

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

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

(С++) Операции с массивами

10K
26 октября 2007 года
ost-andrew
19 / / 24.01.2006
В лабораторной по программированию встретился с двумя задачами. Для их решения требуется использовать массивы.

1. Дана квадратная матрица. Найти минимальное из значений элементов побочной диагонали матрицы и соседних с ними справа и слева.

2. Найти пару неравных элементов матрицы, модуль разности которых минимален.
320
27 октября 2007 года
m_Valery
1.0K / / 08.01.2007
Если я правильно понял условие,тогда на С++ - так.Или надо С-style ?
Код:
#include <iostream>
#include <ctime>
#include <iomanip>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <utility>
using namespace std;
typedef vector< vector<int> > T;
ostream &operator<<(ostream &output,const T &mass)
{
     for(unsigned int i = 0;i<mass.size();++i){
        for(unsigned int j = 0;j<mass.size();++j)
               output<<setw(5)<<mass[j];
      output<<"\n\n";
    }
     return output;
}
int _tmain(int argc, _TCHAR* argv[])
{
    wcout.imbue(locale(".866"));
    srand(time(0));
     unsigned int n;
    do{
    wcout<<L"Введите SIZE матрицы. SIZE > 0"<<endl;
    cin>>n;
    }while(n <= 0);
    //матрица
    T mass(n, vector<int>(n));
    for(unsigned int i = 0;i<n;++i){
        for(unsigned int j = 0;j<n;++j){
                 mass[j] = rand() % 100 - 50;
        }
    }
    cout<<mass;
    //запишем побочную диагoналь в доп.массив
    vector<int> coll;
    wcout<<L"побочная диагональ и соседи слева и справа:\n";
     for(unsigned int i = 0;i < n;++i){
        for(unsigned j = 0;j < n;++j)
            if(i - 1 == j||i == j||i - 2 == j)
                coll.push_back(mass[j]);
     }
    vector<int>::iterator res = min_element(coll.begin(),coll.end());
    copy(coll.begin(),coll.end(),
        ostream_iterator<int>(cout," "));
    wcout<<L"\nее минимальный элемент : "<<*res;
    set<int> coll2;
     for(unsigned int i = 0;i < n;++i){
        for(unsigned j = 0;j < n;++j)
            coll2.insert(mass[j]);
     }
    vector<int> coll3(coll2.begin(),coll2.end());
    typedef pair<int,int> pr;
    map< int,pr > m_map;
    for(int i = 0;i <coll3.size();++i){
        for(int j = i + 1;j < coll3.size();++j){
            pr a = make_pair(coll3[j],coll3);
            m_map.insert(map<int,pr>::value_type(int(abs(coll3[j] - coll3)),pr(a)));
        }
    }
    cout<<endl;
    map<int,pr>::iterator it = m_map.begin();
    wcout<<L"минимальная разность неравных элементов матрицы : "<<endl;
    cout<<" ("<<(it->second).first<<") - ("<<(it->second).second<<") = "<<it->first<<endl;
    return 0;
}

Хотя что то контейнеров много получилось.:D Может упростишь.
10K
27 октября 2007 года
ost-andrew
19 / / 24.01.2006
Цитата: m_Valery
copy(coll.begin(),coll.end(), ostream_iterator<int>(cout," "));


На этой строчке компилятор ругается: "Undefined symbol 'ostream_iterator'" (среда Borland C++ 6).

320
27 октября 2007 года
m_Valery
1.0K / / 08.01.2007
Цитата: ost-andrew
На этой строчке компилятор ругается: "Undefined symbol 'ostream_iterator'" (среда Borland C++ 6).



Это просто вывод массива на экран.Я делал в Visual Studio 2005. Наверное в Borland надо #include <iterator>...А вообще сделаем проще,выведем массив так:

 
Код:
...
for(unsigned int i = 0;i < coll.size();++i)
    cout<<coll<<' ';
...

Так должно работать.
10K
29 октября 2007 года
ost-andrew
19 / / 24.01.2006
Спасибо! Всё работает.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог