2 / 2 / 0
Регистрация: 28.05.2015
Сообщений: 29
1

Динамические (или не динамические.) переменные!

30.05.2015, 13:59. Показов 2055. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
УважаемыЕ! Есть вопрос. Вот код программы (ТЗ метод северо-западного угла) - под спойлером. А вот ее маленький кусок,задача которого в том, чтобы при выполнении условия перезаписать переменную в файл на единицу больше, после чего опять считать ее и работать дальше на ее основе. НО. при увеличении ее на единицу, программа закрывается. Помогите пожалуйста понять, где ошибка!

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 if (k<z){
                  cout << "Задача является открытой, введен фиктивный склад с запасом: " << z-k << endl;
                  d = z-k;
                  ofstream fout("D:\\input.txt", ios_base::trunc);
                  fout << n+1 << " " << m;
                  fout.close();
                  ifstream in("D:\\input.txt");
                  in>>n>>m;
                  ofstream fou("D:\\sklad.txt", ios_base::app);
                  fou << " " << d ;
                  fou.close();
                  ifstream f("D:\\sklad.txt");
                  for (i = 0;i<n;i++)
                  f >> a[i];
Кликните здесь для просмотра всего текста

Заголовочный:
C++ (Qt)
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
#ifndef ELEMENT_H
#define ELEMENT_H
 
 
class element
{
public:
    int dostavka;
    int summa;
    element()
    {
    dostavka = 0;
    summa = 0;
    }
    int minimum( int a,  int b)
    {
        if(a>b){return b;}
        if(a==b){return a;}
        else return a;
 
    }
    void kolichestvo(int a,int b)
    {
 
    dostavka = element::minimum(a,b);
 
 
    }
};
 
#endif // ELEMENT_H
Мэйн:
C++ (Qt)
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include <iostream>
#include <locale.h>
#include "element.h"
#include <fstream>
#include <iomanip>
using namespace std;
 
int main(){
    int m,n;
 
    ifstream in("D:\\input.txt");
    in>>n>>m;
    setlocale(0,"");
    int i=0;
    int j=0;
    int k=0;
    int z=0;
    int d=0;
 
 
    cout<<"Количество складов и магазинов: input.txt" <<  endl;
    int *a =  new int[n];
    int *b = new int [m];
 
    element **C = new element* [n];
 
    for (int i = 0;i<n;i++)
    {
    C[i] = new element[m];
    }
 
    cout<<"Количество товара на складе: sklad.txt"<< endl;
 
         ifstream f("D:\\sklad.txt");
         for (i = 0;i<n;i++)
         f >> a[i];
         k=0;
            for( i=0; i<n; i++)
                k+=a[i];
 
        cout<<"Потребности: potreb.txt"<< endl;
 
        ifstream t("D:\\potreb.txt");
        for (j=0;j<m;j++)
        t >> b[j];
        z=0;
           for( j=0; j<n; j++)
               z+=b[j];
 
              if (k=z) {
                  cout << "Задача является закрытой" << endl;
              }
              if (k>z){
                  cout << "Задача является открытой, введен фиктивный потребитель с потребностью: " << k-z << endl;
          }
              if (k<z){
                  cout << "Задача является открытой, введен фиктивный склад с запасом: " << z-k << endl;
                  d = z-k;
                  ofstream fout("D:\\input.txt", ios_base::trunc);
                  fout << n+1 << " " << m;
                  fout.close();
                  ifstream in("D:\\input.txt");
                  in>>n>>m;
                  ofstream fou("D:\\sklad.txt", ios_base::app);
                  fou << " " << d ;
                  fou.close();
                  ifstream f("D:\\sklad.txt");
                  for (i = 0;i<n;i++)
                  f >> a[i];
 
          }
 
 
    cout<<"Cтоимость доставки товара: price.txt"<< endl;
 
 
        ifstream e("C:\\price.txt");
        for(int i = 0; i < n; i++)
        for(int j = 0; j < m; j++)
        e >> C[i][j].summa;
 
 
 
    for (i=0; i<n; i++){
        for (j=0;j<m;j++){
 
        C[i][j].kolichestvo(a[i],b[j]);
        a[i]-=C[i][j].dostavka;
        b[j]-=C[i][j].dostavka;
 
        }
}
 
    for (i = 0;i<n;i++){
 
        for (j=0;j<m;j++){
            cout<<C[i][j].summa<<"("<<C[i][j].dostavka<<")";
        }
        cout<< endl;
    }
     int stoimost = 0;
 
            for (i = 0; i < n; i++) {
            for (j = 0; j < m; j++)
                {
 
                    stoimost += (C[i][j].summa * C[i][j].dostavka);
 
 
                }
 
 
            }
 
             cout<<"Стоимость доставки товара равна  "<<stoimost;
 
 
 
 
 
 
    }


Добавлено через 39 минут
P.S. >> Вылет происходит с ошибкой SIGSEGV (Segmentation fault) при переходе программы к этому циклу (где, собственно, и используется новая измененная (+1) n:
C++ (Qt)
1
2
3
4
5
6
 for (i=0; i<n; i++){
        for (j=0;j<m;j++){
 
        C[i][j].kolichestvo(a[i],b[j]);
        a[i]-=C[i][j].dostavka;
        b[j]-=C[i][j].dostavka;
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.05.2015, 13:59
Ответы с готовыми решениями:

Динамические переменные
#include&lt;iostream&gt; using namespace std; int main() { int *ptr_number = new int; int...

динамические переменные
1. Составьте программу, в которой 8-10 переменных разной длины, например, строки символов,...

Динамические глобальные переменные
При изучении С++ возникла проблема - потребовалось изменить два объекта одной функцией. Конечно,...

C++, динамические переменные, нужен совет
Здравствуйте, прошу вашей помощи! Я никак не могу разобраться, где нужно использовать динамические...

2
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
30.05.2015, 14:10 2
Лучший ответ Сообщение было отмечено Nikhorse как решение

Решение

Цитата Сообщение от Nikhorse Посмотреть сообщение
P.S. >> Вылет происходит с ошибкой SIGSEGV (Segmentation fault) при переходе программы к этому циклу (где, собственно, и используется новая измененная (+1) n
Выход за пределы массива. Ведь C у вас остался размером (n-1)*m. Ровно также как и массив a остался размером (n-1).
- Пересоздавайте и копируйте массивы.
- Либо создавайте сразу их больше.

Добавлено через 1 минуту
- либо, если это не лабораторная : http://en.cppreference.com/w/c... tor/vector
1
2 / 2 / 0
Регистрация: 28.05.2015
Сообщений: 29
30.05.2015, 14:31  [ТС] 3
Nosey, спасибо, понял! решил проблему, поставил процедуру создания массива С после проверки условий балансировки задачи
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.05.2015, 14:31
Помогаю со студенческими работами здесь

Динамические переменные (нужно немного переделать)
Нужно немного переделать здесь нужно найти для каждой строки количество элементов, кратные трем, и...

Как выделить память под динамические переменные при создании класса?
В прошлой теме ответ получил, но не до конца. Вопрос такой, как выделить память под динамические...

Указатели или динамические массивы
Помогите пожалуйста, не могу найти конкретного ответа на поставленные вопросы... 1.Почему для...

В каких случаях нужно создавать динамические переменные, а в каких статические?
такой же вопрос и по массивам ! Объясните пожалуйста !


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru