
Есть массив, не получается от каждого элемента отнять 20? Сделать на с++ #include "pch.h"
#include using namespace::std; int main() { int i, arr[] = {1,2,3,4,5,6,7,8,9}; for (i = 1; i < 10; i++) { arr[i] = arr[i] - 20; } cout << arr[i] << " "; }

Ответы на вопрос

Ошибка 1
using namespace::std;
Верно использовать пространство имён таким образом:
using namespace std;
Ошибка 2
Вы объявляете итератор ещё перед циклом, причём вместе с массивом. Надо понимать, что итератор - это счётчик, int. А массив - это совокупность таких частичек int. Не нужно всё под одну крышу загонять. Объявляйте итераторы (если они Вам не нужны, например, для результирующих счётов или прочего - по ситуации) в самом цикле, не мучайте глаза программистов.
Правильно объявлять так:
int arr[] = {1,2,3,4,5,6,7,8,9};
for(int i = ..)
Ошибка 3
Вы начинаете цикл с 1, хотя Вам нужно пройтись по всему массиву, начиная с самого первого элемента. Поскольку всё строится на десятичной системе счисления (от 0 до 9), то первый элемент будет иметь номер 0. Следовательно, цикл следовало бы начать с нуля.
Правильно объявить цикл нужно так:
for(int i = 0; ..)
Ошибка 4
Поскольку вы не указываете размер массива, а потом считаете 10 элементов (хотя это уже неправильно, цикл возьмёт один лишний, уже выходящий из заданного Вами массива кусочек и отнимет от него 20)
Правильно было бы объявлять условие цикла так:
for(int i = 0; i < (sizeof(arr)/sizeof(int)); i++){/*...*/}
То есть мы берём размер массива в байтах, размер типа int в байтах (по сути это константа - 4 байта, но на разных версиях оси она может соответствовать разным значениям) и делим размер массива на размер типа, массив которого мы создали (в нашем случае - int)
А лучше всего вынести выражение sizeof(arr)/sizeof(int) в отдельную переменную:
int arraySize = sizeof(arr)/sizeof(int);
for(int i = 0; i < arraySize; i++)
Разница в том, что при каждой итерации цикл считает заново размер массива - а это лишние операции.
Ошибка 5
Так как Вы хотите вывести каждое результатирующее число через пробел, Вам нужно выводить его через каждую итерацию цикла, а не после него. Ваша ошибка будет заключаться в том (если не учитывать предыдущие), что цикл инкрементирует переменную i до 10 и выведет на консоль arr[i], то есть arr[10] элемент, которого как раз-таки нет в массиве (объяснил в 3 ошибке)
Правильно было бы выводить так:
for(int i = 0; i < arraySize; i++){
arr[i] = arr[i] - 20;
cout << arr[i] << " ";
}
Замечание 6
Функция типа int main() должна всегда возвращать что-то. Это стандарт языка.
То есть, правильно было бы в конце добавить:
return 0;
Итоговый код и проверка представлены на в приложении:





Ваш код имеет несколько ошибок. Вот исправленная версия вашей программы на C++:
cpp#include <iostream>
using namespace std;
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
for (int i = 0; i < 9; i++) { // Индексы массива идут от 0 до 8
arr[i] = arr[i] - 20;
cout << arr[i] << " ";
}
return 0;
}
Важные изменения:
- Индексы массива начинаются с 0, поэтому цикл
for
начинается сi = 0
и идет доi < 9
. - Знак
<
заменен на обычный символ<
для сравнения в цикле. - Вывод элементов массива перемещен внутрь цикла, чтобы вывести все значения после вычитания 20.
Теперь этот код должен правильно вычитать 20 из каждого элемента массива и выводить результаты.


Похожие вопросы
Топ вопросов за вчера в категории Информатика







Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili