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

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

10.12.2014, 16:28. Показов 1155. Ответов 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
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
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
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
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
Ответ Создать тему
Новые блоги и статьи
Чистый C и C++ в Qt Creator: ставим среду без VPN и настраиваем MinGW/CMake, без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru