Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.12.2022, 12:41   #1
atoxill
Новичок
Джуниор
 
Регистрация: 24.12.2022
Сообщений: 4
По умолчанию С++, Найдите сумму элементов массива между двумя первыми нулями. Если двух нулей нет в массиве, выведите ноль. Массив вводиться через клавиатуру.

Найдите сумму элементов массива между двумя первыми нулями. Если двух нулей нет в массиве, выведите ноль. Нужно отредактировать код так, чтобы массив вводился через клавиатуру.


#include <iostream>
using namespace std;

int main() {
int m[]={1,0, 2, 3, 5, 0, 6 };
int i=0, n=sizeof(m)/sizeof(int)-1;
int s=0;

while(m[i] && i!=n)i++;
if(i==n){
cout<<0;
return 0;
}
while(m[++i] && i!=n)s+=m[i];
if(m[n] && i==n){
cout<<0;
return 0;
}
cout<<s;
return 0;
}
atoxill вне форума Ответить с цитированием
Старый 25.12.2022, 19:55   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,546
По умолчанию

Опять этот уже надоевший хитро-ω-ый приём: берёт первый попавшийся исходник, который никаким боком к задаче - и "я же сам пытался!" Надоело!

Последний раз редактировалось digitalis; 26.12.2022 в 11:20.
digitalis вне форума Ответить с цитированием
Старый 25.12.2022, 20:48   #3
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Ну, хоть понятно теперь, что надо на C++.
А прога-то правильно работает.
Осталось вместо
Код:
int m[]={1,0, 2, 3, 5, 0, 6 };
сделать ввод с клавы. Это гораздо проще, чем остальной код.
type_Oleg вне форума Ответить с цитированием
Старый 25.12.2022, 23:28   #4
atoxill
Новичок
Джуниор
 
Регистрация: 24.12.2022
Сообщений: 4
По умолчанию

type_Oleg, в этом и проблема что код не работает, когда я пробую сделать ввод с клавы. Как правильно оформить нет точного понимания
atoxill вне форума Ответить с цитированием
Старый 26.12.2022, 00:27   #5
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Цитата:
Сообщение от atoxill Посмотреть сообщение
Как правильно оформить нет точного понимания
Кстати, и у меня тоже. Я не спец в C++.
Как-то так, может быть
убрать это
Код:
int m[]={1,0, 2, 3, 5, 0, 6 };
int i=0, n=sizeof(m)/sizeof(int)-1;
вставить это
Код:
 int n,i;
 cin >> n;  // вводим размерность массива
 int m[n];
 for (int i = 0; i < n; i++) cin >> m[i];  // вводим сам массив 
 i =0;
Изображения
Тип файла: png cpp.PNG (19.1 Кб, 33 просмотров)
type_Oleg вне форума Ответить с цитированием
Старый 26.12.2022, 21:01   #6
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,546
По умолчанию

Правильно работает?
Ну хучь убей - не вижу, где там if (m[i]==0)
Вижу только странное сравнение индекса элемента массива с его содержимым. ??

Последний раз редактировалось digitalis; 26.12.2022 в 21:03.
digitalis вне форума Ответить с цитированием
Старый 26.12.2022, 21:15   #7
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
не вижу, где там if (m[i]==0)
В Си и Си++ m[i]!=0 то же самое, что просто m[i]. Там нет логических типов, как в Паскале.
Там while(m[i] && i!=n) - то есть пока (m[i] не 0) и (i не равно n) ..

Я просто скопировал, вставил в Geany, скомпилировал, - работает. Проверил с неск. наборами данных. Конечно, 100% отсутствие подводных камней - не гарантирую. Признаю, у меня опыт в Си и Си++ небольшой.
type_Oleg вне форума Ответить с цитированием
Старый 30.12.2022, 02:56   #8
Пётр Седов
Форумчанин
 
Регистрация: 26.10.2022
Сообщений: 119
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Код:
 int n,i;
 cin >> n;  // вводим размерность массива
 int m[n];
Строго говоря, в стандартном C++ так нельзя, можно только в C (начиная с C99), там это называется «VLA» (variable-length array). В C++ по-хорошему надо так:
Код:
int* m = new int[n];
...
// в конце:
delete[] m;
Или использовать std::vector.
Цитата:
Сообщение от type_Oleg Посмотреть сообщение
В Си и Си++ m[i]!=0 то же самое, что просто m[i]. Там нет логических типов, как в Паскале.
В C++ есть встроенный тип bool уже давным давно. Да и в C завезли заголовочный файл stdbool.h, для того же самого. При этом неявные преобразования чисел и указателей к bool остались, да.
Пётр Седов вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найдите сумму элементов массива между двумя первыми нулями. Если двух нулей нет в массиве, выведите ноль. atoxill Помощь студентам 12 28.12.2022 07:57
дан двумерный массив найти сумму элементов массива между первым и последним положительным числом qqq`` Общие вопросы Delphi 7 23.10.2017 16:17
Вывести сумму чисел, расположенных между последними двумя нулями. Язык Си Yakoff Помощь студентам 6 12.11.2012 15:59
Вставка нулей в массив. Сумма элементов между нулями. Язык С++ annka93 Помощь студентам 1 30.10.2011 19:50
Дан одномерный массив. Найдите сумму максимального и последнего элементов массива. Delphi. buyaka cha Помощь студентам 4 15.11.2010 13:46