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

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

Войти
Регистрация
Восстановить пароль
 
MishkaSh
0 / 0 / 0
Регистрация: 19.02.2013
Сообщений: 130
#1

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

12.05.2013, 06:37. Просмотров 497. Ответов 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
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Нужно переделать из двух циклов for в один цикл for (C++):

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

Переделать один из циклов на рекурсию - C (СИ)
Помогите пожалуйста розобраться в коде и переделать один из циклов на рекурсию. #include&lt;stdio.h&gt; #include&lt;math.h&gt; #include &lt;conio.h&gt;...

Слияние двух циклов в один - JavaScript
Как из двух цыклов сделать 1 втаком коде? var a = 3, b = 5, c = 1, sum1 = 0, sum2 = 0; for (c = 1; a * c &lt;...

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

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

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

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

Не по теме:

#deleted



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

Не по теме:

#deleted



Пример правильной работы программы, будьте добры напишите.
В том то и дело что я не знаю как, вот попросил помощи
0
GetVariable
163 / 119 / 5
Регистрация: 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 / 0
Регистрация: 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 / 5
Регистрация: 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 / 0
Регистрация: 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 / 5
Регистрация: 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 / 0
Регистрация: 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 / 5
Регистрация: 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 / 0
Регистрация: 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 / 5
Регистрация: 17.03.2013
Сообщений: 283
12.05.2013, 07:59 #12
Есть исключение, когда последнем элементом массива является отрицательное число. те

v[14] = -14

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

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

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

к примеру можно ввести значения bool, найдено ли отрицательное число. если нет, то писать, что не найдено.
1
MishkaSh
0 / 0 / 0
Регистрация: 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
Привет! Вот еще темы с ответами:

Помогите переделать программу что бы она считывала с двух документов и писала в один - Java SE
Привет всем. Помогите переделать программу что бы она считывала с двух документов и писала в один. package javaapplication228; ...

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

Переделать программы с использованием циклов - C (СИ)
Здравствуйте. Нужно переделать 2 программы, они полностью рабочие, но как оказалось нужно было их сделать через цикл, а как их сделать...

Нюанс в том, что он выдает все слова, одинаковые для двух предложений, а нужно переделать так, чтоб выдавал самое длинное( - Visual C++
#include &lt;iostream.h&gt; #include &lt;string.h&gt; #include &lt;stdio.h&gt; void main() { const int n=100; char str1,str2,sep=&quot; .,;:!?&quot;; ...


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

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

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