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

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

Восстановить пароль Регистрация
 
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 127
12.05.2013, 06:37     Нужно переделать из двух циклов for в один цикл for #1
Народ у меня код считает сумму введенных элементов массив до последнего положительного элемента. Мне нужно чтобы он считал сумму только от последнего отрицательного до первого положительного введенных элементов массива, и все это должно быть через один цикл 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
GetVariable
 Аватар для GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
12.05.2013, 06:50     Нужно переделать из двух циклов for в один цикл for #2

Не по теме:

#deleted



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

Не по теме:

#deleted



Пример правильной работы программы, будьте добры напишите.
В том то и дело что я не знаю как, вот попросил помощи
GetVariable
 Аватар для GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
12.05.2013, 07:03     Нужно переделать из двух циклов for в один цикл for #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;
}
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 127
12.05.2013, 07:06  [ТС]     Нужно переделать из двух циклов for в один цикл for #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
GetVariable
 Аватар для GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
12.05.2013, 07:09     Нужно переделать из двух циклов for в один цикл for #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;
}
положительного введенных элементов массива
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 127
12.05.2013, 07:13  [ТС]     Нужно переделать из двух циклов for в один цикл for #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 и больше циклов быть не должно
GetVariable
 Аватар для GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
12.05.2013, 07:16     Нужно переделать из двух циклов for в один цикл for #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;
}
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 127
12.05.2013, 07:16  [ТС]     Нужно переделать из двух циклов for в один цикл for #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).
GetVariable
 Аватар для GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
12.05.2013, 07:27     Нужно переделать из двух циклов for в один цикл for #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 минуты
Все верно?
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 127
12.05.2013, 07:57  [ТС]     Нужно переделать из двух циклов for в один цикл for #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 минуты
Все верно?
А стоп, если я не введу отрицательно число то что тогда?
GetVariable
 Аватар для GetVariable
163 / 119 / 5
Регистрация: 17.03.2013
Сообщений: 283
12.05.2013, 07:59     Нужно переделать из двух циклов for в один цикл for #12
Есть исключение, когда последнем элементом массива является отрицательное число. те

v[14] = -14

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

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

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

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

Вставка одного вектора в другой через один без циклов C++
Переделать цикл под итератор C++
C++ Нужно найти произведение двух чисел A и B, не используя умножение. (Цикл)

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

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

v[14] = -14

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

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

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

к примеру можно ввести значения bool, найдено ли отрицательное число. если нет, то писать, что не найдено.
Ладно, спасибо за помощь)
Yandex
Объявления
12.05.2013, 08:03     Нужно переделать из двух циклов for в один цикл for
Ответ Создать тему
Опции темы

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