Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
1 / 1 / 4
Регистрация: 01.10.2016
Сообщений: 247

Неполадка в инициализации переменной

12.06.2017, 16:04. Показов 816. Ответов 6

Студворк — интернет-сервис помощи студентам
Добрый день, дорогие эксперты.
По условию задачи я составил код, но после компиляции и ввода элементов массива выбивает ошибку(фото), которая вероятнее всего связана с проблемой инициализации переменной a(текст ошибки ниже), помогите разобраться с этой проблемой, ибо даже если подставить к этому указателю тип int , то выбивает " отличается по уровням косвенного обращения.."
Условие задачи:
В одномерном массиве, состоящем из n вещественных чисел, вычислить:
1) номер минимального элемента массива
2) сумму элементов массива с четными номерами
Сжать массив, удалив из него все отрицательные элементы. Освободившиеся элементы в конце массива заполнить нулями.

Ошибка:
warning C4700: использована неинициализированная локальная переменная "a"

Код самой программы:
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include "stdafx.h"
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <iostream>
using namespace std;
 
//-------------------------------------
void Init_mas(int m, int *x)//вводится элементы заданной строки
{
  cout<<"Введите массив:\n";
  for(int i=0; i<m; i++) {
   cout<<"строка[“<<i<<”] = "; cin>>x[i];
  }
}
//-------------------------------------
int Otr_el(int m, int *x)//определяет  наличие  отриц.
 
{
  int i=0;
  while (i<m && x[i] >= 0) i++;
  if(i<m) return 1; else return 0;
}
//------------------------------------
int Summa_el(int m, int *x)
{
 float  s=0; //сумма
 for(int i=0;i<m;i++)
 {      
   if(x[i] >=0)s+=x[i];
   cout<<"массив x[i]"<<x[i];
 }
 return s;
}
 
int main() {
 
    setlocale(0,"russian");
  int **a;// указатель  на  указатель  используется  для
 
 int n, m;
int i=0; // n, m размерность массива
 cout<<"Введите количество строк массива: "; cin>>n;
 cout<<"Введите количество столбцов массива: "; cin>>m;
 *a=new int[n]; //создание динамического массива указателей на строки
 for(i=0;i<n;i++){
  a[i]= new int[m];
  Init_mas(m,a[i]);
 }
 int k=0; //количество строк имеющих отр. элемент
 int p=-1,s=-1; //p –номер  строки, s сумма  элементов
 
 for(i=0;i<n;i++){
   if( Otr_el(m,a[i]) ) k++;
   int q= Summa_el(m,a[i]);
   cout<<"\n";
   if(s < q){p=i; s=q;}
 }
 cout<<"1) Количество строк содерж. Хотя бы отр. эл массива :"<<k<<endl;
  if(p>=0) cout<<"2) строка  с  наиб. суммой  элементов :"<<p<<endl;
 else cout<<"\nСтрок с положительными элем. нет.\n";
 for(i=0;i<n;i++) delete(a[i]); //уничтожение массива
delete (*a);
 getch();
 return 0;
}
Миниатюры
Неполадка в инициализации переменной  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.06.2017, 16:04
Ответы с готовыми решениями:

Ошибка инициализации переменной
Подскажите, пожалуйста, как исправить ошибку инициализации vp в данном случае? По идее, в итоге должно получиться три разных значения vp. ...

Непонятная ошибка инициализации переменной
Можете объяснить плес, почему в этам коде ошипка? int x(int()); Пишет error LNK2019: ссылка на неразрешенный внешний символ...

Ошибка инициализации переменной заданного типа
Ошибка в 45ой и 59ой строках. Подскажите, как все-же правильно инициализировать переменную t типа &quot;rabotnik&quot;? /* Исходный...

6
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
12.06.2017, 16:19
Неправильно уничтожаешь массив. Вместо
for(i=0;i<n;i++) delete(a[i]); //уничтожение массива
delete (*a);
нужно просто
C++
1
delete[] a;
Добавлено через 2 минуты
Цитата Сообщение от BenJost Посмотреть сообщение
for(i=0;i<n;i++){
* a[i]= new int[m];
* Init_mas(m,a[i]);
*}
вот тут тоже ничего выделять не нужно, иначе будет двумерный массив, а не одномерный. Нужно просто
C++
1
Init_mas(m,a);
0
19495 / 10100 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
12.06.2017, 16:21
Цитата Сообщение от BenJost Посмотреть сообщение
C++
1
*a=new int[n]; //создание динамического массива указателей на строки
C++
1
a = new int*[n];
Цитата Сообщение от BenJost Посмотреть сообщение
C++
1
2
 for(i=0;i<n;i++) delete(a[i]); //уничтожение массива
delete (*a);
C++
1
2
3
4
 
for(i = 0; i < n; i++) 
    delete[] a[i];
delete[] a;
Добавлено через 1 минуту
Цитата Сообщение от TRam_ Посмотреть сообщение
иначе будет двумерный массив, а не одномерный.
Так ему вроде и нужен двумерный.
Просто он методом тыка ошибки исправляет
1
1 / 1 / 4
Регистрация: 01.10.2016
Сообщений: 247
12.06.2017, 16:46  [ТС]
спасибо, помогло
вот только сумму не выводит, положительных элементов, не пойму почему (скрин)
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <iostream>
using namespace std;
 
//-------------------------------------
void Init_mas(int m, int *x)//вводится элементы заданной строки
{
  cout<<"Введите массив:\n";
  for(int i=0; i<m; i++) {
   cout<<"строка[“<<i<<”] = "; cin>>x[i];
  }
}
//-------------------------------------
int Otr_el(int m, int *x)//определяет  наличие  отриц.
 
{
  int i=0;
  while (i<m && x[i] >= 0) i++;
  if(i<m) return 1; else return 0;
}
//------------------------------------
int Summa_el(int m, int *x)
{
 float  s=0; //сумма
 for(int i=0;i<m;i++)
 {      
   if(x[i] >=0)s+=x[i];
   cout<<"массив x[i]"<<x[i];
 }
 return s;
}
 
int main() {
 
    setlocale(0,"russian");
  int **a;// указатель  на  указатель  используется  для
 
 int n, m;
int i=0; // n, m размерность массива
 cout<<"Введите количество строк массива: "; cin>>n;
 cout<<"Введите количество столбцов массива: "; cin>>m;
 a = new int*[n]; //создание динамического массива указателей на строки
 for(i=0;i<n;i++){
  a[i]= new int[m];
  Init_mas(m,a[i]);
 }
 int k=0; //количество строк имеющих отр. элемент
 int p=-1,s=-1; //p –номер  строки, s сумма  элементов
 
 for(i=0;i<n;i++){
   if( Otr_el(m,a[i]) ) k++;
   int q= Summa_el(m,a[i]);
   cout<<"\n";
   if(s < q){p=i; s=q;}
 }
 cout<<"1) Количество строк содерж. Хотя бы отр. эл массива :"<<k<<endl;
  if(p>=0) cout<<"2) строка  с  наиб. суммой  элементов :"<<p<<endl;
 else cout<<"\nСтрок с положительными элем. нет.\n";
 for(i = 0; i < n; i++) 
    delete[] a[i];
delete[] a;
 getch();
 return 0;
}
Миниатюры
Неполадка в инициализации переменной  
0
зомбяк
 Аватар для TRam_
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
12.06.2017, 16:46
___
0
93 / 69 / 22
Регистрация: 17.10.2011
Сообщений: 235
12.06.2017, 16:53
del
0
19495 / 10100 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
12.06.2017, 17:03
Цитата Сообщение от BenJost Посмотреть сообщение
вот только сумму не выводит, положительных элементов
Ну наверное потому что ты ее нигде не выводишь Ты выводишь индекс строки с этой суммой.
Выведи потом еще значение s, туда же ты записал наибольшую сумму.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.06.2017, 17:03
Помогаю со студенческими работами здесь

Ошибка при инициализации статистической переменной.
Ребят есть задание: В класс строки (пользовательский класс ) добавить статическую защищенную (protected) переменную &quot;счетчик...

Указание типа переменной и ссылки при объявлении\инициализации
Здравствуйте! Возник такой вопрос-зачем нужно указывать тип ссылки при ее инициализации? При объявлении обычной переменной, компилятору...

Уравнение больше реагирует на значение при инициализации переменной
Доброго времени дня! Возникла проблема не пойму в чем дело.. Вот кусок программы. double x,y; ............... else if (i==1){ ...

Ошибка инициализации переменной при чтении структурированного файла
Почему выдаёт ошибку: &quot;Использована неинициализированная локальная переменная &quot;rr&quot;.&quot; При таком же использовании такого же...

Выбор места инициализации переменной для лучшей производительности
Скажите, постоянно приходится инициализировать переменную внутри метода класса пример int curent_h{}; От 50 до нескольких тысяч...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru