Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
MishkaSh
0 / 0 / 1
Регистрация: 19.02.2013
Сообщений: 130
#1

Нужно переделать из двух циклов for в один цикл for

12.05.2013, 06:37. Просмотров 516. Ответов 12
Метки нет (Все метки)

Народ у меня код считает сумму введенных элементов массив до последнего положительного элемента. Мне нужно чтобы он считал сумму только от последнего отрицательного до первого положительного введенных элементов массива, и все это должно быть через один цикл for. Вот мой код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;
 
int main()
{
    setlocale (0,"rus");
    int a,i;
    const int m=15;
    double v[m],s=0;
    cout<<"Введите массив из 15 чисел\n";
    for (i=0; i<m; i++)
        {
        cin>>v[i];
        if (v[i]>0) a=i;
        }
    for (i=0; i<=a; i++)
        s=s+v[i];
    cout<<"Сумма элементов массива s= "<<s<<endl;
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2013, 06:37
Ответы с готовыми решениями:

Нужно найти произведение двух чисел A и B, не используя умножение. (Цикл)
Нужно найти произведение двух чисел A и B, не используя умножение. Сделать это...

Переделать один из циклов на рекурсию
Помогите пожалуйста розобраться в коде и переделать один из циклов на рекурсию....

Слияние двух циклов в один
Как из двух цыклов сделать 1 втаком коде? var a = 3, b = 5, c = 1, ...

Создать программу по всем 3 видам циклов...цикл с параметром,цикл с условием,цикл,и цикл с предусловием...
Найти сумму чисел 1 в квадрате до 10 c квадрате...операцию возведению в степень...

Jugged (ступенчатые) массивы: Вместо двух циклов for использовать один foreach
Приветствую. В одном из курсов по программированию на C# есть тема про...

12
GetVariable
163 / 119 / 46
Регистрация: 17.03.2013
Сообщений: 283
12.05.2013, 06:50 #2

Не по теме:

#deleted



Пример правильной работы программы, будьте добры напишите.
1
MishkaSh
0 / 0 / 1
Регистрация: 19.02.2013
Сообщений: 130
12.05.2013, 06:56  [ТС] #3
Цитата Сообщение от GetVariable Посмотреть сообщение

Не по теме:

#deleted



Пример правильной работы программы, будьте добры напишите.
В том то и дело что я не знаю как, вот попросил помощи
0
GetVariable
163 / 119 / 46
Регистрация: 17.03.2013
Сообщений: 283
12.05.2013, 07:03 #4
Вы можете написать пример массива из 15 чисел и какой должен быть ответ?

Добавлено через 1 минуту
Отрицательное число включительно считать или же его можно пропустить?

Добавлено через 5 минут
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
#include <iostream>
using namespace std;
 
int main()
{
    setlocale (0,"rus");
 
    int a;
    const int m=15;
    double v[m],s=0;
 
    cout<<"Введите массив из 15 чисел\n";
 
    for (int i=0; i<m; ++i)
    {
        cin>>v[i];
 
        if (v[i]<0) 
            a=i;
    }
 
    //a // последниее отрицательное
 
    // 0 -5 6 6 // от -5 и до первого положительного
 
    for (a; a <= m; ++a)
    {
        if(v[a] > 0)
        {
            s += v[a];
            break; // выход мы достигли первого положительного после отрицательного
        }
        else
        {
            s += v[a];
        }
 
    }
 
    cout << "Сумма элементов массива s= " << s << endl;
    return 0;
}
1
MishkaSh
0 / 0 / 1
Регистрация: 19.02.2013
Сообщений: 130
12.05.2013, 07:06  [ТС] #5
Цитата Сообщение от GetVariable Посмотреть сообщение
Вы можете написать пример массива из 15 чисел и какой должен быть ответ?

Добавлено через 1 минуту
Отрицательное число включительно считать или же его можно пропустить?

Добавлено через 5 минут
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
#include <iostream>
using namespace std;
 
int main()
{
    setlocale (0,"rus");
 
    int a;
    const int m=15;
    double v[m],s=0;
 
    cout<<"Введите массив из 15 чисел\n";
 
    for (int i=0; i<m; ++i)
    {
        cin>>v[i];
 
        if (v[i]<0) 
            a=i;
    }
 
    //a // последниее отрицательное
 
    // 0 -5 6 6 // от -5 и до первого положительного
 
    for (a; a <= m; ++a)
    {
        if(v[a] > 0)
        {
            s += v[a];
            break; // выход мы достигли первого положительного
        }
        else
        {
            s += v[a];
        }
 
    }
 
    cout << "Сумма элементов массива s= " << s << endl;
    return 0;
}
Нужно считать от последнего отрицательного до первого положительного включительно, и используя только один цикл for
0
GetVariable
163 / 119 / 46
Регистрация: 17.03.2013
Сообщений: 283
12.05.2013, 07:09 #6
или же вот так

это 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
#include <iostream>
using namespace std;
 
int main()
{
    setlocale (0,"rus");
 
    int a;
    const int m=15;
    double v[m],s=0;
 
    cout<<"Введите массив из 15 чисел\n";
 
    bool found_unsigned_number = false;
    unsigned int numb;
 
    for (int i=0; i<m; ++i)
    {
        cin>>v[i];
 
        if(!found_unsigned_number && v[i] > 0)
        {
            numb = v[i];                        //первое положительное
            found_unsigned_number = true;
        }
 
        if (v[i]<0) 
            a=i;                                // индекс последнего отрицательного
    }
 
    //a // последниее отрицательное
 
    // 0 -5 6 6 // от -5 и до первого положительного
 
    s = v[a] + numb;
 
    cout << "Сумма элементов массива s= " << s << endl;
    return 0;
}
положительного введенных элементов массива
1
MishkaSh
0 / 0 / 1
Регистрация: 19.02.2013
Сообщений: 130
12.05.2013, 07:13  [ТС] #7
Цитата Сообщение от GetVariable Посмотреть сообщение
или же вот так

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
#include <iostream>
using namespace std;
 
int main()
{
    setlocale (0,"rus");
 
    int a;
    const int m=15;
    double v[m],s=0;
 
    cout<<"Введите массив из 15 чисел\n";
 
    bool found_unsigned_number = false;
    unsigned int numb;
 
    for (int i=0; i<m; ++i)
    {
        cin>>v[i];
 
        if(found_unsigned_number && v[i] > 0)
            numb = v[i];                        //первое положительное
 
        if (v[i]<0) 
            a=i;                                // индекс последнего отрицательного
    }
 
    //a // последниее отрицательное
 
    // 0 -5 6 6 // от -5 и до первого положительного
 
    s = v[a] + numb;
 
    cout << "Сумма элементов массива s= " << s << endl;
    return 0;
}
это 2 разных решения, уточните, что именно вы имели под

положительного введенных элементов массива
Я ввожу 15 чисел, он должен посчитать сумму чисел от последнего отрицательного до первого положительного включительно. И все это должно быть в одном цикле for и больше циклов быть не должно
0
GetVariable
163 / 119 / 46
Регистрация: 17.03.2013
Сообщений: 283
12.05.2013, 07:16 #8
те

0 1 2 3 4 5 6 7 8 9 10 11 -12 13 14

мы считаем -12 + 13 + 14?

или же

-12 +13

Добавлено через 1 минуту
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
#include <iostream>
using namespace std;
 
int main()
{
    setlocale (0,"rus");
 
    int a;
    const int m=15;
    double v[m],s=0;
 
    cout<<"Введите массив из 15 чисел\n";
 
    bool found_unsigned_number = false;
    unsigned int numb;
 
    for (int i=0; i<m; ++i)
    {
        cin>>v[i];
 
        if(!found_unsigned_number && v[i] > 0)
        {
            numb = v[i];                        //первое положительное
            found_unsigned_number = true;
        }
 
        if (v[i]<0) 
            a=i;                                // индекс последнего отрицательного
    }
 
    //a // последниее отрицательное
 
    // 0 -5 6 6 // от -5 и до первого положительного
 
    s = v[a] + numb;
 
    cout << "Сумма элементов массива s= " << s << endl;
    return 0;
}
1
MishkaSh
0 / 0 / 1
Регистрация: 19.02.2013
Сообщений: 130
12.05.2013, 07:16  [ТС] #9
Цитата Сообщение от GetVariable Посмотреть сообщение
те

0 1 2 3 4 5 6 7 8 9 10 11 -12 13 14

мы считаем -12 + 13 + 14?

или же

-12 +13

Добавлено через 1 минуту
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
#include <iostream>
using namespace std;
 
int main()
{
    setlocale (0,"rus");
 
    int a;
    const int m=15;
    double v[m],s=0;
 
    cout<<"Введите массив из 15 чисел\n";
 
    bool found_unsigned_number = false;
    unsigned int numb;
 
    for (int i=0; i<m; ++i)
    {
        cin>>v[i];
 
        if(!found_unsigned_number && v[i] > 0)
        {
            numb = v[i];                        //первое положительное
            found_unsigned_number = true;
        }
 
        if (v[i]<0) 
            a=i;                                // индекс последнего отрицательного
    }
 
    //a // последниее отрицательное
 
    // 0 -5 6 6 // от -5 и до первого положительного
 
    s = v[a] + numb;
 
    cout << "Сумма элементов массива s= " << s << endl;
    return 0;
}
-12 + 13. А и еще сложность оценки сложности алгоритма должна быть равно 1, то есть 0(N).
0
GetVariable
163 / 119 / 46
Регистрация: 17.03.2013
Сообщений: 283
12.05.2013, 07:27 #10
Сейчас сделаю.

Добавлено через 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
#include <iostream>
using namespace std;
 
int main()
{
    setlocale (0,"rus");
 
    int a;
    const int m=15;
    double v[m],s=0;
 
    cout<<"Введите массив из 15 чисел\n";
 
    for (int i=0; i<m; ++i)
    {
        cin>>v[i];
 
        if (v[i]<0)
            a=i;                                // индекс последнего отрицательного
        
    }
 
    //a // последниее отрицательное
 
    // 0 -5 6 6 // от -5 и до первого положительного
 
    if(a < 14)
        s = v[a] + v[a+1];      // тк это последнее отрицательное за ним идёт положительное.
    else
        s = v[a];               // если после v[a] нет положительных те конец массива, то пусть оно будет v[a]
 
    cout << "Сумма элементов массива s= " << s << endl;
    return 0;
}
Добавлено через 2 минуты
Все верно?
1
MishkaSh
0 / 0 / 1
Регистрация: 19.02.2013
Сообщений: 130
12.05.2013, 07:57  [ТС] #11
Цитата Сообщение от GetVariable Посмотреть сообщение
Сейчас сделаю.

Добавлено через 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
#include <iostream>
using namespace std;
 
int main()
{
    setlocale (0,"rus");
 
    int a;
    const int m=15;
    double v[m],s=0;
 
    cout<<"Введите массив из 15 чисел\n";
 
    for (int i=0; i<m; ++i)
    {
        cin>>v[i];
 
        if (v[i]<0)
            a=i;                                // индекс последнего отрицательного
        
    }
 
    //a // последниее отрицательное
 
    // 0 -5 6 6 // от -5 и до первого положительного
 
    if(a < 14)
        s = v[a] + v[a+1];      // тк это последнее отрицательное за ним идёт положительное.
    else
        s = v[a];               // если после v[a] нет положительных те конец массива, то пусть оно будет v[a]
 
    cout << "Сумма элементов массива s= " << s << endl;
    return 0;
}
Добавлено через 2 минуты
Все верно?
Да вроде да, спасибо) только объясни зачем вот этот кусочек:
C++
1
2
 else
        s = v[a];
Добавлено через 18 минут
Цитата Сообщение от GetVariable Посмотреть сообщение
Сейчас сделаю.

Добавлено через 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
#include <iostream>
using namespace std;
 
int main()
{
    setlocale (0,"rus");
 
    int a;
    const int m=15;
    double v[m],s=0;
 
    cout<<"Введите массив из 15 чисел\n";
 
    for (int i=0; i<m; ++i)
    {
        cin>>v[i];
 
        if (v[i]<0)
            a=i;                                // индекс последнего отрицательного
        
    }
 
    //a // последниее отрицательное
 
    // 0 -5 6 6 // от -5 и до первого положительного
 
    if(a < 14)
        s = v[a] + v[a+1];      // тк это последнее отрицательное за ним идёт положительное.
    else
        s = v[a];               // если после v[a] нет положительных те конец массива, то пусть оно будет v[a]
 
    cout << "Сумма элементов массива s= " << s << endl;
    return 0;
}
Добавлено через 2 минуты
Все верно?
А стоп, если я не введу отрицательно число то что тогда?
0
GetVariable
163 / 119 / 46
Регистрация: 17.03.2013
Сообщений: 283
12.05.2013, 07:59 #12
Есть исключение, когда последнем элементом массива является отрицательное число. те

v[14] = -14

если мы попробуем получить доступ к v[15] мы нарушим правила доступа к памяти тк выйдем за её приделы. по этому мы его и обрабатываем.

Добавлено через 1 минуту
Алгоритм был сделан, вы же попросили помочь, а не полностью за вас сделать)

Смотрите разные случаи исключения.

к примеру можно ввести значения bool, найдено ли отрицательное число. если нет, то писать, что не найдено.
1
MishkaSh
0 / 0 / 1
Регистрация: 19.02.2013
Сообщений: 130
12.05.2013, 08:03  [ТС] #13
Цитата Сообщение от GetVariable Посмотреть сообщение
Есть исключение, когда последнем элементом массива является отрицательное число. те

v[14] = -14

если мы попробуем получить доступ к v[15] мы нарушим правила доступа к памяти тк выйдем за её приделы. по этому мы его и обрабатываем.

Добавлено через 1 минуту
Алгоритм был сделан, вы же попросили помочь, а не полностью за вас сделать)

Смотрите разные случаи исключения.

к примеру можно ввести значения bool, найдено ли отрицательное число. если нет, то писать, что не найдено.
Ладно, спасибо за помощь)
0
12.05.2013, 08:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2013, 08:03

Нужно по готовому коду цикла for переделать программу в цикл repeat
Помогите пожалуйста, у меня есть задача: В бригаде, работающей на уборке сена,...

Помогите переделать программу что бы она считывала с двух документов и писала в один
Привет всем. Помогите переделать программу что бы она считывала с двух...

Как переделать программу, чтобы внешний цикл был repeat.until, а цикл for вложенным? Паскаль
const x = 0.29; var y, sv, sz, fact, st: real; i, j, zn: integer; ...


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

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

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