↓
 ↑
Регистрация
Имя/email

Пароль

 
Войти при помощи
Теmр
25 октября 2016
Aa Aa
#нужна_помощь #программерское #студенческое

Товарищи, кто шарит в VS С/С++?

Есть прога (проще не бывает) на перемножение двух матриц в шести разных вариантах с перестановкой по циклам. Компилится успешно в VS2010, VS2012 и VS2015, но "break"ается :( Рассчёты проводит, результаты выводит, но в конце что-то лично мне не совсем ясное происходит и не завершается должным образом, хотя выход осуществляется без ошибки.

У кого есть VS на С/С++ на компе, выручите, создайте консольку, загоните туда этот код: http://pastebin.com/uuk5MWEK
#include <iostream>
#include <clocale>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctime>

using namespace std;
double**create (int n)
{
double **matr;
matr = new double *n;
for (int i=0; i<n; i++) matr[i]=new double n;
for (int i=0;i<n;i++)
for (int j=0;j<n;j++)
matr[i][j]=rand()%5;
return matr;
}

int main()
{
setlocale(LC_CTYPE,"rus");
double **a;
double **b;
double **c;
int n,i,j,k;
double start_time, end_time, search_time;
cout<<"Введите размерность матриц"<<endl;
cin>>n;
a=create(n);
b=create(n);
c=new double*n;
for (i=0;i<n;i++)
c[i]=new doublen;

//i j k

for (i=0;i<n;i++)
for (j=0;j<n;j++)
c[i][j]=0;
printf("i j k ");
start_time=clock();
for (i=0;i<n;i++)
for (j=0;j<n;j++)
for (k=0;k<n;k++)
c[i][j]=+a[i][k]*b[k][j];
end_time=clock();
search_time=(end_time - start_time)/1000;
printf("%8.3f",search_time);
printf("n");

//i k j

for (i=0;i<n;i++)
for (j=0;j<n;j++)
c[i][j]=0;
printf("i k j ");
start_time=clock();
for (i=0;i<n;i++)
for (k=0;k<n;k++)
for (j=0;j<n;j++)
c[i][j]=+a[i][k]*b[k][j];
end_time=clock();
search_time=(end_time - start_time)/1000;
printf("%8.3f",search_time);
printf("n");

//j i k

for (i=0;i<n;i++)
for (j=0;j<n;j++)
c[i][j]=0;
printf("j i k ");
start_time=clock();
for (j=0;j<n;j++)
for (i=0;i<n;i++)
for (k=0;k<n;k++)
c[i][j]=+a[i][k]*b[k][j];
end_time=clock();
search_time=(end_time - start_time)/1000;
printf("%8.3f",search_time);
printf("n");

//j k i

for (i=0;i<n;i++)
for (j=0;j<n;j++)
c[i][j]=0;
printf("j k i ");
start_time=clock();
for (j=0;j<n;j++)
for (k=0;k<n;k++)
for (i=0;i<n;i++)
c[i][j]=+a[i][k]*b[k][j];
end_time=clock();
search_time=(end_time - start_time)/1000;
printf("%8.3f",search_time);
printf("n");

//k i j

for (i=0;i<n;i++)
for (j=0;j<n;j++)
c[i][j]=0;
printf("k i j ");
start_time=clock();
for (k=0;k<n;k++)
for (i=0;i<n;i++)
for (j=0;j<n;j++)
c[i][j]=+a[i][k]*b[k][j];
end_time=clock();
search_time=(end_time - start_time)/1000;
printf("%8.3f",search_time);
printf("n");

//k j i

for (i=0;i<n;i++)
for (j=0;j<n;j++)
c[i][j]=0;
printf("k j i ");
start_time=clock();
for (k=0;k<n;k++)
for (j=0;j<n;j++)
for (i=0;i<n;i++)
c[i][j]=+a[i][k]*b[k][j];
end_time=clock();
search_time=(end_time - start_time)/1000;
printf("%8.3f",search_time);
printf("n");

for (i=0;i<n;i++)
{delete [] a[i];
delete[] b[i];
delete[] c[i];}
delete [] a;
delete[] b;
delete[] c;
system("pause");
return(0);
}

И скажите мне "break"ается или нет?

В окне сообщений у меня выходит проблемы с *.dll файлами, что это и как это решить - я пока хз.
25 октября 2016
20 комментариев из 31
VS2012U
Всё ок, завершается с 0х0.
Ластро
Так, что-то странное...

Введите размерность матриц
2
i j k 0.001
i k j 0.001
j i k 0.001
j k i 0.001
k i j 0.000
k j i 0.001
sh: 1: pause: not found
Теmр
Где-то либо обнулен или удален указатель вместо значения, либо что-то подобное. Если в задачак с динамической памятью все компилится, но вылетает - значит обратилось куда-то в пустоту в какой-то момент
Экспекто Дементум
всё компилится, всё считает и даже завершается с 0х0, но коряво
Нет, в том месте, которое мне показалось подозрительным, все нормально.
Всё компилится, не хватило #include "stdafx.h" в начале, по крайней мере, у меня. Далее:

Введите размерность матриц
5
i j k 0.000
i k j 0.000
j i k 0.000
j k i 0.000
k i j 0.000
k j i 0.000
Для продолжения нажмите любую клавишу . . .
double**create (int n)
{
double **matr;
matr = new double *n;

Вот этим что хотели сделать?
Экспекто Дементум
вот это:
double**create (int n)
{
double **matr;
matr = new double *n;
for (int i=0; i<n; i++) matr[i]=new double n;
for (int i=0;i<n;i++)
for (int j=0;j<n;j++)
matr[i][j]=rand()%5;
return matr;
}
где *n сожрала квадратные скобки из-за форматирования блогов сайта и ссылка ведёт на какую-то лежащую тут работу
Теmр
Я про то, что n у вас изначально объявлен как принимаемый аргумент
Ластро
Всё работает, результат как у Матемага... но код конечно...
Ластро
Теmр, поэтому я и просил кинуть на пастебин...
Теmр
а, все, нашел
Не, тоже никаких глюков на 2010
Al Lastor
вы ещё моих рассчётов не видели, когда я теоретически просчитываю разностную схему *коварно потирает руки* :) Причешем, как говорится, когда с *.dll разберусь
Можно попробовать убрать conio, все равно не используется.

Еще интересно, что будет, если запустить не из студии. То есть сначала собрать проект, а потом просто взять *.exe и жмякнуть на нее.
Ластро
Я собирал через g++, убрал conio и всё стало в порядке :-)
ДНИЩE--ЫЫЫЫ
g++ 6.2.1

Введите размерность матриц
5
i j k 0.004
i k j 0.002
j i k 0.003
j k i 0.004
k i j 0.004
k j i 0.003
Ластро
Так это замеры скорости, естественно они отличаются :))
ДНИЩE--ЫЫЫЫ
Al Lastor
ну я вообще код не читал)
ПОИСК
ФАНФИКОВ









Закрыть
Закрыть
Закрыть