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

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

12.06.2017, 16:04. Показов 831. Ответов 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
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
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
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,818
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
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
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. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru