typ_zwracanej_wartości nazwa_funkcji(lista deklaracji argumentów) { ciało(treść) funkcji return Val; //zwracana wartość }

Podobne dokumenty
Języki i paradygmaty programowania 1 studia stacjonarne 2018/19

typ_zwracanej_wartości nazwa_funkcji(lista deklaracji argumentów) { ciało(treść) funkcji return Val; //zwracana wartość }

Funkcja, argumenty funkcji

Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur.

W języku C dostępne są trzy instrukcje, umożliwiające tworzenie pętli: for, while oraz do. for (w1;w2;w3) instrukcja

Języki i paradygmaty programowania 1 studia stacjonarne 2018/19. Lab 9. Tablice liczbowe cd,. Operacje na tablicach o dwóch indeksach.

Wstęp do Programowania, laboratorium 02

IX. Wskaźniki.(3 godz.)

Programowanie - wykład 4

int f(); //f - funkcja zwracająca wartość typu int int (*f)(); //f - wskaźnik do funkcji zwracającej wartość typu int

Pliki. Informacje ogólne. Obsługa plików w języku C

Instrukcja wyboru, pętle. 2 wykład. Podstawy programowania - Paskal

4. Tablica dwuwymiarowa to jednowymiarowa tablica wskaźników do jednowymiarowych tablic danego typu.

Argumenty wywołania programu, operacje na plikach

Programowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Lab 9 Podstawy Programowania

Podstawy programowania skrót z wykładów:

Język C, tablice i funkcje (laboratorium, EE1-DI)

Zmienne, stałe i operatory

Programowanie w językach wysokiego poziomu

Lab 8. Tablice liczbowe cd,. Operacje macierzowo-wektorowe, memcpy, memmove, memset. Wyrażenie warunkowe.

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Pliki. Informacje ogólne. Obsługa plików w języku C

1 Podstawy c++ w pigułce.

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

Język C, tablice i funkcje (laboratorium)

1 Podstawy c++ w pigułce.

Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013

Podstawy programowania Laboratorium. Ćwiczenie 2 Programowanie strukturalne podstawowe rodzaje instrukcji

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Funkcje. Deklaracja funkcji. Definicja funkcji. Wykorzystanie funkcji w programie.

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 3 - sem.iii. Dr inż. M. Czyżak

Wykład VI. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Biblioteka standardowa - operacje wejścia/wyjścia

Podstawy Programowania Podstawowa składnia języka C++

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

Część 4 życie programu

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Wskaźniki. Informatyka

Język C zajęcia nr 5

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

4. Funkcje. Przykłady

Tablice, funkcje - wprowadzenie

2 Przygotował: mgr inż. Maciej Lasota

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

dr inż. Jarosław Forenc

5 Przygotował: mgr inż. Maciej Lasota

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Język ludzki kod maszynowy

Rekurencja (rekursja)

PRZYKŁADY OPERACJI PLIKOWYCH z wykorzystaniem biblioteki <stdio.h>

Język JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

PODSTAWY INFORMATYKI 1 PRACOWNIA NR 6

Podstawy programowania. Wykład 3 Konstrukcje sterujące. Krzysztof Banaś Podstawy programowania 1

Instrukcje sterujące. Programowanie Proceduralne 1

Programowanie komputerowe. Zajęcia 3

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

Programowanie strukturalne i obiektowe

Podstawy Programowania C++

Język C zajęcia nr 11. Funkcje

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Programowanie strukturalne i obiektowe. Funkcje

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

for (i=0; i<10; i=i+1) instrukcja; instrukcja zostanie wykonana 10 razy for (inicjalizacja; test; aktualizacja) instrukcja;

Wstęp do programowania

I - Microsoft Visual Studio C++

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

do instrukcja while (wyrażenie);

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Typy wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

KURS C/C++ WYKŁAD 2. char znak; znak = a ; Program 2 #include<stdio.h> void main() { char znak; while( (znak = getchar() )!= t ) putchar(znak); }

Pliki w C/C++ Przykłady na podstawie materiałów dr T. Jeleniewskiego

Pętla for. Wynik działania programu:

main( ) main( void ) main( int argc, char argv[ ] ) int MAX ( int liczba_1, liczba_2, liczba_3 ) źle!

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Funkcje i tablice. Elwira Wachowicz. 23 maja 2013

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

Programowanie I C / C++ laboratorium 02 Składnia pętli, typy zmiennych, operatory

Podstawy programowania C. dr. Krystyna Łapin

7 Przygotował: mgr inż. Maciej Lasota

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

Warto też w tym miejscu powiedzieć, że w C zero jest rozpoznawane jako fałsz, a wszystkie pozostałe wartości jako prawda.

Podział programu na moduły

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Tablice, funkcje, wskaźniki - wprowadzenie

Podstawy programowania w języku C

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk

Funkcje. czyli jak programować proceduralne. Programowanie Proceduralne 1

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Transkrypt:

Języki i paradygmaty programowania 1 studia stacjonarne 2018/19 Lab 2. Funkcje, argumenty funkcji, wskaźniki, adresy. Pętle. Operatory inkrementacji, dekrementacji, przypisania. Instrukcje goto, continue, break. Operacje na plikach. Projekt nr 1. 1. Podstawowe pojęcia: Funkcja w C (czasami nazywana podprogramem, rzadziej procedurą) to wydzielona część programu, która przetwarza argumenty i ewentualnie zwraca wartość, która następnie może być wykorzystana, jako argument w innych działaniach lub funkcjach. Funkcja może posiadać własne zmienne lokalne. Funkcje w C mogą zwracać dla tych samych argumentów różne wartości. Definicja funkcji: typ_zwracanej_wartości nazwa_funkcji(lista deklaracji argumentów) ciało(treść) funkcji return Val; //zwracana wartość o Funkcja przed użyciem musi być zadeklarowana/zdefiniowana; o Typ zmiennej Val musi być zgodny z typ_zwracanej_wartości; o Typy argumentów formalnych w definicji i deklaracji funkcji muszą być zgodne z typami argumentów aktualnych (w miejscu wywołania funkcji); o Typ void przekazywany jako argument funkcji oznacza, że funkcja nie pobiera żadnych argumentów. Pojęcia: a. Parametr (argument formalny, parametr formalny) to zmienna z listy parametrów w definicji funkcji) b. Argument (argument aktualny, parametr aktualny) to zmienna (wartość) podawana podczas wywołania funkcji to, co podstawia użytkownik c. Return to słowo kluczowe języka C. W przypadku funkcji służy do: Przerwania funkcji (i przejścia do następnej instrukcji w funkcji wywołującej) Zwrócenia wartości 2. Przykład: funkcja power podnosi liczbę rzeczywistą x do potęgi całkowitej n. #include <stdio.h> double power(double base, int n); //deklaracja funkcji (prototyp) int main() int pow = 15; double a = 35.0; double res = 0.0; res = power(a, pow); //wywołanie funkcji printf("a = %le pow = %d a**pow = %le\n", a, pow, res); return 0; double power(double base, int n) //definicja funkcji int i; double res = 1.0; for (i = 1; i <= n; i++) res = res * base; return res; Wydział Fizyki, Matematyki i Informatyki Politechniki Krakowskiej 1

3. Funkcja nie musi zwracać żadnej wartości. void nazwa_funkcji(lista deklaracji argumentów) // instrukcje return; //nie koniecznie Należy jednak pamiętać, że może zdarzyć się taka sytuacja: void nazwa_funkcji(lista deklaracji argumentów) // instrukcje if (wyrażenie_logiczne) return; // dalszy ciąg instrukcji return; //nie koniecznie 4. Przekazywanie argumentów do funkcji przez wartość. Przekazywanie argumentów przez wartość - wywołując funkcję, wartości argumentów, z którymi ją wywołujemy, są kopiowane do funkcji. Oznacza to, że wewnątrz funkcji operujemy tylko na ich kopiach (tworzonych na stosie). Po zakończeniu działania funkcji, kopie te zostają zniszczone (usunięte ze stosu), a wszystkie zmiany wykonane na wartościach kopii przekazanych argumentów stracone. Przykład. Napisz program obliczający wartości kilku wyrażeń arytmetycznych dla danej wartości y. 1 = +1+2+3 6.4+ = +1+2+3 sin () = +1+2+3 1 = sin +1+2sin ()+3sin Jeżeli przyjmiemy, że 1 ()= + 1+2+3 To powyższe równania można zapisać krócej =() =(6.4+)() =( )sin =(sin) Przyjmując, że zmienna i jest typu int, dodatkowo policz wartość wyrażenia: =3.2() #include <stdio.h> #include <stdlib.h> #include <math.h> int main() int i; double y, al, be, ga, de, ep; Wydział Fizyki, Matematyki i Informatyki Politechniki Krakowskiej 2

double ff(double); printf("podaj liczbe rzeczywista "); scanf("%lf", &y); printf("podaj liczbe calkowita "); scanf("%d", &i); al = ff(y); be = (6.4 + y) * ff(y); ga = sin(y) * ff(y*y); de = ff(sin(y)); ep = ff((double)i)*3.2; printf("wyniki: %lf %lf %lf %lf %lf\n", al, be, ga, de, ep); // system("pause"); double ff(double x) double gg; gg = 1 / (x*x + sqrt(1 + 2 * x + 3 * x*x)); return gg; 5. Przekazywanie argumentów do funkcji przez wskaźnik. Wskaźnik - to specjalny rodzaj zmiennej, w której zapisany jest adres w pamięci komputera. Oznacza to, że wskaźnik wskazuje miejsce, gdzie zapisana jest jakaś informacja (np. zmienna typu liczbowego czy struktura). Warto też przytoczyć w tym miejscu definicję adresu pamięci - możemy powiedzieć, że adres to pewna liczba całkowita, jednoznacznie definiująca położenie pewnego obiektu w pamięci komputera. a) Przykład operacji pobrania adresu: double a=1; //definicja zmiennej typu double rezerwacja 8 bajtów pamięci double *b; /*definicja wskaźnika do zmiennej typu double; rezerwacja 4 B; ten wskaźnik teraz nie jest ustawiony */ b = &a; /*przypisanie zmiennej typu double * (wskaźnik do typu double) adresu zmiennej a; teraz zmienna b jest ustawiona*/ printf("rozmiar a = %d\n", sizeof(a)); // 8B printf("rozmiar b = %d\n", sizeof(b)); // 4B dla systemów 32-bitowych printf("a=%lf b=%d *b=%lf\n", a,b,*b); b) Przykład operacji dostępu do danych po adresie (operator wskazania pośredniego): double a = 3.14; double *b = NULL; //b = 0x0000000 double c = 0.0; /*inicjalizacja c = 0.0*/ b = &a; /*b = 0x0064ff12*/ c = *b; /* c = 3.14; *b to jest operator wskazania pośredniego*/ *b += a; /* *b L-value; *b = *b+a; Pod adresem b teraz jest zmienna o wartości 6.28; */ c = *b; /* c = 6.28;*/ printf("a = %le\n", a); /* wydruk: a = 6.280000e+00;*/ Przykład umożliwia zmianę wartości zmiennej a poprzez operacje wykonane na jej adresie w pamięci. Wydział Fizyki, Matematyki i Informatyki Politechniki Krakowskiej 3

Przekazywanie argumentów przez wskaźnik polega na przekazaniu adresu (np. zmiennej), a nie samej wartości. Dzięki temu funkcja może wykonywać operacje na oryginalnym obiekcie. #include <stdio.h> #include <stdlib.h> #include <math.h> int main() int i; double y, al; double *z; double ff(double *); printf("podaj liczbe rzeczywista "); scanf("%lf", &y); printf("podaj liczbe calkowita "); scanf("%d", &i); z = &y; printf("z = %p\n", z); al = ff(&y); //lub al = ff(z); printf("wyniki: %lf\n", al); printf("y=%lf\n", y); // system("pause"); double ff(double *x) double gg; printf("x = %p\n", x); gg = 1 / (*x * *x + sqrt(1 + 2 * *x + 3 * *x * *x)); *x = 12; //zmiana wartości y return gg; 6. Przekazywanie argumentów do funkcji przez referencję. Jest to niejawny sposób przekazywania zmiennych poprzez wskaźnik. Różni się formą zapisu. O referencji można myśleć jako o innej nazwie dla wskazywanego przez referencję obiektu. o przy definicji trzeba jednocześnie dokonać inicjalizacji, nie ma pustych referencji; o po inicjalizacji nie można już zmieniać celu referencji. Uwaga: w środowisku VS we właściwościach projektu ustawić opcje kompilacji: C/C++\Zaawansowane\Kompiluj jako: Domyślny void fun_3(int &k); int main() int i = 1; int &r = i; fun_3(i); printf("i=%d\n", i); r = 20; printf("i=%d\n", i); void fun_3(int &k) k = 10 * k; 7. Sposoby przekazywania argumentów do funkcji podsumowanie: Wydział Fizyki, Matematyki i Informatyki Politechniki Krakowskiej 4

8. Wskaźniki typ void * - definiowania wskaźników na dane dowolnego typu. Nie ma zmiennych typu void, można jednak tworzyć wskaźniki typu void *. Ze względu na zgodność z językiem C, wskaźnikom takim można przypisać adres dowolnego obiektu (lub wartość dowolnego wskaźnika), i zrzutować na dowolny inny typ wskaźnika, obchodząc tym samym kontrolę typów wykonywaną przez kompilator. int n = 10; void *p = &n; int *pn = (int *)p; printf("n = %d\n", *pn); Zdefiniowano wskaźnik *p i przypisano mu adres zmiennej całkowitej n. Ponieważ kompilator nie ma żadnej informacji o typie danych wskazywanych przez p nie wolno bezpośrednio wyłuskiwać danych wskazanych przez p. Aby uzyskać dostęp do danych, należy jawnie wskazać na ich typ. 9. Napisz program, który dla podanego promienia, w funkcji void kolo ( ) obliczy pole i obwód koła. Prototyp funkcji: void kolo(double r, double *w1, double *w2); 10. Napisz i przetestuj funkcję: void zamien(int *x, int *y); zamieniającą wartości dwóch zmiennych całkowitych (posługując się przekazywaniem przez zmienną). 11. Napisz funkcję, która policzy: +!" + #1 (1) 2+ =!" $+5 (2) 1 2 +!" + $1 #+5 (3) oraz poda numer wzoru, wg którego wartość z została policzona. 12. Napisz program, który przy pomocy rekurencji wyznaczy sumę n kolejnych liczb naturalnych (liczba n podawana przez użytkownika; suma obliczana w dedykowanej funkcji). Korzystając z dokumentacji MSDN zapoznaj się z pojęciem rekurencji: https://docs.microsoft.com/en-us/cpp/c-language/recursive-functions?view=vs-2017 Wydział Fizyki, Matematyki i Informatyki Politechniki Krakowskiej 5

13. Przeanalizuj w trybie pracy krokowej następujące przykłady do wykładów: http://torus.uck.pk.edu.pl/~fialko/text/cc/przykl/ww3_1.pdf http://torus.uck.pk.edu.pl/~fialko/text/cc/przykl/ww3_2.pdf 14. W językach imperatywnych instrukcje wykonywane są sekwencyjnie - jedna po drugiej. W celu zmiany takiego porządku stosuje się instrukcje sterujące. Do takich instrukcji zaliczamy instrukcje warunkowe (lab 1) czy pętle. W języku C wyróżniamy trzy podstawowe pętle: i. for - pętla składająca się z trzech wyrażeń: warunku początkowego (zwykle inicjalizacji zmiennej będącej licznikiem wykonywanych iteracji), warunku stopu (określającego kiedy nasza pętla ma się zatrzymać), wyrażenie wykonywane po każdej iteracji (zwykle inkrementacja licznika); ii. while - pętla przyjmująca jedno wyrażenie wykonywane zawsze przed instrukcjami w ciele pętli. Jeśli wyrażenie zwraca 0 (logiczny fałsz), pętla jest przerywana; iii. do-while - pętla podobna do while z tą różnicą, że wpierw wykonywane są instrukcje podane w ciele pętli, a następnie wyrażenie warunkowe. Pętla ta gwarantuje, że instrukcje wykonają się co najmniej jeden raz. Zapoznaj się ze strukturą i sposobem użycia wyrażeń w dokumentacji MSDN (https://msdn.microsoft.com/en-us/library/015az3wz.aspx). 15. Język C dostarcza skróconych zapisów przypisania łączonego z daną operacją arytmetyczną. Poniższa tabela przedstawia zapisy skrócone i ich pełne odpowiedniki. Lp. Zapis skrócony Zapis pełny 1. x += 2; x = x + 2; 2. x -= 2; x = x - 2; 3. x *= 2; x = x * 2; 4. x /= 2; x = x / 2; 5. x++; x = x + 1; 6. ++x; x = x + 1; 7. x--; x = x - 1; 8. --x; x = x - 1; Zapisy 5. i 6. nazywamy inkrementacją, natomiast 7. i 8. dekrementacją. Przetestuj poniższy kod - czym różnią się zapisy 5. - 8.? int a, b, c, d; a = 0; b = a++; c = 0; d = ++c; printf("a = %i\n", a); printf("b = %i\n", b); printf("c = %i\n", c); printf("d = %i\n", d); 16. Utwórz nowy projekt. Napisz program, który wypisuje określoną ilość razy tekst "Hello world!". Przed wykonaniem pętli poproś o podanie ilości powtórzeń. 17. Napisz program, który oblicza silnię dla podanego n. Algorytm zaimplementuj tworząc nową funkcję z pętlą. Wydział Fizyki, Matematyki i Informatyki Politechniki Krakowskiej 6

18. Do instrukcji sterujących zaliczamy również poniższe polecenia: i. break - pozwala na opuszczenie wykonywania pętli w dowolnym momencie; ii. continue - powoduje przejście do kolejnej iteracji pętli; iii. goto etykieta - powoduje przejście do miejsca oznaczonego etykietą. 19. Napisz nieskończoną pętlę wczytującą wprowadzane z klawiatury przez użytkownika znaki do momentu podania znaku 'e'. Do przerwania wykorzystaj instrukcję break. 20. Edytuj powyższy program tak, aby zliczał wystąpienia liter: a, b, c - każdej osobno oraz wszystkich pozostałych znaków razem - do momentu podania znaku 'e'. Skorzystaj z instrukcji continue i break. 21. Edytuj powyższy program tak, aby w przypadku wystąpienia litery 'c' była ona zarówno zliczana jako litera 'c' jak i wliczana do sumarycznej liczby wystąpień pozostałych znaków. Skorzystaj z instrukcji goto. 22. Funkcje operacji na plikach dostarcza biblioteka stdio.h. Wyróżniamy dwie metody dostępu do plików: niskopoziomową (binarną, np. open()) i wysokopoziomową (tekstową, np. fopen()). Aby otrzymać dostęp do pliku musimy zadeklarować pusty wskaźnik na obiekt typu FILE. Następnie funkcją fopen(filename, mode), gdzie filename jest ścieżką dostępu (względną lub bezwzględną) wraz z nazwą pliku, natomiast mode określa nam uprawnienia, otrzymujemy dostęp do naszego pliku. Wyróżniamy następujące podstawowe metody dostępu (mode) do pliku: iv. "r" - otwiera na czytanie; plik musi istnieć; v. "w" - otwiera na pisanie; jeśli plik istnieje to jego zawartość zostaje zniszczona; vi. "a" - otwiera na pisanie; jeśli plik istnieje to zawartość jest dopisywana do końca pliku; jeśli plik nie istnieje to zostaje utworzony; vii. "r+" - otwiera na czytanie i pisanie; plik musi istnieć; viii. "w+" - otwiera na czytanie i pisanie; jeśli plik istnieje to jego zawartość zostaje zniszczona; ix. "a+" - otwiera na czytanie i pisanie; jeśli plik istnieje to zawartość jest dopisywana do końca pliku; jeśli plik nie istnieje to zostaje utworzony. Do parametru mode można również dołączyć opcje określające, czy mamy do czynienia z plikiem zwykłym (t) czy binarnym (b). Domyślnie wybierany jest tryb dla plików zwykłych (tekstowych). Więcej informacji nt. metod dostępu na wykładzie i w dokumentacji MSDN (https://msdn.microsoft.com/en-us/library/yeby3zcb.aspx). 23. Operacje odczytu i zapisu do pliku są bardzo podobne do znanych już nam operacji printf i scanf, z tą różnicą, że jako pierwszy argument podajemy wskaźnik do pliku. Do odczytu możemy wykorzystać funkcję fscanf, a do zapisu fprintf. Po każdej zakończonej pracy z plikiem należy go zamknąć poleceniem: fclose. Opis wymienionych i dodatkowych funkcji - na wykładzie i w dokumentacji MSDN. 24. Utwórz nowy projekt. Przekopiuj i przeanalizuj poniższy kod: Wydział Fizyki, Matematyki i Informatyki Politechniki Krakowskiej 7

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int main(int argc, char *argv[]) FILE *fp = NULL; fp = fopen("lab4.txt", "w"); if (fp == NULL) printf("nie mogę otworzyć pliku lab4.txt do zapisu!\n"); getchar(); exit(1); char tekst[] = "Hello world w pliku :)"; fprintf(fp, "%s", tekst); fclose(fp); fp = NULL; getchar(); return 0; 25. Utwórz plik tekstowy z wiadomością: "I <3 programming". Napisz program, który będzie odczytywał wiadomość z pliku po jednym znaku i wyświetlał ją na ekranie. Skorzystaj z pętli while. Podpowiedź: sprawdź jakie wartości zwraca funkcja fscanf w przypadku, gdy dojdzie do końca pliku. 26. Utwórz nowy projekt. W ustawieniach projektu (Projekt/nazwa_projektu Właściwości) wpisz argumenty przekazywane do programu wraz z jego wywołaniem w trybie Debug (tak jak na poniższym zrzucie ekranu). Przeanalizuj wywołanie poniższego kodu: #include<stdio.h> #include<stdlib.h> int main(int argc, char *argv[]) int i; printf("liczba argumentow: %i\n", argc); for (i = 0; i < argc; i++) Wydział Fizyki, Matematyki i Informatyki Politechniki Krakowskiej 8

printf("%s\n", argv[i]); getchar(); return 0; 27. Tablicowanie funkcji w przedziale [a,b] z krokiem dx. Policzyć wartości funkcji 1 ()= + 1+2+3 Dla x zmieniającego od a do b z krokiem dx. Wartości funkcji () liczone w funkcji double ff(double x) Wyniki (, ()) wyświetl na ekranie i zapisz do pliku. fprintf(fw, "\t%10.2lf\t\t%15.4lf\n", x, y); printf("\t%10.2lf\t\t%15.4lf\n", x, y); 28. Tablicowanie funkcji w przedziale [a,b] z krokiem dx. Do wyznaczenia wartości funkcji w danym punkcie wykorzystaj rozwinięcie funkcji w szereg Taylora. Dla sprawdzenia poprawności rozwiązania wypisz wartość ścisłą funkcji w danym punkcie. Policzyć dla dowolnego argumentu wartość funkcji =& ' korzystając z jej rozwinięcia w szereg Taylora & ' =1+ 1! + 2! +) +, < < 3! Obliczenie sumy wykonaj z zadaną dokładnością. Sumę nieskończoną zastępujemy sumą skończoną: W której n przyjmujemy tak, by 2 & ' 0 1! 134 5 2 6! 5< dla dowolnie małego. Natomiast dobierzemy tak, by 7 8 9 7< gdzie, 8 dokładna wartość funkcji & ', 9 przybliżona wartość funkcji & ', żądana dokładność. Zależność między i można wyznaczyć ze znanej postaci reszty szeregu Taylora. #pragma warning (disable: 4996) #include <stdio.h> #include <math.h> #include <stdlib.h> FILE *fw; double sz(double x, double delta); int main() /* Tablicowanie funkcji (szereg potegowy) */ double a, b, dx, x, y, delta, z; printf("podaj przedzial [a,b], krok dx oraz dokladnosc: "); if (scanf("%lf %lf %lf %lf", &a, &b, &dx, &delta)!= 4) printf("blad danych\n"); system("pause"); exit(1); Wydział Fizyki, Matematyki i Informatyki Politechniki Krakowskiej 9

if (!(fw = fopen("wyniki.txt", "w"))) printf("blad otwarcia zbioru\n"); exit(2); for (x = a; x <= b + 0.5*dx; x += dx) y = sz(x, delta); z = exp(x); fprintf(fw, "\t%10.2lf\t\t%15.4le\t\t%15.4le\n", x, y, z); fclose(fw); exit(0); system("pause"); double sz(double x, double delta) /* Obliczanie sumy szeregu potegowego */ double d = 1, s = 1; int n = 1; do d *= x / n; s += d; n++; while (fabs(d) >= delta); return s; 29. PROJEKT NR1. Policz wartości funkcji =() we wszystkich punktach podziału na 6 części przedziału [",;]. Funkcja dana jest w postaci rozwinięcia w szereg potęgowy i w postaci wzoru analitycznego. Obliczanie sumy szeregu wykonaj z dokładnością. Algorytm obliczania sumy szeregu zapisz w oddzielnej funkcji. Uzupełnij funkcję obliczającą sumę szeregu tak, by sumowanych było co najmniej = wyrazów szeregu. Oznacza to, że przerwanie sumowania może nastąpić również wtedy, gdy nie została osiągnięta żądana dokładność. Informacja o tym, czy została osiągnięta dokładność czy też nie winna być znana w funkcji main(). Uzupełnij funkcję obliczającą sumę szeregu tak, by w funkcji main() znana była dodatkowo liczba sumowanych wyrazów szeregu. Wyniki wyświetl na ekranie i zapisz do pliku. Wyniki przedstaw w następującym układzie: x f_szereg(x) f_ścisłe(x) liczba wyrazów szeregu warunek stopu 30. Przeanalizuj w trybie pracy krokowej następujące przykłady do wykładu 4: http://torus.uck.pk.edu.pl/~fialko/text/cc/przykl/ww4.pdf http://torus.uck.pk.edu.pl/~fialko/text/cc/przykl/ww4_1.pdf http://torus.uck.pk.edu.pl/~fialko/text/cc/przykl/ww4_2.zip Wszystkie przykłady dostępne pod adresem: http://torus.uck.pk.edu.pl/~fialko/text/cc/przykl/ *Treści oznaczone kursywą pochodzą z różnych źródeł internetowych. Wydział Fizyki, Matematyki i Informatyki Politechniki Krakowskiej 10