Anonymní profil Pavla Kainráthová – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Anonymní profil Pavla Kainráthová – Programujte.comAnonymní profil Pavla Kainráthová – Programujte.com

 

Příspěvky odeslané z IP adresy 2a00:1028:919e:39a:81c8:6...–

Pavla Kainráthová
C / C++ › Gaussova eliminační metoda
13. 9. 2015   #204931

Mockrát ti děkuji, díky tvé pomoci už to načítání funguje bez problému. Těd se však snažím přidat onu gaussovu eliminační metodu. A jsem zase ztracená :( 

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char** argv)
{

FILE *vstupni;
char jmeno[255];
int c,r,k;
int i=0,j=0,pocetRadku=0,pocetrovnic=0;
int *pocetSloupcu;
float **matice, x[10], sum;



  printf("Zadej jmeno souboru: ");
  gets(jmeno);

  if((vstupni=fopen(jmeno,"rt"))==NULL)
  {
    printf("Vstupni soubor %s nelze otevrit\n",jmeno);
    return -1;
  }


    while((c = getc(vstupni)) != EOF){
        if(c == '\n')
        pocetRadku++;
    }

    printf("\npocet radku %d",pocetRadku);
    printf("\n");

    pocetrovnic=pocetRadku-1;
    printf("pocet rovnic je %d\n\n",pocetrovnic);



       //jednorozmerne pole pro urceni poctu sloupcu
    pocetSloupcu= (int*) calloc( pocetRadku , sizeof(int)); //pocet sloupcu nacitame pres pole

    rewind(vstupni);
    while((c = getc(vstupni)) != EOF)
        { /* přečtení souboru */
        while((c =getc(vstupni)) != '\n')
        {
            if(c == ' ' )
            { //postupne scitame pocty mezer
            pocetSloupcu[i]++;
            }
        }
        pocetSloupcu[i]++; // pridavam jednicku kvuli tomu, ze v poslednim sloupci matice neni mezera
        i++;
        }
    matice = (int **)calloc( pocetRadku , sizeof(int *)); //zde si alokuju kolik ma mit matice radku
    rewind(vstupni);

//načítání matice
    for(i= 0; i< pocetRadku ; i++){
        matice[i] = (int *)calloc( pocetSloupcu[i] , sizeof(int));  //tady alokuju sloupecky kazdeho radku
        for(j=0; j<pocetSloupcu[i]; j++){
            fscanf(vstupni, "%f", &matice[i][j]);   //tady matici plním
        }
    }
// vypisování matice, když změním i=0 na i=1 tak budu mít matici bez prvního čísla (urcovacího pocet rovnic)
    for(i = 0; i < pocetRadku ; i++){
        for (j = 0; j < pocetSloupcu[i]; j++)
            printf("%f ", matice[i][j]);
        printf("\n");
    }



//-------------------------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------------------
//GAUSSOVKA---------------------------------------------

for(j=0; j<=pocetrovnic; j++)
    {
        for(i=0; i<=pocetrovnic; i++)
        {
            if(i>j)
            {
                r=matice[i][j]/matice[j][j];
                for(k=0; k<=pocetrovnic+1; k++)
                {
                    matice[i][k]=matice[i][k]-r*matice[j][k];
                }
            }
        }
    }

x[pocetrovnic]=matice[pocetrovnic][pocetrovnic+1]/matice[pocetrovnic][pocetrovnic];

    for(i=pocetrovnic-1; i>=1; i--)
    {
        sum=0;
        for(j=i+1; j<=pocetrovnic; j++)
        {
            sum=sum+matice[i][j]*x[j];
        }
        x[i]=(matice[i][pocetrovnic+1]-sum)/matice[i][i];
    }

printf("\nvýsledek je: \n:");

    for(i=0; i<=pocetrovnic; i++)
    {
        printf("\nx%d=%f\t",i,x[i]);
    }





  system("PAUSE");
  return 0;
}

 

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý