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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
HockeyKnyaz
0 / 0 / 0
Регистрация: 09.05.2014
Сообщений: 3
#1

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

09.05.2014, 01:59. Просмотров 342. Ответов 6
Метки нет (Все метки)

Программа генерирует случайный двумерный массив, выводит его в файл, потом читает и выводит на экран из этого файла. При нажатии клавиши 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++
Добрый день. Решил написать простой код отрисовки карты в консоли. Идея: 1.Создаю объект структуры, содержащий перечень координат в...

Удаление последнего элемента динамического массива (программа вылетает с ошибкой) - C++
for (vector&lt;P&gt;::iterator i = p.begin(); i != p.end(); ++i) { i -&gt; life --; if (i -&gt; life ==0) p.erase(i);...

При обращении к индексу двумерного массива char программа вылетает с ошибкой - C++
Программа вылетает с ошибкой на 66й строке. Почему?((( // Task_1.cpp : Defines the entry point for the console application. // ...

При расширении первой строки двумерного массива (с помощью realloc) программа вылетает - C++
При расширении первой строки двумерного массива с помощью realloc, программа вылетает. Собственно вопрос, что я напутал при добавлении...

Запись случайного массива - C++
Здравствуйте,помогите написать отдельно функцию void заполнения массива случайными числами,и как ее позже вызвать в main

Выбор случайного элемента массива - C++
Понимаю что вопрос простой, но все же, подскажите, как выбрать случайную строку, из массива строк? заранее благодарен

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
asics
Freelance
Эксперт С++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
09.05.2014, 02:05     Вывод случайного массива, вылетает программа #2
17, 18 строки ничего не смущает?
HockeyKnyaz
0 / 0 / 0
Регистрация: 09.05.2014
Сообщений: 3
09.05.2014, 02:08  [ТС]     Вывод случайного массива, вылетает программа #3
Не особо, что там не так?
Supernatural
287 / 143 / 28
Регистрация: 22.11.2010
Сообщений: 1,499
09.05.2014, 02:11     Вывод случайного массива, вылетает программа #4
попробуй передавать двумерные массивы по образцу (массив, строки, столбцы). Размерность передается отдельным параметром в многомерных массивах
C++
1
const тип (&имя)[n][m], const тип n, const тип m
asics
Freelance
Эксперт С++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
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++
Сформировать случайным образом массив из 20 элементов. Найти максимальный и минимальный элементы массива, поменять их местами и вычислить...

Вылетает программа - C++
Доброго времени суток, форумчане! Можете объяснить, почему вылетает программа, не выдавая ошибки(компилируется нормально) ...

Вылетает программа - C++
Выкидывает после того как вводишь название файла где лежит список студентов группы, в котором указаны фамилия, имя, отчество, день, число и...

Вылетает программа - C++
Почему-то после запуска вылетает программа. Помогите найти ошибку. Написана в 3 файлах. 1: class Array{ public: ...


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

Или воспользуйтесь поиском по форуму:
asics
Freelance
Эксперт С++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
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     Вывод случайного массива, вылетает программа
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru