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

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

Войти
Регистрация
Восстановить пароль
 
 
МирныйКряк
0 / 0 / 0
Регистрация: 28.01.2015
Сообщений: 35
#1

Одномерный массив, выполнение двух условий - C++

18.10.2015, 14:51. Просмотров 548. Ответов 23
Метки нет (Все метки)

Доброго времени уважаемые форумчане!
Подскажите как воплотить следующие условия в работу одномерного массива:
• минимальный элемент массива;
• преобразить массив таким образом, чтобы сначала располагались все элементы, равные нулю, а потом – все остальные.
П.с. набросок для отработки этих условий был найден тут же на просторах в шаблонах

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
#include <iostream>
#include <clocale>
#include <cstdlib>
using namespace std;
//----- объявление прототипов используемых функций----------------------------------------
void Input(int* M, int n);  // ввод массива
void Print(int* M, int n);   // вывод массива
//void RandomFill(int* M, int n);   // заполнение массива случайными числами
//--------------------------------------------------------------------------
//int Work(int* M, int n);   // пример обработки массива
 
 
//----------  main() -  точка входа в программу консольного приложения 
int main()
{
    setlocale(LC_ALL,"Rus");
    int n;
    cout << "Размер вектора?";
    cin >> n;
    int* A = new int[n];
    Input(A,n);
    //RandomFill(A, n);
    Print(A, n);
    //int s = Work(A, n);
    //cout << "Summa = " << s << endl;
    //delete[] A;
    system("pause");
    return 0;
}
//----   описание функций -----------------------------------------
// ввод массива
void Input(int* M, int n)
{
    for (int i = 0; i<n; i++)
    {
        cout << "M[" << i << "]=?";
        cin >> M[i];
    }
}
// заполнение случайными числами
void RandomFill(int* M, int n)
{
    for (int i = 0; i<n; i++)
    {
        M[i] = rand() % 100;
    }
}
// вывод массива
void Print(int* M, int n)
{
    for (int i = 0; i<n; i++)
    {
        cout << M[i] << " ";
    }
 
    cout << endl;
}
// пример обработки - подсчет суммы элементов
int Work(int* M, int n)
{
    int sum = 0;
    for (int i = 0; i<n; i++)
    {
        sum += M[i];
    }
    return sum;
}
П.с. некоторые строчки в виде рандомного заполнения и суммирования отключены/закомментированы специально дабы не отрабатывались
П.п.с. буду неимоверно признателен за любые подсказки
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2015, 14:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Одномерный массив, выполнение двух условий (C++):

Сформировать одномерный массив на основе двух других массивов - C++
Даны два массива: А, состоящий из N элементов и В, состоящий из N элементов. Сформировать массив C по следующему правилу Результат...

Создать одномерный массив, в котором находятся повторяющиеся элементы двух известных массивов - C++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #define max 100 main() { unsigned M1,M2,M3,i,j=0,n; printf(&quot;n=&quot;); scanf(&quot;%i&quot;,&amp;n); ...

Из двух упорядоченных одномерных массивов длины К и Н сформируйте одномерный массив размером К+Н упорядоченный так же как и исходный - C++
Из двух упорядоченных одномерных массивов длины К и Н сформируйте однормерный массив размером К+Н упорядоченный так же как и исходный.

Матрица и одномерный массив (Составить одномерный массив, содержащий количество буквенных символов в каждом из ее столбцов, подсчет символов) - C++
Помогите решить задачку: Дана матрица 5х7, элементами которой являются значения символьного типа. Составить одномерный массив, содержащий...

Двумерный массив с проверкой условий - C++
1)Нужно задать одномерный массив и заполнить его значениями. Размер массива 168 значений. 2)Проверить эти значения на условие. Среднее...

Сгенерировать массив, исходя из условий: V[j] >v[i] при j > i - C++
Задан массив V произвольной длины.Написать программу, генерирующую целочисленный массив W такой же длинны, где W- число элементов V, таких,...

23
MaKaRoN IV
15 / 15 / 6
Регистрация: 20.04.2013
Сообщений: 64
18.10.2015, 15:15 #2
1. C++, Найти минимальный и максимальный элемент массива - это хоть и для двумерного массива, но переделаешь под себя.
2. Для второго условия можно сделать так, переставлять встретившийся 0 и другое число, к примеру дан массив:

C++
1
2 4 0 8 3 0 5 0
Начинаешь по нему проходить и если встречается 0, то делаешь перестановку в начало, там где еще нет нулей.
Но заметь, что такой подход подойдет в том случае, если тебе вообще не важен порядок оставшихся чисел. Тогда получатся такие итерации:
C++
1
2
3
4
5
6
7
2 4 0 8 3 0 5 0
^___^
0 4 2 8 3 0 5 0
  ^_______^
0 0 2 8 3 4 5 0
    ^_________^
0 0 0 8 3 4 5 2
1
МирныйКряк
0 / 0 / 0
Регистрация: 28.01.2015
Сообщений: 35
18.10.2015, 15:41  [ТС] #3
не совсем соображу как условия из первой ссылки для двумерного массива прикрутить себе одномерному
п.с. попробовал, но неверно, 4 ошибки и соответствено по безграмотности своей результата нет
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
int main()
{
    setlocale(LC_ALL,"Rus");
    int min = 0;
    int n;
    cout << "Размер вектора?";
    cin >> n;
    int* A = new int[n];
    for (int i = 0; i < n; i++)
    {
        a[i] = new int[n]; // Создаем элементы
    }
    // А дальше работа как с обычным массивом. 
    for (int i = 0; i < n; i++)
    // Считаем минимальный и максимальный
    min = a[0][0];// берем самый первый элемент массива и считаем, что он минимальный.
        for (int i = 0; i < n; i++)
    Input(A,n);
    //RandomFill(A, n);
    Print(A, n);
    //int s = Work(A, n);
    //cout << "Summa = " << s << endl;
    //delete[] A;
    system("pause");
    return 0;
п.с. код тот же просто добавил в мейн несколько строк
п.п.с. еще в том примере ненужный рандом в 10% не не не не то(
п.п.п.с я то хочу воплотить возможность самому вносить значения в обрабатываемый массив, для рандома в том же коде уже все прописано... но рандом не нужен

Добавлено через 12 минут
Вроде начинаю сображать но немогу сообразить правильность написания первого условия
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
#include <iostream>
#include <clocale>
#include <cstdlib>
using namespace std;
void Input(int* M, int n);  // ввод массива
void Print(int* M, int n);   // вывод массива
int Work(int* M, int n);   // пример обработки массива
int main()
{
    setlocale(LC_ALL,"Rus");
    int n;
    cout << "Размер одномерного массива?";
    cin >> n;
    int* A = new int[n];
    Input(A,n);
    Print(A, n);
    int s = Work(A, n);
    cout << "Минимальный элемент = " << s << endl;
    delete[] A;
    system("pause");
    return 0;
}
 
void Input(int* M, int n)
{
    for (int i = 0; i<n; i++)
    {
        cout << "M[" << i << "]=?";
        cin >> M[i];
    }
}
 
void Print(int* M, int n)
{
    for (int i = 0; i<n; i++)
    {
        cout << M[i] << " ";
    }
    cout << endl;
}
 
int Work(int* M, int n)
{
    int min = size;
    for (int i = 0; i < size; i++) {
        a[i] = getNumber();
        if (a[i] < min)
        {
            min = a[i];
        }
}
0
MaKaRoN IV
15 / 15 / 6
Регистрация: 20.04.2013
Сообщений: 64
18.10.2015, 15:56 #4
Чтобы не быть безграмотным, надо изучать соответствующие материалы, а также научиться их искать.

Для чего вам цикл? Получается что вы множество раз будете производить ввод.
C++
1
2
    for (int i = 0; i < n; i++)
    Input(A,n);
Здесь переменная имеет название А, а в цикле маленькое а, не путайте написание.
C++
1
2
3
4
5
int* A = new int[n];
    for (int i = 0; i < n; i++)
    {
        a[i] = new int[n]; // Создаем элементы
    }
Тем более здесь уже выделена память:
C++
1
int* A = new int[n];
И второй раз ее выделять не надо:
C++
1
a[i] = new int[n]; // Создаем элементы
Если вылезли ошибки, то смотри в лог, что вам пишет компилятор, номер ошибки, описание - все это и решения можно найти в интернете, на том же :

Должно сработать:
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
71
72
73
74
75
76
77
78
79
80
81
82
#include <stdio.h>
#include <conio.h>
#include <iostream>
 
void Input(int* M, int n);   // ввод массива
void Print(int* M, int n);   // вывод массива
 
int main()
 
{
    setlocale(LC_ALL, "Rus");
 
    // Инициализируем переменные
    int min = 0;
    int n;
 
    cout << "Размер вектора?";
    cin >> n;
 
    int* A = new int[n];
 
    // Вводим данные в массив
    Input(A, n);
 
    // Выводим массив
    Print(A, n);
 
    // Находим минимальный элемент в массиве
    min = A[0];
 
    for(int i = 1; i < n; i++)
    {
        if(A[i] < min) min = A[i];
    }
 
    printf("\nmin=%d \n", min);
 
    // А здесь уже можете реализовать второе условие и снова сделать вывод массива
    // ...
    getch();
 
    return 0;
}
 
//----   описание функций -----------------------------------------
// ввод массива
void Input(int* M, int n)
{
    for(int i = 0; i < n; i++)
    {
        cout << "M[" << i << "]=?";
        cin >> M[i];
    }
}
// заполнение случайными числами
void RandomFill(int* M, int n)
{
    for(int i = 0; i < n; i++)
    {
        M[i] = rand() % 100;
    }
}
// вывод массива
void Print(int* M, int n)
{
    for(int i = 0; i < n; i++)
    {
        cout << M[i] << " ";
    }
 
    cout << endl;
}
// пример обработки - подсчет суммы элементов
int Work(int* M, int n)
{
    int sum = 0;
    for(int i = 0; i < n; i++)
    {
        sum += M[i];
    }
    return sum;
}
Добавлено через 5 минут
Переменная min не равна размеру size (а откуда он кстати взялся ), он должен быть равен первому элементу массива, а затем можно применить цикл для поиска минимального элемента в массиве:
C++
1
2
3
4
5
6
7
8
9
10
int Work(int* M, int n)
{
    int min = size;
    for (int i = 1; i < size; i++) {
        a[i] = getNumber();
        if (a[i] < min)
        {
            min = a[i];
        }
}
Скорее должно быть так:

C++
1
2
3
4
5
6
7
8
9
int Work(int* M, int n)
{
    int min = a[0];  // первый элемент берется как минимальный
    for (int i = 1; i < n; i++) {
        if (a[i] < min)
        {
            min = a[i];
        }
}
0
МирныйКряк
0 / 0 / 0
Регистрация: 28.01.2015
Сообщений: 35
19.10.2015, 16:52  [ТС] #5
ап, совет не помог, также почемуто отрабатывает сумму...
0
MaKaRoN IV
15 / 15 / 6
Регистрация: 20.04.2013
Сообщений: 64
19.10.2015, 16:54 #6
Код покажи весь, какие изменения произошли.
0
МирныйКряк
0 / 0 / 0
Регистрация: 28.01.2015
Сообщений: 35
21.10.2015, 16:34  [ТС] #7
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 <iostream>
#include <clocale>
#include <cstdlib>
using namespace std;
void Input(int* M, int n);  // ввод массива
void Print(int* M, int n);   // вывод массива
int Work(int* M, int n);   // пример обработки массива
int main()
{
    setlocale(LC_ALL,"Rus");
    int n;
    cout << "Размер одномерного массива?";
    cin >> n;
    int* A = new int[n];
    Input(A,n);
    Print(A, n);
    int s = Work(A, n);
    cout << "Минимальный элемент = " << s << endl;
    delete[] A;
    system("pause");
    return 0;
}
 
void Input(int* M, int n)
{
    for (int i = 0; i<n; i++)
    {
        cout << "M[" << i << "]=?";
        cin >> M[i];
    }
}
 
int Work(int* M, int n)
{
    int min = a[0];  // первый элемент берется как минимальный
    for (int i = 1; i < n; i++) {
        if (a[i] < min)
        {
            min = a[i];
        }
    }
изменений никаких, все равно суммирует...
0
MaKaRoN IV
15 / 15 / 6
Регистрация: 20.04.2013
Сообщений: 64
21.10.2015, 17:07 #8
Может ты компилируешь не тот проект или забыл обновить код?

Обновляй код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
int Work(int* M, int n)
{
    int min = M[0];  // первый элемент берется как минимальный
    for(int i = 1; i < n; i++)
    {
        if(M[i] < min)
        {
            min = M[i];
        }
    }
    return min;
}
1
МирныйКряк
0 / 0 / 0
Регистрация: 28.01.2015
Сообщений: 35
01.11.2015, 09:47  [ТС] #9
2 MaKaRoN IV
ОНО!!!!!)
у меня просто времени последнее время просто в обрез, все время отнимает работа.
Только седня добрался до компа поразбираться, а твой последний код именно на минимальный элемент отработал на ура)
буду разбираться со вторым условием, не откажусь от помощи совета) огромное за помощь!
0
МирныйКряк
0 / 0 / 0
Регистрация: 28.01.2015
Сообщений: 35
09.11.2015, 12:52  [ТС] #10
up не могу задействовать второе условие
0
_Scorpius_
50 / 50 / 24
Регистрация: 01.04.2015
Сообщений: 106
09.11.2015, 14:24 #11
Цитата Сообщение от МирныйКряк Посмотреть сообщение
преобразить массив таким образом, чтобы сначала располагались все элементы, равные нулю, а потом – все остальные.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void Work_2(int* M, int n)
{
    int index = 0;
    int tmpValue = M[index];
    while((index < n) && (M[index] == 0))
        ++index;
    for(int i = index+1; i < n; ++i)
    {
        if(M[i] == 0)
        {
            tmpValue = M[index];
            M[index] = M[i];
            M[i] = tmpValue;
            ++index;
        }
    }
}
0
МирныйКряк
0 / 0 / 0
Регистрация: 28.01.2015
Сообщений: 35
09.11.2015, 14:28  [ТС] #12
не помогло
0
МирныйКряк
0 / 0 / 0
Регистрация: 28.01.2015
Сообщений: 35
09.11.2015, 14:31  [ТС] #13
скрин
все также в ряде отображения симовлов кажет первый написанный а не минимальный
0
Миниатюры
Одномерный массив, выполнение двух условий  
_Scorpius_
50 / 50 / 24
Регистрация: 01.04.2015
Сообщений: 106
09.11.2015, 14:34 #14
То тебе их надо отсортировать от меньшего к большему, или чтобы просто все нулевые элементы стояли в начале массива?
0
МирныйКряк
0 / 0 / 0
Регистрация: 28.01.2015
Сообщений: 35
09.11.2015, 15:02  [ТС] #15
преобразить массив таким образом, чтобы сначала располагались все элементы, равные нулю, а потом – все остальные.
0
09.11.2015, 15:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.11.2015, 15:02
Привет! Вот еще темы с ответами:

Выполнение двух функций независимо друг от друга - C++
Пытаюсь написать игрушку, но возникают проблемы со временем. Мне нужно чтобы переменной, независимо от выполнения каких либо операций с...

Массив: преобразорвать двумерный массив в одномерный и отсортировать его методом пузырька - C++
всем привет. народ помогите с прогой, конкретно с функцией sort (65 строка), она должна двухмерный массив перевести построчно в одномерный...

Массив: найти номера столбцов с положительными элементами и записать их в одномерный массив - C++
ввести двумерный массив I . найти номера столбцов с положительными элементами и записать их в одномерный массив, отобразить его на экране. ...

Массив: Все элементы массива, кратные трем, записать в одномерный массив. - C++
Дан двумерный массив размером n x n? заполненный целыми числами. Все его элементы кратные трем, записать в одномерный массив.


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

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

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