Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

09.05.2014, 01:59. Просмотров 357. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2014, 01:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывод случайного массива, вылетает программа (C++):

Вылетает программа при заполнении массива - 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, программа вылетает. Собственно вопрос, что я напутал при добавлении...

Нужно сделать, чтобы программа состояла из 3 функций, тоесть 1-ая функция ввода массива, 2-ая основная функция, 3-я- вывод массива - C++
Есть программа #include &lt;iostream&gt; #include &lt;algorithm&gt; const int N = 5; int handSet(void) { int a; std::cout...

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

6
asics
Freelance
Эксперт С++
2848 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
09.05.2014, 02:05 #2
17, 18 строки ничего не смущает?
0
HockeyKnyaz
0 / 0 / 0
Регистрация: 09.05.2014
Сообщений: 3
09.05.2014, 02:08  [ТС] #3
Не особо, что там не так?
0
Supernatural
301 / 156 / 29
Регистрация: 22.11.2010
Сообщений: 1,552
09.05.2014, 02:11 #4
попробуй передавать двумерные массивы по образцу (массив, строки, столбцы). Размерность передается отдельным параметром в многомерных массивах
C++
1
const тип (&имя)[n][m], const тип n, const тип m
0
asics
Freelance
Эксперт С++
2848 / 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++)
0
HockeyKnyaz
0 / 0 / 0
Регистрация: 09.05.2014
Сообщений: 3
09.05.2014, 02:31  [ТС] #6
спасибо большое, работает, только в файл выводит "matrix[i][j]"

Добавлено через 11 минут
Как сделать, чтобы в файле MASSIV после выполнения программы остался массив, а не текст "matrix[i][j]"?
0
asics
Freelance
Эксперт С++
2848 / 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();
}
0
09.05.2014, 02:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2014, 02:48
Привет! Вот еще темы с ответами:

Генерация случайного числа, максимально случайного - C++
Добрый день, задался вопросом как получить случайное число, но не псевдо-случайное по идее функции rand() и srand(time(NULL))...

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

Формирование случайного массива и действия над ним - C++
Сформировать случайным образом массив из 20 элементов. Найти максимальный и минимальный элементы массива, поменять их местами и вычислить...

Вылетает программа - C++
Здравствуйте еще раз! Сама по себе программа работает корректно, но после вывода информации в консоль, вылетает. #include...


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

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

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