Biblioteki
Biblioteki - rola
• Zawierają rozwiązania często
występujących problemów (iostream, string,
conio, ...),
• Zawierają rozwiązania szczegółowych
problemów (math),
• pozwalają lepiej zaplanować tworzenie
kodu programu, co ogranicza ryzyko
popełnienia błędu (przykład)
Biblioteki - przykład bez biblioteki
#include <iostream.h>
#include <math.h>
void wprowadz(int a[10], int &n)
{
cout<<"n="; cin>>n;
for (int i=1; i<=n; i++)
{
cout <<"a["<<i<<"]="; cin >>a[i];
}
}
//************************************************
void wariancja(int a[10], int &n, float &war)
{
float sr=0;
for (int i=1; i<=n; i++)
sr+=a[i];
sr/=n;
war=0;
for (int i=1; i<=n; i++)
war=war+(a[i]-sr)*(a[i]-sr);
war=sqrt(war/n);
}
//************************************************
main()
{ int n,a[10];
float war;
wprowadz(a,n);
wariancja(a,n,war);
cout <<"wariancja= "<<war;
getchar();
}
Biblioteki - własna biblioteka
#include <iostream.h>
#include <math.h>
int a[10], n; float war;
#include "c:\moje-f.h"
main()
{
wprowadz();
wariancja();
cout <<"wariancja= "<<war;
getchar();
}
Biblioteki - własna biblioteka
Treść pliku moje-f.h
void wprowadz()
{
cout<<"n="; cin>>n;
for (int i=1; i<=n; i++)
{
cout <<"a["<<i<<"]="; cin >>a[i];
}
}
//************************************************
void wariancja()
{
float sr=0;
for (int i=1; i<=n; i++)
sr+=a[i];
sr/=n;
war=0;
for (int i=1; i<=n; i++)
war=war+(a[i]-sr)*(a[i]-sr);
war=sqrt(war/n);
}
Biblioteki standardowe
• Znajdują się w katalogu include przy standardowej instalacji,
• Najpopularniejsze to:
– iostream.h - operacje wejścia wyjścia,
– string.h - definicje funkcji operujących na napisach,
– assert.h - zawiera macro assert (asercja),
– conio.h - zarządza operacjami we/wy na konsoli MS-DOS,
– dirent.h - zarządza katalogami i ścieżkami dostępu w MS-DOS,
– dos.h - zawiera struktury danych i funkcje do wspierania MS-DOS dla rodziny
procesorów Intel,
– float.h - zarządzanie liczbami rzeczywistymi,
– fstream.h - zarządzanie plikami,
– time.h - narzędzia do odczytywania, interpretacji i prezentacji czasu
– math.h - zawiera definicje popularnych funkcji matematycznych,
– limits.h - ograniczenia dla typów danych,
– stdio.h - operacje wejścia wyjścia (wersje nieobiektowe).
Biblioteki - wybrane zastosowania
• WE/WY z konsoli (wersje obiektowe)
#include <iostream.h>
void main (void)
{ int i; long l; char c; float f; double d; char t[50];
/*int */ cout<<"Podaj int"; cin>>i; cout <<i;
/*long*/ cout<<"Podaj long"; cin>>l; cout <<l;
/*char*/ cout<<"Podaj char"; cin>>c; cout <<c;
/*float*/ cout<<"Podaj float"; cin>>f;cout<<f;
/*double*/cout<<"Podaj double"; cin>>d;cout<<d;
/*text*/cout<<"Podaj tekst"; cin>>t;cout<<t;
}
Biblioteka assert.h
• Wiele kompilatorów oferuje makro assert(). To makro zwraca
wartość TRUE, jeśli jego parametr ma wartość TRUE i
podejmuje pewną akcję w przypadku, gdy jego parametr ma
wartość FALSE. Wiele kompilatorów przerywa działanie
programu w przypadku, gdy argument tego makra nie jest
spełniony; inne zgłaszają wtedy wyjątek.
#include <assert.h>
#include <conio.h>
int main(int argc, char **argv)
{
int x;
cin>>x;
assert(x);
getch();
return 0;
}
Biblioteka string.h
• Funcja strcat - łączy teksty
• Składnia:
– char *strcat(char *dest, const char *src);
• Funcja strcopy - kopiuje tekst do zmiennej,
• Składnia:
– char * StrCopy(char * Dest, char * Source);
• Funkcja strchr - podaje znak odpowiadający danemu kodowi,
• składnia:
– char *strchr( char *s, int c);
• Funkcja strcmp - porównuje teksty
• Składnia:
– int strcmp(const char *s1, const char *s2);
Biblioteka string.h
• Funkcja strlen - podaje ilość znaków w
napisie
• Składnia:
– size_t strlen(const char *s);
Przykład dla string.h
• Przykład:
#include <string.h>
#include <stdio.h>
int main(void)
{
char destination[25];
char *blank = " ", *c = "C++", *Borland = "Borland";
strcpy(destination, Borland);
strcat(destination, blank);
strcat(destination, c);
printf("%s\n", destination);
return 0;
}
Przykład dla string.h
#include <string.h>
#include <stdio.h>
int main(void)
{
char *buf1 = "aaa", *buf2 = "bbb", *buf3 = "ccc";
int ptr;
ptr = strcmp(buf2, buf1);
if (ptr > 0)
printf("buffer 2 is greater than buffer 1\n");
else
printf("buffer 2 is less than buffer 1\n");
ptr = strcmp(buf2, buf3);
if (ptr > 0)
printf("buffer 2 is greater than buffer 3\n");
else
printf("buffer 2 is less than buffer 3\n");
return 0;
}
Przykład dla string.h
#include <stdio.h>
#include <string.h>
int main(void)
{
char *string = "Borland International";
printf("%d\n", strlen(string));
return 0;
}
Funkcje z biblioteki math.h
• Ceil - zaokrągla do góry,
• składnia
– double ceil(double x);
• cosh - funkcja cosinus hiperboliczny
• Składnia:
– double cosh(double x);
• exp - funkcja exponent
• Składnia:
– double exp(double x);
• Funkcja fabs- wartość bezwzględna dla liczby double,
• Składnia:
– double fabs(double x);
Biblioteka math.h
•
Floor - zaokrągla w dół
•
Skladnia:
– double floor(double x);
•
pow - podnosi x do y
•
Składnia:
– double pow(double x, double y);
•
sqrt - pierwiastek kwadratowy z x
•
składnia:
– double sqrt(double x);
•
rand – zwraca liczbę losową z <0, RAND_MAX>
•
Składnia:
– int rand( void );
•
srand - inicjalizuje generator
•
Składnia:
– void srand( unsigned int );
Przykład dla math.h
#include <stdio.h>
#include <math.h>
int main(void)
{
double result;
double x = 4.0;
result = exp(x);
printf("'e' podniesione do potęgi %lf (e ^ %lf) = %lf\n",
x, x, result);
return 0;
}
Przykład dla math.h
#include <stdio.h>
#include <math.h>
int main(void)
{
float number = -1234.0;
printf("number: %f wartosc bezwzględna:
%f\n", number, fabs(number));
return 0;
}
acos
(funkcja) oblicza arcus cosinus, czyli odwrotno
ść
cosinus
(
cos
)
acos
h
(funkcja) oblicza area cosinus hiperboliczny, czyli odwrotno
ść
cosinus hiperboliczny (
cosh
)
asin
(funkcja) oblicza arcus sinus, czyli odwrotno
ść
sinus (
sin
)
asin
h
(funkcja) oblicza area sinus hiperboliczny, czyli odwrotno
ść
sinusa hiperboliczny (
sinh
)
atan
(funkcja) oblicza arcus tangens, czyli odwrotno
ść
tangent
(
tan
)
atan
h
(funkcja) oblicza area tangens hiperboliczny, czyli odwrotno
ść
tangent hiperboliczny (
tanh
)
cbrt
(funkcja)
oblicza pierwiastek sze
ś
cienny
ceil
(funkcja)
zaokr
ą
gla w g
ó
r
ę
liczb
ę
rzeczywist
ą
cos
(funkcja)
oblicza cosinus
cosh
(funkcja)
oblicza cosinus hiperboliczny
fabs
(funkcja)
zwraca warto
ść
bezwzgl
ę
dn
ą
z liczby
fdim
(funkcja)
zwraca dodatni
ą
r
óż
nic
ę
mi
ę
dzy argumentami
floor
(funkcja)
zaokr
ą
gla w d
ó
ł liczb
ę
rzeczywist
ą
fma
x
(funkcja)
por
ó
wnuje dwie liczby i zwraca wi
ę
ksz
ą
z nich
fmin
(funkcja)
por
ó
wnuje dwie liczby i zwraca mniejsz
ą
z nich
hyp
ot
(funkcja)
zwraca pierwiastek z sumy kwadrat
ó
w
argument
ó
w
labs
(funkcja)
zwraca warto
ść
bezwzgl
ę
dn
ą
z liczby
całkowitej typu long
log
(funkcja)
liczy logarytm naturalny z liczby x
log10
(funkcja)
liczy logarytm dziesi
ę
tny z liczby x
log2
(funkcja)
liczy logarytm o podstawie 2 z liczby x
pow
(funkcja)
oblicza pot
ę
g
ę
round
(funkcja)
zaokr
ą
gla warto
ść
do najbli
ż
szej liczby całkowitej
sin
(funkcja)
oblicza sinus
sinh
(funkcja)
oblicza sinus hiperboliczny
sqrt
(funkcja)
zwraca pierwiastek kwadratowy z liczby n
tan
(funkcja)
oblicza tangens
tanh
(funkcja)
oblicza tangens hiperboliczny
Operacje wejścia/wyjścia
Biblioteka stdio
• Ta biblioteka zawiera operacje na plikach, w tym
również na konsoli.
• Typem danej, na którym się tutaj operuje jest
FILE.
• Jest to struktura, która w każdym systemie może
być zdefiniowana inaczej
• Dostęp do struktury (wskaźnik) otrzymujemy od
funkcji fopen przy otwieraniu pliku i przekazać go
musimy do fclose chcąc go zamknąć (oczywiście
przez wskaźnik).
Operacje wejścia/wyjścia
Biblioteka stdio
• Korzystamy z trzech podstawowych strumieni plikowych,
które są predefiniowane (jako stałe typu FILE*):
– stdin - "standardowe wejście"
– stdout - "standardowe wyjście"
– stderr - "standardowe wyjście diagnostyczne„
• Przy uruchamianiu programów na konsoli, stdin to wejście
z klawiatury, a stdout i stderr są kierowane na ekran.
• Przy uruchamianiu programu można dokonać
przekierowania, jeśli wywołujemy program przez
polecenie w linii komend np. w systemie Unix (< dla stdin
i > dla stdout; unixowe powłoki pozwalają też na
przekierowanie stderr).
Funkcje podstawowe
• Najprostszą funkcją wypisującą dane danym
strumieniu jest fputs o następujących
argumentach:
– fputs( napis, strumien );
• Dla stdout jest krótsza forma, puts, która wymaga
tylko pierwszego argumentu.
• Można też wysłać tylko jeden znak przy pomocy
funkcji
– fputc (napis, strumien);
Funkcje podstawowe
•
Pojedyncze znaki wczytuje się funkcją
– fgetc (argumentem jest tylko strunień, a znak jest zwracany jako wynik).
•
Odpowiednikiem fgetc z argumentem stdin jest getchar() (bez
argumentów).
•
Należy jednak pamiętać, że konsola ma zazwyczaj liniowy (czyli
buforowany liniowo), a nie znakowy sposób wczytywania znaków (na
unixie można to zmienić); toteż nawet jeśli oczekuje się wprowadzenia
jednego znaku, to należy po jego wprowadzeniu nacisnąć Enter.
•
Wczytywany jest oczywiście znak (a więc dana typu char), natomiast
funkcje te zwracają int.
•
Jest to użyteczne, gdyż część typu int nie używana przez char pozostaje w
ten sposób zawsze zerem. Umożliwia to stwierdzenie końca pliku, co jest
sygnalizowane przez zwrócenie jako wyniku specjalnej stałej EOF; nie
odpowiadającej żadnemu znakowi. Oczywiście koniec pliku można też
sprawdzić wywołując funkcję feof() dla danego strumienia.
•
Znak po wczytaniu może zostać "cofnięty"; używa się w tym celu funkcji
ungetc( znak, strumien ). Aby nie wprowadzać zamieszania, należy jednak
jako argument podawać ten znak, który ostatnio wprowadzono.
•
Można wczytać również całą linię. Służy do tego funkcja `fgets':
– fgets( tablica, ile, strumien );
Funkcje podstawowe
• Jednymi z najbardziej przydatnych funkcji obsługujących
"porcje" danych są fread i fwrite. Mają dość podobne
nagłówki:
– size_t fread( void* ptr, size_t s, size_t n, FILE* stream );
– size_t fwrite( const void* ptr, size_t s, size_t n, FILE* stream );
• Funkcja fread wczytuje ze strumienia `n' elementów
wielkości `s' do tablicy podanej jako `ptr'.
• Funkcja fwrite - zapisuje, wedle tych samych reguł.
Wartością zwracaną jest ilość poprawnie wczytanych lub
zapisanych elementów (nie znaków!), czyli jest <=n. Nie
da się oczywiście odróżnić błędu operacji od końca pliku;
należy to sprawdzić przy pomocy feof() i ferror().
Biblioteki - wybrane zastosowania
W języku C (bez obiektów) wykorzystujemy funkcje printf i scanf do pisania i
czytania na konsoli.
#include <stdio.h>
void main (void)
{
int i; long l; char c; float f; double d; char t[50];
/*int */ printf("Podaj int”); scanf(“%d”,&i); printf(“%d”, i);
/*long*/ printf("Podaj long”); scanf(“%ld”,&l); printf(“%ld”, l);
/*char*/ printf("Podaj char”); scanf(“%c”,&c); printf(“%c”, c);
/*float*/ printf("Podaj float”); scanf(“%f”,&f); printf(“%f”, f);
/*float*/ printf("Podaj float”); scanf(“%g”,&f); printf(“%g”, f);
/*double*/ printf("Podaj double”); scanf(“%lf”,&d); printf(“%lf”, d);
/*double*/ printf("Podaj double”); scanf(“%lg”,&d); printf(“%lg”, d);
/*tekst*/ printf("Podaj tekst”); scanf(“%s”,t); printf(“%s”, t);
}
Zadanie 3.1
Napisz program który będzie obliczał potęgę zadanej liczby.
Zadnie 3.2
Napisać program, w który podajemy wartość promienia koła r, a w wyniku
dostajemy wartość pola koła i jego obwód. Proszę zapisać na początku
schemat blokowy tego algorytmu. Pamiętajmy w odpowiednim wymiarze.
Proszę wstawić odpowiednie komentarze
Zadnie 3.3
Napisać program, w który podajemy wartość promienia kuli r, a w wyniku
dostajemy wartość objętość i pole powierzchni kuli o zadanym promieniu.
Proszę zapisać na początku schemat blokowy tego algorytmu. Pamiętajmy
w odpowiednim wymiarze. Proszę wstawić odpowiednie komentarze
Zadanie 3.4
Napisać program, w wyniku którego dwie wczytane z klawiatury liczby
zostaną przeliczone z zastosowanie operatora reszty z dzielenia pierwszej
liczby przez drugą i na odwrót. Komentarz +opis.
Zadanie 3.5
Napisać program, w wyniku którego dwie wczytane z klawiatury liczby
zostaną „przetestowane” wszystkie operatory relacji dwuargumentowych.
Co zostanie wykonane jak zamiast „==” zapiszesz”=” ? Opis + Komentarz
Zadanie 3.6
Napisać program, w wyniku którego dla wczytanej z klawiatury liczby
zostanie wyliczona jej wartość bezwzględna.
Wskazówka - Jedyny operator trójargumentowy w języku C++.
Wyrażenie warunkowe, utworzone przez zastosowanie operatora "?:" ma
postać:
wyra
wyra
ż
ż
enie1 ? wyra
enie1 ? wyra
ż
ż
enie2 : wyra
enie2 : wyra
ż
ż
enie3
enie3