Коллекции загружаются
#нужна_помощь #программерское #студенческое
Товарищи, кто шарит в 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
1 |
Теmр Онлайн
|
|
Экспекто Дементум
всё компилится, всё считает и даже завершается с 0х0, но коряво |
Заяц Онлайн
|
|
Нет, в том месте, которое мне показалось подозрительным, все нормально.
|
double**create (int n)
{ double **matr; matr = new double *n; Вот этим что хотели сделать? |
Теmр Онлайн
|
|
Экспекто Дементум
вот это: 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; } |
Теmр Онлайн
|
|
где *n сожрала квадратные скобки из-за форматирования блогов сайта и ссылка ведёт на какую-то лежащую тут работу
|
Теmр
Я про то, что n у вас изначально объявлен как принимаемый аргумент |
Ластро
|
|
Всё работает, результат как у Матемага... но код конечно...
|
Ластро
|
|
Теmр, поэтому я и просил кинуть на пастебин...
|
Теmр
а, все, нашел |
Не, тоже никаких глюков на 2010
|
Теmр Онлайн
|
|
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
ну я вообще код не читал) |