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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 5.00
lesorub_
2 / 2 / 0
Регистрация: 20.02.2011
Сообщений: 51
#1

Выход из программы - C++

13.03.2011, 17:19. Просмотров 2398. Ответов 7
Метки нет (Все метки)

Доброго времени суток, это опять я
Дописал программу, которая вычисляет произведение матрицы на вектор. Фишка программы заключается в написании собственных функций для вычисления произведения статической матрицы и столбца, и динамической. В конце концов, всё сделано, но мне не нравится одно: когда программа подходит к концу, все вычисления, которые должна произвести программа, завершены, текстовый курсор мигает, консоль не закрывается. Т.е. закрыть консоль можно только принудительно, что не есть хорошо. Помогите, пожалуйста, решить эту проблему. Вот код:

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
#include <iostream>
#include <clocale>
 
using namespace std;
 
#define n 3
#define m 3
 
//функция произведения статической матрицы и вектора
void product_mas_st(double *matrix, double *vector, double *product){
int i, j;
cout << "Произведение (A * B): " << endl;
for (i=0; i<n; i++){ //для i-й строчки матрицы
    product[i] = 0;
    for (j=0; j<m; j++) //для j элементов строчки i
        product[i] += matrix[i*m+j]*vector[j];
}
}
 
//функция произведения динамической матрицы и вектора
void product_mas_dn(double **matrix, double *vector, double *product, int a, int b){
int i, j;
printf ("Произведение (A * B): \n\n");
for (i = 0; i < a; i++){
    product[i] = 0;
    for (j = 0; j < b; j++)
        product[i] += matrix[i][j]*vector[j];
}
}
 
void main(){
setlocale(LC_ALL, "Russian");
 
cout << "Статический массив" << endl;
int i,j;
double matrix_st[n][m], vector_st[m], product_st[n];
cout << "Введите элементы матрицы A[" << n << "][" << m <<"]: ";
for(i=0; i<n; i++) // для строки с номером i вводим j элементов
    for(j=0; j<m; j++) 
        cin >> matrix_st[i][j];
for(i=0; i<n; i++){  //для i-й строки выводим m столбцов
    for(j=0; j<m; j++)
        cout << "\t" << matrix_st[i][j];
    cout << endl << endl;
}
cout << "Введите элементы вектора B[" << m << "]: ";
for(i=0; i<m; i++)
    cin >> vector_st[i];
for(i=0; i<m; i++){
    cout << "\t" <<vector_st[i];
    cout << endl << endl;}
product_mas_st((double*) matrix_st, (double*)vector_st, (double*)product_st);
for(i=0; i<n; i++) //для каждой строки матрицы выводим сумму произведений
    cout << "\t" << product_st[i] << endl << endl;
 
cout << "Динамический массив" << endl;
int a, b;
cout << "Введите кол-во строк и столбцов: ";
cin >> a >> b;
double** matrix_dn = new double*[a];//массив указателей на строки
for(i=0; i<a; i++)
    matrix_dn[i]=new double[b];//для каждой строчки выделяем память под столбцы
double* vector_dn=new double[b];
double* product_dn= new double[a];
cout << "Введите элементы матрицы A[" << a << "][" << b << "]: ";
for(i=0; i<a; i++)
    for(j=0; j<b; j++)
        cin >> matrix_dn[i][j];
cout << endl;
for(i=0; i<a; i++){
    for(j=0; j<b; j++)
        cout << "\t" << matrix_dn[i][j];
    cout << endl << endl;}
cout << "Введите элементы вектора B[" << b <<"]: ";
for(i=0;i<b;i++)
    cin >> vector_dn[i];
cout << endl;
for(i=0; i<b; i++)
    cout << "\t" << vector_dn[i] << endl << endl;
product_mas_dn(matrix_dn,vector_dn, product_dn, a, b);
for(i=0; i<a; i++)
    cout << "\t" << product_dn[i] << endl << endl;
delete[] product_dn;
delete[] vector_dn;
for(i=0; i<a; i++)
    delete[] matrix_dn;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2011, 17:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выход из программы (C++):

Выход из программы - C++
Доброго времени суток полуночникам! Есть код, и мне нужно если на if(f1==0 &amp;&amp; s1==0) ,будет значение тру что бы вышло из программы...

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

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

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

выход из программы - C++
какой оператор закрывает программу, и библиотеку которую он использует. буду очень признателен. заранее спасибо)

самопроизвольный выход программы - C++
Доброго времени суток. Я пишу программу консольный проект С++ в Visual студии 2010 ознакомиться можно по адресу smilejohn.ts6.ru, вот...

7
Subgrando
40 / 40 / 3
Регистрация: 28.01.2011
Сообщений: 175
13.03.2011, 20:02 #2
вот пример main:

C++
1
2
3
4
int main() {
    // код
    return 0;
}
у тебя есть return 0?
0
lesorub_
2 / 2 / 0
Регистрация: 20.02.2011
Сообщений: 51
13.03.2011, 21:26  [ТС] #3
нет, у меня же void
0
sbhx
26 / 20 / 1
Регистрация: 02.02.2011
Сообщений: 94
13.03.2011, 21:28 #4
попробуй так сделать:
C++
1
#include <conio.h>
и в самый конец главной функции поставить:
C++
1
getch();
0
lesorub_
2 / 2 / 0
Регистрация: 20.02.2011
Сообщений: 51
13.03.2011, 21:37  [ТС] #5
попробовал с getch(), всёравно виснет. Я вот думаю, может неправильно память очищаю из-под указателей в динамической матрице?
0
sbhx
26 / 20 / 1
Регистрация: 02.02.2011
Сообщений: 94
13.03.2011, 21:53 #6
секундочку, я может быть не врубился, ты хочешь зарыть или задержать окно если закрыть то пользуйся командой exit(0);
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
void main(){
int i;
cin >> i;
if(i == 0){
exit(0);
}
else{
cout << "привет" << endl;
}
}
вот простейший пример, когда если напечатали 0, то выходит, иначе пишет слово привет.
0
Subgrando
40 / 40 / 3
Регистрация: 28.01.2011
Сообщений: 175
13.03.2011, 22:29 #7
А у меня твоя программа выключается.

Embarcadero C++ Builder 2010.

Добавлено через 2 минуты
Единственное, помни:
консоль не будет закрываться автоматически, если ты запустил программу, предварительно открыв cmd.exe и введя туда путь к ней.

Если надо закрыть окно, то exit(1). А если под Windows, то правильней будет TerminateProcess(GetCurrentProcess(), 1);
0
lesorub_
2 / 2 / 0
Регистрация: 20.02.2011
Сообщений: 51
14.03.2011, 00:06  [ТС] #8
странно, попробовал сейчас на ноуте - там вообще после вычислений выдает ошибку, вот скрин
http://img713.imageshack.us/i/expressscreensaver7.png/

Говорит, что ошибка в строке 52

Добавлено через 1 час 6 минут
проблема решена:dance3:
оказывается, мои подозрение насчет неправильной очистки памяти подтвердились. В самой последней строке надо было для каждой i-той строчки очищать память, а я очищал непойми что.
C++
1
delete[] matrix_dn[i];
вот теперь всё закрывается и ошибок не вылетает
0
14.03.2011, 00:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.03.2011, 00:06
Привет! Вот еще темы с ответами:

Досрочный выход из программы - C++
Добрый день! Имеется программа на Borland С, нажимаю на фоме кнопку и запускаю расчет. Расчет производится в функции нажатия на...

Enter = выход из программы - C++
Помогите, пожалуйста. Как, что-бы при вводе c клавиатуры кнопки Enter программа закрывалась?

Принудительный выход из программы - C++
Привет! У меня такая проблемка: есть программа в которой реализовано главное меню(имеется цикл while а внутри цикла реализован switch) ...

Выход из программы по нажатии esc - C++
Ребят, как реализовать досрочный выход из программы на любом этапе ее выполнения, желательно по нажатии клавиши ESC?


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

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

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