Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите пожалуйста.....очень прошу, помогите плз 
:(
    Опции темы
RazAl
Дата 13.4.2008, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 7.3.2008

Репутация: нет
Всего: нет



Заполнить массив m на n случайными числами. Выполнить:
1)Подсчитать кол-во элементов превосходящих по модулю заданное число А(вводиться с клавиатуры)
2)Заполнить все элементы массива стоящие на четных местах на 0
3) поменять местами in элемент и последний
PM MAIL   Вверх
jonie
Дата 14.4.2008, 00:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: нет
Всего: 118



и? для домашних и курсовых есть центр помощи. Для коммерческих предложений тоже есть соотв. разделы. тут решаются только вопросы о помощи, если что-то неполучается.. максимум могут пнуть в нужном направлении... но лететь самим...
почитай про rand, srand, for, scanf в google.com


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
susanin
Дата 14.4.2008, 00:36 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 587
Регистрация: 7.10.2006
Где: Санкт-Петербург

Репутация: 3
Всего: 7



RazAl, пока не передумал сделать прошу пояснения, что значит четное место в двумерном массиве и какой с каким элементом поменять надо?(2 и 3 пункт)
Код

#include <iostream>
#include <cstdlib>
#include <ctime>
using std::cout;
using std::cin;
using std::endl;

int main()
{
    srand(time(0));
    const int m=3;
    const int n=3;
    int Array[m][n]={0};
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            Array[i][j]=rand();
        }
    }
    cout<<"Array"<<endl;
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            cout<<Array[i][j]<<" ";
        }
        cout<<endl;
    }
    int A;//число окторе вводит пользователь
    int counterA=0;//счетчик
    cout<<"Enter digit: ";
    cin>>A;
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(Array[i][j]>A||-Array[i][j]>A)
                counterA++;
        }
    }
    cout<<"Kol-vo chisel "<<counterA<<endl;
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(Array[i][j]%2==0)//здесь обнуляется четный элемент, но не тот который стоит на четном месте
            Array[i][j]=0;
        }
    }
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            cout<<Array[i][j]<<" ";
        }
        cout<<endl;
    }
    cout<<"Enter number of element x and y";
    int x, y;
    int tmp;
    cin>>x>>y;
    tmp=Array[m-1][n-1];
    Array[m-1][n-1]=Array[x][y];
    Array[x][y]=tmp;
    for(int i=0;i<m;i++)
    {
        for(int j=0;j<n;j++)
        {
            cout<<Array[i][j]<<" ";
        }
        cout<<endl;
    }
return 0;
}

ну пока это набросал... 

Это сообщение отредактировал(а) susanin - 14.4.2008, 00:53
PM MAIL   Вверх
Rififi
Дата 14.4.2008, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 4
Всего: 36



RazAl

что означает третий пункт я вообще не понял, так что его пропускаю.

Код

#include <algorithm>
#include <functional>
#include <iostream>
#include <time.h>


//----------------------------------------------------------------------------------------------
// 0. Заполнить массив m на n случайными числами
//----------------------------------------------------------------------------------------------
template <typename T, size_t M, size_t N>
void fill_array(T (&arr)[M][N])
{
    std::generate(&arr[0][0], &arr[0][0] + M*N, &rand);
}

//----------------------------------------------------------------------------------------------
// 1. Подсчитать кол-во элементов превосходящих по модулю заданное число А
//----------------------------------------------------------------------------------------------
struct greater_mod : public std::unary_function<int, bool>
{
    greater_mod(argument_type limit) : limit_(limit) {}
    result_type operator()(const argument_type& val) const
    { return std::abs(val) > limit_; }
    argument_type limit_;
};

template <typename T, size_t M, size_t N>
size_t greater_then(const T (&arr)[M][N], const T A)
{
    return std::count_if(&arr[0][0], &arr[0][0] + M*N, greater_mod(A));
}


//----------------------------------------------------------------------------------------------
// 2. Заполнить все элементы массива стоящие на четных местах на 0
//----------------------------------------------------------------------------------------------
template <
    typename InputIterator,
    typename OutputIterator,
    typename UnaryProc,
    typename UnaryPredicate>
OutputIterator transform_if(
    InputIterator begin, InputIterator end,
    OutputIterator out, UnaryProc op, UnaryPredicate pred)
{
    while (begin != end)
    {
        if (pred(*begin))
            *out = op(*begin);

        ++begin;
        ++out;
    }
    return (out);
}

struct is_even : public std::unary_function<int, bool>
{
    is_even() : counter_(0) {};
    result_type operator()(const argument_type&)
    { return !(counter_++ & 1); }
    argument_type counter_;
};

struct replacer : public std::unary_function<int, int>
{
    replacer(argument_type value) : value_(value) {}
    result_type operator()(const argument_type&) const
    { return value_; }
    argument_type value_;

};

template <typename T, size_t M, size_t N>
void replace_even(T (&arr)[M][N], const T newVal)
{
    transform_if(&arr[0][0], &arr[0][0] + M*N, &arr[0][0], replacer(newVal), is_even());
}

int main()
{
    srand(static_cast<unsigned int>(time(NULL)));

    // подготовить массив
    const size_t M = ...;
    const size_t N = ...;

    int arr[M][N];

    // 0. Заполнение массива
    fill_array(arr);

    // 1. Поиск в массиве
    int A;
    std::cin >> A;
    size_t greaterA = greater_then(arr, A);
    std::cout << greaterA << std::endl;

    // 2. Замена в массиве
    replace_even(arr, 0);    
    return (0);
}

PM MAIL   Вверх
RazAl
Дата 14.4.2008, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 7.3.2008

Репутация: нет
Всего: нет



спасибо

Добавлено через 1 минуту и 31 секунду
3) поменять местами min элемент и последний 
поможете?
PM MAIL   Вверх
Rififi
Дата 14.4.2008, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 4
Всего: 36



Код

int* min = std::min_element(&arr[0][0], &arr[0][0] + M*N);
std::swap(*min, arr[M-1][N-1]);


PS. можешь попробовать пробить такую тему у препода, как полное освобождение от зачёта в связи с ненадобностью. Просто скажи ему что в программе заюзаны лямбда-функции из буста :grin:

для этого в начале программы надо подключить такие хэдеры:

#include <boost/lambda/lambda.hpp>
#include <boost/lambda/bind.hpp>
#include <boost/lambda/if.hpp>
namespace lm = boost::lambda;

Первый пункт преображается так:

Код

return std::count_if(
        &arr[0][0], &arr[0][0] + M*N,
        lm::bind<T>(&std::abs, lm::_1) > A);


Второй пункт:

Код

// Использование стандартного алгоритма
{
    int cnt = 0;
    std::transform(
        &arr[0][0], &arr[0][0] + M*N, &arr[0][0],
        lm::if_then_else_return(lm::var(cnt)++ & 1, lm::_1, 0));
}

// Использование user-defined алгоритма
{
    int cnt = 0;
    transform_if(
        &arr[0][0], &arr[0][0] + M*N, &arr[0][0],
        lm::constant(0), !(lm::var(cnt)++ & 1));
}


Это сообщение отредактировал(а) Rififi - 14.4.2008, 18:41
PM MAIL   Вверх
RazAl
Дата 15.4.2008, 06:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 7.3.2008

Репутация: нет
Всего: нет



Уважаемый Rififi
Вы можете написать где 1 и 2 и 3 задание по порядку, просто не себе я это делаю, помогаю просто!
За ранее спасибо
PM MAIL   Вверх
Rififi
Дата 15.4.2008, 08:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 4
Всего: 36



RazAl
что значит "где"? В комментариях отмечено, где начинаются участки кода, соответствующие пунктам задания.
последний пункт в виде функции выглядит так:

Код

template <typename T, size_t M, size_t N>
void swap_min_and_last(T (&arr)[M][N])
{
    T* min = std::min_element(&arr[0][0], &arr[0][0] + M*N); // получить итератор, который соответствует позиции минимального элемента в массиве
    std::swap(*min, arr[M-1][N-1]); // обменять содержимое итератора и последний элемент массива
}


Это сообщение отредактировал(а) Rififi - 15.4.2008, 08:19
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1011 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.