Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- void Gauss_seidel(double **matriz, int erro_maximo, int info[]){
- double *inicial, aux = 0;
- int x = 0, y = 0, opa = 0, contador = 0;
- inicial = (double *) malloc(sizeof(double)*info[0]);
- for(x = 0; x < info[0]; x++)
- scanf("%lf", &inicial[x]);
- //calcando o x1.. x2 e por aí vai
- do{
- printf("\n");
- printf("%d .", contador+1);
- //nesse loop haverá o cálculo do x1,x2 e por aí vai
- for(x = 0; x < info[0]; x++){
- aux = inicial[x];
- inicial[x] = matriz[x][info[0]];
- for (y = 0; y < info[0];y++){
- if (y != x)
- inicial[x] = inicial[x]-matriz[x][y]*inicial[y];
- }
- inicial[x] = inicial[x]/matriz[x][x];
- //verificando se o número tá na precisão certa;
- if(abs(inicial[x]-aux)<= erro_maximo)
- opa++;
- printf("%lf", inicial[x]);
- }
- printf("\n");
- contador++;
- }while(opa < info[1] || abs(inicial[0]-aux)<= erro_maximo);
- /*printf("\nA solução eh:\n");
- for (x = 0; x < info[0]; x++)
- printf("x", x); */
- }
- int main(){
- FILE *numeros;
- char nomedoarquivo[30], nome[30];
- int info[2] = { 0 }, aux = 0, x = 0, y = 0, choose = 0;
- double **matriz, erro_maximo = 0;
- do{
- scanf("%d", &choose);
- }while(choose < 1 && choose > 5);
- scanf("%s", nome);
- sprintf(nomedoarquivo, "%s.txt", nome);
- numeros = fopen(nomedoarquivo, "r");
- if(numeros == NULL)
- printf("Arquivo nao pode ser lido");
- for(aux = 0; aux < 2; aux++)
- fscanf(numeros, "%d", &info[aux]);
- fseek(numeros, 6, SEEK_SET);
- fscanf(numeros, "%lf", &erro_maximo);
- matriz = (double **) malloc(sizeof(double*)*info[0]);
- for(aux = 0; aux < info[0]; aux++)
- matriz[aux] = (double *) malloc(sizeof(double)*(1+info[0]));
- for(x = 0; x < info[0]; x++){
- for(y = 0; y < (1 + info[0]); y++){
- if(!(fscanf(numeros, "%lf", &matriz[x][y])))
- break;
- }
- }
- fclose(numeros);
- //coloquei o menu aqui pq a partir daqui todas as informações já estarão salvas no matriz, daí tu vai poder usar pra passar pra função
- //o teu menu
- //quando tiver algo pra botar, tira o ; que tá depois do )
- if(choose == 1)
- exit(1);
- else if(choose == 2);
- else if(choose == 3);
- else if(choose == 4);
- else if(choose == 5)
- Gauss_seidel(matriz, erro_maximo, info);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement