Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
 Аватар для tegami
8 / 8 / 5
Регистрация: 21.05.2014
Сообщений: 430

Программа не выполняет одну из функций

10.12.2014, 16:28. Показов 1088. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
у меня получается сделать умножение а с суммой не могу справится, помогите пожалуйста
задача:
в одномерном массиве, состоящем из n целых элементов вычислить:
-произведение элементов массива с четными номерами;
-сумму элементов, расположенных между первым и последним нулевыми элементами. Преобразовать массив таким образом, чтобы сначала располагались все положительные элементы, а потом-все отрицательные (элементы равные 0, считать положительными)
код:
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
#include 
#include 
#include 
#include 
using namespace std;
 
int main(int argc, char* argv[])
{
setlocale(LC_CTYPE, "Rus");
int n=10, pr=1, s=0; int a[10];
for(int i=0; i>a[i];
}
for(int i=0; i<n; i++)
cout <<a[i]<<" ";
for(int i=1; i<n;i+=2)
{
pr=pr*a[i];
cout<<"Произведение="<<pr<n-1; i++)
{
s=s+a[i];
cout<<"Сумма="<<s<<endl;
}
system("pause");
return 0;
}
visual studio 2010 professional
программа просто не выводит сумму, ошибок нету, в поиске не нашел ничего толкового
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.12.2014, 16:28
Ответы с готовыми решениями:

СМА BOSCH WFO 2060, Выполняет одну функцию, полощит
Стиральная машина выполняет одну функцию, полоскание белья. Какие будут мысли? На плате электроники видимых повреждений нет.

Программа ничего не выполняет
Написал код, по которому мой шар должен подпрыгнуть в определенном месте, но ничего не происходит. using UnityEngine; public class...

Программа не выполняет вычисления
Подскажите почему не выполняются вычисление, а просто виснет она и все, никаких действий не происходит, где ошибся? Код программы: ...

19
3 / 3 / 3
Регистрация: 26.11.2014
Сообщений: 22
10.12.2014, 16:33
в строке cout<<"Произведение="<<pr<n-1; i++)

каков замысел под этот код:

pr<n-1 ?
0
 Аватар для tegami
8 / 8 / 5
Регистрация: 21.05.2014
Сообщений: 430
10.12.2014, 16:42  [ТС]
эм, код не так вставился не знаю почему, переставляю, там не то написано:
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
#include <iostream>
#include <locale>
#include <conio.h>
#include <stdio.h>
using namespace std;
 
int main(int argc, char* argv[])
{
    setlocale(LC_CTYPE, "Rus");
     int n=10, pr=1, s=0; int a[10];
    for(int i=0; i<n; i++)
    {
        cin>>a[i];
    }
    for(int i=0; i<n; i++)
    cout <<a[i]<<" ";
    for(int i=1; i<n;i+=2)
    {
        pr=pr*a[i];
        cout<<"Произведение="<<pr<<endl;
    }
    for(int i=2; i>n-1; i++)
    {
    s=s+a[i];
    cout<<"Сумма="<<s<<endl;
    }
    system("pause");
    return 0;
}
0
3 / 3 / 3
Регистрация: 26.11.2014
Сообщений: 22
10.12.2014, 16:48
for(int i=2; i>n-1; i++)

for(int i=2; i<n-1; i++)
1
 Аватар для tegami
8 / 8 / 5
Регистрация: 21.05.2014
Сообщений: 430
10.12.2014, 17:06  [ТС]
Shuhart, как-то умудрился просмотреть, спасибо ставлю, но появилась другая проблема, почему-то считает не правильно до 0 на несколько знаков вперед (т.е. за нулем 1,3 он прибавляет еще +1+3), попробовал разобраться не получается, прибавляет рандомное количество цифр после 0
0
 Аватар для MarkB
6 / 6 / 2
Регистрация: 30.06.2014
Сообщений: 19
10.12.2014, 17:16
Отключили лишнее: "stdio.h", "conio.h". Ибо не используем. Ведь зачем нам нагружать простую программу лишними 2-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
#include <iostream>
#include <locale>
#include <time.h> // декларация библиотечных ф-ий для генератора псевдослуч.чисел
 
using namespace std;
 
int main(int argc, char* argv[])
{
    time_t srand(time(0)); // Задали зерно ( это для генератора псевдослуч. чисел )
    int n=10, pr=1, s=0, a[10];
 
    setlocale(LC_CTYPE, "Rus");
 
    for(int i=0; i<n; i++){
        a[i]= rand()%11; // Интервал выдаваемых значений 0..10
    }
 
    for(int i=0; i<n; ++i) // советую использовать префиксную запись счетчика"++i"( если возможно)
    cout <<a[i]<<" ";       // отладка будет проходить в 3 раза быстрее
    
    cout << endl << endl;   // перенос каретки на след.строку
 
    for(int i=1; i<n;i+=2){
        pr*=a[i];
        cout<<"Произведение="<<pr<<endl;
    }
 
    cout << endl;
 
    for(int i=2; i<n-1; ++i) {
    s+=a[i];
    cout<<"Сумма="<<s<<endl;
    }
 
    system("pause");
    return 0;
}
Добавлено через 8 минут
Да, и такой вопрос:
Суть этого фрагмента?
C++
1
2
3
4
5
for(int i=2; i>n-1; i++)
    {
    s=s+a[i];
    cout<<"Сумма="<<s<<endl;
    }
Тут тупо суммируется 2-ой, 3-ий, ... , предпоследний элемент.

По заданию требуется, вычислить сумму элементов, между первым 0, и последним.
То бишь: 1 2 3 0 5 5 4 0 1 5.
Сумма: 14.

Думаю, вы поняли.
1
 Аватар для tegami
8 / 8 / 5
Регистрация: 21.05.2014
Сообщений: 430
10.12.2014, 18:00  [ТС]
MarkB, вы грамотно написали, спасибо за поправки, задание я понял, но у меня не получается так сделать, делал по примеру который в инете где-то попадался и теперь затерялся\ сначала сумму не выводил, подсказали, теперь сумму не ту выводит, я слабо знаком с C++, по сути недавно начал изучать, попробую еще разобраться, и еще у меня почему-то сообщения сбиваются, и выводятся неправильно, это тут глюк такой ? или я не то что-то делаю ?

Добавлено через 23 минуты
поискал подобную, нашел сумму, но теперь программа просто вылетает
C++
1
2
3
4
s=0;
    for(int i=1; i<=10; ++i) {
    s+=a[i];
    return s;
часть кода суммы, вылетает без ошибок
0
 Аватар для MarkB
6 / 6 / 2
Регистрация: 30.06.2014
Сообщений: 19
10.12.2014, 18:32
tegami,

На заметку: индексация массивов/векторов в С/С++ начинается с 0. a[0],a[1],a[2]...,a[n-1].
Например.
C++
1
2
int array[10]; // объявили вектор
// новичок часто путает, что обращение к последнему элементу происходит по
array[10]
C++
1
// на самом же деле, обращение к последнему элементу таково: array[9]
Так.
C++
1
2
3
4
s=0;
    for(int i=1; i<=10; ++i) {
    s+=a[i];
    return s;
Здесь у вас цикл заканчивается на первой итерации.
1-ый проход. i<=10 ? да. Зашли внутрь цикла. К s добавили значение a[i]. Вернули значение s. Вышли из цикла. Вот он у вас и не считает до конца.

Вам нужно как-то проверять наличие первого 0 и последнего в цикле.

Добавлено через 12 минут
Советую, вдумчиво прочитать задание. И составить его на листочке.(Важно, сначала представить решение псевдо-человеческим языком).
Набросайте массивчик, поставьте нужные нули, и поехали. Так, быстро сообразите.

У меня вопросик: Вы до этого изучали другие яз.программирования?
1
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
10.12.2014, 18:41
Цитата Сообщение от MarkB Посмотреть сообщение
Здесь у вас цикл заканчивается на первой итерации.
если бы цикл
программа заканчивается
0
 Аватар для tegami
8 / 8 / 5
Регистрация: 21.05.2014
Сообщений: 430
10.12.2014, 18:52  [ТС]
MarkB,
ни как все не могу додуматься, попробовал вот так:
C++
1
2
3
4
5
6
7
s=0;
    for(int i=0; i<=9; ++i) {
    if  s=0
     s+=a[i]+1;
    return s;
    if a[i]=0
    else cout<<"Сумма="<<s<<endl;
поправил по вашей заметке, условие далее с сравнивается с 0 если да то прибавляем и отправляем, следующее сравнение если да то вывод, скорее всего не правильно, можете сказать аналоги если то иначе на с++ с паскаля, думаю через них нужно работать

паскаль
0
 Аватар для MarkB
6 / 6 / 2
Регистрация: 30.06.2014
Сообщений: 19
10.12.2014, 18:58
tegami,
У вас программа закрывается из за {return 0; }
Основная программа, или точка старта - не что иное, как функция int main() - // аналог BEGIN в паскале.
int в начале функции указывает на, то что функция должна принять целое число( код ошибки).
return 0; Возвращает нашей функции int main - значение 0. И программа завершает работу.
Вот у вас и не считает.
0
 Аватар для tegami
8 / 8 / 5
Регистрация: 21.05.2014
Сообщений: 430
10.12.2014, 19:12  [ТС]
MarkB, На счет int main() = begin я понял в первую очередь когда только начал изучать с++,
целое число не совсем понял, допустим это целое число, но ведь в конце стоит
C++
1
system ("pause");
получается что return 0; не должен возвращать значение 0 до нажатия любой клавиши, программа просто не доходит из за
C++
1
system ("pause");
до return 0; чет я вообще запутался
0
 Аватар для MarkB
6 / 6 / 2
Регистрация: 30.06.2014
Сообщений: 19
10.12.2014, 19:17
tegami,
C++
1
2
3
4
5
6
7
s=0;
    for(int i=0; i<=9; ++i) {
    if  s=0                  <-----------     условие записывается в виде: if(условие) 
     s+=a[i]+1;
    return s;               <---------- это лишнее
    if a[i]=0               <----------  if(условие)  <---------- сравнение на равенство в С/С++ записывается "=="
    else cout<<"Сумма="<<s<<endl;
Вот конструкция, просто следуйте ей:

1) if(условие) одна инструкция;

2) if(условие) одна инструкция; else одна инструкция;

3) if(условие){ инструкция; инструкция; инструкция; .... }else{ инструкция; инструкция; инструкция; .... }

Есть еще множество вариантов, но вам пригодятся лишь эти.

Так. Говорите, что писали на паскале. Ну тогда, составьте программу сначала на паскале, а потом перепишите её на Си.
Но, проще, чем составить алгоритм программы на листочке, и быть не может.

Добавлено через 5 минут
На счет int main() = begin я понял в первую очередь когда только начал изучать с++,
целое число не совсем понял, допустим это целое число, но ведь в конце стоит
Код C++
1
system ("pause");
, получается что return 0; не должен возвращать значение 0 до нажатия любой клавиши, программа просто не доходит из за
Код C++
1
system ("pause");
до return 0; чет я вообще запутался
Эм.. извините.. я, имел ввиду return s;
как только срабатывает,какой-либо return внутри функции, последующий код этой функции, тупо отбрасывается.
1
 Аватар для tegami
8 / 8 / 5
Регистрация: 21.05.2014
Сообщений: 430
10.12.2014, 19:36  [ТС]
MarkB, ладно, ничего, поработал с кодом по вашим поправкам, вот что получилось:
C++
1
2
3
4
5
6
s=0;
    for(int i=0; i<=90; ++i) {
    if  (s=0)
     s+=a[i]; 
    if (a[i]==0)
    cout<<"Сумма="<<s<<endl;
Теперь программа не вылетает но сумма = 0 все время, до 90 увеличил дабы второй 0 появился, при 10 его не было, в чем теперь может быть ошибка ? мне кажется что я сравнение со вторым 0 неграмотно написал, посмотрим что вы скажете...

Про паскаль, можно попробовать, но опять же давненько изучал, кое-что нужно вспомнить
На счет алгоритма, да, согласен, можно попробовать
0
 Аватар для MarkB
6 / 6 / 2
Регистрация: 30.06.2014
Сообщений: 19
10.12.2014, 19:45
Цитата Сообщение от tegami Посмотреть сообщение
s=0
У вас присваивание s:=0;

Сравнивание на равенство, записывается так: if(s==0)
1
Модератор
Эксперт по электронике
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,854
10.12.2014, 19:46
Цитата Сообщение от tegami Посмотреть сообщение
Теперь программа не вылетает но сумма = 0
потому что
Цитата Сообщение от tegami Посмотреть сообщение
if (s=0)
каждый раз присваиваешь 0
тебе же сказали
Цитата Сообщение от MarkB Посмотреть сообщение
сравнение на равенство в С/С++ записывается "=="
C++
1
if(s==0)
1
 Аватар для tegami
8 / 8 / 5
Регистрация: 21.05.2014
Сообщений: 430
10.12.2014, 19:58  [ТС]
ValeryS, где (s=0), ошибся, я понял про сравнение, теперь 8 (первое число в массиве) появляется, голова уже не соображает, пошел спать, завтра попробую доразобраться, всем кто помогал спасибо
0
 Аватар для MarkB
6 / 6 / 2
Регистрация: 30.06.2014
Сообщений: 19
10.12.2014, 20:12
tegami,
C++
1
2
3
4
5
6
s=0;
    for(int i=0; i<=90; ++i) {
    if  (s==0)
     s+=a[i]; 
    if (a[i]==0)
    cout<<"Сумма="<<s<<endl;
Пример массива: 1 2 4 22 55 77 0 22 11 1 2 3 4 5 0 5 5 5 5 5 5 0 0 0 0 и т.д

Как работает ваша программа:
91 раз подряд, она проверяет:
{
Сумма равна нулю ?
Да --> К s прибавляем текущий элемент массива.
Нет--> Проходим мимо.


Текущий элемент равен нулю?
Да --> Выводим сообщение вида: "Сумма= s"
Нет --> Проходим мимо.

}

На выходе: У вас будет n-oe количество сообщений "Сумма = x", где x - первый элемент != 0.

Пример массива: 1 2 4 22 55 77 0 22 11 1 2 3 4 5 0 5 5 5 5 5 5 0 0 0 0 и т.д
Т.е здесь всегда будет выдавать --- Сумма = 1.

Добавлено через 9 минут
Цитата Сообщение от tegami Посмотреть сообщение
s=0;
* * for(int i=0; i<=90; ++i) {
* * if* (s=0)
* * *s+=a[i];
* * if (a[i]==0)
* * cout<<"Сумма="<<s<<endl;
И кстати, говоря, здесь у вас грубейшая ошибка. Мы же создавали массив фиксированной длины ( вроде 10).
А в данном цикле мы выйдем за диапазон массива. Т.е обращаясь к a[10],a[50],a[90], мы наткнемся на какой-нибудь мусор, ОДНОМУ ЛИШЬ БОГУ ИЗВЕСТНО, ЧТО ТАМ ЛЕЖИТ.
1
Эксперт PHP
 Аватар для Kerry_Jr
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
10.12.2014, 20:42
Цитата Сообщение от MarkB Посмотреть сообщение
ОДНОМУ ЛИШЬ БОГУ ИЗВЕСТНО, ЧТО ТАМ ЛЕЖИТ

Не по теме:

Я И В ЭТОМ НЕ УВЕРЕН :rofl:

0
 Аватар для tegami
8 / 8 / 5
Регистрация: 21.05.2014
Сообщений: 430
11.12.2014, 14:51  [ТС]
MarkB, массив я тоже увеличил, Kerry_Jr, , всем еще раз спасибо, я попробовал еще раз поюзать поиск, нашел эту-же задачу и изучил ее, ссылка:Вычислить сумму элементов массива между первым и последним нулевыми элементам. Помогите с блок-схемой, вопрос решен
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.12.2014, 14:51
Помогаю со студенческими работами здесь

Что выполняет программа?
Что делает эта программа? #define K 50 int y, n, m; /* ввод y */ n=0; m=y; for(j=0; j&lt;K; j++) if (y&lt;m &amp;&amp;...

Что выполняет программа
Program A; Var N,S:integer; Begin readln(N); S:=0; While N&lt;&gt;0 do Begin S:=N mod 10+S; N:=N div 10; End; writeln(S); End. ...

Программа не выполняет команды
писал прогу что бы приколоться над другом но она не хочет выполнять команды ПОМОГИТЕ !где ошибка? клиент unit Unit1; interface ...

Программа не выполняет ряд строк
Запускаю программу, жму ентер, создаю файл мерности равной 5, ввожу в консоли &quot;5&quot;, потом задаю размер лицевой таблицы, StringGrid...

Что выполняет данная программа?
Задание было из книги &quot;Жмакин - Архитектура ЭВМ&quot; Нужно было записать команды в программу &quot;МОДЕЛЬ УЧЕБНОЙ ЭВМ&quot; и написать что...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru