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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
oper24
1 / 1 / 0
Регистрация: 12.07.2010
Сообщений: 55
#1

Функция - C++

17.09.2010, 14:20. Просмотров 1204. Ответов 22
Метки нет (Все метки)

Нужно написать ф-цию которая упорядоченный массив выводит в случайном порядке?
Не могу понять алгоритм перестановки элементов???
Вот что у меня получилось:

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
#include <windows.h>
#include <iostream>
#include<time.h>
#include<stdlib.h>
using namespace std;
 
void mix(int mas[], int size)
{
    int temp;
    for(int i=0; i<size; i++)
    {   
        temp=mas[i];
        mas[i]=mas[20-1];
        mas[20-1]=temp; 
            
    }
    
 
 
}
 
 
 
 
void main ()
{
    
    SetConsoleOutputCP(1251);
    HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(h,2);
    srand ((unsigned int) time (NULL));
    
    cout<<"\t\tИсходный массив из 20 эдементов:"<<endl;
    cout<<endl;
    const int size=20;
    int mas[size]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
        for(int i=0; i<size; i++)
            cout<<mas[i]<<", ";
        cout<<endl;
        cout<<"_____________________________________________________________________";
        cout<<"\n\n";
 
        mix(mas, size);
        for(int i=0; i<size; i++)
            cout<<mas[i]<<endl;
        
 
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.09.2010, 14:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция (C++):

Функция удаления текста в скобках [2], непосредственно функция + 12кб вложений - C++
Доброго времени суток, случилось так, что пришлось работать с с-строками (лаба, угу), в которой нужно удалить весь текст в скобках,...

Перегрузка операций: friend-функция или функция-член класса - C++
Здравствуйте, меня интересует вопрос, в чем разница при перегрузке операторов через operator и friend. Вот к примеру такой код. class...

Функция sqrt: существует более одного экземпляра. Функция перегруженная - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;iomanip&gt; using namespace std; int main(){ float s, p; int c, a; s=0; ...

какую библиотеку надо подключать чтоб работала функция _getch() и функция cin.get() - C++
какую библиотеку надо подключать чтоб работала функция _getch() и функция cin.get()

Чистая виртуальная функция функция не имеет оператора переопределения - C++
Пишу программу для записи заметок. Есть 2 класса: Page и Note. Note наследуется от Page. Page.h #pragma once ...

что за функция такая strstr? или это не функция? - C++
void search(sp *list){ sp *prt = list; char f,r; cout&lt;&lt;Rus(&quot;введите текст&quot;)&lt;&lt;endl; cin&gt;&gt;f; cout&lt;&lt;Rus(&quot;введите выходной...

22
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
17.09.2010, 14:22 #2
oper24, Хочешь проще?) Правда выводит с повторами)

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
#include <windows.h>
#include <iostream>
#include<time.h>
#include<stdlib.h>
using namespace std;
 
void mix(int mas[], int size)
{
       for(int i=0; i<size; ++i)
       {
           mas[i]=mas[rand()%size];
       }
}        
        
 
 
}
void main ()
{
        SetConsoleOutputCP(1251);
        HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
        SetConsoleTextAttribute(h,2);
        srand ((unsigned int) time (NULL));
        
        cout<<"\t\tИсходный массив из 20 эдементов:"<<endl;
        cout<<endl;
        const int size=20;
        int mas[size]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
                for(int i=0; i<size; i++)
                        cout<<mas[i]<<", ";
                cout<<endl;
                cout<<"_____________________________________________________________________";
                cout<<"\n\n";
 
                mix(mas, size);
                for(int i=0; i<size; i++)
                        cout<<mas[i]<<endl;
                
 
 
}
0
oper24
1 / 1 / 0
Регистрация: 12.07.2010
Сообщений: 55
17.09.2010, 14:32  [ТС] #3
Спасибо. но я так пробовал,а можно чтобы числа не повторялись???просто поменять их местами как-то???
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
17.09.2010, 14:35 #4
oper24,
Нужно рандомить два индекса в диапазоне от 0 до n (длины массива). Затем менять местами элементы с полученными индексами. Ну и провести, скажем, n обменов...
0
oper24
1 / 1 / 0
Регистрация: 12.07.2010
Сообщений: 55
17.09.2010, 14:38  [ТС] #5
Цитата Сообщение от silent_1991 Посмотреть сообщение
oper24,
Нужно рандомить два индекса в диапазоне от 0 до n (длины массива). Затем менять местами элементы с полученными индексами. Ну и провести, скажем, n обменов...
На подобие этого???
C++
1
2
x = rand()% size; 
       y = rand()% size;
ну и еще переменную temp добавить???

Добавлено через 44 секунды
Я тебя правильно понял silent_1991???
0
silent_1991
Эксперт С++
4984 / 3041 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
17.09.2010, 14:38 #6
oper24,
Вроде того. Только про srand() не забудьте.
0
oper24
1 / 1 / 0
Регистрация: 12.07.2010
Сообщений: 55
17.09.2010, 14:40  [ТС] #7
Цитата Сообщение от silent_1991 Посмотреть сообщение
oper24,
Вроде того. Только про srand() не забудьте.
У меня в коде он уже прописан,сейчас попробую написать позже выложу результат.
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
17.09.2010, 14:41 #8
А я вот скажу проще...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include<time.h>
#include<stdlib.h>
#include <algorithm>
using namespace std;
 
int main()
{
        
        cout<<"\t\tИсходный массив из 20 эдементов:"<<endl;
        cout<<endl;
        const int size=20;
        int mas[size]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
                for(int i=0; i<size; i++)
                        cout<<mas[i]<<", ";
                cout<<endl;
                cout<<"_____________________________________________________________________";
                cout<<"\n\n";
                std::random_shuffle(mas, mas+size);
                for(int i=0; i<size; i++)
                        cout<<mas[i]<<endl; 
}
0
oper24
1 / 1 / 0
Регистрация: 12.07.2010
Сообщений: 55
17.09.2010, 14:48  [ТС] #9
Цитата Сообщение от Lavroff Посмотреть сообщение
А я вот скажу проще...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include<time.h>
#include<stdlib.h>
#include <algorithm>
using namespace std;
 
int main()
{
        
        cout<<"\t\tИсходный массив из 20 эдементов:"<<endl;
        cout<<endl;
        const int size=20;
        int mas[size]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
                for(int i=0; i<size; i++)
                        cout<<mas[i]<<", ";
                cout<<endl;
                cout<<"_____________________________________________________________________";
                cout<<"\n\n";
                std::random_shuffle(mas, mas+size);
                for(int i=0; i<size; i++)
                        cout<<mas[i]<<endl; 
}

std::random_shuffle - поясни пожалуйста что означает эта строка??? Я еще этого не знаю(((не учили((
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
17.09.2010, 14:50 #10
oper24, random_shufle
2
oper24
1 / 1 / 0
Регистрация: 12.07.2010
Сообщений: 55
17.09.2010, 15:14  [ТС] #11
Все получилось=))) Но это не все тут еще надо:
1. создать случайное число из того же диапазона и найти позицию этого случайного числа в массиве;

2. отсортировать элементы массива, находящиеся слева от найденной позиции по убыванию, а элементы массива, находящиеся справа от найденной позиции по возрастанию.
Буду дальше думать,как решить эти задачи=)

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
#include <windows.h>
#include <iostream>
#include<time.h>
#include<stdlib.h>
using namespace std;
 
//Прототип ф-ции "разбрасывающей" эл. массива.
void mix(int mas[], int size);
 
 
 
void main ()
{
    
    SetConsoleOutputCP(1251);
    HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(h,2);
    srand ((unsigned int) time (NULL));
    
    cout<<"\t\tИсходный массив из 20 эдементов:"<<endl;
    cout<<endl;
    const int size=20;
    int mas[size]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
        for(int i=0; i<size; i++)
            cout<<mas[i]<<", ";
        cout<<endl;
        cout<<"_____________________________________________________________________";
        cout<<"\n\n";
 
        cout<<"\t\tМассив после \"взрыва\""<<endl;
        cout<<endl;
        mix(mas, size);
        for(int i=0; i<size; i++)
            cout<<mas[i]<<", ";
        cout<<"\n\n";
        
}
 
 
//Описание ф-ции разбрасывающей" эл. массива.
void mix(int mas[], int size)
{
    int ind, ind1, temp;
    for(int i=0; i<size; i++)
    {   
        ind=rand()%size;
        ind1=rand()%size;
        temp=mas[ind];
        mas[ind]=mas[ind1];
        mas[ind1]=temp;
    }
    
}
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
17.09.2010, 15:17 #12
oper24, Найти без проблем.

C++
1
2
3
4
5
6
7
8
9
int temp=1+rand()%size;
for(int i=0; i<size; ++i)
{
    if(mas[i]==temp)
    {
         std::cout<<i;
         break;
    }
}
0
oper24
1 / 1 / 0
Регистрация: 12.07.2010
Сообщений: 55
17.09.2010, 16:15  [ТС] #13
Цитата Сообщение от Lavroff Посмотреть сообщение
oper24, Найти без проблем.

C++
1
2
3
4
5
6
7
8
9
int temp=1+rand()%size;
for(int i=0; i<size; ++i)
{
    if(mas[i]==temp)
    {
         std::cout<<i;
         break;
    }
}

А так правильно,подскажи???

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
65
66
67
68
69
70
#include <windows.h>
#include <iostream>
#include<time.h>
#include<stdlib.h>
using namespace std;
 
//Прототип ф-ции "разбрасывающей" эл. массива.
void mix(int mas[], int size);
//Прототип ф-ции поиска случайного числа.
void chislo(int mas[], int size);
 
    
void main ()
{
    
    SetConsoleOutputCP(1251);
    HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(h,2);
    srand ((unsigned int) time (NULL));
    
    cout<<"\t\tИсходный массив из 20 эдементов:"<<endl;
    cout<<endl;
    const int size=20;
    int mas[size]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
        for(int i=0; i<size; i++)
            cout<<mas[i]<<", ";
        cout<<endl;
        cout<<"_____________________________________________________________________";
        cout<<"\n\n";
 
        cout<<"\t\tМассив после \"взрыва\""<<endl;
        cout<<endl;
        mix(mas, size);
        for(int i=0; i<size; i++)
            cout<<mas[i]<<", ";
        cout<<"\n\n";
        cout<<"_____________________________________________________________________";
        cout<<"\n\n";
        cout<<"Найдем в массиве случайное число и определим его позицию."<<endl<<endl;
        chislo(mas, size);
        
        
 
}
 
 
//Описание ф-ции разбрасывающей" эл. массива.
void mix(int mas[], int size)
{
    int ind, ind1, temp;
    for(int i=0; i<size; i++)
    {   
        ind=rand()%size;
        ind1=rand()%size;
        temp=mas[ind];
        mas[ind]=mas[ind1];
        mas[ind1]=temp;
    }
    
}
//описание ф-ции поиска случайного числа.
void chislo(int mas[], int size)
{   
    int x=0;
    for(int i=0; i<size; i++)
        x=rand()%20;
    cout<<"Случайное число -> "<<mas[x-1]<<endl;
    cout<<"Индекс элемента -> "<<x<<endl;
    
}
0
ForEveR
В астрале
Эксперт С++
7979 / 4738 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
17.09.2010, 16:20 #14
oper24, э... ну может и да. но ты ведь просил:

1. создать случайное число из того же диапазона и найти позицию этого случайного числа в массиве;
А позиция этого числа у тебя здесь не находится в данном массиве.
0
oper24
1 / 1 / 0
Регистрация: 12.07.2010
Сообщений: 55
17.09.2010, 17:13  [ТС] #15
Цитата Сообщение от Lavroff Посмотреть сообщение
oper24, э... ну может и да. но ты ведь просил:

1. создать случайное число из того же диапазона и найти позицию этого случайного числа в массиве;
А позиция этого числа у тебя здесь не находится в данном массиве.
Если я правильно понял,то позиция-это именно индекс элемента,или как???
0
17.09.2010, 17:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.09.2010, 17:13
Привет! Вот еще темы с ответами:

Создать производный класс, в котором реализована функция умножения вектора на число и функция сложения двух векторов - C++
Write программу с использованием класса Вектор (не без помощи форумчанина), но необходимо создать производный класс, в котором реализована...

Функция заполняющая массив и функция вывода массива - C++
Напишите две функции. Первая функция заполняет массив, вторая функция выводит массив на экран

Нужно сделать, чтобы программа состояла из 3 функций, тоесть 1-ая функция ввода массива, 2-ая основная функция, 3-я- вывод массива - C++
Есть программа #include &lt;iostream&gt; #include &lt;algorithm&gt; const int N = 5; int handSet(void) { int a; std::cout...

Функция возвращающая абсолютное разницу первого и второго параметров и функция типа int, возвращающая минимальное из трех целых чисел - C++
Разработать заданные согласно условия функции и сделать в главной программе по два вызова этих функций с различными параметрами. Для...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru