1 / 1 / 1
Регистрация: 30.05.2017
Сообщений: 63

Функция возвращает неправильное значение

11.11.2017, 21:21. Показов 1433. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно выполнить 3 задачи с веденным с клавиатуры массивом. Первая и третья работают нормально, а вот вторая возвращает всегда 1. Нужно найти сумму между первым и последним нулевыми элементами, если их меньше двух, или они идут друг за другом - вывести сообщение. Оставлю фрагменты, связанные с этой функцией. Если понадобится - скину полностью код.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//...
int sum(int mas[], int k, int &k2, int &s)
{ int i, p1, p2, k1=0;
  for(i=1;i<=k;i++) 
   if(mas[i]==0) p1=i;
  for(i=k;i>0;i--) 
   if(mas[i]==0) p2=i;
  for(i=p1+1;i<p2;i++)
   { k2++;
     s+=mas[i];
    } 
return s;  
}
//...
 
int main() 
//...
if(k2==0) cout<<endl<<"Б)Было введено меньше двух нулей/между ними ничего нету!";
 cout<<endl<<"Б)Сумма элементов между первым и последним нулями равна:  "<<sum(m,k,k2,s);
//...
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.11.2017, 21:21
Ответы с готовыми решениями:

Почему функция возвращает неправильное значение
Пробовал дебажил функцию и каждый раз проверка проходит условие, хотя оно выполняется... в итоге возвращается false //проверка...

Функция из dll библиотеки возвращает неправильное значение
Добрый день. Возникла проблема при использовании dll библиотеки, при котором функция из не взятая не выводит числа после запятой. На...

this возвращает неправильное значение
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; class oops{ public: oops():key(10){} int key; oops&amp; oper1(int...

7
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
11.11.2017, 21:28
Цитата Сообщение от murphy1337 Посмотреть сообщение
for(i=1;i<=k;i++)
Как минимум должно быть
C++
1
for (i=0; i<k; i++)
0
1 / 1 / 1
Регистрация: 30.05.2017
Сообщений: 63
11.11.2017, 21:35  [ТС]
А есть разница? Вроде же одинаковое количество раз выполняется. Или это к тому, что массив с 0 элемента начинается?
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
11.11.2017, 21:43
Цитата Сообщение от murphy1337 Посмотреть сообщение
Или это к тому, что массив с 0 элемента начинается?
Разумеется. И последний элемент имеет индекс k-1 (если k это число элементов).
0
1 / 1 / 1
Регистрация: 30.05.2017
Сообщений: 63
11.11.2017, 21:45  [ТС]
Я понял эту ошибку, но все равно возвращает неправильно
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
11.11.2017, 21:47
Кстати, в p1 будет индекс последнего нуля, а в p2 - первого. Подозреваю, что по задумке автора должно быть наоборот.
0
1 / 1 / 1
Регистрация: 30.05.2017
Сообщений: 63
11.11.2017, 22:13  [ТС]
Переработал алгоритм, теперь все правильно считает. Но не работает ветка с флагом. Даже если не было нулей - выведет сумма равна 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
26
//...
int sum(int mas[], int k, int flag)
{ int i, p1=-1, p2=-1, k1=0, k2=0, s=0;
  for(i=0;i<k;i++)
  { if(mas[i]==0)
     { if(k1==0)
        { p1=i;
          k1++;
        }
       else p2=i;   
     }
  }
  if((p1==-1) || (p2==-1) || (p2-p1==1)) flag=0;
  if(flag==1)
   for(i=p1+1;i<p2;i++)
    s+=mas[i];
return s;  
}
//...
 
//...
int main()
//...
if(flag==0) cout<<endl<<"B)Bilo vvedeno menshe dvuh nulei/mejdu nimi nichego netu!";
cout<<endl<<"B)Suma elementov mejdu pervim i poslednim nulyami ravno: "<<sum(m,k,flag);
//...
Как правильно вернуть значение флага перед этой проверкой?
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
11.11.2017, 22:38
Лучший ответ Сообщение было отмечено murphy1337 как решение

Решение

flag надо по ссылке передавать
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.11.2017, 22:38
Помогаю со студенческими работами здесь

Функция get() не возвращает значение
Есть класс, в котором определен объект типа SDL_Surface*. Пытаюсь передать его в сторонний класс с помощью метода getScreen(), но он по...

Функция не возвращает значение
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;iomanip&gt; #include &quot;stdafx.h&quot; using namespace std; const int max_size = 100; ...

Функция не возвращает значение
Добрый день, уважаемые форумчане. Имеется вот такой кусок программы, и он работает, но не так, как надо... Когда я в 41 строке пытаюсь...

Функция не возвращает значение
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int ca(int a) { int i,r; r = 0; ...

Функция не возвращает значение
Функция ничего не возвращает: int Return(int s) { return s; } Передаю в аргумент S целочисленную переменную, но результата в...


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

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

Новые блоги и статьи
Трассировка корутин Kotlin с OpenTelemetry
mobDevWorks 14.07.2025
Асинхронное программирование меняет правила игры, особенно когда речь заходит о трассировке операций. В Kotlin с его корутинами эта проблема приобретает особый оттенок, который я хотел бы детально. . .
Облачные приложения на Rust: руководство по архитектуре микросервисов
golander 13.07.2025
Когда я впервые взялся за проектирование облачной платформы для одного из наших клиентов, выбор стоял между привычными Go и Java. Но после нескольких месяцев разработки микросервисной системы,. . .
Как Node.js выполняет асинхронные операции
Reangularity 13.07.2025
Каждый раз, когда я рассказываю про Node. js, возникает один и тот же вопрос: "Как эта штука может быть быстрой, если JavaScript — однопоточный язык?" И это действительно кажется парадоксом. Ведь в. . .
Как писать чистый, тестируемый и качественный код на Python
py-thonny 12.07.2025
Помню свой первый проект на Python. Работал тогда быстро, грязно, лишь бы работало. Код был похож на запутанный клубок - переменные по одной букве, функции на 200 строк, комментарии отсутствовали как. . .
Blazor и контроллер сервопривода IoT Meadow Maple
Wired 11.07.2025
Я решил разобраться, как можно соединить современные веб-технологии с миром "железа". Интересная комбинация получилась из Blazor в качестве веб-интерфейса и микроконтроллера Meadow с его веб-сервером. . .
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
Изучаем новый шаблон ИИ-чата .NET AI Chat Web App
stackOverflow 10.07.2025
В . NET появилось интересное обновление - новый шаблон ИИ-чата под названием . NET AI Chat Web App. Когда я впервые наткнулся на анонс этого шаблона, то сразу понял, что Microsoft наконец-то. . .
Результаты исследования от команды ARP (июль 2025 г.)
Programma_Boinc 10.07.2025
Результаты исследования от команды ARP (июль 2025 г. ) Африканский проект по дождям (ARP) World Community Grid снова запущен! Мы рады поделиться обновленной информацией о нашем прогрессе с осени. . .
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
Code First и Database First в Entity Framework
UnmanagedCoder 09.07.2025
Entity Framework дает нам свободу выбора, предлагая как Code First, так и Database First подходы. Но эта свобода порождает вечный вопрос — какой подход выбрать? Entity Framework — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru