|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
04.06.2013, 18:52 | #1 |
Новичок
Джуниор
Регистрация: 04.06.2013
Сообщений: 1
|
метод Гаусса
помогите, пожалуйста! не могу найти причину. когда данные идут с файла-все хорошо работает, когда с клавиатуры-подсчет не верный. Там в printmatrix появляется много каких-то нулей.
очень-очень срочно, у меня курсовая по этому, скоро сдавать. заранее спасибо! #include <conio.h> #include <stdio.h> #include <process.h> float **a, *b, *x; int N; char filename[256]; FILE* InFile=NULL; FILE* InFile1=NULL; void count_num_lines(){ int nelf=0; do{ nelf = 0; while(fgetc(InFile)!='\n' && !feof(InFile)) nelf=1; if(nelf) N++; }while(!feof(InFile)); } void freematrix(){ int i; for(i=0; i<N; i++){ delete [] a[i]; } delete [] a; delete [] b; delete [] x; } void menu(){ printf("natusnit klavishy 1 abo 2"); printf("\n**|1-dani z klaviatyru| \n"); printf("* |2-dani z fajly|\n"); } void choice() {int q; void keyboard(); void file(); scanf_s ("%d",&q); switch (q) {case 1: keyboard(); break; case 2: file(); break; default: printf ("ne virna forma");} } void allocmatrix(){ int i,j; x = new float[N]; b = new float[N]; a = new float*[N]; if(x==NULL || b==NULL || a==NULL){ printf("\n ne vucta4ae pamjati %d.\n", N); exit(-1); } for(i=0; i<N; i++){ a[i] = new float[N]; if(a[i]==NULL){ printf("\n ne vucta4ae pamjati %d.\n", N); } } for(i=0; i<N; i++){ for(j=0; j<N; j++){ a[i][j]=0; } b[i]=0; x[i]=0; } } void readmatrix(){ int i=0,j=0; for(i=0; i<N; i++){ for(j=0; j<N; j++){ fscanf(InFile, "%fl", &a[i][j]); } fscanf(InFile, "%fl", &b[i]); } } void printmatrix(){ int i=0,j=0; printf("\n"); for(i=0; i<N; i++){ for(j=0; j<N; j++){ printf(" %+f*X%d", a[i][j], j); } printf(" =%f\n", b[i]); } } void testsolve(){ int i=0,j=0; printf("\n"); for(i=0; i<N; i++){ float s = 0; for(j=0; j<N; j++){ s += a[i][j]*x[j]; } printf("%f\t%f\n", s, b[i]); } } void printresult(){ int i=0; printf("\n"); printf("Result\n"); for(i=0; i<N; i++){ printf("X%d = %f\n", i, x[i]); } } void printresult1(){ int i=0; fprintf(InFile1, "Result\n"); for(i=0; i<N; i++){ fprintf(InFile1, "X%d = %f\n", i, x[i]); } } void diagonal(){ int i, j, k; float temp=0; for(i=0; i<N; i++){ if(a[i][i]==0){ for(j=0; j<N; j++){ if(j==i) continue; if(a[j][i] !=0 && a[i][j]!=0){ for(k=0; k<N; k++){ temp = a[j][k]; a[j][k] = a[i][k]; a[i][k] = temp; } temp = b[j]; b[j] = b[i]; b[i] = temp; break; } } } } } void keyboard() { int i=0, j=0, k=0; printf("\n vvestu kilkict rivnjan: "); scanf("%d", &N); printf("\nVvestu koeficientu: \n"); allocmatrix(); // int i=0,j=0; for(i=0; i<N; i++){ for(j=0; j<N; j++){ scanf("%d", &a[i][j]); } scanf("%d", &b[i]); } } void file() { int i=0,j=0, k=0; do{ printf("\n vvestu imja fajly : "); scanf("%s", filename); InFile = fopen(filename, "rt"); } while(InFile==NULL); count_num_lines(); allocmatrix(); rewind(InFile); for(i=0; i<N; i++){ for(j=0; j<N; j++){ fscanf(InFile, "%fl", &a[i][j]); } fscanf(InFile, "%fl", &b[i]); } fclose(InFile); } void main(){ menu(); choice(); diagonal(); printmatrix(); int i, k, j; //обробка рядків for(k=0; k<N; k++){ for(i=k+1; i<N; i++){ if(a[k][k]==0){ printf("\n rozvjazky nemae.\n"); return; } float M = a[i][k] / a[k][k]; for(j=k; j<N; j++){ a[i][j] -= M * a[k][j]; } b[i] -= M*b[k]; } } printmatrix(); for(int i=N-1; i>=0; i--){ float s = 0; for(int j = i; j<N; j++){ s = s+a[i][j]*x[j]; } x[i] = (b[i] - s) / a[i][i]; } printmatrix(); testsolve(); printresult(); InFile1 = fopen("result.txt", "w"); printresult1(); fclose(InFile1); freematrix(); _getch(); return; } |
04.06.2013, 19:27 | #2 |
Форумчанин
Регистрация: 03.01.2013
Сообщений: 388
|
Код:
void file(); ) в функции choice()? + вы пишете на C, там оператор delete отсутствует А вообще лучше используйте пошаговую отладку (сможете проследить все вызовы функций, проконтроллировать значения переменных и т.п) Последний раз редактировалось Igor95; 04.06.2013 в 19:32. |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Метод Гаусса на C#. | bestnicer | Помощь студентам | 0 | 27.11.2012 14:54 |
метод простых операций и метод гаусса зейделя | tarasman11 | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 23.09.2012 14:46 |
Безумно сложные задачки!!!! Метод Гаусса, итераций, метод половинного деления, задача Коши и т.д. | Хомяк!!!!! | Помощь студентам | 4 | 08.07.2009 10:08 |
Метод Гаусса | IgorKr | Помощь студентам | 10 | 03.02.2008 11:28 |