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

Массивы! Подправьте прогу! - C++

Восстановить пароль Регистрация
 
yurets17
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 170
04.11.2013, 16:38     Массивы! Подправьте прогу! #1
Подскажите ошибки! Прога должна:
1. Превращать в массив введенную строку символов и выводить массив на экран.
2. Из массива сгенерированых чисел найти разность между суммами четных и нечетных элементов и вывести на экран.
3. Сделать циклическое смещение алгоритма влево заданное количество раз!

2 часть работает, 1 не работает, а 3 работает через раз(раз выводит правильное количество циклических сдвигов, а раз только одну или две строчки.

где ошибки?
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include <cstdio>
#include <cctype>
#include <iostream>
#include <cmath>
#include <conio.h>
#include <windows.h>
#include "QTime"
void vvod(int ar[], int&size);
void stuToArr(char s[], int ar[], int&size);
void ccyv(int ar[]);
void arToConsole(int ar[]);
void randomArray(int ar[]);
int* Init_array(int N);
void print_mas(int* mas, int N);
void func3();
using namespace std;
int main(){
    int ch;
    int ar[10], size=0;
    cout<<"1. Формування масиву\n";
    cout<<"2. Рiзниця мiж сумами парних та непарних елементiв\n";
    cout<<"3. Задане число циклiчних зсувiв лiворуч\n";
    cin>>ch;
    switch(ch)
    {
    case 1: vvod(ar,size); cout<<"\n";break;
    case 2: func3();  cout<<"\n";break;
    case 3: randomArray(ar); arToConsole(ar); ccyv(ar); cout<<"\n"; break;
    }
}
void stuToArr(char s[], int ar[], int&size)
{
    int i=0; size=0;
    forever {
        while (s[i]='\0'&&!isdigit(s[i]))i++;
        if(s[i]!='\0') return;
        for(ar[size]=0;isdigit(s[i]);i++)
            ar[size]=(ar[size]*10+(s[i])-48);
        size ++;
    }
}
void vvod(int ar[], int&size)
{
    char s[80];
    cout<<" Введiть рядок з якого необхiдно створити масив:";
    cin.getline(s,80);
    stuToArr(s, ar, size);
}
void arToConsole(int ar[]){
    for(int i=0; i<10; i++){
        cout<<ar[i];
    if(i<9)cout<<" ";
    }cout<<endl;
}
void randomArray(int ar[]){
    QTime midnight(0,0,0);
    qsrand(midnight.secsTo(QTime::currentTime()));
    for(int i=0; i<10;i++){
        ar[i]=qrand()%100;
    }
}
void ccyv(int ar[]){
    int n;
    cout<<"Введiть кiлькiсть повторень операцiї "; cin>>n;
    for(int i=0; i<n;i++){
    int i=0, size=10;int ss=ar[0];
    while(i<size){
        if(i!=(ar[size])){
            ar[i]=ar[i+1];
            ar[size]=ss;
            cout<<ar[i]<<" ";
        }else return;i++;
      }cout<<"\n";
    }
}
 
void func3()
{
    const int N = 10;
    int* mas = Init_array(N);
    int sum_chet = 0;
    int sum_non_chet = 0;
    for (int i = 0; i < N; i++)
    {
 
        if ( mas[i] % 2 == 0 )
        {
            sum_chet += mas[i];
        }
        else
        {
            sum_non_chet += mas[i];
        }
    }
    print_mas(mas, N);
    cout<<"Сума парних елементiв = "<<sum_chet<<endl;
    cout<<"Сума непарних елементiв = "<<sum_non_chet<<endl;
    cout<<"Рiзниця сум = "<<(sum_chet - sum_non_chet)<<endl;
    delete [] mas;
    cout<<"Для продовження натиснiть будь-яку клавiшу...";
    getch ();
}
int* Init_array(int N)
{
    int* result = new int[N];
    QTime midnight(0,0,0);
    qsrand(midnight.secsTo(QTime::currentTime()));
    for (int i = 0; i < N; i++)
    {
        result[i] = qrand() % 100;
    }
    return result;
}
 
void print_mas(int* mas, int N)
{
    cout<<"mas = {";
    for (int i = 0; i < N; i++)
    {
        cout<<mas[i]<<", ";
    }
    cout<<"}"<<endl;
}
Добавлено через 33 минуты
Пожалуйста, подскажите ошибки!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2013, 16:38     Массивы! Подправьте прогу!
Посмотрите здесь:

исправьте прогу про одномерные массивы. C++
массивы в С++ не могу создать прогу C++
C++ Подправьте решение
Подправьте немного... C++
Подправьте мой код) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
waldemar2594
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 6
04.11.2013, 17:22     Массивы! Подправьте прогу! #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
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
//Прога должна:
//1. Превращать в массив введенную строку символов и выводить массив на экран. +
//2. Из массива сгенерированых чисел найти разность между суммами четных и нечетных элементов и вывести на экран. +
//3. Сделать циклическое смещение алгоритма влево заданное количество раз
 
#include <iostream>
#include <time.h>
using namespace std;
 
void SetInputLineAsArray(char * inputLine)
{
    for (int i = 0; i < strlen(inputLine); ++i)
        cout << "Элемент #" << i << ": " << *(inputLine + i) << endl; 
    // надпись: *(InputLine + i) равносильна InputLine[i], но более высока по производительности
}
 
void GenericArray(int max, int min, int num, double * MyArray)
{
    srand(time(NULL));
    for (int i = 0; i < num; ++i)
        *(MyArray + i) = rand() % max + min;
}
 
double SumResults(int num, double * MyArray)
{
    double sum1 = 0, sum2 = 0;
 
    for (int i = 1; i < num; i = i + 2)
        sum1 += *(MyArray + i);
 
    for (int i = 0; i < num; i = i + 2)
        sum2 += *(MyArray + i);
 
    return sum2 - sum1;
}
 
void Print(int n, double * MyArray)
{
    cout << "Массив." << endl;
 
    for (int i = 0; i < n; ++i)
        cout << "Элемент #" << i << ": " << *(MyArray + i) << endl;
}
 
int main()
{
    const int Power = 1000;
    setlocale(LC_ALL, "Russian"); // Поддержка Русского языка в консоле
    char * InputLine = new char [Power];
 
    cout << "Ввод строки:" << endl;
    cin >> InputLine; // Автоматом считывает строку в массив символов
 
    SetInputLineAsArray(InputLine);
 
    double * GenArray = new double [Power];
    cout << "Ввод пределов генерирования." << endl;
    cout << "Введите верхнюю грань:" << endl;
    int randMax;
    cin >> randMax;
    cout << "Введите нижнюю грань:" << endl;
    int randMin;
    cin >> randMin;
    cout << "Сколько элементов генерировать:" << endl;
    int numOfElements;
    cin >> numOfElements;
    GenericArray(randMax, randMin, numOfElements, GenArray);
    Print(numOfElements, GenArray);
    cout << SumResults(numOfElements, GenArray) << endl;
 
 
    // очистка памяти
    delete [] GenArray;
    delete [] InputLine;
 
    system("PAUSE"); // Остановка программы и ожидание нажатия любой клавиши, после выполнения главного блока
    return 0;
}
Пункты 1 и 2 работают.
На счет третьего, я не понимаю что вы хотите в 3-ем? Напишите яснее.
yurets17
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 170
04.11.2013, 17:28  [ТС]     Массивы! Подправьте прогу! #3
Цитата Сообщение от waldemar2594 Посмотреть сообщение

Пункты 1 и 2 работают.
На счет третьего, я не понимаю что вы хотите в 3-ем? Напишите яснее.
В 3 части должны генериться случайные числа, а потом я например ввожу число 1!
значит нулевой елемент массива становится на место последнего, первый на место нулевого, второй на место первого и т.д.
если я введу число 2, то выполняется сначала то, что я написал выше, а потом уже эти самые действия делаются с созданным в результате первого сдвига массивом.
Anton_Kretov
 Аватар для Anton_Kretov
89 / 51 / 7
Регистрация: 26.06.2013
Сообщений: 179
04.11.2013, 17:29     Массивы! Подправьте прогу! #4
Цитата Сообщение от waldemar2594 Посмотреть сообщение
Чем разбирать чужой код легче свой написать..
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
//Прога должна:
//1. Превращать в массив введенную строку символов и выводить массив на экран. +
//2. Из массива сгенерированых чисел найти разность между суммами четных и нечетных элементов и вывести на экран. +
//3. Сделать циклическое смещение алгоритма влево заданное количество раз
 
#include <iostream>
#include <time.h>
using namespace std;
 
void SetInputLineAsArray(char * inputLine)
{
    for (int i = 0; i < strlen(inputLine); ++i)
        cout << "Элемент #" << i << ": " << *(inputLine + i) << endl; 
    // надпись: *(InputLine + i) равносильна InputLine[i], но более высока по производительности
}
 
void GenericArray(int max, int min, int num, double * MyArray)
{
    srand(time(NULL));
    for (int i = 0; i < num; ++i)
        *(MyArray + i) = rand() % max + min;
}
 
double SumResults(int num, double * MyArray)
{
    double sum1 = 0, sum2 = 0;
 
    for (int i = 1; i < num; i = i + 2)
        sum1 += *(MyArray + i);
 
    for (int i = 0; i < num; i = i + 2)
        sum2 += *(MyArray + i);
 
    return sum2 - sum1;
}
 
void Print(int n, double * MyArray)
{
    cout << "Массив." << endl;
 
    for (int i = 0; i < n; ++i)
        cout << "Элемент #" << i << ": " << *(MyArray + i) << endl;
}
 
int main()
{
    const int Power = 1000;
    setlocale(LC_ALL, "Russian"); // Поддержка Русского языка в консоле
    char * InputLine = new char [Power];
 
    cout << "Ввод строки:" << endl;
    cin >> InputLine; // Автоматом считывает строку в массив символов
 
    SetInputLineAsArray(InputLine);
 
    double * GenArray = new double [Power];
    cout << "Ввод пределов генерирования." << endl;
    cout << "Введите верхнюю грань:" << endl;
    int randMax;
    cin >> randMax;
    cout << "Введите нижнюю грань:" << endl;
    int randMin;
    cin >> randMin;
    cout << "Сколько элементов генерировать:" << endl;
    int numOfElements;
    cin >> numOfElements;
    GenericArray(randMax, randMin, numOfElements, GenArray);
    Print(numOfElements, GenArray);
    cout << SumResults(numOfElements, GenArray) << endl;
 
 
    // очистка памяти
    delete [] GenArray;
    delete [] InputLine;
 
    system("PAUSE"); // Остановка программы и ожидание нажатия любой клавиши, после выполнения главного блока
    return 0;
}
Пункты 1 и 2 работают.
На счет третьего, я не понимаю что вы хотите в 3-ем? Напишите яснее.
Что правда, то правда.
P.S. Я тоже жду более подробного объяснения третьего пункта.
waldemar2594
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 6
04.11.2013, 17:29     Массивы! Подправьте прогу! #5
Т. е. Генерируем опять массив, и сдвиг массива делаем..
Если так, то сейчас добавлю в прогу и кину сюда полный код.
yurets17
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 170
04.11.2013, 17:31  [ТС]     Массивы! Подправьте прогу! #6
Цитата Сообщение от Anton_Kretov Посмотреть сообщение
Что правда, то правда.
P.S. Я тоже жду более подробного объяснения третьего пункта.
В 3 части должны генериться случайные числа, а потом я например ввожу число 1!
значит нулевой елемент массива становится на место последнего, первый на место нулевого, второй на место первого и т.д.
если я введу число 2, то выполняется сначала то, что я написал выше, а потом уже эти самые действия делаются с созданным в результате первого сдвига массивом.

Добавлено через 52 секунды
Цитата Сообщение от waldemar2594 Посмотреть сообщение
Т. е. Генерируем опять массив, и сдвиг массива делаем..
Если так, то сейчас добавлю в прогу и кину сюда полный код.
ну да! генерим массив и делаем сдвиг влево
waldemar2594
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 6
04.11.2013, 17:56     Массивы! Подправьте прогу! #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
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
83
84
85
86
87
88
89
90
#include <iostream>
#include <time.h>
using namespace std;
 
void SetInputLineAsArray(char * inputLine)
{
    for (int i = 0; i < strlen(inputLine); ++i)
        cout << "Элемент #" << i << ": " << *(inputLine + i) << endl; 
    // надпись: *(InputLine + i) равносильна InputLine[i], но более высока по производительности
}
 
void GenericArray(int max, int min, int num, double * MyArray)
{
    srand(time(NULL));
    for (int i = 0; i < num; ++i)
        *(MyArray + i) = rand() % max + min;
}
 
double SumResults(int num, double * MyArray)
{
    double sum1 = 0, sum2 = 0;
 
    for (int i = 1; i < num; i = i + 2)
        sum1 += *(MyArray + i);
 
    for (int i = 0; i < num; i = i + 2)
        sum2 += *(MyArray + i);
 
    return sum2 - sum1;
}
 
void Print(int n, double * MyArray)
{
    cout << "Массив." << endl;
 
    for (int i = 0; i < n; ++i)
        cout << "Элемент #" << i << ": " << *(MyArray + i) << endl;
}
 
void LeftMoveArray(int n, double * MyArray, int x)
{
    for (int i = 0; i < x; ++i)
    {
        for (int j = 0; j < n - 1; ++j)
        {
            double Temp = *(MyArray + j + 1);
            *(MyArray + j + 1) = *(MyArray + j);
            *(MyArray + j) = Temp;
        }
    }
}
 
int main()
{
    const int Power = 1000;
    setlocale(LC_ALL, "Russian"); // Поддержка Русского языка в консоле
    char * InputLine = new char [Power];
 
    cout << "Ввод строки:" << endl;
    cin >> InputLine; // Автоматом считывает строку в массив символов
 
    SetInputLineAsArray(InputLine);
 
    double * GenArray = new double [Power];
    cout << "Ввод пределов генерирования." << endl;
    cout << "Введите верхнюю грань:" << endl;
    int randMax;
    cin >> randMax;
    cout << "Введите нижнюю грань:" << endl;
    int randMin;
    cin >> randMin;
    cout << "Сколько элементов генерировать:" << endl;
    int numOfElements;
    cin >> numOfElements;
    GenericArray(randMax, randMin, numOfElements, GenArray);
    Print(numOfElements, GenArray);
    cout << "Разница сумм: " << SumResults(numOfElements, GenArray) << endl;
    cout << "Число сдвигов:" << endl;
    int numOfMove;
    cin >> numOfMove;
    LeftMoveArray(numOfElements, GenArray, numOfMove);
    Print(numOfElements, GenArray);
 
    // очистка памяти
    delete [] GenArray;
    delete [] InputLine;
 
    system("PAUSE"); // Остановка программы и ожидание нажатия любой клавиши, после выполнения главного блока
    return 0;
}
Вроде всё выполнил.
yurets17
1 / 1 / 0
Регистрация: 07.10.2013
Сообщений: 170
04.11.2013, 18:12  [ТС]     Массивы! Подправьте прогу! #8
Цитата Сообщение от waldemar2594 Посмотреть сообщение

Вроде всё выполнил.
Только при сдвиге оно должно выводить все массивы! не только окончательный, а после каждого сдвига
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.11.2013, 18:19     Массивы! Подправьте прогу!
Еще ссылки по теме:

Указатели и массивы. Внедрение функции в прогу. C++. Пожалуйста, помогите. C++
C++ Подправьте прогу( сортировка массивов)
Подправьте код C++

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

Или воспользуйтесь поиском по форуму:
waldemar2594
0 / 0 / 0
Регистрация: 04.11.2013
Сообщений: 6
04.11.2013, 18:19     Массивы! Подправьте прогу! #9
Добавьте внутрь цикла for строки 43,
Print(n, MyArray);

Добавлено через 1 минуту
и удалите строку номер 83
Yandex
Объявления
04.11.2013, 18:19     Массивы! Подправьте прогу!
Ответ Создать тему
Опции темы

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