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

Вывод случайного массива, вылетает программа - C++

Восстановить пароль Регистрация
 
HockeyKnyaz
0 / 0 / 0
Регистрация: 09.05.2014
Сообщений: 3
09.05.2014, 01:59     Вывод случайного массива, вылетает программа #1
Программа генерирует случайный двумерный массив, выводит его в файл, потом читает и выводит на экран из этого файла. При нажатии клавиши 2 в меню программа пишет "Прекращена работа программы". Заранее спасибо за помощь.

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
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
#include <iostream>              //библиотека ввода/вывода
#include <windows.h>                //установка команд операционной системы
#include <fstream>               //потоки ввода/вывода в файлы
#include <stdlib.h>              //стандартная библиотека выделения памяти/контроль процесса выполнения программы
#include <time.h>
 
#define MROW 3                   //n=3
#define MCOL 7                   //m=7
 
using namespace std;
string Rus(string text)          //установка вывода русского языка в строке
{CharToOem((LPCTSTR)text.c_str(), (LPSTR)text.c_str()); return text;}
 
void random(ofstream& fu, double matrix[MROW][MCOL]){
    fu.open("massiv.txt");
    srand(time(0));
            for(int i=1; i<MROW+1; i++)
                for(int j=1; j<MCOL+1; j++)
                    matrix[i][j]=-10+rand()%50;
    fu<<"matrix[i][j]";
    fu<<endl;
    fu.close();
}
 
void input_from_file(ifstream& fi, double matrix[MROW][MCOL])   //создание потока для чтения данных с файла
    {
        fi.open("massiv.txt");          //путь к файлу с массивом
    for(int i=0; i<MROW; i++)
        for(int j=0; j<MCOL; j++)
            fi>>matrix[i][j];
    fi.close();                       //закрытие потока
}
 
void keyboard_input(double matrix[MROW][MCOL])                    //ввод данных с клавиатуры
{
    for(int i=0; i<MROW; i++)
        for(int j=0; j<MCOL; j++)
            cin>>matrix[i][j];
}
 
void show_matrix(double matrix[MROW][MCOL]) {
    for(int i=0; i<MROW; i++) {
        for(int j=0; j<MCOL; j++)
            cout<<matrix[i][j]<<" ";             //вывод матрицы на экран
        cout<<endl;
    }
}
 
int count_pos_el(double matrix[MROW][MCOL])        //подсчёт положительных элементов матрицы
{
    int pos_el = 0;
    for(int i=0; i<MROW; i++)
        for(int j=0; j<MCOL; j++)
            if(matrix[i][j]>0)
                pos_el++;
    return pos_el;
}
 
int count_neg_el(double matrix[MROW][MCOL])         //подсчёт отрицательных элементов матрицы
{
    int neg_el = 0;
    for(int i=0; i<MROW; i++)
        for(int j=0; j<MCOL; j++)
            if(matrix[i][j]<0)
                neg_el++;
    return neg_el;
}
 
int count_zero_el(double matrix[MROW][MCOL])          //подсчёт нулевых элементов матрицы
{
    int zero_el = 0;
    for(int i=0; i<MROW; i++)
        for(int j=0; j<MCOL; j++)
            if(matrix[i][j]==0)
                zero_el++;
    return zero_el;
}
 
void output_matrix_from_file(ofstream& fo, double matrix[MROW][MCOL])     //создание потока для вывода данных в файл
{
    fo.open("123ololo.txt");           //создание файла
    for(int i=0; i<MROW; i++) {
        for(int j=0; j<MCOL; j++)
            fo<<matrix[i][j]<<"  ";
        fo<<endl;
    }
    fo.close();                           //закрытие потока
}
 
void show_results(int neg, int pos, int zero)            //создание потока вывода данных на экран
{
    cout<<Rus("Отрицательные элементы: ")<<neg<<endl;
    cout<<Rus("Положительные элементы: ")<<pos<<endl;
    cout<<Rus("Нулевые элементы: ")<<zero<<endl;
}
void output_counts_from_file(ofstream& fo, int neg, int pos, int zero)  //создание потока вывода данных в файл
{
    fo.open("test.txt");    //создание файла
    fo<<neg<<endl;
    fo<<pos<<endl;
    fo<<zero<<endl;
    fo.close();             //закрытие потока
}
 
int menu()
{
    int select;                                            //создание меню программы
    cout<<endl<<endl<<Rus("Пожалуйста, выберите: ")<<endl;
    cout<<Rus("1. Ввод массива с клавиатуры")<<endl;
    cout<<Rus("2. Ввод массива из файла")<<endl;
    cout<<Rus("3. Показать количество отрицательных, положительных и нулевых элементов")<<endl;
    cout<<Rus("4. Вывести матрицу и результаты пункта 3 в файлы")<<endl;
    cout<<Rus("5. ВЫХОД")<<endl<<endl;
    cout<<Rus("Ваш выбор: ");
    cin>>select;
    return select;
}
 
int main()
{
    ofstream fu;
    ifstream fi;
    ofstream fo;
    double matrix[MROW][MCOL];
    int pos, neg, zero;
    while(true) {
        switch(menu()) {
        case 1:                                //результат нажатия клавишы "1"
            keyboard_input(matrix);
            system("cls");
            show_matrix(matrix);
            break;
        case 2:                                //результат нажатия клавишы "2"
            system("cls");
            random(fu, matrix);
            input_from_file(fi, matrix);
            show_matrix(matrix);
            break;
        case 3:                                 //результат нажатия клавишы "3"
            system("cls");
            pos = count_pos_el(matrix);
            neg = count_neg_el(matrix);
            zero = count_zero_el(matrix);
            show_results(neg, pos, zero);
            break;
        case 4:                                  //результат нажатия клавишы "4"
            system("cls");
            pos = count_pos_el(matrix);
            neg = count_neg_el(matrix);
            zero = count_zero_el(matrix);
            output_matrix_from_file(fo, matrix);
            output_counts_from_file(fo, neg, pos, zero);
            break;
        case 5:                                  //результат нажатия клавишы "5"
            return 0;
        default:
            system("cls");                        //очистка экрана консоли
            cout<<Rus("Неккоректный номер меню")<<endl;;
            break;
        }
    }
 
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2014, 01:59     Вывод случайного массива, вылетает программа
Посмотрите здесь:

C++ Генерация случайного числа, максимально случайного
программа вылетает. C++
Вылетает программа C++
Выбор случайного элемента массива C++
Создание программы для сортировки случайного массива чисел C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
09.05.2014, 02:05     Вывод случайного массива, вылетает программа #2
17, 18 строки ничего не смущает?
HockeyKnyaz
0 / 0 / 0
Регистрация: 09.05.2014
Сообщений: 3
09.05.2014, 02:08  [ТС]     Вывод случайного массива, вылетает программа #3
Не особо, что там не так?
Supernatural
285 / 141 / 28
Регистрация: 22.11.2010
Сообщений: 1,441
09.05.2014, 02:11     Вывод случайного массива, вылетает программа #4
попробуй передавать двумерные массивы по образцу (массив, строки, столбцы). Размерность передается отдельным параметром в многомерных массивах
C++
1
const тип (&имя)[n][m], const тип n, const тип m
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
09.05.2014, 02:14     Вывод случайного массива, вылетает программа #5
HockeyKnyaz, замени эти строки на
C++
1
2
for(int i=0; i<MROW; i++)
   for(int j=0; j<MCOL; j++)
HockeyKnyaz
0 / 0 / 0
Регистрация: 09.05.2014
Сообщений: 3
09.05.2014, 02:31  [ТС]     Вывод случайного массива, вылетает программа #6
спасибо большое, работает, только в файл выводит "matrix[i][j]"

Добавлено через 11 минут
Как сделать, чтобы в файле MASSIV после выполнения программы остался массив, а не текст "matrix[i][j]"?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2014, 02:48     Вывод случайного массива, вылетает программа
Еще ссылки по теме:

C++ При обращении к индексу двумерного массива char программа вылетает с ошибкой
При расширении первой строки двумерного массива (с помощью realloc) программа вылетает C++
Вылетает программа при заполнении массива C++

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

Или воспользуйтесь поиском по форуму:
asics
Freelance
Эксперт C++
 Аватар для asics
2838 / 1775 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
09.05.2014, 02:48     Вывод случайного массива, вылетает программа #7
HockeyKnyaz,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void random(ofstream& fu, double matrix[MROW][MCOL]){
    fu.open("massiv.txt");
    srand(time(0));
            for(int i=0; i<MROW; i++)
           {
                for(int j=0; j<MCOL; j++)
                {
                    matrix[i][j]=-10+rand()%50;
                    fu<<matrix[i][j] << ' ';   
                }
              fu << '\n';
           }
    fu<<endl;
    fu.close();
}
Yandex
Объявления
09.05.2014, 02:48     Вывод случайного массива, вылетает программа
Ответ Создать тему
Опции темы

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