Keresés

Új hozzászólás Aktív témák

  • Lacces

    őstag

    válasz chabeee #3626 üzenetére

    http://thecodecracker.com/c-programming/circular-linked-list/. Vasárnap igazán utána nézhettél volna... Keres rá neten: "circular linked list"

    kispx: Mikor érdemes amúgy cirkulált listát használni?

  • Lacces

    őstag

    válasz kispx #3620 üzenetére

    Hm, érdekes.
    De ha jól olvasom, akkor nem mást csinál, mint megvizsgálja az aktuális listaelemet, és ahhoz képest szúrja be eléje, vagy utána.
    De ha tévedek javíts ki :) Most már úgy érdekel a téma :)

  • Lacces

    őstag

    válasz chabeee #3618 üzenetére

    Biztos cirkulált listánál akarsz beszúrni az elejére végére?

    Lehet én vagyok a buta most, de a cirkulált lista, az egy olyan lista, amelynek nincs eleje se vége... mert körbe láncoltak az elemek... "utolsó" elem az "első" elemre hivatkozik, mint egy népi körtánc... én legalábbis mindig azt hittem ez a cikrulált lista.

  • Lacces

    őstag

    válasz chabeee #3611 üzenetére

    Magyar wikin a szöveg.

    Angol wikin az egyszerű ábra.

    Angol weboldalon a teljeség igénye nélkül a forráskód C-ben a duplán láncolt listához.
    Angol, ha nem tudod, akkor fordítsd le magadnak, bőven jó. Ha nem megy, akkor rajzolád le.
    Vagy a könyvtár és a Számítógép programozás című könyveket tanulmányozd ezügyben, vagy egy másik magyar nyelvű könyvet, viccen kívül :)
    Ha meg megy az angol, akkor mehet a google keresés :) linked list animation. És láss csodát :) mint itt (csak várni kell az animácóra :) )

  • Lacces

    őstag

    Sziasztok!

    Lenne egy kis problémám, hogy megfelelőlen olvassam be a mátrixokat és vektorokat, illetve írassam ki.

    Pelda input:

    4
    0 1 −2 4
    1 −3 0 2
    4 2 −28 1
    −1 0 1 1
    2
    3 0 −21 1
    1111

    4
    −1 −2 0 1
    2401
    1314
    3 8 2 −2
    2
    −2 7 9 11
    2.34 1.245 −3.4 1.234

    3
    2 3 1.2
    2.4 1.6 2.44
    −4.6 −10.1 2.34
    1
    −1.7 5.96 27.21

    0

    Pelda output:

    1.00000000 1.00000000 1.00000000 1.00000000
    -0.92063492 -0.46031746 -0.19047619 0.26984127
    szingularis
    1.10000000 −2.50000000 3.00000000

    szingularis, a második mátrixokra vonatkozik.
    Az a baj, hogy néha a bemenet 33-as mátrix, így igen csak gondban vagyok, hogyan lehetne megoldani a main-ben, már próbáltam többszörösen is iterálni a main()-t de nem jött össze.
    Valakinek van rá megoldás? Tényleg csak ennyin múlik az egész, ezzel küzdök már 1 napja.

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


    void inMatrix(int n, double **matrix)
    {
    int j, i;
    for (i = 0; i < n; i++)
    {
    for (j= 0; j < n; j++)
    {
    scanf("%lf", &matrix[i][j]);
    }
    }
    }

    void inVector(double *vektor, int n)
    {
    int k;
    for (k = 0; k < n; k++)
    {
    scanf("%lf", &vektor[k]);
    }
    }

    void outVector(double *vektor, int n)
    {
    int k;
    for (k = 0; k < n; k++)
    {
    printf("%.8lf ", vektor[k]);
    }
    }

    void lup(int n, double **A, double *b)
    {
    int *Permutation = (int*)malloc(sizeof(int)*n);
    int i,j;
    double *max = (double*) malloc (sizeof(double)*n);
    int m=0, p=0;
    int tmp=0, tmp2=0;
    int t=0, isSingular=0;
    double largestElement=0.0;
    double *helpVector = (double*) malloc (sizeof(double)*n);
    double *helpVectorA = (double*) malloc (sizeof(double)*n);
    double *helpVectorB = (double*) malloc (sizeof(double)*n);

    for(i=0; i<n; i++)
    Permutation[i]=i;

    for(m=0; m<n-1; m++)
    {
    for(i=m; i<n; i++)
    {
    max[i]=fabs(A[i][m]);
    }
    for(i=m; i<n; i++)
    {
    if(max[i]>largestElement)
    {
    largestElement=max[i];
    p=i;
    }
    }
    for(i=0; i<n; i++)
    {
    helpVectorA[i]=A[m][i];
    helpVectorB[i]=A[p][i];
    }
    for(i=0; i<n; i++)
    {
    A[m][i]=helpVectorB[i];
    A[p][i]=helpVectorA[i];
    }
    tmp=Permutation[m];
    tmp2=Permutation[p];
    Permutation[m]=tmp2;
    Permutation[p]=tmp;
    if(fabs(A[m][m])>0.00000000000000001)
    {
    for(i=m+1; i<n; i++)
    {
    A[i][m]=A[i][m]/A[m][m];
    for(j=m+1; j<n; j++)
    {
    A[i][j]=A[i][j]-A[i][m]*A[m][j];
    }
    }
    }
    if(fabs(A[m][m])<0.00000000001)
    {
    printf("szingularis\n");
    isSingular=1;
    break;
    }
    for(i=0; i<n; i++) max[i]=-1;
    largestElement=0.0;
    p=m+1;
    }

    if(isSingular==0)
    {
    if(fabs(A[n-1][n-1])<0.00000000001)
    {
    printf("szingularis\n");
    isSingular=1;
    }
    }
    if(isSingular==0)
    {
    for(i=0; i<n; i++)
    {
    t=Permutation[i];
    helpVector[i]=b[t];
    }
    for(i=0; i<n; i++)
    {
    b[i]=helpVector[i];
    }

    for(i=1; i<n; i++)
    {
    for(j=0; j<i; j++)
    {
    b[i]=b[i]-A[i][j]*b[j];
    }
    }
    for(i=(n-1); i>=0; i--)
    {
    for(j=(i+1); j<n; j++)
    {
    b[i]=b[i]-A[i][j]*b[j];
    }
    b[i]=b[i]/A[i][i];
    }
    }
    }

    int main()
    {
    int k, v,n;
    int loop;
    double **A;
    double *b;
    // read dimension of matrix and value
    scanf("%d", &n);
    //matrix
    A = (double **) calloc(n, sizeof ( double*));
    //vector
    b = (double *) calloc(n, sizeof ( double));

    loop=1;
    while(n!=0)
    {
    for (k = 0; k < n; k++)
    A[k] = (double *) calloc(n, sizeof ( double));
    // read values of matrix
    inMatrix(n, A);
    // read values of vector
    scanf("%d", &v);
    for(k=0;k<v;k++)
    {
    inVector(b, n);
    lup(n,A,b);
    }
    for(k=0; k<v;k++)
    {
    outVector(b, n);
    printf("\n");
    }

    //free(matrix[k]);
    loop++;
    }

    return 0;
    }

Új hozzászólás Aktív témák

Hirdetés