Форум программистов, компьютерный форум CyberForum.ru

Решение для разминки - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 5.00
Aleksandr1
2 / 2 / 0
Регистрация: 01.09.2010
Сообщений: 11
04.09.2010, 19:53     Решение для разминки #1
1.Дан массив чисел размерностью 10 элементов. Написать функцию, которая сортирует массив по возрастанию или по убыванию, в зависимости от третьего параметра функции. Если он равен 1, сортировка идет по убыванию, если 0, то по возрастанию. Первые 2 параметра функции - это массив и его размер, третий параметр по умолчанию равен 1.

2.Дан массив случайных чисел в диапазоне от -20 до +20. Необходимо найти позиции крайних отрицательных элементов (самого левого отрицательного элемента и самого правого отрицательного элемента) и отсортировать элементы, находящиеся между ними.

3.Дан массив из 20 целых чисел со значениями от 1 до 20.

Необходимо:

написать функцию, разбрасывающую элементы массива произвольным образом;

создать случайное число из того же диапазона и найти позицию этого случайного числа в массиве;

отсортировать элементы массива, находящиеся слева от найденной позиции по убыванию, а элементы массива, находящиеся справа от найденной позиции по возрастанию.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.09.2010, 19:53     Решение для разминки
Посмотрите здесь:

C++ С++. Решение программ для начинающих програмистов
C++ Решение диф. уравнения для колебаний методом Рунге—Кутты 4го порядка.(С++)
C++ Для заданных вещественных чисел а, b, c определить, имеет ли уравнения ax2+bx+c=0, хотя бы одно вещественное решение.
C++ решение краевой задачи для диф. уравнения методом сеток
C++ 9. Для заданных вещественных чисел а, b, c определить, имеет ли уравнения ax2+bx+c=0, хотя бы одно вещественное решение
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
neske
1419 / 786 / 55
Регистрация: 26.03.2010
Сообщений: 2,694
04.09.2010, 19:57     Решение для разминки #2
Цитата Сообщение от Aleksandr1 Посмотреть сообщение
написать функцию, разбрасывающую элементы массива произвольным образом;

C++
1
std::random_shuffle (MAS, MAS+SIZE);
NightmareZ
 Аватар для NightmareZ
1336 / 559 / 37
Регистрация: 31.03.2009
Сообщений: 1,907
04.09.2010, 20:00     Решение для разминки #3
Цитата Сообщение от Aleksandr1 Посмотреть сообщение
Решение для разминки
Почему нельзя чесно написать, что тебе это задали в школе/универе, но ты нуб и не можешь решить? Считаешь, что тут идиоты сидят?
Nameless One
Эксперт С++
 Аватар для Nameless One
5754 / 3403 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
04.09.2010, 20:05     Решение для разминки #4
Aleksandr1, все упирается в функцию сортировки - см. faq

Не по теме:

NightmareZ срывает покровы



Случайное целое из диапазона [low; high]:
C++
1
rand % (high - low + 1) + low;
Все остальное, кроме перемешивания - тривиально
Aleksandr1
2 / 2 / 0
Регистрация: 01.09.2010
Сообщений: 11
04.09.2010, 20:23  [ТС]     Решение для разминки #5
Цитата Сообщение от NightmareZ Посмотреть сообщение
Почему нельзя чесно написать, что тебе это задали в школе/универе, но ты нуб и не можешь решить? Считаешь, что тут идиоты сидят?
Я не прошу вылажывать свои решения на сайт, эт по желанию у меня есть код всех етих заданий если мне надо попросить будет помощь я так и скажу
NightmareZ
 Аватар для NightmareZ
1336 / 559 / 37
Регистрация: 31.03.2009
Сообщений: 1,907
04.09.2010, 20:24     Решение для разминки #6
Цитата Сообщение от Aleksandr1 Посмотреть сообщение
Я не прошу вылажывать свои решения на сайт

Тогда к чему это всё? Задачи то - туфта.
Nameless One
04.09.2010, 20:24
  #7

Не по теме:

Цитата Сообщение от Aleksandr1 Посмотреть сообщение
у меня есть код всех етих заданий
Прошу прощения, а в чем тогда смысл создания этой темы?

alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
04.09.2010, 20:30     Решение для разминки #8
Цитата Сообщение от Aleksandr1 Посмотреть сообщение
1.Дан массив чисел размерностью 10 элементов. Написать функцию, которая сортирует массив по возрастанию или по убыванию, в зависимости от третьего параметра функции. Если он равен 1, сортировка идет по убыванию, если 0, то по возрастанию. Первые 2 параметра функции - это массив и его размер, третий параметр по умолчанию равен 1.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <vector>
#include <algorithm>
#include <functional>
#include <iostream>
#include <iterator>
 
using namespace std;
 
void _sort( int arr[], const int size, int nParam = 1 ){
  vector<int> v( arr, arr+size );
  if( nParam == 1 ){  sort( v.begin(), v.end(), less<int>() ); }
  else{ sort( v.begin(), v.end(), greater<int>() ); }
  copy( v.begin(), v.end(), arr );
}
 
int main(){
  int arr[] = {23,23,4,2,53,2,-1};
  _sort( arr, sizeof(arr)/sizeof(int) );
  copy( arr, arr + sizeof(arr)/sizeof(int), ostream_iterator<int>( cout, " " ) );
}
если препод скажет, что чтото не так - отвечайте что он ламер!11
Nameless One
Эксперт С++
 Аватар для Nameless One
5754 / 3403 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
04.09.2010, 20:46     Решение для разминки #9
alex_x_x, ну векторы здесь все же не к месту:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <algorithm>
#include <functional>
#include <iostream>
#include <iterator>
 
using namespace std;
 
void _sort( int arr[], const int size, int nParam = 1 ) {
  if(nParam == 1)
    sort(arr, arr + size, less<int>());
  else
    sort(arr, arr + size, greater<int>());
}
 
int main(){
  int arr[] = {23,23,4,2,53,2,-1};
  _sort( arr, sizeof(arr)/sizeof(int) );
  copy( arr, arr + sizeof(arr)/sizeof(int), ostream_iterator<int>( cout, " " ) );
}
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
04.09.2010, 20:51     Решение для разминки #10
Nameless One, дада, ваша правда, ошаблонилось мышление =)
Aleksandr1
2 / 2 / 0
Регистрация: 01.09.2010
Сообщений: 11
04.09.2010, 20:51  [ТС]     Решение для разминки #11
Цитата Сообщение от NightmareZ Посмотреть сообщение
Тогда к чему это всё? Задачи то - туфта.
На этот вопрос я помоему ответил в теме "для разминки" хорошо что вы человек самокритичный!
Nameless One
Эксперт С++
 Аватар для Nameless One
5754 / 3403 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
04.09.2010, 21:41     Решение для разминки #12
Цитата Сообщение от Aleksandr1 Посмотреть сообщение
2.Дан массив случайных чисел в диапазоне от -20 до +20. Необходимо найти позиции крайних отрицательных элементов (самого левого отрицательного элемента и самого правого отрицательного элемента) и отсортировать элементы, находящиеся между ними.
Продолжаем удивлять преподавателей:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <iostream>
#include <iterator>
#include <algorithm>
#include <vector>
#include <functional>
#include <map>
#include <ctime>
#include <cstdlib>
#include <stdexcept>
 
template<class T>
std::pair<T, T> warmUp(std::vector<T>& vect)
{
    auto negative = [](int i)
    {
        return i < 0;
    };
    auto begin = std::find_if(vect.begin(), vect.end(), negative);
    auto last = [&]()
    {
        auto retIter = vect.end();
        for(auto it = vect.begin(); it != vect.end(); ++it)
            if(negative(*it))
                retIter = it;
        return retIter;
    };
    auto end = last();
    if((begin == vect.end()) || (end == vect.end()))
        throw(std::runtime_error("Bad array"));
    std::sort(begin + 1, end);
    std::pair<T, T> retval;
    retval.first = *begin;
    retval.second = *end;
    return retval;
}
 
int main(int argc, char* argv[])
{
    try
    {
        srand(static_cast<size_t>(time(NULL)));
        if(argc != 2)
            throw(std::runtime_error("Not enough arguments"));
        std::vector<int> ivec;
        size_t size = atoi(argv[1]);
        std::generate_n(std::back_inserter(ivec), size, []()
        {
            return rand() % 41 - 20;
        });
        std::cout << "Before:" << std::endl;
        std::copy(ivec.begin(), ivec.end(), std::ostream_iterator<int>(std::cout, " "));
        std::pair<int, int> limits = warmUp(ivec);
        std::cout << std::endl << "Sorting elements between first " 
            << limits.first << " and last " << limits.second << std::endl;
        std::copy(ivec.begin(), ivec.end(), std::ostream_iterator<int>(std::cout, " "));
        std::cout << std::endl;
    }
    catch(std::exception& e)
    {
        std::cerr << e.what() << std::endl;
        return 1;
    }
    return 0;
}
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
04.09.2010, 22:32     Решение для разминки #13
Цитата Сообщение от Nameless One Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
auto negative = [](int i)
 {
 return i < 0;
 };
 auto begin = std::find_if(vect.begin(), vect.end(), negative);
 auto last = [&]()
 {
 auto retIter = vect.end();
 for(auto it = vect.begin(); it != vect.end(); ++it)
 if(negative(*it))
 retIter = it;
 return retIter;
 };
както чрезмерно сложно, я бы использовал
C++
1
2
3
4
5
6
7
8
9
  it_beg = find_if( v.begin(), v.end(), bind2nd( greater_equal<int>(), 0 ) );
  it_end = --find_if( v.rbegin(), v.rend(), bind2nd( greater_equal<int>(), 0 )).base();
  int pos_beg = it_beg-v.begin(), pos_end = it_end-v.begin();
  cout << '(' << pos_beg << ',' << pos_end << ")" << endl;
  if( (it_beg == it_end ) ){
    cout << "bad!\n";
    return -1;
  }
  sort( it_beg+1, it_end );
но так - зло
хотя я может от того, что я еще лямбды неосилил
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.09.2010, 12:50     Решение для разминки
Еще ссылки по теме:

Для произвольных значений a, b вычислить решение системы неравенств C++
C++ Составление программы для решение задач
C++ Реализовать решение линейного рекуррентного уравнения нахождения числа f (k) для любого натурального k

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Mayonez
05.09.2010, 12:50     Решение для разминки
  #14

Не по теме:

Цитата Сообщение от alex_x_x Посмотреть сообщение
если препод скажет, что чтото не так - отвечайте что он ламер!1
супер, на следующий раз так и сделаю

Yandex
Объявления
05.09.2010, 12:50     Решение для разминки
Ответ Создать тему
Опции темы

Текущее время: 17:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru