Форум программистов, компьютерный форум CyberForum.ru

динамический массив - C++

Восстановить пароль Регистрация
 
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
09.02.2013, 23:03     динамический массив #1
Доброго всем времени суток.Помогите чайнику разобраться.Разбираюсь с массивами и столкнулся с не понятным,вот мой код:

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
67
68
69
70
71
72
73
74
75
76
#include <iostream>
#include <iomanip>
#include <cmath>
 
using namespace std;
 
int main()
 
 {
  const int size = 30;//объявляем массив на 30 элементов
  double  A[size] = {0.25,0.28,0.3,0.315,0.335,0.355,0.38,0.4,0.45,0.5,0.53,0.56,0.6,0.63,
                 0.67,0.71,0.75,0.8,0.85,0.9,0.95,1.0,1.06,1.12,1.18,1.25,1.32,1.40,1.45,1.5};
  double  const pi = 3.14159;
  double temp;
  double S =1,G = 0.4;//это можно менять произвольно
  int a,b,c,i,j,k,t;
  float flag =1;
 
   b = 0; c = 0;t = 0;
 
   for (;;)
 
    {
  double  *B = new double  [size];//динамический массив
 
       for ( i = 0; i < size; i++)//верхний интервал диаметров задаются с клавиатуры
         for ( i = 0; i < size; i++)// нижний интервал диаметров задаются с клавиатуры
 
            {
         if(A[i] >= 0.75 && A[i]<= 0.9)// если это выбранный интервал произвольный
 
            B[b++] =((A[i]/2)*(A[i]/2))*pi;//заполняем массив
 
            }
 
       for ( i = 0; i < b; i ++)                 //перебираем все значения
         for ( j = i; j < b; j ++)            //из полученного интервала
            for ( k = i; k < b; k ++)         //циклами i,j,k
              for ( a = i;  a <= b*3;a ++ )   //этим циклом просматриваем все варианты
 
 
     if ((i+j+k==a)&&((i==0)||((i==j)&&(j==k)&&(i==k))))
 
       {
 double  *AB = new double  [size];//временный массив будет хранить разницу
     AB[a] = S - (B[j] + B[i] + B[k]); //заполняем
 
          temp = AB[a];
         if ((AB[a] >= -G)&&(AB[a] <=G))
            {
          AB[a]=AB[t];
          AB[t]=temp; //оставляем в выбранном интервале
 
              cout << setw(15)<<setprecision(3) << 2*(sqrt ((B[i])/pi))
                   << setw(15) << 2*(sqrt ((B[j])/pi))
                   << setw(15) << 2*(sqrt ((B[k])/pi))
                   << setw(15)<<setprecision(4)
                   << AB[t]<< endl;
 
 delete [] AB;//удаляем временный массив
 
            }
 
        }
cout <<"Prodoljit?"<<endl;
cin >> flag;
if (flag ==1)
 ;//пустой оператор
else
break;
 
delete [] B;
    }
return 0;
 
 }
А проблема вот в чем.Работает он правильно один раз.Если выбирается выход все нормально.Продолжить значения накапливаются и когда достигает размера массива программа виснет и выдается ошибка. Без цикла работает,а в цикле нет.В чем проблема не пойму.Кто сможет пожалуйста растолкуйте чайнику.
Заранее всем спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2013, 23:03     динамический массив
Посмотрите здесь:

C++ статический массив ----> динамический массив
Динамический массив C++
динамический массив C++
C++ Динамический массив
Динамический массив C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
09.02.2013, 23:12     динамический массив #2
может стоит вынести инициализацию временного массива из цикла, а еще
C++
1
for ( a = i;  a <= b*3;a ++ )
не будет ли выхода за пределы массива?
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
09.02.2013, 23:37  [ТС]     динамический массив #3
Пробовал толку нет.Выхода за пределы нет по крайней мере первые три раза.

Добавлено через 8 минут
Попробовал зацикливается.

Добавлено через 9 минут
Почему то мне кажется,что путаются переменные в массивах,а как их разделить не представляю.Пробовал по разному,выдается ошибка.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
09.02.2013, 23:45     динамический массив #4
а в чем задание собственно, я продолжил раз 5 и все время увеличивалось , при чем на 1 взгляд выводит одно и тоже

Добавлено через 5 минут
C++
1
2
3
4
5
temp = AB[a];
         if ((AB[a] >= -G)&&(AB[a] <=G))
            {
          AB[a]=AB[t];
          AB[t]=temp; //оставляем в выбранном интервале
вот эта конструкция не понятна, t всегда 0, зачем вам вообще массив то этот если вы его как переменную используете в одно и тоже место смотрите берете из него число кидаете его на 1 место и все
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
09.02.2013, 23:54  [ТС]     динамический массив #5
Нужно с заданной точностью
C++
1
 G = 0.4;
для упрощения кода я ей просто присвоил произвольное значение показывать все комбинации.При изменении G должна меняться и таблица,но не накапливаться как у меня сейчас.

Добавлено через 5 минут
В этой конструкции должно выполняться вот это условие
C++
1
((AB[a] >= -G)&&(AB[a] <=G))
и но выполняется.Без этой конструкции много повторяющихся значений.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
09.02.2013, 23:56     динамический массив #6
так и не накапливается одно и тоже выводит, только вот b у тебя как копил значения так и копит, вот и ошибка

Добавлено через 1 минуту
проблема не в конструкции условия,а в целесообразности массива вообще , так как он у тебя живет только внутри условия, тоесть 1 раз
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
10.02.2013, 00:05  [ТС]     динамический массив #7
По моему разумению он после приема данных и выдачи больше не нужен.А удаляю b работает только один раз,продолжать не возможно.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
10.02.2013, 00:08     динамический массив #8
так зачем принимать данные только в одно поле 1 раз , и использовать массив расчитаный аж на 30 элементов, что значит b работает, b у вас накапливает все время свое значение отсюдова некоректная работа
C++
1
2
3
4
for ( i = 0; i < b; i ++)                 //перебираем все значения
         for ( j = i; j < b; j ++)            //из полученного интервала
            for ( k = i; k < b; k ++)         //циклами i,j,k
              for ( a = i;  a <= b*3;a ++ )   //э
циклов, на 1 раз у вас 4 элемента, на 2 уже 8 и так далее

Добавлено через 31 секунду
обнулите b также как удаляете массив B
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
10.02.2013, 00:09  [ТС]     динамический массив #9
Да вы правы.Эта конструкция бесполезна,а проблема осталась.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
10.02.2013, 00:12     динамический массив #10
повторю надо обнулить b, иначе потом как вы заметели при достижении значения 30, а точнее там будет b = 32 , у вас идет обращение к мусорным облостям памяти
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
10.02.2013, 00:13  [ТС]     динамический массив #11
Я имел ввиду вот эту

C++
1
2
3
4
5
 // temp = AB[a];
         if ((AB[a] >= -G)&&(AB[a] <=G))
            {
         // AB[a]=AB[t];
         // AB[t]=temp;
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
10.02.2013, 00:15     динамический массив #12
тогда поясните еще раз в чем у вас проблема, у меня ваша программа не виснит даже после 10 раз продолжения
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
10.02.2013, 00:23  [ТС]     динамический массив #13
Странно.У меня после первого запуска 3 значения как и должно быть ,после второго 13,после 3 30 и виснет.Выдаются ошибка и завершить можно только аварийно.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
10.02.2013, 00:30     динамический массив #14
повторюсь , там где вы удаляете массив B добавте обнуление переменной b,
C++
1
 b = 0;
иначе каждый новый цикл у вас она увеличивается на n попавших в условие
C++
1
   if(A[i] >= 0.75 && A[i]<= 0.9)// если это выбранный интервал произвольный
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2013, 00:40     динамический массив
Еще ссылки по теме:

C++ Динамический массив
C++ Динамический массив
C++ Переделать динамический массив на статический массив

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

Или воспользуйтесь поиском по форуму:
Genn55
341 / 188 / 37
Регистрация: 26.12.2012
Сообщений: 658
10.02.2013, 00:40  [ТС]     динамический массив #15
Ну чайник он и есть чайник.Дошло.А я почему то обнулял счетчики.массивы, а на переменную не дошло.Большое спасибо.Все заработало.Надолго запомню.
Yandex
Объявления
10.02.2013, 00:40     динамический массив
Ответ Создать тему
Опции темы

Текущее время: 17:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru