Standardowe biblioteki C UL

background image

U

N I W E R S Y T E T

Ł

Ó D Z K I

K

ATEDRA

I

NFORMATY

KI

1


Biblioteka "stdlib.h" – wybrane funkcje

void exit( int status );

- przerywa działanie programu opró

żnia wszystkie bufory i zwraca kod do

systemu operacyjnego – status

int atoi( const char *string );

- konwertuje ła

ńcuch na liczbę całkowitą typu int

long atol( const char *string );

- konwertuje ła

ńcuch na liczbę całkowitą typu long int

float atof( const char *string );

- konwertuje ła

ńcuch na liczbę zmiennoprzecinkową typu float

char *itoa( int value, char *string, int radix );

- konwertuje liczb

ę całkowitą typu int na łańcuch znaków

value - liczba konwertowan

string - wska

źnik na łańcuch (max długość 33 znaki)

radix - podstawa systemu przeliczania

char *fcvt( float value, int count, int *dec, int *sign );

- konwertuje liczb

ę zmiennoprzecinkową typu float na łańcuch znaków

zwracaj

ąc wskaźnik na statycznie zaalokowany bufor, kolejne wywołanie funkcji

niszczy poprzednio otrzymany rezultat

value

- liczba konwertowan

ą

count

- liczba cyfr po przecinku

dec

- wska

źnik gdzie zwracana jest pozycja kropki względem

pocz

ątku łańcucha

sign

- wska

źnik gdzie zwracana jest pozycja znaku względem

pocz

ątku łańcucha

int toupper( int c );

- przekształca liter

ę w jej duży odpowiednik

int tolower( int c );

- przekształca liter

ę w jej mały odpowiednik

int abs( int n );

- warto

ść bezwzględna

long labs( long n );

- warto

ść bezwzględna dla liczb long int

int rand( void );

- generuje warto

ść losową z przedziału (0,RAND_MAX)

void srand( unsigned int seed );

- inicjalizuje generator liczb losowych warto

ścią seed

background image

U

N I W E R S Y T E T

Ł

Ó D Z K I

K

ATEDRA

I

NFORMATY

KI

2

Biblioteka "stdlib.h" – wybrane funkcje, c.d.

void *malloc( size_t size );

- alokuje pami

ęć o rozmiarze size bajtów i zwraca wskaźnik na początek

zaalokowanego obszaru

void *calloc( size_t num, size_t size );

- alokuje pami

ęć na num elementów o rozmiarze size bajtów i zwraca wskaźnik

na pocz

ątek zaalokowanego obszaru. Zeruje zaalokowany obszar pamięci

void free( void *memblock );

- zwalnia zaalokowany obszar pami

ęci

background image

U

N I W E R S Y T E T

Ł

Ó D Z K I

K

ATEDRA

I

NFORMATY

KI

3

Biblioteka "string.h" – wybrane funkcje

int sprintf( char *buffer, const char *format [, argument] ... );

- działa analogicznie do printf zapisuj

ąc sformatowany łańcuch do łańcucha

buffer. Zwraca warto

ść zawiera liczbę zapisanych znaków

char *strcat( char *strDestination, const char *strSource );

- dodaje ła

ńcuch strSource do strDestination. Zwracana wartość: wskaźnik do

ła

ńcucha do którego dołączany jest tekst

char *strncat( char *strDest, const char *strSource, size_t count );

- analogicznie jak strcat lecz kopiuje nie wi

ęcej niż count znaków

char *strchr( const char *string, int c );

- wyszukuje pierwsze wyst

ąpienie znaku c w łańcuchu string . Zwracana

warto

ść: wskaźnik na znaleziony znak bądź NULL jeśli nie znaleziony

char *strrchr( const char *string, int c );

- analogicznie jak strstr lecz od ko

ńca

int strcmp( const char *string1, const char *string2 );

- porównanie dwóch ła

ńcuchów. Zwracane wartośći:

< 0 - string1 mniejszy ni

ż string2

= 0 - string1 i string2 identyczne

> 0 - string1 wi

ększy niż string2

int strncmp( const char *string1, const char *string2, size_t count );

- analogicznie jak strcmp lecz nie wi

ęcej niż count znaków

char *strcpy( char *strDestination, const char *strSource );

- kopijuje ła

ńcuch strDestination do strSource usuwając poprzednią wrtość

strDestination. Zwracana warto

ść: wskaźnik do łańcucha do którego kopiowany

jest tekst

char *strncpy( char *strDest, const char *strSource, size_t count );

- analogicznie jak strcpy lecznie wi

ęcej jak count znaków

size_t strlen( const char *string );

- zwraca długo

ść łańcucha string

char *strlwr( char *string );

- przekształca wszystkie du

że litery łańcucha string na małe

char *_strupr( char *string );

- przekształca wszystkie małe litery ła

ńcucha string na duże

char *strpbrk( const char *string, const char *strCharSet );

- wyszukuje pierwszego wyst

ąpienia jednego ze znaków z łańcucha strCharSet

w ła

ńcuchu string

background image

U

N I W E R S Y T E T

Ł

Ó D Z K I

K

ATEDRA

I

NFORMATY

KI

4

Biblioteka "math.h" – wybrane funkcje

float acos( float x );

- oblicza arccos(x)

float asin( float x );

- oblicza arcsin(x)

float atan( float x );

- oblicza arctg(x)

float atan2( float x , float y );

- oblicza arctg(x/y)

float ceil( float x );

- oblicza najmniejsz

ą liczbę całkowitą większą lub równą x

float floor( float x );

- oblicza najwi

ększą liczbę całkowitą mniejszą lub równą x

float cos( float x );

- oblicza cos(x)

float cosh( float x );

- oblicza hiperboliczny cos(x)

float exp( float x );

- oblicza e

x

float fabs( float x );

- oblicza warto

śc bezwględną

float log( float x );

- oblicza logarytm naturalny ln(x)

float log10( float x );

- oblicza logarytm dziesi

ętny log(x)

float pow( float x, float y );

- oblicza x

y

float sin( float x );

- oblicza sin(x)

float sinh( float x );

- oblicza hiperboliczny sin(x)

float sqrt( float x );

- oblicza pierwiatek kwadratowy z x

float tan( float x );

- oblicza tg(x)

float tanh( float x );

- oblicza hiperboliczny tg(x)

background image

U

N I W E R S Y T E T

Ł

Ó D Z K I

K

ATEDRA

I

NFORMATY

KI

5

Biblioteka "stdio.h" – wybrane funkcje

char *gets( char *buffer );

- wczytuje linie z urz

ądzenia wejściowego

int printf( const char *format [, argument]... );

- drukuje sformatowany tekst na urz

ądzeniu wyjściowym

int putchar( int c );

- wysyła znak c na urz

ądzenie wyjściowe

int puts( const char *string );

- wysyła ła

ńcuch string na urządzenie wyjściowe

int scanf( const char *format [,argument]... );

- wczytuje sformatowany tekst z urz

ądzenia wejściowego

FILE *fopen( const char *filename, const char *mode );

- otwiera plik o nazwie filename w trybie wyszczególnionym w mode. Warto

ść

zwracana: wska

źnik na otwarty plik lub NULL gdy nie udało się otworzyc pliku.

Domy

ślnie plik otwierany w trybie tekstowym.

mode – ła

ńcuch opisujący tryb otwarcia pliku:

"r"

- plik otwierany do odczytu. Je

śli plik istnieje funkcja zwraca błąd

"w"

- pusty plik otwierany to zapisu. Je

śli plik istnieje jego zawartość

jest kasowana

"a"

- plik otwierany w trybie "doł

ączania". Jeśli plik istnieje znacznik

pliku ustawiany na ko

ńcu, w przeciwnym razie plik jest tworzony i

znacznik ustawiany na pocz

ątku

"r+" - plik otwierany w trybie odczytu i zapisu. Plik musi istnie

ć

"w+" - pusty plik otwierany w trybie odczytu i zapisu. Je

śli plik istnieje

jego zawarto

ść jest kasowana

"a+" - plik otwierany w trybie "doł

ączania" i czytania. Jeśli plik istnieje

znacznik pliku ustawiany na ko

ńcu, w przeciwnym razie plik jest

tworzony i znacznik ustawiany na pocz

ątku

"t"

- plik otwierany w trybie tekstowym

"b"

- plik otwierany w trybie binarnym

int fclose( FILE *stream );

- zamyka plik. stream : wska

źnik na plik. Wartość zwracana: 0 – gdy zamknięcie

si

ę powidło, EOF w przeciwnym wypadku

int feof( FILE *stream );

- sprawdza czy znacznik znajduje si

ę na końcu pliku. Wart. zwr. 1 – tak, 0 – nie

background image

U

N I W E R S Y T E T

Ł

Ó D Z K I

K

ATEDRA

I

NFORMATY

KI

6

Biblioteka "stdio.h" – wybrane funkcje, c.d.

int fseek( FILE *stream, long offset, int origin );

- przenosi znacznik pliku w okre

ślone miejsce. Wart. zwr.: 0 – gdy się powiodło,

<>0 – w przeciwnym razie. Znacznik przesuwany jest do pozycji origin
wzgl

ędem pozycji offset, która może przyjmować wartości:

SEEK_CUR – obecna pozycja znacznika pliku

SEEK_END – koniec pliku

SEEK_SET – pocz

ątek pliku


long
ftell( FILE *stream );

- zwraca obecn

ą pozycję znacznika pliku

char *fgets( char *string, int n, FILE *stream );

- czyta jedn

ą linię pliku (do napotkania znaku końca lini -\n), lub wczytania n-1

znaków. Wart. zwr.: wska

żnik na łańcuch lub NULL w przypadku błędu

int fputs( const char *string, FILE *stream );

- zapisuje ła

ńcuch do pliku. Wart. zwr. EOF gdy błąd

int fgetc( FILE *stream );

- czyta jeden znak z pliku. Wart. zwr.: kod znaku lub EOF gdy osi

ągnięto koniec

pliku

int fputc( int c, FILE *stream );

- zapisuje znak do pliku. Wart. zwr. EOF gdy bł

ąd

int fprintf( FILE *stream, const char *format [, argument ]...);

- zapisuje do pliku sformatowany tekst. Wart. zwr.: ilo

ść znaków zapisanych do

pliku lub warto

ść<0 gsy błąd

int fscanf( FILE *stream, const char *format [, argument ]... );

- wczytuje sformatowany tekst z pliku. Wart. zwr.: ilo

ść przeczytanych pól, 0 –

gdy

żadne pole nie zostało przeczytane, EOF gdy błąd lub koniec pliku

int fflush( FILE *stream );

- opró

żnia bufory pliku. Wart. zwr.: 0 – operacja powidła się, EOF – błąd

size_t fread( void *buffer, size_t size, size_t count, FILE *stream );

- czyta z pliku niesformatowane dane do bufora buffer. Ilo

ść danych: count o

rozmiarze size. Wart. zwr.: ilo

ść przeczytanych elementów

size_t fwrite( const void *buffer, size_t size, size_t count, FILE *stream );

- zapisuje do pliku niesformatowane dane z bufora buffer. Ilo

ść danych: count o

rozmiarze size. Wart. zwr.: ilo

ść zapisanych elementów

background image

U

N I W E R S Y T E T

Ł

Ó D Z K I

K

ATEDRA

I

NFORMATY

KI

7

Przykład 1.

Przeliczanie

°

C na

°

F, wersja 1

#include <stdio.h>

main()

{

int lower, upper, step;

float fahr, celsius;

lower=0;

upper=300;

step=20;

fahr=lower;

while(fahr<=upper)

{

celsius=(5.0/9.0)*(fahr-32.0);

printf("%4.0f %6.1f\n", fahr, celsius);

fahr+=step;

}

}

Przykład 2.

Przeliczanie

°

C na

°

F, wersja 2

#include <stdio.h>

main()

{

int fahr;

for(fahr=0;fahr<=300;fahr+=20)

printf("%4d %6.1f\n", fahr, (5.0/9.0)*(fahr-32.0));

}

Przykład 3.

Zliczanie liczby znaków wprowadzonych z

klawiatury, wersja 1

#include <stdio.h>

main()

{

long nc;

nc=0;

while(getchar()!=EOF)

++nc;

printf("%ld\n",nc);

}

Przykład 4.

Zliczanie liczby znaków wprowadzonych z

klawiatury, wersja 2

#include <stdio.h>

main()

{

double nc;

for (nc=0;getchar()!=EOF;nc++)

;

printf("%.0f\n",nc);

}

background image

U

N I W E R S Y T E T

Ł

Ó D Z K I

K

ATEDRA

I

NFORMATY

KI

8

Przykład 5.

Zliczanie liczby wierszy

#include <stdio.h>

main()

{

int c,nl;

nl=0;

while((c=getchar())!=EOF)

if (c=='\n')

++nl;

printf("%d\n",nl);

}

Przykład 6.

Zliczanie liczby znaków, słów i linii

#include <stdio.h>

#define YES 1

#define NO 0

main()

{

int c,nl,nw,nc,inword;

inword=NO;

nl=nw=nc=0;

while((c=getchar())!=EOF)

{

nc++;

if (c=='\n')

nl++;

if (c==' ' || c=='\n' || c=='\t')

inword=NO;

else

if (inword==NO)

{

inword=YES;

nw++;

}

}

printf("%d %d %d\n",nl,nw,nc);

}

background image

U

N I W E R S Y T E T

Ł

Ó D Z K I

K

ATEDRA

I

NFORMATY

KI

9

Przykład 7.

Zliczanie liczby wystąpień białych znaków, cyfr i

pozostałych

#include <stdio.h>

main()

{

int c,i,nwhite,nother;

int ndigit[10];

nwhite=nother=0;

for(i=0;i<10;i++)

ndigit[i]=0;

while((c=getchar())!=EOF)

if(c>='0' && c<='9')

ndigit[c-'0']++;

else

if(c==' ' || c=='\n' || c=='\t')

nwhite++;

else

nother++;

printf("Cyfry=");

for(i=0;i<10;i++)

printf(" %d",ndigit[i]);

printf("\nBiale znaki = %d, inne = %d\n",nwhite,nother);

}

Przykład 8.

Zliczanie liczby znaków w pliku tekstowym

#include <stdio.h>

main()

{

FILE *PlikWe;

long nc;

nc=0;

if ((PlikWe=fopen("test.txt","rt"))!=NULL)

{

while(fgetc(PlikWe)!=EOF)

++nc;

fclose(PlikWe);

printf("%ld\n",nc);

}

else

printf("Nie mozna otworzyc pliku\n");

}

background image

U

N I W E R S Y T E T

Ł

Ó D Z K I

K

ATEDRA

I

NFORMATY

KI

10

Przykład 9.

#include <stdio.h>

main()

{

FILE *PlikWe;

int c,nl;

nl=0;

if ((PlikWe=fopen("test.txt","rt"))!=NULL)

{

while((c=fgetc(PlikWe))!=EOF)

if (c=='\n')

++nl;

fclose(PlikWe);

printf("%d\n",nl);

}

else

printf("Nie mozna otworzyc pliku\n");

}

Przykład 10.

#include <stdio.h>

enum InWordType

{

YES,

NO

};

main()

{

FILE *PlikWe;

int c,nl,nw,nc;

enum InWordType inword;

inword=NO;

nl=nw=nc=0;

if ((PlikWe=fopen("test.txt","rt"))!=NULL)

{

while((c=fgetc(PlikWe))!=EOF)

{

nc++;

if (c=='\n')

nl++;

if (c==' ' || c=='\n' || c=='\t')

inword=NO;

else

if (inword==NO)

{

inword=YES;

nw++;

}

}

printf("%d %d %d\n",nl,nw,nc);

fclose(PlikWe);

}

else

printf("Nie mozna otworzyc pliku\n");

}

background image

U

N I W E R S Y T E T

Ł

Ó D Z K I

K

ATEDRA

I

NFORMATY

KI

11

Przykład 11.

Metoda sortowania przez wstawianie proste

Algorytm
Nale

ży wykonać następujące kroki aby posortować tablicę,

1. Ustaw i na 0

2. Ustaw j na (i + 1)

3. Je

ż

eli a[i] > a[j], zami

ę

n ich warto

ś

ci

4. Ustaw j na (j + 1). Je

ś

li j < n id

ź

do kroku 3

5. Ustaw i na (i + 1). Je

ż

eli i < (n – 1) Id

ź

do kroku 2

6. tablica a jest posortowana w kolejno

ś

ci rosn

ą

cej.

Uwaga : a jest tablic

ą zawierającą liczby do posortowania, n zawiera ilość elementów do posortowania.

#include <stdio.h>

void sort(int a[], int elements )

{

int i, j, temp;

i = 0;

while( i < (elements - 1) )

{

j = i + 1;

while( j < elements )

{

if( a[i] > a[j] )

{

temp = a[i];

a[i] = a[j];

a[j] = temp;

}

j++;

}

i++;

}

}

main()

{

int loop;

int numbers[] = { 10, 9, 8, 23, 19, 11, 2, 7, 1, 13, 12 };

printf("Before the sort the array was \n");

for( loop = 0; loop < 11; loop++ )

printf(" %d ", numbers[loop] );

sort( numbers, 11 );

printf("\nAfter the sort the array was \n");

for( loop = 0; loop < 11; loop++ )

printf(" %d ", numbers[loop] );

}

background image

U

N I W E R S Y T E T

Ł

Ó D Z K I

K

ATEDRA

I

NFORMATY

KI

12

Przykład 12.

Zliczenia liczby wystąpień bitu ‘1’ w zmiennej

‘unsigned char’

#include <stdio.h>

#include <stdlib.h>

unsigned char bitcount(unsigned char);

main()

{ unsigned char i8,count;

int i;

printf("Wprowadz liczbe (0 - 255 dziesietnie)\n");

scanf("%d",&i);

if (( i < 0 ) || (i > 255))

{

printf("Blad: Liczbs poza przezialem = %d\n", i);

exit(1);

}

i8 = (unsigned char) i;

count = bitcount(i8);

printf("\n\nIlosc bitow ustawionych na '1' w %d = %d\n",i,count);

}

unsigned char bitcount(unsigned char x)

{

unsigned char count;

for (count = 0; x!=0; x>>=1)

if ( x & 01 )

++count;

return count;

}

Przykład 13.

Rekurencyjne obliczanie silni

#include <stdio.h>

fact(int n)

{

if (n == 0)

return(1);

return(n * fact(n-1));

}

main()

{

int n, m;

printf("Wprowadz liczbe: ");

scanf("%d", &n);

m = fact(n);

printf("Silnia z %d wynosi %d.\n", n, m);

}

background image

U

N I W E R S Y T E T

Ł

Ó D Z K I

K

ATEDRA

I

NFORMATY

KI

13

Przykład 14.

Określanie czasu obliczeń

#include <stdio.h>

#include <math.h>

#include <time.h>

main()

{

long i;

time_t t1,t2;

(void)time(&t1);

for (i=1;i<=1000;++i)

printf("%5ld %+15.13f %+15.13f %+20.18f\n",i,

sin(i/100.),

cos(i/100.),

sqrt(sin(i/200.)*sin(i/200.)+cos(i/200.)*cos(i/200.)));

(void)time(&t2);

printf("\nCzas potrzebny do obliczenie = %d sekund\n", (int)t2-t1);

}

background image

U

N I W E R S Y T E T

Ł

Ó D Z K I

K

ATEDRA

I

NFORMATY

KI

14

Całkowanie numeryczne

x

0

x

N

x

N + 1

x

1

x

2

h

Metoda trapezów:

( )

( )

f

h

O

f

f

h

dx

x

f

x

x

′′

+

+

=

3

2

1

2

1

2

1

2

1

Metoda Simpsona:

( )

(

)

)

4

(

5

3

2

1

3

1

3

4

3

1

3

1

f

h

O

f

f

f

h

dx

x

f

x

x

+

+

+

=

Metoda Simpsona 3/8:

( )

(

)

)

4

(

5

4

3

2

1

8

3

8

9

8

9

8

3

4

1

f

h

O

f

f

f

f

h

dx

x

f

x

x

+

+

+

+

=



Przykład 15.

#define FUNC(x) ((*func)(x))

double trapzd(double (*func)(double), double a, double b, int n)

{

double x,tnm,sum,del;

static double s;

int it,j;

if (n == 1)

{

return (s=0.5*(b-a)*(FUNC(a)+FUNC(b)));

}

else

{

for (it=1,j=1;j<n-1;j++) it <<= 1;

tnm=it;

del=(b-a)/tnm;

x=a+0.5*del;

for (sum=0.0,j=1;j<=it;j++,x+=del) sum += FUNC(x);

s=0.5*(s+(b-a)*sum/tnm);

return s;

}

}

background image

U

N I W E R S Y T E T

Ł

Ó D Z K I

K

ATEDRA

I

NFORMATY

KI

15

Przykład 16.

Całkowanie metodą trapezów i Simpsona

#define EPS 1.0e-6

#define JMAX 20

double qtrap(double (*func)(double), double a, double b)

{

int j;

double s,olds;

olds = -1.0e30;

for (j=1;j<=JMAX;j++)

{

s=trapzd(func,a,b,j);

if (fabs(s-olds) < EPS*fabs(olds)) return s;

if (s == 0.0 && olds == 0.0 && j > 6)return s;

olds=s;

}

return 0.0;

}

float qsimp(float (*func)(float), float a, float b)

{

int j;

float s,st,ost,os;

ost = os = -1.0e30;

for (j=1;j<=JMAX;j++)

{

st=trapzd(func,a,b,j);

s=(4.0*st-ost)/3.0;

if (fabs(s-os) < EPS*fabs(os)) return s;

if (s == 0.0 && os == 0.0 && j > 6) return s;

os=s;

ost=st;

}

return 0.0;

}

int main()

{

double res1,res2;

res1=qtrap(sin,0,1);

res2=qsimp(sin,0,1);

printf("%f, %f\n",res1,res2);

}

background image

U

N I W E R S Y T E T

Ł

Ó D Z K I

K

ATEDRA

I

NFORMATY

KI

16

Generatory liczb pseudoloswych o rozkładzie równomioernym

I

j+1

= a I

j

+ c


Standardowe funkcje:

#include <stdlib.h>

void srand(unsigned seed);

int rand(void);

Aby otrzyma

ć

liczb

ę

z przedziału [0,1]:

x = rand()/(RAND_MAX+1.0);


Przykład prostego generatora liczb pseudolosowych:

unsigned long next=1;

int rand(void)

{

next = next*1103515245 + 12345;

return (unsigned int)(next/65536) % 32768;

}

void srand(unsigned int seed)

{

next=seed;

}

Generator Park’a and Miller’a (okres 2

31

-2

2.1

×

10

9

):

#define IA 16807

#define IM 2147483647

#define AM (1.0/IM)

#define IQ 127773

#define IR 2836

#define MASK 123459876

float ran0(long *idum)

{

long k;

float ans;

*idum ^= MASK;

idum. k=(*idum)/IQ;

*idum=IA*(*idum-k*IQ)-IR*k;

if (*idum < 0) *idum += IM;

ans=AM*(*idum);

*idum ^= MASK;

return ans;

}

Bardzo szybki, trywialny generator:

idum = 1664525L*idum + 1013904223L;

background image

U

N I W E R S Y T E T

Ł

Ó D Z K I

K

ATEDRA

I

NFORMATY

KI

17

Sortowanie

Metoda sortowania przez wstawianie proste

Sortowanie tablicy w miejscu:

void piksrt(int n, float arr[])

{

int i,j;

float a;

for (j=2;j<=n;j++)

{

a=arr[j];

i=j-1;

while (i > 0 && arr[i] > a)

{

arr[i+1]=arr[i];

i--;

}

arr[i+1]=a;

}

}

Sortowanie tablicy w miejscu wraz z tablic

ą

z ni

ą

sprz

ęż

on

ą

:

void piksr2(int n, float arr[], float brr[])

{

int i,j;

float a,b;

for (j=2;j<=n;j++)

{

a=arr[j];

b=brr[j];

i=j-1;

while (i > 0 && arr[i] > a)

{

arr[i+1]=arr[i];

brr[i+1]=brr[i];

i--;

}

arr[i+1]=a;

brr[i+1]=b;

}

}

background image

U

N I W E R S Y T E T

Ł

Ó D Z K I

K

ATEDRA

I

NFORMATY

KI

18

Metoda sortowania Shell:

void shell(unsigned long n, float a[])

{

unsigned long i,j,inc;

float v;

inc=1;

do

{

inc *= 3;

inc++;

} while (inc <= n);

do

{

inc /= 3;

for (i=inc+1;i<=n;i++)

{

v=a[i];

j=i;

while (a[j-inc] > v)

{

a[j]=a[j-inc];

j -= inc;

if (j <= inc) break;

}

a[j]=v;

}

} while (inc > 1);

}

background image

U

N I W E R S Y T E T

Ł

Ó D Z K I

K

ATEDRA

I

NFORMATY

KI

19

Obliczanie miejsc zerowych

Metoda bisekcji:

#include <math.h>

#define JMAX 40 //Maximum allowed number of bisections.

float rtbis(float (*func)(float), float x1, float x2, float xacc)

{

int j;

float dx,f,fmid,xmid,rtb;

f=(*func)(x1);

fmid=(*func)(x2);

if (f*fmid >= 0.0)

{

printf("Błąd");

return 0.0;

}

rtb = f < 0.0 ? (dx=x2-x1,x1) : (dx=x1-x2,x2);

for (j=1;j<=JMAX;j++)\

{

fmid=(*func)(xmid=rtb+(dx *= 0.5));

if (fmid <= 0.0) rtb=xmid;

if (fabs(dx) < xacc || fmid == 0.0) return rtb;

}

printf("Błąd");

return 0.0;

}

background image

U

N I W E R S Y T E T

Ł

Ó D Z K I

K

ATEDRA

I

NFORMATY

KI

20

Metoda siecznych

f (x)

2

3

4

1

x

#include <math.h>

#define MAXIT 30

float rtsec(float (*func)(float), float x1, float x2, float xacc)

{

void nrerror(char error_text[]);

int j;

float fl,f,dx,swap,xl,rts;

fl=(*func)(x1);

f=(*func)(x2);

if (fabs(fl) < fabs(f))

{

xl=x2;

swap=fl;

fl=f;

f=swap;

}

else

{

xl=x1;

rts=x2;

}

for (j=1;j<=MAXIT;j++)

{

dx=(xl-rts)*f/(f-fl);

xl=rts;

fl=f;

rts += dx;

f=(*func)(rts);

if (fabs(dx) < xacc || f == 0.0) return rts;

}

printf("Błąd");

return 0.0;

}

background image

U

N I W E R S Y T E T

Ł

Ó D Z K I

K

ATEDRA

I

NFORMATY

KI

21

Metoda stycznych (Newtona-Raphsona)

1

2

3

x

f(x)



#include <math.h>

#define JMAX 20

float rtnewt(void (*funcd)(float, float *, float *), float x1, float

x2,float xacc)

{

int j;

float df,dx,f,rtn;

rtn=0.5*(x1+x2);

for (j=1;j<=JMAX;j++)

{

(*funcd)(rtn,&f,&df);

dx=f/df;

rtn -= dx;

if ((x1-rtn)*(rtn-x2) < 0.0)

{

printf("Błąd");

return 0.0;

}

if (fabs(dx) < xacc) return rtn;

}

printf("Błąd");

return 0.0;

}

background image

U

N I W E R S Y T E T

Ł

Ó D Z K I

K

ATEDRA

I

NFORMATY

KI

22

Obliczanie kodu Gray’a

0

0000

1

0001

2

0011

3

0010

4

0110

5

0111

6

0101

7

0100

8

1100

9

1101

10

1111

11

1110

12

1010

13

1011

14

1001

15

1000

// For zero or positive values of

i

s, return the Gray code of n;

// i

f is

is negative, return the inverse

unsigned long igray(unsigned long n, int is)

{

int ish;

unsigned long ans,idiv;

if (is >= 0)

return n ^ (n >> 1);

ish=1;

ans=n;

for (;;)

{

ans ^= (idiv=ans >> ish);

if (idiv <= 1 || ish == 16) return ans;

ish <<= 1;

}

}

4

3

2

1

0

MSB

LSB

i

4

3

2

1

0

G(i )

XOR

XOR

XOR

XOR

4

3

2

1

0

MSB

LSB

G(i )

4

3

2

1

0

i

XOR

XOR

XOR

XOR


Wyszukiwarka

Podobne podstrony:
Dodatek E Standardowa biblioteka ANSI C
Dodatek E Standardowa biblioteka ANSI C
Biblioteka Cyfrowa UL zostala udostepniona czytelnikom 1 kwietnia 2008 roku, Biblioteka Cyfrowa UŁ z
kod wizualny. standardy. scenariusze, Dziennikarstwo i komunikacja społeczna UŁ, NoK + PiM
Plan zajęć UŁ, Informacja naukowa i bibliotekoznastwo 2 semestr
c biblioteka standardowa, podręcznik programisty Y5F7SZG25QO5ALU4C6AMSXIKODGWUVID7RY665A
C Biblioteka standardowa, podręcznik programisty [HELION]
C Biblioteka standardowa Podrecznik programisty
C Biblioteka standardowa Podrecznik programisty cpbspp
Rymsza M (red ) Standardy współpracy administracji publicznej z sektorem pozarządowym Aneks 2 bibl
C Biblioteka standardowa Podrecznik programisty cpbspp
C Biblioteka standardowa Podręcznik programisty
C Biblioteka standardowa Podrecznik programisty
biblioteka standardowa
standard HL7
Metodologia SPSS Zastosowanie komputerów Golański Standaryzacja
standaryzacja w geomatyce
Wykł 1 Omówienie standardów

więcej podobnych podstron