Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Programy napisane w C przydatne dla studenta i nie tylko

marihires 14 Wrz 2007 12:22 3985 3
  • #1 14 Wrz 2007 12:22
    marihires
    Poziom 29  

    Witam.Chciałbym się podzielić programami napisanymi w C.Są to podstawowe programy jakie pisze się na uczelniach (Politechnika)
    Mam nadzieję że będą one pomocne dla innych studentów.Udostępniam je z takiego powodu, że nie każdy po dwóch wykładach z C umie już pisać takie "zaawansowane" dla początkującego programy.

    Program za pomocą szeregu oblicza wartość funkcji sinusa hiperbolicznego i porównuje ją z wartością otrzymaną z biblioteki math.h

    Code:
    #include<conio.h>
    
    #include<stdio.h>
    #include<math.h>
    #pragma argsused
    float sinh1(float x, float d);
    int main()
    {
    float x,d;
    printf("\t\tPROGRAM OBLICZA WARTOSC FUNKCJI SINUSA HIPERBOLICZNEGO\n\n");
    printf("Podaj x\n");
    scanf("%f",&x);
    printf("Podaj dokladnosc\n");
    scanf("%f",&d);
    printf("\n\nWartosc funkcji wynosi : %10.8f\n\n",sinh1(x,d));
    printf("Z funkcji standardowej wartosc wynosi: %10.8f",sinh(x));

    getch();
    return(0);
    }


    float sinh1(float x,float d)
    {
    float a,suma; int n;
    a=x;
    suma=x;
    n=3;
    do
    {
    a=a*x*x/(n*(n-1));
    suma=suma+a;
    n=n+2;
    }
    while (a>d);

    return suma;
    }

    Program mnoży dwie macierze.
    Code:
    #include<stdio.h>
    
    #include<conio.h>
    #include<stdlib.h>
    #include<alloc.h>

    void tworz_tab(int **a, int lw, int lk, char x);
    void wypisz_tab(int **a, int lw, int lk);
    void mnoz(int **a1, int **a2, int **a3, int lw1, int lk1, int lk2);

    main()
    {
    int **tab1,**tab2,**tab3,i;
    int lw1,lk1,lw2,lk2;

    clrscr();

    printf("\n\n\t Macierz A");
    printf("\n\n Liczba wierszy - ");
    scanf("%d",&lw1);
    printf(" Liczba kolumn - ");
    scanf("%d",&lk1);

    clrscr();

    printf("\n\n\t Macierz B");
    printf("\n\n Liczba wierszy - ");
    scanf("%d",&lw2);
    printf(" Liczba kolumn - ");
    scanf("%d",&lk2);

    clrscr();

    if(lk1!=lw2)
    {
    printf("\n\n Tych macierzy nie mozna pomnozyc gdyz");
    printf("\n ilosc kolumn macierzy A jest rozna");
    printf("\n od ilosci wierszy maciezy B");
    getch();
    }

    else




    {

    tab1=(int**)calloc(lw1,sizeof(int));
    for(i=0;i<lw1;i++)
    *(tab1+i)=(int*)calloc(lk1,sizeof(int));

    tab2=(int**)calloc(lw2,sizeof(int));
    for(i=0;i<lw2;i++)
    *(tab2+i)=(int*)calloc(lk2,sizeof(int));

    tab3=(int**)calloc(lw1,sizeof(int));
    for(i=0;i<lw1;i++)
    *(tab3+i)=(int*)calloc(lk2,sizeof(int));


    printf("\n");
    tworz_tab(tab1,lw1,lk1,'A');
    printf("\n");
    tworz_tab(tab2,lw2,lk2,'B');

    clrscr();

    printf("\n\n\t Macierz A:");
    wypisz_tab(tab1,lw1,lk1);
    printf("\n\n\t Macierz B:");
    wypisz_tab(tab2,lw2,lk2);

    printf("\n\n\t Wynik:");

    mnoz(tab1,tab2,tab3,lw1,lk1,lk2);
    wypisz_tab(tab3,lw1,lk2);

    getch();

    for(i=0;i<lw1;i++)
    free(*(tab1+i));

    for(i=0;i<lw2;i++)
    free(*(tab2+i));

    for(i=0;i<lw1;i++)
    free(*(tab3+i));
    }

    return 0;
    }

    void tworz_tab(int **a, int lw, int lk, char x)
    {
    int i,j;

    for(i=0;i<lw;i++)
    for(j=0;j<lk;j++)
    {
    printf(" %c [%d %d] - ",x,i,j);
    scanf("%d",*(a+i)+j);
    }
    }

    void wypisz_tab(int **a, int lw, int lk)
    {
    int i,j;

    for(i=0;i<lw;i++)
    {
    printf("\n");
    for(j=0;j<lk;j++)
    {
    printf("\t %5d",*(*(a+i)+j));
    }
    }
    }

    void mnoz(int **a1, int **a2, int **a3, int lw1, int lk1, int lk2)
    {
    int i,j,a;

    for(i=0;i<lw1;i++)
    for(j=0;j<lk2;j++)
    {
    *(*(a3+i)+j) = 0;
    for(a=0;a<lk1;a++)
    {
    *(*(a3+i)+j)=*(*(a3+i)+j) + *(*(a1+i)+a) * *(*(a2+a)+j);
    }
    }
    }


    Program również liczy sinusa hiperbolicznego tylko że z iteracją
    Code:
    #pragma argsused
    
    #include<conio.h>
    #include<stdio.h>
    #include<math.h>
    float sinh1(float x, float d,int *i);

    int main()
    {
    float x,d;
    int i;
    printf("\t\tPROGRAM OBLICZA WARTOSC FUNKCJI SINUSA HIPERBOLICZNEGO\n\n");
    printf("Podaj x\n");
    scanf("%f",&x);
    printf("Podaj dokladnosc\n");
    scanf("%f",&d);
    printf("\n\nWartosc funkcji wynosi: %10.8f\n",sinh1(x,d,&i));
    printf("Liczba krokow do jej obliczenia: %d\n\n",i);
    printf("Z funkcji standradowej wartosc wynosi: %10.8f",sinh(x));
    getch();
    return(0);
    }


    float sinh1(float x,float d, int *i)
    {
    float a,suma; int n;
    a=x;
    suma=x;
    n=3;
    do
    {
    a=a*x*x/(n*(n-1));
    suma=suma+a;
    n=n+2;
    }
    while (a>d);
     n=((n-1)/2);
     *i=n;
    return suma;
    }

    Tablica 2-wymiarowa
    Code:
    #pragma argsused
    
    #include<stdio.h>
    #include<conio.h>
    #include<stdlib.h>
    #include<alloc.h>
    void wpisywanie(float **t,int lw,int lk);
    void wypisywanie(float **t,int lw,int lk);
    float **rezerwacja(int lw,int lk);
    void zwolnienie(float **t,int lw,int lk);
    int zamiana(float **t,int lk,int w1,int w2);
    void wiersz(float **t,int lw,int lk,int n);
    int main()
    {
    int lw,lk,n,w1,w2,y;
    float **x;
    printf("\t\tPROGRAM POKAZUJE ZASTOSOWANIE TABLIC DWUWYMIAROWYCH\n\n");
    printf("Liczba wierszy:\t");
    scanf("%d",&lw);
    printf("Liczba kolumn:\t");
    scanf("%d",&lk);
    x=rezerwacja(lw,lk);
    wpisywanie(x,lw,lk);
    wypisywanie(x,lw,lk);
    printf("Podaj numer pierwszego wiersza do zamiany:\t");
    scanf("%d",&w1);
    printf("Podaj numer drugiego wiersza do zamiany:\t");
    scanf("%d",&w2);
    w1=w1-1;
    w2=w2-1;
    y=zamiana(x,lk,w1,w2);
    if(y==0)
    printf("Podano numer tego samego wiersza");
    else
    wypisywanie(x,lw,lk);
    printf("Podaj numer wiersza do usuniecia:\t");
    scanf("%d",&n);
    n=n-1;
    wiersz(x,lw,lk,n);
    lw=lw-1;
    wypisywanie(x,lw,lk);
    zwolnienie(x,lw,lk);
    getch();
    return 0;
    }

    float **rezerwacja(int lw,int lk)
    {
    float **t;
    int i;
    t=(float**)calloc(lw,sizeof(float));
    for(i=0;i<lw;i++)
    *(t+i)=(float*)calloc(lk,sizeof(float));
    return t;
    }

    void zwolnienie(float **t,int lw,int lk)
    {
    int i;
    for(i=0;i<lw;i++)
    free(*(t+i));
    free(t);
    }

    void wpisywanie(float **t,int lw,int lk)
    {
    int i,j;
    for(i=0;i<lw;i++)
    for(j=0;j<lk;j++)
    {
    printf("t[%d][%d]=",i,j);
    scanf("%f",*(t+i)+j);
    }
    }

    void wypisywanie(float **t,int lw,int lk)
    {
    int i,j;
    for(i=0;i<lw;i++)
    {
    printf("\n");
    for(j=0;j<lk;j++)
    printf("%1.0f\t",*(*(t+i)+j));
    }
    printf("\n");
    }

    void wiersz(float **t,int lw,int lk,int n)
    {
    int i,j;
    for(i=n;i<lw-1;i++)
    for(j=0;j<lk;j++)
    {
    *(*(t+i)+j)=*(*(t+i+1)+j);
    }
    }

    int zamiana(float **t,int lk,int w1,int w2)
    {
    int z;
    float *w=NULL;
    z=w1-w2;
    if(z==0) return 0;
    else
    {
    w=*(t+w1);
    *(t+w1)=*(t+w2);
    *(t+w2)=w;
    return 1;
    }
    }


    Całka z funkcji kwadratowej
    Code:
    #include<stdio.h>
    
    #include<conio.h>
    #include<math.h>
    #pragma argsused
    float funkcja(float a,float b,float c,float x);
    float calka(float xp,float xk, int n, float a, float b, float c);
    int main()
    {
     float xp,xk,a,b,c; int n;
     printf("\t\tPROGRAM OBLICZA CALKE Z FUNKCJI KWADRATOWEJ\n\n");
     printf("Podaj a\n");
     scanf("%f",&a);
     printf("Podaj b\n");
     scanf("%f",&b);
     printf("Podaj c\n");
     scanf("%f",&c);
     printf("\n");
     printf("Funkcja ma postac:  %2.1fx*x + %2.1fx + %2.1f\n\n",a,b,c);
     printf("Podaj poczatek przedzialu\n");
     scanf("%f",&xp);
     printf("Podaj koniec przedzialu\n");
     scanf("%f",&xk);
     printf("\n");
     printf("Podaj na ile czesci dzielic\n");
     scanf("%d",&n);
     printf("\n\n");
     printf("Calka wynosi %f",calka(xp,xk,n,a,b,c));


            getch();
            return 0;
    }

    float funkcja (float a,float b,float c,float x)
    {float y ;
     y=a*x*x+b*x+c ;
     return y;
             }

     float calka (float xp,float xk,int n, float a,float b,float c)
     {float y1,y2,dx,suma,x; int i;
     suma=0;
     dx=(xk-xp)/n;
     for (i=0;i<n;i++)
     {x=xp+i*dx;
     y1=funkcja(a,b,c,x);
     y2=funkcja(a,b,c,x+dx);
     suma=suma+((y1+y2)/2)*dx;
     }
     return suma;
     }

    Tablica jednowymiarowa - sortowanie
    Code:
    #pragma argsused
    
    #include<stdio.h>
    #include<conio.h>
    #include <stdlib.h>
    #include <alloc.h>
    void wpisanie(float *t, int n);
    void wypisanie(float *t,int n);
    void sortowanie(float *t,float n);
    void minimum(float *t, int n);
    float *rezerwacja(int n);
    void zwolnienie(float *t,int n);
    int main()
    {
    float *x;
    int n;
    printf("\t\tPROGRAM POKAZUJE ZASTOSOWANIE TABLIC JEDNOWYMIAROWYCH\n\n");
    printf("Podaj rozmiar tablicy\n");
    scanf("%d",&n);
    x=rezerwacja(n);
    wpisanie(x,n);
    printf("\n");
    wypisanie(x,n);
    printf("\n");
    printf("Tablica posortowana:\n\n");
    sortowanie(x,n);
    wypisanie(x,n);
    printf("\n");
    minimum(x,n);
    zwolnienie(x,n);
            getch();
            return 0;
    }

    float *rezerwacja(int n)
    {
    float *t;
    t=(float*)calloc(n,sizeof(float));
    }

    void zwolnienie(float *t,int n)
    {
    free(t);
    }

    void wpisanie(float *t, int n)
    {
    int i;

    for(i=0;i<=n-1;i++)
    {
    printf("t[%d]\t",i);
    scanf("%f",t+i);
    }
    }

    void wypisanie(float *t, int n)
    {
    int i;


    for(i=0;i<=n-1;i++)
    {
    printf("%2.1f\t",*(t+i));
    }
    printf("\n");
    }
    void sortowanie(float *t,float n)
    {
    int i,j,k;
    float z,buf;

    for(i=0;i<=n-1;i++)
    {
    z=*(t+i);
    k=i;

    for(j=i;j<=n-1;j++)
    {
    if(z>*(t+j))
    {z=*(t+j);
     k=j;
    }
    }
    buf=*(t+i);
    *(t+i)=*(t+k);
    *(t+k)=buf;
    }
    }

    void minimum(float *t, int n)
    {
    int i;
    float min,max;

    min=*t;
    max=*t;

    for(i=0;i<=n-1;i++)
    {
    if (min>*(t+i))
    {
    min=*(t+i);
    }
    }
    for(i=0;i<=n-1;i++)
    {
    if (max<*(t+i))
    {
    max=*(t+i);
    }
    }


    printf("Wartosc najmniejsza= %2.1f\n",min);
    printf("Wartosc najwieksza= %2.1f\n",max);
    }

    Macierze - mnożenie
    Code:
    #pragma argsused
    
    #include<stdio.h>
    #include<conio.h>
    #include<stdlib.h>
    #include<alloc.h>
    void wpisywanie(float **t,int lw,int lk);
    void wypisywanie(float **t,int lw,int lk);
    float **rezerwacja(int lw,int lk);
    void zwolnienie(float **t,int lw,int lk);
    void mnozenie(float **t1,float **t2,float **t3,int lw,int lk);
    float wyznacznik(float **t1);
    int main()
    {
    int lw1,lk1,lw2,lk2;
    float **x,**y,**z;
    printf("Liczba wierszy macierzy 1:\t");
    scanf("%d",&lw1);
    printf("Liczba kolumn macierzy 1:\t");
    scanf("%d",&lk1);
    x=rezerwacja(lw1,lk1);
    wpisywanie(x,lw1,lk1);
    printf("Liczba wierszy macierzy 2:\t");
    scanf("%d",&lw2);
    printf("Liczba kolumn macierzy 2:\t");
    scanf("%d",&lk2);
    y=rezerwacja(lw2,lk2);
    wpisywanie(y,lw2,lk2);
    clrscr();
    wypisywanie(x,lw1,lk1);
    wypisywanie(y,lw2,lk2);
    lw1=lw2;lk1=lk2;
    z=rezerwacja(lw1,lk1);
    mnozenie(x,y,z,lw1,lk1);
    wypisywanie(z,lw1,lk1);
    printf("Wyznacznik macierzy 3 jest rowny %f",wyznacznik(z));
    zwolnienie(x,lw1,lk1);
    zwolnienie(y,lw2,lk2);
    zwolnienie(z,lw1,lk1);
    getch();
    return 0;
    }

    float **rezerwacja(int lw,int lk)
    {
    float **t;
    int i;
    t=(float**)calloc(lw,sizeof(float));
    for(i=0;i<lw;i++)
    *(t+i)=(float*)calloc(lk,sizeof(float));
    return t;
    }

    void zwolnienie(float **t,int lw,int lk)
    {
    int i;
    for(i=0;i<lw;i++)
    free(*(t+i));
    free(t);
    }

    void wpisywanie(float **t,int lw,int lk)
    {
    int i,j;
    for(i=0;i<lw;i++)
    for(j=0;j<lk;j++)
    {
    printf("t[%d][%d]=",i,j);
    scanf("%f",*(t+i)+j);
    }
    }

    void wypisywanie(float **t,int lw,int lk)
    {
    int i,j;
    for(i=0;i<lw;i++)
    {
    printf("\n");
    for(j=0;j<lk;j++)
    printf("%1.0f\t",*(*(t+i)+j));
    }
    printf("\n");
    }

    void mnozenie(float **t1,float **t2,float **t3,int lw,int lk)
    {
    int i,j,k,m;
    for(i=0;i<lw;i++)
    for(j=0;j<lk;j++)
    {
    *(*(t3+i)+j)=0;
    for(k=0;k<lk;k++)
    {
    m=*(*(t1+i)+k)**(*(t2+k)+j);
    *(*(t3+i)+j)=*(*(t3+i)+j)+m;
    }
    }
    }
    float wyznacznik(float **t1)
    {
    float x;
    x= t1[0][0]*t1[1][1] - t1[0][1]*t1[1][0] ;
    return x;
    }



    Miłego programowania...pozdrawiam

  • #2 21 Gru 2007 14:09
    dextero
    Poziom 9  

    wielki dzieki napewno wykorzystam co nieco :) nie ma łatwo na pierwszym roku polibudy hehe pozdro

  • #3 21 Gru 2007 23:10
    Samuraj
    Poziom 34  

    Jak dla mnie to dostał byś lacza, bez sprawdzania.
    Te programy nie są czytelne,czy słyszałeś o wcięciach i formatowaniu składni :?:
    Pierwszy przykład z brzegu:

    Code:

    #include<conio.h>
    #include<stdio.h>
    #include<math.h>
    #pragma argsused
    float sinh1(float x, float d);

    int main()
    {
       float x,d;
       printf("\t\tPROGRAM OBLICZA WARTOSC FUNKCJI SINUSA HIPERBOLICZNEGO\n\n");
       printf("Podaj x\n");
       scanf("%f",&x);
       printf("Podaj dokladnosc\n");
       scanf("%f",&d);
       printf("\n\nWartosc funkcji wynosi : %10.8f\n\n",sinh1(x,d));
       printf("Z funkcji standardowej wartosc wynosi: %10.8f",sinh(x));

       getch();
       return(0);
    }


    float sinh1(float x,float d)
    {
       float a,suma; int n;
       a=x;
       suma=x;
       n=3;
       do
       {
          a=a*x*x/(n*(n-1));
          suma=suma+a;
          n=n+2;
       }
       while (a>d);

       return suma;
    }

    O ile łatwiej analizuje się taki program.

  • #4 22 Gru 2007 11:43
    marihires
    Poziom 29  

    Programy te w powstałych wersjach miały wszystkie wcięcia etc. jedynie zostawały szybko wklejane podczas zajęć do notatnika i wrzucane na poczte...dlatego po drodze zgubiły sie te ozdobniki...ja tylko je tu umieszczam z tego względu że mogą się przydać...są za darmo do ściągnięcia,nic za nie nie chce...a jeszcze ktoś sie czepia...Pozdrawiam.

TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo